better fix for mangle

This commit is contained in:
alexlamsl 2017-05-26 04:52:23 +08:00
parent 9edb72fe01
commit 269df9267c
2 changed files with 28 additions and 32 deletions

View File

@ -111,7 +111,6 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options){
var labels = new Dictionary(); var labels = new Dictionary();
var defun = null; var defun = null;
var in_destructuring = null; var in_destructuring = null;
var in_export = false;
var for_scopes = []; var for_scopes = [];
var tw = new TreeWalker(function(node, descend){ var tw = new TreeWalker(function(node, descend){
if (node.is_block_scope()) { if (node.is_block_scope()) {
@ -151,12 +150,6 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options){
labels = save_labels; labels = save_labels;
return true; // don't descend again in TreeWalker return true; // don't descend again in TreeWalker
} }
if (node instanceof AST_Export) {
in_export = true;
descend();
in_export = false;
return true;
}
if (node instanceof AST_LabeledStatement) { if (node instanceof AST_LabeledStatement) {
var l = node.label; var l = node.label;
if (labels.has(l.name)) { if (labels.has(l.name)) {
@ -184,7 +177,6 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options){
} }
if (node instanceof AST_SymbolLambda) { if (node instanceof AST_SymbolLambda) {
defun.def_function(node); defun.def_function(node);
in_export = false;
} }
else if (node instanceof AST_SymbolDefun) { else if (node instanceof AST_SymbolDefun) {
// Careful here, the scope where this should be defined is // Careful here, the scope where this should be defined is
@ -196,29 +188,24 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options){
while (parent_lambda.is_block_scope()) { while (parent_lambda.is_block_scope()) {
parent_lambda = parent_lambda.parent_scope; parent_lambda = parent_lambda.parent_scope;
} }
mark_export((node.scope = parent_lambda).def_function(node)); mark_export((node.scope = parent_lambda).def_function(node), 1);
} }
else if (node instanceof AST_SymbolClass) { else if (node instanceof AST_SymbolClass) {
mark_export(defun.def_variable(node)); mark_export(defun.def_variable(node), 1);
} }
else if (node instanceof AST_SymbolImport) { else if (node instanceof AST_SymbolImport) {
scope.def_variable(node); scope.def_variable(node);
in_export = false;
} }
else if (node instanceof AST_SymbolDefClass) { else if (node instanceof AST_SymbolDefClass) {
// This deals with the name of the class being available // This deals with the name of the class being available
// inside the class. // inside the class.
mark_export((node.scope = defun.parent_scope).def_function(node)); mark_export((node.scope = defun.parent_scope).def_function(node), 1);
} }
else if (node instanceof AST_SymbolVar else if (node instanceof AST_SymbolVar
|| node instanceof AST_SymbolLet || node instanceof AST_SymbolLet
|| node instanceof AST_SymbolConst) { || node instanceof AST_SymbolConst) {
var def = ((node instanceof AST_SymbolBlockDeclaration) ? scope : defun).def_variable(node); var def = ((node instanceof AST_SymbolBlockDeclaration) ? scope : defun).def_variable(node);
if (node instanceof AST_SymbolFunarg) { if (!(node instanceof AST_SymbolFunarg)) mark_export(def, 2);
in_export = false;
} else {
mark_export(def);
}
def.destructuring = in_destructuring; def.destructuring = in_destructuring;
if (defun !== scope) { if (defun !== scope) {
node.mark_enclosed(options); node.mark_enclosed(options);
@ -231,7 +218,6 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options){
} }
else if (node instanceof AST_SymbolCatch) { else if (node instanceof AST_SymbolCatch) {
scope.def_variable(node).defun = defun; scope.def_variable(node).defun = defun;
in_export = false;
} }
else if (node instanceof AST_LabelRef) { else if (node instanceof AST_LabelRef) {
var sym = labels.get(node.name); var sym = labels.get(node.name);
@ -243,11 +229,8 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options){
node.thedef = sym; node.thedef = sym;
} }
function mark_export(def) { function mark_export(def, level) {
if (in_export) { def.export = tw.parent(level) instanceof AST_Export;
def.export = true;
in_export = false;
}
} }
}); });
self.walk(tw); self.walk(tw);

View File

@ -63,7 +63,9 @@ export_default_func_3: {
} }
export_mangle_1: { export_mangle_1: {
mangle = {} mangle = {
toplevel: true,
}
input: { input: {
export function foo(one, two) { export function foo(one, two) {
return one - two; return one - two;
@ -73,7 +75,9 @@ export_mangle_1: {
} }
export_mangle_2: { export_mangle_2: {
mangle = {} mangle = {
toplevel: true,
}
input: { input: {
export default function foo(one, two) { export default function foo(one, two) {
return one - two; return one - two;
@ -86,7 +90,9 @@ export_mangle_3: {
options = { options = {
collapse_vars: true, collapse_vars: true,
} }
mangle = {} mangle = {
toplevel: true,
}
input: { input: {
export class C { export class C {
go(one, two) { go(one, two) {
@ -102,7 +108,9 @@ export_mangle_4: {
options = { options = {
collapse_vars: true, collapse_vars: true,
} }
mangle = {} mangle = {
toplevel: true,
}
input: { input: {
export default class C { export default class C {
go(one, two) { go(one, two) {
@ -115,7 +123,9 @@ export_mangle_4: {
} }
export_mangle_5: { export_mangle_5: {
mangle = {} mangle = {
toplevel: true,
}
input: { input: {
export default { export default {
prop: function(one, two) { prop: function(one, two) {
@ -127,11 +137,14 @@ export_mangle_5: {
} }
export_mangle_6: { export_mangle_6: {
mangle = {} mangle = {
input: { toplevel: true,
export let foo = 1;
} }
expect_exact: "export let foo=1;" input: {
var baz = 2;
export let foo = 1, bar = baz;
}
expect_exact: "var a=2;export let foo=1,bar=a;"
} }
export_toplevel_1: { export_toplevel_1: {