From 6f3e1254dec8048516405de01cc045ccd48ac971 Mon Sep 17 00:00:00 2001 From: Wilson Lin Date: Tue, 21 Jul 2020 17:59:56 +1000 Subject: [PATCH] Conditionally compile JS feature code --- src/proc/mod.rs | 40 ++++++++++++++++++++++++---------------- src/unit/script.rs | 8 +++++++- 2 files changed, 31 insertions(+), 17 deletions(-) diff --git a/src/proc/mod.rs b/src/proc/mod.rs index 9cb2b3a..bf4b903 100644 --- a/src/proc/mod.rs +++ b/src/proc/mod.rs @@ -8,8 +8,11 @@ use crate::proc::MatchMode::*; use crate::proc::range::ProcessorRange; use memchr::memchr; use crate::gen::codepoints::{WHITESPACE, Lookup}; +#[cfg(feature = "js-esbuild")] use std::sync::{Arc, Mutex}; +#[cfg(feature = "js-esbuild")] use esbuild_rs::TransformResult; +#[cfg(feature = "js-esbuild")] use crossbeam::sync::WaitGroup; pub mod checkpoint; @@ -42,6 +45,7 @@ pub enum MatchAction { MatchOnly, } +#[cfg(feature = "js-esbuild")] pub struct JsMinSection { pub src_range: ProcessorRange, pub result: TransformResult, @@ -304,28 +308,32 @@ impl<'d> Processor<'d> { self._shift(count); } + #[cfg(feature = "js-esbuild")] pub fn new_script_section(&self) -> (WaitGroup, Arc>>) { (self.script_wg.clone(), self.script_results.clone()) } pub fn finish(self) -> usize { debug_assert!(self.at_end()); - self.script_wg.wait(); - let mut results = Arc::try_unwrap(self.script_results) - .unwrap_or_else(|_| panic!("failed to acquire script results")) - .into_inner() - .unwrap(); - if !results.is_empty() { - results.sort_unstable_by_key(|r| r.src_range.start); - let mut write_start = results[0].src_range.start; - for (i, res) in results.iter().enumerate() { - let min_code = res.result.js.trim(); - if min_code.len() < res.src_range.len() { - let write_end = write_start + min_code.len(); - self.code[write_start..write_end].copy_from_slice(min_code.as_bytes()); - let next_start = results.get(i + 1).map_or(self.write_next, |r| r.src_range.start); - self.code.copy_within(res.src_range.end..next_start, write_end); - write_start = write_end + (next_start - res.src_range.end); + #[cfg(feature = "js-esbuild")] + { + self.script_wg.wait(); + let mut results = Arc::try_unwrap(self.script_results) + .unwrap_or_else(|_| panic!("failed to acquire script results")) + .into_inner() + .unwrap(); + if !results.is_empty() { + results.sort_unstable_by_key(|r| r.src_range.start); + let mut write_start = results[0].src_range.start; + for (i, res) in results.iter().enumerate() { + let min_code = res.result.js.trim(); + if min_code.len() < res.src_range.len() { + let write_end = write_start + min_code.len(); + self.code[write_start..write_end].copy_from_slice(min_code.as_bytes()); + let next_start = results.get(i + 1).map_or(self.write_next, |r| r.src_range.start); + self.code.copy_within(res.src_range.end..next_start, write_end); + write_start = write_end + (next_start - res.src_range.end); + }; }; }; }; diff --git a/src/unit/script.rs b/src/unit/script.rs index c0fa673..111ab91 100644 --- a/src/unit/script.rs +++ b/src/unit/script.rs @@ -1,14 +1,20 @@ use crate::err::ProcessingResult; use crate::proc::MatchAction::*; use crate::proc::MatchMode::*; -use crate::proc::{Processor, JsMinSection}; +use crate::proc::Processor; +#[cfg(feature = "js-esbuild")] +use crate::proc::JsMinSection; use crate::cfg::Cfg; #[cfg(feature = "js-esbuild")] use crate::proc::checkpoint::Checkpoint; +#[cfg(feature = "js-esbuild")] use esbuild_rs::{TransformOptionsBuilder, TransformOptions}; +#[cfg(feature = "js-esbuild")] use std::sync::Arc; +#[cfg(feature = "js-esbuild")] use lazy_static::lazy_static; +#[cfg(feature = "js-esbuild")] lazy_static! { static ref TRANSFORM_OPTIONS: Arc = { let mut builder = TransformOptionsBuilder::new();