feat(minifier): reenable mangler

closes #952
closes #955
This commit is contained in:
Boshen 2023-10-08 22:03:41 +08:00
parent 6c1388df55
commit f0029d5310
4 changed files with 41 additions and 37 deletions

View file

@ -1,7 +1,7 @@
//! ECMAScript Minifier //! ECMAScript Minifier
mod compressor; mod compressor;
// mod mangler; mod mangler;
mod printer; mod printer;
use oxc_allocator::Allocator; use oxc_allocator::Allocator;
@ -10,7 +10,7 @@ use oxc_span::SourceType;
pub use crate::{ pub use crate::{
compressor::{CompressOptions, Compressor}, compressor::{CompressOptions, Compressor},
// mangler::ManglerBuilder, mangler::ManglerBuilder,
printer::{Printer, PrinterOptions}, printer::{Printer, PrinterOptions},
}; };
@ -43,11 +43,11 @@ impl<'a> Minifier<'a> {
let ret = Parser::new(&allocator, self.source_text, self.source_type).parse(); let ret = Parser::new(&allocator, self.source_text, self.source_type).parse();
let program = allocator.alloc(ret.program); let program = allocator.alloc(ret.program);
Compressor::new(&allocator, self.options.compress).build(program); Compressor::new(&allocator, self.options.compress).build(program);
let printer = Printer::new(self.source_text.len(), self.options.print); let mut printer = Printer::new(self.source_text.len(), self.options.print);
// if self.options.mangle { if self.options.mangle {
// let mangler = ManglerBuilder::new(self.source_text, self.source_type).build(program); let mangler = ManglerBuilder::new(self.source_text, self.source_type).build(program);
// printer.with_mangler(mangler); printer.with_mangler(mangler);
// } }
printer.build(program) printer.build(program)
} }
} }

View file

@ -1,7 +1,7 @@
use itertools::Itertools; use itertools::Itertools;
#[allow(clippy::wildcard_imports)] #[allow(clippy::wildcard_imports)]
use oxc_hir::hir::*; use oxc_ast::ast::*;
use oxc_hir::Visit; use oxc_ast::Visit;
use oxc_index::{index_vec, IndexVec}; use oxc_index::{index_vec, IndexVec};
use oxc_semantic::{Reference, ReferenceFlag, ReferenceId, SemanticBuilder, SymbolId, SymbolTable}; use oxc_semantic::{Reference, ReferenceFlag, ReferenceId, SemanticBuilder, SymbolId, SymbolTable};
use oxc_span::{Atom, SourceType}; use oxc_span::{Atom, SourceType};
@ -78,15 +78,14 @@ impl<'a> Visit<'a> for ManglerBuilder<'a> {
self.semantic.leave_scope(); self.semantic.leave_scope();
} }
fn visit_binding_identifier( fn visit_binding_identifier(&mut self, ident: &'a BindingIdentifier) {
&mut self, let symbol_id = self.semantic.declare_symbol_for_mangler(
ident: &'a BindingIdentifier, ident.span,
includes: SymbolFlags, &ident.name,
excludes: SymbolFlags, /* TODO: add symbol flags */ SymbolFlags::empty(),
) { /* TODO: add symbol flags */ SymbolFlags::empty(),
let symbol_id = );
self.semantic.declare_symbol_for_mangler(ident.span, &ident.name, includes, excludes); ident.symbol_id.replace(Some(symbol_id));
ident.symbol_id.replace(symbol_id);
} }
fn visit_identifier_reference(&mut self, ident: &'a IdentifierReference) { fn visit_identifier_reference(&mut self, ident: &'a IdentifierReference) {
@ -97,7 +96,7 @@ impl<'a> Visit<'a> for ManglerBuilder<'a> {
ReferenceFlag::read(), ReferenceFlag::read(),
); );
let reference_id = self.semantic.declare_reference(reference); let reference_id = self.semantic.declare_reference(reference);
ident.reference_id.replace(reference_id); ident.reference_id.replace(Some(reference_id));
} }
} }

View file

@ -775,12 +775,14 @@ impl<'a> GenExpr for Expression<'a> {
impl Gen for IdentifierReference { impl Gen for IdentifierReference {
fn gen(&self, p: &mut Printer, ctx: Context) { fn gen(&self, p: &mut Printer, ctx: Context) {
// if let Some(mangler) = &p.mangler { if let Some(mangler) = &p.mangler {
// if let Some(name) = mangler.get_reference_name(self.reference_id.clone().into_inner()) { if let Some(reference_id) = self.reference_id.clone().into_inner() {
// p.print_str(name.clone().as_bytes()); if let Some(name) = mangler.get_reference_name(reference_id) {
// return; p.print_str(name.clone().as_bytes());
// } return;
// } }
}
}
p.print_str(self.name.as_bytes()); p.print_str(self.name.as_bytes());
} }
} }

View file

@ -27,7 +27,7 @@ use self::{
gen::{Gen, GenExpr}, gen::{Gen, GenExpr},
operator::Operator, operator::Operator,
}; };
// use crate::mangler::Mangler; use crate::mangler::Mangler;
#[derive(Debug, Default, Clone, Copy)] #[derive(Debug, Default, Clone, Copy)]
pub struct PrinterOptions; pub struct PrinterOptions;
@ -35,7 +35,8 @@ pub struct PrinterOptions;
pub struct Printer { pub struct Printer {
options: PrinterOptions, options: PrinterOptions,
// mangler: Option<Mangler>, mangler: Option<Mangler>,
/// Output Code /// Output Code
code: Vec<u8>, code: Vec<u8>,
@ -70,7 +71,7 @@ impl Printer {
let capacity = source_len / 2; let capacity = source_len / 2;
Self { Self {
options, options,
// mangler: None, mangler: None,
code: Vec::with_capacity(capacity), code: Vec::with_capacity(capacity),
needs_semicolon: false, needs_semicolon: false,
need_space_before_dot: 0, need_space_before_dot: 0,
@ -83,9 +84,9 @@ impl Printer {
} }
} }
// pub fn with_mangler(&mut self, mangler: Mangler) { pub fn with_mangler(&mut self, mangler: Mangler) {
// self.mangler = Some(mangler); self.mangler = Some(mangler);
// } }
pub fn build(mut self, program: &Program<'_>) -> String { pub fn build(mut self, program: &Program<'_>) -> String {
program.gen(&mut self, Context::default()); program.gen(&mut self, Context::default());
@ -245,13 +246,15 @@ impl Printer {
} }
} }
fn print_symbol(&mut self, _symbol_id: Option<SymbolId>, fallback: &Atom) { fn print_symbol(&mut self, symbol_id: Option<SymbolId>, fallback: &Atom) {
// if let Some(mangler) = &self.mangler { if let Some(mangler) = &self.mangler {
// let name = mangler.get_symbol_name(symbol_id); if let Some(symbol_id) = symbol_id {
// self.print_str(name.clone().as_bytes()); let name = mangler.get_symbol_name(symbol_id);
// } else { self.print_str(name.clone().as_bytes());
return;
}
}
self.print_str(fallback.as_bytes()); self.print_str(fallback.as_bytes());
// }
} }
fn wrap<F: FnMut(&mut Self)>(&mut self, wrap: bool, mut f: F) { fn wrap<F: FnMut(&mut Self)>(&mut self, wrap: bool, mut f: F) {