improve source mapping accuracy (#5608)

This commit is contained in:
Alex Lam S.L
2022-08-08 19:02:43 +01:00
committed by GitHub
parent f451a7ad79
commit 2c3c4ec323
8 changed files with 175 additions and 198 deletions

View File

@@ -293,7 +293,7 @@ Compressor.prototype.compress = function(node) {
function export_symbol(sym) { function export_symbol(sym) {
if (!(sym instanceof AST_SymbolDeclaration)) return; if (!(sym instanceof AST_SymbolDeclaration)) return;
var node = make_node(AST_SymbolExport, sym, sym); var node = make_node(AST_SymbolExport, sym);
node.alias = make_node(AST_String, node, { value: node.name }); node.alias = make_node(AST_String, node, { value: node.name });
props.push(node); props.push(node);
} }
@@ -304,7 +304,7 @@ Compressor.prototype.compress = function(node) {
var tt = new TreeTransformer(function(node) { var tt = new TreeTransformer(function(node) {
if (insert) { if (insert) {
if (node instanceof AST_Directive) node = make_node(AST_SimpleStatement, node, { if (node instanceof AST_Directive) node = make_node(AST_SimpleStatement, node, {
body: make_node(AST_String, node, node), body: make_node(AST_String, node),
}); });
if (node instanceof AST_SimpleStatement) { if (node instanceof AST_SimpleStatement) {
return transform ? transform(node) : make_node(AST_Return, node, { value: node.body }); return transform ? transform(node) : make_node(AST_Return, node, { value: node.body });
@@ -312,7 +312,7 @@ Compressor.prototype.compress = function(node) {
} else if (node instanceof AST_Return) { } else if (node instanceof AST_Return) {
if (transform) return transform(node); if (transform) return transform(node);
var value = node.value; var value = node.value;
if (value instanceof AST_String) return make_node(AST_Directive, node, value); if (value instanceof AST_String) return make_node(AST_Directive, value);
return make_node(AST_SimpleStatement, node, { return make_node(AST_SimpleStatement, node, {
body: value || make_node(AST_UnaryPrefix, node, { body: value || make_node(AST_UnaryPrefix, node, {
operator: "void", operator: "void",
@@ -353,7 +353,7 @@ Compressor.prototype.compress = function(node) {
}); });
case 1: case 1:
var stat = self.body[0]; var stat = self.body[0];
if (stat instanceof AST_Directive) return make_node(AST_String, self, stat); if (stat instanceof AST_Directive) return make_node(AST_String, stat);
if (stat instanceof AST_SimpleStatement) return stat.body; if (stat instanceof AST_SimpleStatement) return stat.body;
default: default:
return make_node(AST_Call, self, { return make_node(AST_Call, self, {
@@ -693,7 +693,7 @@ Compressor.prototype.compress = function(node) {
} }
function make_ref(ref, fixed) { function make_ref(ref, fixed) {
var node = make_node(AST_SymbolRef, ref, ref); var node = make_node(AST_SymbolRef, ref);
node.fixed = fixed || make_node(AST_Undefined, ref); node.fixed = fixed || make_node(AST_Undefined, ref);
return node; return node;
} }
@@ -839,7 +839,7 @@ Compressor.prototype.compress = function(node) {
for (var i = 0, len = node.elements.length; i < len; i++) { for (var i = 0, len = node.elements.length; i < len; i++) {
if (value.elements[i] instanceof AST_Spread) return node; if (value.elements[i] instanceof AST_Spread) return node;
} }
if (!fixed_node) fixed_node = make_node(AST_Array, node); if (!fixed_node) fixed_node = make_node(AST_Array, node, {});
fixed_node.elements = value.elements.slice(len); fixed_node.elements = value.elements.slice(len);
return fixed_node; return fixed_node;
}); });
@@ -924,7 +924,7 @@ Compressor.prototype.compress = function(node) {
var rest = fn.rest, fixed_node; var rest = fn.rest, fixed_node;
if (rest) scan_declaration(tw, compressor, rest, compressor.option("rests") && function() { if (rest) scan_declaration(tw, compressor, rest, compressor.option("rests") && function() {
if (fn.rest !== rest) return rest; if (fn.rest !== rest) return rest;
if (!fixed_node) fixed_node = make_node(AST_Array, fn); if (!fixed_node) fixed_node = make_node(AST_Array, fn, {});
fixed_node.elements = iife.args.slice(fn.argnames.length); fixed_node.elements = iife.args.slice(fn.argnames.length);
return fixed_node; return fixed_node;
}, visit); }, visit);
@@ -1622,7 +1622,7 @@ Compressor.prototype.compress = function(node) {
AST_DefaultValue.DEFMETHOD("convert_symbol", convert_destructured); AST_DefaultValue.DEFMETHOD("convert_symbol", convert_destructured);
AST_Destructured.DEFMETHOD("convert_symbol", convert_destructured); AST_Destructured.DEFMETHOD("convert_symbol", convert_destructured);
function convert_symbol(type, process) { function convert_symbol(type, process) {
var node = make_node(type, this, this); var node = make_node(type, this);
return process(node, this) || node; return process(node, this) || node;
} }
AST_SymbolDeclaration.DEFMETHOD("convert_symbol", convert_symbol); AST_SymbolDeclaration.DEFMETHOD("convert_symbol", convert_symbol);
@@ -1730,19 +1730,18 @@ Compressor.prototype.compress = function(node) {
} }
function make_node(ctor, orig, props) { function make_node(ctor, orig, props) {
if (!props) props = {}; if (props) {
if (orig) { props.start = orig.start;
if (!props.start) props.start = orig.start; props.end = orig.end;
if (!props.end) props.end = orig.end; } else {
props = orig;
} }
return new ctor(props); return new ctor(props);
} }
function make_sequence(orig, expressions) { function make_sequence(orig, expressions) {
if (expressions.length == 1) return expressions[0]; if (expressions.length == 1) return expressions[0];
return make_node(AST_Sequence, orig, { return make_node(AST_Sequence, orig, { expressions: expressions.reduce(merge_sequence, []) });
expressions: expressions.reduce(merge_sequence, [])
});
} }
function make_node_from_constant(val, orig) { function make_node_from_constant(val, orig) {
@@ -1754,7 +1753,7 @@ Compressor.prototype.compress = function(node) {
if (isFinite(val)) { if (isFinite(val)) {
return 1 / val < 0 ? make_node(AST_UnaryPrefix, orig, { return 1 / val < 0 ? make_node(AST_UnaryPrefix, orig, {
operator: "-", operator: "-",
expression: make_node(AST_Number, orig, { value: -val }) expression: make_node(AST_Number, orig, { value: -val }),
}) : make_node(AST_Number, orig, { value: val }); }) : make_node(AST_Number, orig, { value: val });
} }
return val < 0 ? make_node(AST_UnaryPrefix, orig, { return val < 0 ? make_node(AST_UnaryPrefix, orig, {
@@ -1772,9 +1771,7 @@ Compressor.prototype.compress = function(node) {
if (val instanceof RegExp) { if (val instanceof RegExp) {
return make_node(AST_RegExp, orig, { value: val }); return make_node(AST_RegExp, orig, { value: val });
} }
throw new Error(string_template("Can't handle constant of type: {type}", { throw new Error(string_template("Can't handle constant of type: {type}", { type: typeof val }));
type: typeof val
}));
} }
} }
@@ -3104,10 +3101,10 @@ Compressor.prototype.compress = function(node) {
}).length); }).length);
if (declared > 1 && !(lhs instanceof AST_SymbolFunarg)) { if (declared > 1 && !(lhs instanceof AST_SymbolFunarg)) {
mangleable_var(expr.value); mangleable_var(expr.value);
return make_node(AST_SymbolRef, lhs, lhs); return make_node(AST_SymbolRef, lhs);
} }
if (mangleable_var(expr.value) || remaining == 1 && !compressor.exposed(def)) { if (mangleable_var(expr.value) || remaining == 1 && !compressor.exposed(def)) {
return make_node(AST_SymbolRef, lhs, lhs); return make_node(AST_SymbolRef, lhs);
} }
return; return;
} }
@@ -3977,7 +3974,7 @@ Compressor.prototype.compress = function(node) {
decls.push(make_node(AST_If, stat, { decls.push(make_node(AST_If, stat, {
condition: stat.condition, condition: stat.condition,
body: body || make_node(AST_EmptyStatement, stat.body), body: body || make_node(AST_EmptyStatement, stat.body),
alternative: alt alternative: alt,
})); }));
decls.unshift(n, 1); decls.unshift(n, 1);
[].splice.apply(statements, decls); [].splice.apply(statements, decls);
@@ -4090,10 +4087,10 @@ Compressor.prototype.compress = function(node) {
if (def.scope !== scope) break; if (def.scope !== scope) break;
if (def.orig.length > def.eliminated + 1) break; if (def.orig.length > def.eliminated + 1) break;
if (def.orig[0].TYPE != "SymbolVar") break; if (def.orig[0].TYPE != "SymbolVar") break;
var name = make_node(AST_SymbolVar, lhs, lhs); var name = make_node(AST_SymbolVar, lhs);
definitions.push(make_node(AST_VarDef, expr, { definitions.push(make_node(AST_VarDef, expr, {
name: name, name: name,
value: expr.right value: expr.right,
})); }));
def.orig.push(name); def.orig.push(name);
def.replaced++; def.replaced++;
@@ -4788,12 +4785,10 @@ Compressor.prototype.compress = function(node) {
for (var key in value) if (HOP(value, key)) { for (var key in value) if (HOP(value, key)) {
props.push(make_node(AST_ObjectKeyVal, orig, { props.push(make_node(AST_ObjectKeyVal, orig, {
key: key, key: key,
value: to_node(value[key], orig) value: to_node(value[key], orig),
})); }));
} }
return make_node(AST_Object, orig, { return make_node(AST_Object, orig, { properties: props });
properties: props
});
} }
return make_node_from_constant(value, orig); return make_node_from_constant(value, orig);
} }
@@ -4872,9 +4867,7 @@ Compressor.prototype.compress = function(node) {
} }
function arrow_first_statement() { function arrow_first_statement() {
if (this.value) return make_node(AST_Return, this.value, { if (this.value) return make_node(AST_Return, this.value, { value: this.value });
value: this.value
});
return skip_directives(this.body); return skip_directives(this.body);
} }
AST_Arrow.DEFMETHOD("first_statement", arrow_first_statement); AST_Arrow.DEFMETHOD("first_statement", arrow_first_statement);
@@ -6729,8 +6722,8 @@ Compressor.prototype.compress = function(node) {
} }
function to_class_expr(defcl, drop_name) { function to_class_expr(defcl, drop_name) {
var cl = make_node(AST_ClassExpression, defcl, defcl); var cl = make_node(AST_ClassExpression, defcl);
if (cl.name) cl.name = drop_name ? null : make_node(AST_SymbolClass, cl.name, cl.name); if (cl.name) cl.name = drop_name ? null : make_node(AST_SymbolClass, cl.name);
return cl; return cl;
} }
@@ -6750,8 +6743,8 @@ Compressor.prototype.compress = function(node) {
ctor = AST_GeneratorFunction; ctor = AST_GeneratorFunction;
break; break;
} }
var fn = make_node(ctor, defun, defun); var fn = make_node(ctor, defun);
fn.name = drop_name ? null : make_node(AST_SymbolLambda, defun.name, defun.name); fn.name = drop_name ? null : make_node(AST_SymbolLambda, defun.name);
return fn; return fn;
} }
@@ -7344,8 +7337,8 @@ Compressor.prototype.compress = function(node) {
ctor = AST_GeneratorDefun; ctor = AST_GeneratorDefun;
break; break;
} }
var defun = make_node(ctor, def, fn); var defun = make_node(ctor, fn);
defun.name = make_node(AST_SymbolDefun, def.name, def.name); defun.name = make_node(AST_SymbolDefun, def.name);
var name_def = def.name.scope.resolve().def_function(defun.name); var name_def = def.name.scope.resolve().def_function(defun.name);
if (old_def) old_def.forEach(function(node) { if (old_def) old_def.forEach(function(node) {
node.name = name_def.name; node.name = name_def.name;
@@ -7465,7 +7458,7 @@ Compressor.prototype.compress = function(node) {
[].unshift.apply(side_effects, tail.map(function(def) { [].unshift.apply(side_effects, tail.map(function(def) {
AST_Node.info("Dropping duplicated definition of variable {name} [{start}]", def.name); AST_Node.info("Dropping duplicated definition of variable {name} [{start}]", def.name);
var sym = def.name.definition(); var sym = def.name.definition();
var ref = make_node(AST_SymbolRef, def.name, def.name); var ref = make_node(AST_SymbolRef, def.name);
sym.references.push(ref); sym.references.push(ref);
var assign = make_node(AST_Assign, def, { var assign = make_node(AST_Assign, def, {
operator: "=", operator: "=",
@@ -7571,9 +7564,7 @@ Compressor.prototype.compress = function(node) {
var value = node.object.drop_side_effect_free(compressor); var value = node.object.drop_side_effect_free(compressor);
if (value) { if (value) {
AST_Node.warn("Side effects in object of for-in loop [{start}]", value); AST_Node.warn("Side effects in object of for-in loop [{start}]", value);
body.push(make_node(AST_SimpleStatement, node, { body.push(make_node(AST_SimpleStatement, node, { body: value }));
body: value
}));
} }
if (node.init instanceof AST_Definitions && def.orig[0] instanceof AST_SymbolCatch) { if (node.init instanceof AST_Definitions && def.orig[0] instanceof AST_SymbolCatch) {
body.push(node.init); body.push(node.init);
@@ -7625,9 +7616,7 @@ Compressor.prototype.compress = function(node) {
case 1: case 1:
return body[0]; return body[0];
default: default:
return in_list ? List.splice(body) : make_node(AST_BlockStatement, orig, { return in_list ? List.splice(body) : make_node(AST_BlockStatement, orig, { body: body });
body: body
});
} }
} }
@@ -8179,7 +8168,7 @@ Compressor.prototype.compress = function(node) {
if (p instanceof AST_ForEnumeration && p.init === node) { if (p instanceof AST_ForEnumeration && p.init === node) {
if (seq) return seq; if (seq) return seq;
var sym = node.definitions[0].name; var sym = node.definitions[0].name;
return make_node(AST_SymbolRef, sym, sym); return make_node(AST_SymbolRef, sym);
} }
if (p instanceof AST_For && p.init === node) return seq; if (p instanceof AST_For && p.init === node) return seq;
if (!seq) return in_list ? List.skip : make_node(AST_EmptyStatement, node); if (!seq) return in_list ? List.skip : make_node(AST_EmptyStatement, node);
@@ -8662,7 +8651,7 @@ Compressor.prototype.compress = function(node) {
ctor = AST_GeneratorFunction; ctor = AST_GeneratorFunction;
break; break;
} }
return make_node(ctor, exp, exp); return make_node(ctor, exp);
} }
} }
return changed && exp.clone(); return changed && exp.clone();
@@ -8800,7 +8789,7 @@ Compressor.prototype.compress = function(node) {
} }
if (compressor.option("yields") && is_generator(exp)) { if (compressor.option("yields") && is_generator(exp)) {
var call = self.clone(); var call = self.clone();
call.expression = make_node(AST_Function, exp, exp); call.expression = make_node(AST_Function, exp);
call.expression.body = []; call.expression.body = [];
var opt = call.transform(compressor); var opt = call.transform(compressor);
if (opt !== call) return opt.drop_side_effect_free(compressor, first_in_statement); if (opt !== call) return opt.drop_side_effect_free(compressor, first_in_statement);
@@ -8824,7 +8813,7 @@ Compressor.prototype.compress = function(node) {
return exprs && make_sequence(self, exprs.map(convert_spread)); return exprs && make_sequence(self, exprs.map(convert_spread));
} }
if (!fn.contains_this()) { if (!fn.contains_this()) {
self = make_node(AST_Call, self, self); self = make_node(AST_Call, self);
self.expression = self.expression.clone(); self.expression = self.expression.clone();
self.args = self.args.slice(); self.args = self.args.slice();
} }
@@ -8902,7 +8891,7 @@ Compressor.prototype.compress = function(node) {
function make_value() { function make_value() {
return make_sequence(self, values.map(function(node) { return make_sequence(self, values.map(function(node) {
if (!(node instanceof AST_ClassInit)) return node; if (!(node instanceof AST_ClassInit)) return node;
var fn = make_node(AST_Arrow, node, node.value); var fn = make_node(AST_Arrow, node.value);
fn.argnames = []; fn.argnames = [];
return make_node(AST_Call, node, { return make_node(AST_Call, node, {
expression: fn, expression: fn,
@@ -9075,7 +9064,7 @@ Compressor.prototype.compress = function(node) {
}); });
OPT(AST_While, function(self, compressor) { OPT(AST_While, function(self, compressor) {
return compressor.option("loops") ? make_node(AST_For, self, self).optimize(compressor) : self; return compressor.option("loops") ? make_node(AST_For, self).optimize(compressor) : self;
}); });
function has_loop_control(loop, parent, type) { function has_loop_control(loop, parent, type) {
@@ -9101,19 +9090,15 @@ Compressor.prototype.compress = function(node) {
body: make_node(AST_BlockStatement, self.body, { body: make_node(AST_BlockStatement, self.body, {
body: [ body: [
self.body, self.body,
make_node(AST_SimpleStatement, self.condition, { make_node(AST_SimpleStatement, self.condition, { body: self.condition }),
body: self.condition ],
}), }),
]
})
}).optimize(compressor); }).optimize(compressor);
if (!has_loop_control(self, compressor.parent())) return make_node(AST_BlockStatement, self.body, { if (!has_loop_control(self, compressor.parent())) return make_node(AST_BlockStatement, self.body, {
body: [ body: [
self.body, self.body,
make_node(AST_SimpleStatement, self.condition, { make_node(AST_SimpleStatement, self.condition, { body: self.condition }),
body: self.condition ],
}),
]
}).optimize(compressor); }).optimize(compressor);
} }
if (self.body instanceof AST_BlockStatement && !has_loop_control(self, compressor.parent(), AST_Continue)) { if (self.body instanceof AST_BlockStatement && !has_loop_control(self, compressor.parent(), AST_Continue)) {
@@ -9144,13 +9129,13 @@ Compressor.prototype.compress = function(node) {
} }
self.body = trim_block(self.body, compressor.parent()); self.body = trim_block(self.body, compressor.parent());
} }
if (self.body instanceof AST_EmptyStatement) return make_node(AST_For, self, self).optimize(compressor); if (self.body instanceof AST_EmptyStatement) return make_node(AST_For, self).optimize(compressor);
if (self.body instanceof AST_SimpleStatement) return make_node(AST_For, self, { if (self.body instanceof AST_SimpleStatement) return make_node(AST_For, self, {
condition: make_sequence(self.condition, [ condition: make_sequence(self.condition, [
self.body.body, self.body.body,
self.condition self.condition,
]), ]),
body: make_node(AST_EmptyStatement, self) body: make_node(AST_EmptyStatement, self),
}).optimize(compressor); }).optimize(compressor);
return self; return self;
@@ -9177,28 +9162,22 @@ Compressor.prototype.compress = function(node) {
if (is_statement(self.init)) { if (is_statement(self.init)) {
body.push(self.init); body.push(self.init);
} else if (self.init) { } else if (self.init) {
body.push(make_node(AST_SimpleStatement, self.init, { body.push(make_node(AST_SimpleStatement, self.init, { body: self.init }));
body: self.init
}));
} }
var retain = external_target(first) || first instanceof AST_Exit; var retain = external_target(first) || first instanceof AST_Exit;
if (self.condition && retain) { if (self.condition && retain) {
body.push(make_node(AST_If, self, { body.push(make_node(AST_If, self, {
condition: self.condition, condition: self.condition,
body: first, body: first,
alternative: null alternative: null,
})); }));
} else if (self.condition) { } else if (self.condition) {
body.push(make_node(AST_SimpleStatement, self.condition, { body.push(make_node(AST_SimpleStatement, self.condition, { body: self.condition }));
body: self.condition
}));
} else if (retain) { } else if (retain) {
body.push(first); body.push(first);
} }
extract_declarations_from_unreachable_code(compressor, self.body, body); extract_declarations_from_unreachable_code(compressor, self.body, body);
return make_node(AST_BlockStatement, self, { return make_node(AST_BlockStatement, self, { body: body });
body: body
});
} }
if (first instanceof AST_If) { if (first instanceof AST_If) {
var ab = first_statement(first.body); var ab = first_statement(first.body);
@@ -9248,9 +9227,7 @@ Compressor.prototype.compress = function(node) {
self.body.body = rest.concat(self.body.body.slice(1)); self.body.body = rest.concat(self.body.body.slice(1));
self.body = self.body.transform(compressor); self.body = self.body.transform(compressor);
} else { } else {
self.body = make_node(AST_BlockStatement, self.body, { self.body = make_node(AST_BlockStatement, self.body, { body: rest }).transform(compressor);
body: rest
}).transform(compressor);
} }
return if_break_in_loop(self, compressor); return if_break_in_loop(self, compressor);
} }
@@ -9834,7 +9811,7 @@ Compressor.prototype.compress = function(node) {
if (exp.has_side_effects(compressor)) { if (exp.has_side_effects(compressor)) {
exact_match = branch; exact_match = branch;
} else { } else {
default_branch = branch = make_node(AST_Default, branch, branch); default_branch = branch = make_node(AST_Default, branch);
} }
while (++i < len) eliminate_branch(self.body[i], branch); while (++i < len) eliminate_branch(self.body[i], branch);
} }
@@ -9848,7 +9825,7 @@ Compressor.prototype.compress = function(node) {
if (!is_break(stat, compressor)) break; if (!is_break(stat, compressor)) break;
statements = statements.concat(stat); statements = statements.concat(stat);
case 0: case 0:
var prev_block = make_node(AST_BlockStatement, prev, prev); var prev_block = make_node(AST_BlockStatement, prev);
var next_block = make_node(AST_BlockStatement, branch, { body: statements }); var next_block = make_node(AST_BlockStatement, branch, { body: statements });
if (prev_block.equals(next_block)) prev.body = []; if (prev_block.equals(next_block)) prev.body = [];
} }
@@ -9927,7 +9904,7 @@ Compressor.prototype.compress = function(node) {
var exclusive = statements.length && is_break(statements[statements.length - 1], compressor); var exclusive = statements.length && is_break(statements[statements.length - 1], compressor);
if (exclusive) statements.pop(); if (exclusive) statements.pop();
if (!all(statements, no_break)) break; if (!all(statements, no_break)) break;
var alternative = body[1].body.length && make_node(AST_BlockStatement, body[1], body[1]); var alternative = body[1].body.length && make_node(AST_BlockStatement, body[1]);
var node = make_node(AST_If, self, { var node = make_node(AST_If, self, {
condition: make_node(AST_Binary, self, body[0] === default_branch ? { condition: make_node(AST_Binary, self, body[0] === default_branch ? {
operator: "!==", operator: "!==",
@@ -9992,14 +9969,14 @@ Compressor.prototype.compress = function(node) {
}); });
}); });
} }
body.unshift(make_node(AST_BlockStatement, self, self).optimize(compressor)); body.unshift(make_node(AST_BlockStatement, self).optimize(compressor));
if (self.bfinally) { if (self.bfinally) {
body.push(make_node(AST_BlockStatement, self.bfinally, self.bfinally).optimize(compressor)); body.push(make_node(AST_BlockStatement, self.bfinally).optimize(compressor));
} }
return make_node(AST_BlockStatement, self, { body: body }).optimize(compressor); return make_node(AST_BlockStatement, self, { body: body }).optimize(compressor);
} }
if (self.bfinally && has_declarations_only(self.bfinally)) { if (self.bfinally && has_declarations_only(self.bfinally)) {
var body = make_node(AST_BlockStatement, self.bfinally, self.bfinally).optimize(compressor); var body = make_node(AST_BlockStatement, self.bfinally).optimize(compressor);
body = self.body.concat(body); body = self.body.concat(body);
if (!self.bcatch) return make_node(AST_BlockStatement, self, { body: body }).optimize(compressor); if (!self.bcatch) return make_node(AST_BlockStatement, self, { body: body }).optimize(compressor);
self.body = body; self.body = body;
@@ -10017,7 +9994,7 @@ Compressor.prototype.compress = function(node) {
defn.name.match_symbol(function(node) { defn.name.match_symbol(function(node) {
if (node instanceof AST_SymbolDeclaration) defns.push(make_node(AST_VarDef, node, { if (node instanceof AST_SymbolDeclaration) defns.push(make_node(AST_VarDef, node, {
name: node, name: node,
value: make_value(compressor, node) value: make_value(compressor, node),
})); }));
}, true); }, true);
}); });
@@ -10037,7 +10014,7 @@ Compressor.prototype.compress = function(node) {
var value = defn.value; var value = defn.value;
if (value) { if (value) {
if (value instanceof AST_Sequence) value = value.clone(); if (value instanceof AST_Sequence) value = value.clone();
var name = make_node(AST_SymbolRef, defn.name, defn.name); var name = make_node(AST_SymbolRef, defn.name);
var assign = make_node(AST_Assign, defn, { var assign = make_node(AST_Assign, defn, {
operator: "=", operator: "=",
left: name, left: name,
@@ -10103,7 +10080,7 @@ Compressor.prototype.compress = function(node) {
}), }),
value: defn.value, value: defn.value,
}); });
}) }),
}); });
} }
@@ -10410,9 +10387,7 @@ Compressor.prototype.compress = function(node) {
break EXIT; break EXIT;
} else { } else {
if (consts.length > 0) { if (consts.length > 0) {
elements.push(make_node(AST_String, self, { elements.push(make_node(AST_String, self, { value: consts.join(separator) }));
value: consts.join(separator),
}));
consts.length = 0; consts.length = 0;
} }
elements.push(el); elements.push(el);
@@ -10497,7 +10472,7 @@ Compressor.prototype.compress = function(node) {
func = func.fixed_value(); func = func.fixed_value();
} }
if (func instanceof AST_Lambda && !func.contains_this()) { if (func instanceof AST_Lambda && !func.contains_this()) {
return (self.args.length ? make_sequence(this, [ return (self.args.length ? make_sequence(self, [
self.args[0], self.args[0],
make_node(AST_Call, self, { make_node(AST_Call, self, {
expression: exp.expression, expression: exp.expression,
@@ -10525,7 +10500,7 @@ Compressor.prototype.compress = function(node) {
// new Function() ---> function(){} // new Function() ---> function(){}
if (self.args.length == 0) return make_node(AST_Function, self, { if (self.args.length == 0) return make_node(AST_Function, self, {
argnames: [], argnames: [],
body: [] body: [],
}).init_vars(exp.scope); }).init_vars(exp.scope);
if (all(self.args, function(x) { if (all(self.args, function(x) {
return x instanceof AST_String; return x instanceof AST_String;
@@ -10563,7 +10538,7 @@ Compressor.prototype.compress = function(node) {
}), }),
make_node(AST_String, self.args[self.args.length - 1], { make_node(AST_String, self.args[self.args.length - 1], {
value: code.get().replace(/^\{|\}$/g, "") value: code.get().replace(/^\{|\}$/g, "")
}) }),
]; ];
return self; return self;
} catch (ex) { } catch (ex) {
@@ -10992,7 +10967,7 @@ Compressor.prototype.compress = function(node) {
scope.variables.set(name.name, def); scope.variables.set(name.name, def);
scope.enclosed.push(def); scope.enclosed.push(def);
if (!value) return; if (!value) return;
var sym = make_node(AST_SymbolRef, name, name); var sym = make_node(AST_SymbolRef, name);
def.assignments++; def.assignments++;
def.references.push(sym); def.references.push(sym);
expressions.push(make_node(AST_Assign, self, { expressions.push(make_node(AST_Assign, self, {
@@ -11021,7 +10996,7 @@ Compressor.prototype.compress = function(node) {
if (name.unused || scope.var_names().has(name.name)) { if (name.unused || scope.var_names().has(name.name)) {
if (value) expressions.push(value); if (value) expressions.push(value);
} else { } else {
var symbol = make_node(AST_SymbolVar, name, name); var symbol = make_node(AST_SymbolVar, name);
var def = name.definition(); var def = name.definition();
def.orig.push(symbol); def.orig.push(symbol);
def.eliminated++; def.eliminated++;
@@ -11044,7 +11019,7 @@ Compressor.prototype.compress = function(node) {
if (node.name.unused !== undefined) { if (node.name.unused !== undefined) {
expressions.push(node.value); expressions.push(node.value);
} else { } else {
var sym = make_node(AST_SymbolRef, node.name, node.name); var sym = make_node(AST_SymbolRef, node.name);
node.name.definition().references.push(sym); node.name.definition().references.push(sym);
expressions.push(make_node(AST_Assign, node, { expressions.push(make_node(AST_Assign, node, {
operator: "=", operator: "=",
@@ -11073,7 +11048,7 @@ Compressor.prototype.compress = function(node) {
var def = name.definition(); var def = name.definition();
def.assignments++; def.assignments++;
def.references.push(ref); def.references.push(ref);
var symbol = make_node(AST_SymbolVar, name, name); var symbol = make_node(AST_SymbolVar, name);
def.orig.push(symbol); def.orig.push(symbol);
def.eliminated++; def.eliminated++;
append_var(decls, expressions, symbol); append_var(decls, expressions, symbol);
@@ -11085,7 +11060,7 @@ Compressor.prototype.compress = function(node) {
var decl_var = [], expr_fn = [], expr_var = [], expr_loop = [], exprs = []; var decl_var = [], expr_fn = [], expr_var = [], expr_loop = [], exprs = [];
fn.body.filter(in_loop ? function(stat) { fn.body.filter(in_loop ? function(stat) {
if (!(stat instanceof AST_LambdaDefinition)) return true; if (!(stat instanceof AST_LambdaDefinition)) return true;
var name = make_node(AST_SymbolVar, stat.name, flatten_var(stat.name)); var name = make_node(AST_SymbolVar, flatten_var(stat.name));
var def = name.definition(); var def = name.definition();
def.fixed = false; def.fixed = false;
def.orig.push(name); def.orig.push(name);
@@ -11159,7 +11134,7 @@ Compressor.prototype.compress = function(node) {
case "Function": case "Function":
case "Object": case "Object":
case "RegExp": case "RegExp":
return make_node(AST_Call, self, self).transform(compressor); return make_node(AST_Call, self).transform(compressor);
} }
} }
if (compressor.option("sequences")) { if (compressor.option("sequences")) {
@@ -11186,11 +11161,11 @@ Compressor.prototype.compress = function(node) {
return node.operator == "&&" ? make_node(AST_Conditional, node, { return node.operator == "&&" ? make_node(AST_Conditional, node, {
condition: node.left, condition: node.left,
consequent: node.right.right, consequent: node.right.right,
alternative: value alternative: value,
}) : make_node(AST_Conditional, node, { }) : make_node(AST_Conditional, node, {
condition: node.left, condition: node.left,
consequent: value, consequent: value,
alternative: node.right.right alternative: node.right.right,
}); });
function safe_from_assignment(node) { function safe_from_assignment(node) {
@@ -11237,8 +11212,8 @@ Compressor.prototype.compress = function(node) {
while (end > 0 && is_undefined(expressions[end], compressor)) end--; while (end > 0 && is_undefined(expressions[end], compressor)) end--;
if (end < expressions.length - 1) { if (end < expressions.length - 1) {
expressions[end] = make_node(AST_UnaryPrefix, self, { expressions[end] = make_node(AST_UnaryPrefix, self, {
operator : "void", operator: "void",
expression : expressions[end] expression: expressions[end],
}); });
expressions.length = end + 1; expressions.length = end + 1;
} }
@@ -11522,7 +11497,7 @@ Compressor.prototype.compress = function(node) {
left: self.left, left: self.left,
right: rhs.left, right: rhs.left,
start: self.left.start, start: self.left.start,
end: rhs.left.end end: rhs.left.end,
}); });
self.right = rhs.right; self.right = rhs.right;
if (compressor) { if (compressor) {
@@ -11573,7 +11548,7 @@ Compressor.prototype.compress = function(node) {
AST_Node.warn("Expression always defined [{start}]", self); AST_Node.warn("Expression always defined [{start}]", self);
return make_sequence(self, [ return make_sequence(self, [
self.right, self.right,
make_node(self.operator == "===" ? AST_False : AST_True, self) make_node(self.operator == "===" ? AST_False : AST_True, self),
]).optimize(compressor); ]).optimize(compressor);
} }
var is_strict_comparison = true; var is_strict_comparison = true;
@@ -11665,7 +11640,7 @@ Compressor.prototype.compress = function(node) {
if (self.left instanceof AST_String && self.left.value == "" && self.right.is_string(compressor)) { if (self.left instanceof AST_String && self.left.value == "" && self.right.is_string(compressor)) {
return make_node(AST_UnaryPrefix, self, { return make_node(AST_UnaryPrefix, self, {
operator: "!", operator: "!",
expression: self.right expression: self.right,
}).optimize(compressor); }).optimize(compressor);
} }
break; break;
@@ -11963,17 +11938,20 @@ Compressor.prototype.compress = function(node) {
&& PRECEDENCE[self.left.operator] == PRECEDENCE[self.operator] && PRECEDENCE[self.left.operator] == PRECEDENCE[self.operator]
&& self.left.is_number(compressor)) { && self.left.is_number(compressor)) {
if (self.left.left instanceof AST_Constant) { if (self.left.left instanceof AST_Constant) {
var lhs = make_binary(self.left, self.operator, self.left.left, self.right, self.left.left.start, self.right.end); var lhs = make_binary(self.operator, self.left.left, self.right, {
self = make_binary(self, self.left.operator, try_evaluate(compressor, lhs), self.left.right); start: self.left.left.start,
end: self.right.end,
});
self = make_binary(self.left.operator, try_evaluate(compressor, lhs), self.left.right, self);
} else if (self.left.right instanceof AST_Constant) { } else if (self.left.right instanceof AST_Constant) {
var op = align(self.left.operator, self.operator); var op = align(self.left.operator, self.operator);
var rhs = try_evaluate(compressor, make_binary(self.left, op, self.left.right, self.right)); var rhs = try_evaluate(compressor, make_binary(op, self.left.right, self.right, self.left));
if (rhs.is_constant() if (rhs.is_constant()
&& !(self.left.operator == "-" && !(self.left.operator == "-"
&& self.right.value != 0 && self.right.value != 0
&& +rhs.value == 0 && +rhs.value == 0
&& self.left.left.is_negative_zero())) { && self.left.left.is_negative_zero())) {
self = make_binary(self, self.left.operator, self.left.left, rhs); self = make_binary(self.left.operator, self.left.left, rhs, self);
} }
} }
} }
@@ -12050,7 +12028,7 @@ Compressor.prototype.compress = function(node) {
&& self.left.value == 0) { && self.left.value == 0) {
return (self.operator == "==" ? make_node(AST_UnaryPrefix, self, { return (self.operator == "==" ? make_node(AST_UnaryPrefix, self, {
operator: "!", operator: "!",
expression: self.right expression: self.right,
}) : self.right).optimize(compressor); }) : self.right).optimize(compressor);
} }
var indexLeft = is_indexFn(self.left); var indexLeft = is_indexFn(self.left);
@@ -12059,8 +12037,8 @@ Compressor.prototype.compress = function(node) {
operator: "!", operator: "!",
expression: make_node(AST_UnaryPrefix, self, { expression: make_node(AST_UnaryPrefix, self, {
operator: "~", operator: "~",
expression: indexLeft ? self.left : self.right expression: indexLeft ? self.left : self.right,
}) }),
}); });
switch (self.operator) { switch (self.operator) {
case "<": case "<":
@@ -12069,7 +12047,7 @@ Compressor.prototype.compress = function(node) {
case "!=": case "!=":
node = make_node(AST_UnaryPrefix, self, { node = make_node(AST_UnaryPrefix, self, {
operator: "!", operator: "!",
expression: node expression: node,
}); });
break; break;
} }
@@ -12104,18 +12082,18 @@ Compressor.prototype.compress = function(node) {
} }
} }
function make_binary(orig, op, left, right, start, end) { function make_binary(op, left, right, orig) {
if (op == "+") { if (op == "+") {
if (!left.is_boolean(compressor) && !left.is_number(compressor)) { if (!left.is_boolean(compressor) && !left.is_number(compressor)) {
left = make_node(AST_UnaryPrefix, left, { left = make_node(AST_UnaryPrefix, left, {
operator: "+", operator: "+",
expression: left expression: left,
}); });
} }
if (!right.is_boolean(compressor) && !right.is_number(compressor)) { if (!right.is_boolean(compressor) && !right.is_number(compressor)) {
right = make_node(AST_UnaryPrefix, right, { right = make_node(AST_UnaryPrefix, right, {
operator: "+", operator: "+",
expression: right expression: right,
}); });
} }
} }
@@ -12123,8 +12101,6 @@ Compressor.prototype.compress = function(node) {
operator: op, operator: op,
left: left, left: left,
right: right, right: right,
start: start,
end: end
}); });
} }
@@ -12284,7 +12260,7 @@ Compressor.prototype.compress = function(node) {
symbol_type = AST_SymbolLambda; symbol_type = AST_SymbolLambda;
} }
if (!(name instanceof symbol_type)) { if (!(name instanceof symbol_type)) {
name = make_node(symbol_type, value.name, value.name); name = make_node(symbol_type, value.name);
name.scope = value; name.scope = value;
value.name = name; value.name = name;
lambda_def = value[def_fn_name](name); lambda_def = value[def_fn_name](name);
@@ -12508,9 +12484,9 @@ Compressor.prototype.compress = function(node) {
var undef = find_scope(compressor).find_variable("undefined"); var undef = find_scope(compressor).find_variable("undefined");
if (undef) { if (undef) {
var ref = make_node(AST_SymbolRef, self, { var ref = make_node(AST_SymbolRef, self, {
name : "undefined", name: "undefined",
scope : undef.scope, scope: undef.scope,
thedef : undef thedef: undef,
}); });
ref.is_undefined = true; ref.is_undefined = true;
return ref; return ref;
@@ -12689,7 +12665,7 @@ Compressor.prototype.compress = function(node) {
var op = self.operator.slice(0, -1); var op = self.operator.slice(0, -1);
return make_node(AST_UnaryPrefix, self, { return make_node(AST_UnaryPrefix, self, {
operator: op + op, operator: op + op,
expression: self.left expression: self.left,
}); });
} }
} }
@@ -12971,10 +12947,8 @@ Compressor.prototype.compress = function(node) {
} }
var in_bool = compressor.option("booleans") && compressor.in_boolean_context(); var in_bool = compressor.option("booleans") && compressor.in_boolean_context();
if (is_true(consequent)) { if (is_true(consequent)) {
if (is_false(alternative)) { // c ? true : false ---> !!c
// c ? true : false ---> !!c if (is_false(alternative)) return booleanize(condition);
return booleanize(condition);
}
// c ? true : x ---> !!c || x // c ? true : x ---> !!c || x
return make_node(AST_Binary, self, { return make_node(AST_Binary, self, {
operator: "||", operator: "||",
@@ -12983,10 +12957,8 @@ Compressor.prototype.compress = function(node) {
}); });
} }
if (is_false(consequent)) { if (is_false(consequent)) {
if (is_true(alternative)) { // c ? false : true ---> !c
// c ? false : true ---> !c if (is_true(alternative)) return booleanize(condition.negate(compressor));
return booleanize(condition.negate(compressor));
}
// c ? false : x ---> !c && x // c ? false : x ---> !c && x
return make_node(AST_Binary, self, { return make_node(AST_Binary, self, {
operator: "&&", operator: "&&",
@@ -12994,22 +12966,18 @@ Compressor.prototype.compress = function(node) {
right: alternative, right: alternative,
}); });
} }
if (is_true(alternative)) { // c ? x : true ---> !c || x
// c ? x : true ---> !c || x if (is_true(alternative)) return make_node(AST_Binary, self, {
return make_node(AST_Binary, self, { operator: "||",
operator: "||", left: booleanize(condition.negate(compressor)),
left: booleanize(condition.negate(compressor)), right: consequent,
right: consequent, });
}); // c ? x : false ---> !!c && x
} if (is_false(alternative)) return make_node(AST_Binary, self, {
if (is_false(alternative)) { operator: "&&",
// c ? x : false ---> !!c && x left: booleanize(condition),
return make_node(AST_Binary, self, { right: consequent,
operator: "&&", });
left: booleanize(condition),
right: consequent,
});
}
if (compressor.option("typeofs")) mark_locally_defined(condition, consequent, alternative); if (compressor.option("typeofs")) mark_locally_defined(condition, consequent, alternative);
return self; return self;
@@ -13018,7 +12986,7 @@ Compressor.prototype.compress = function(node) {
// !!expression // !!expression
return make_node(AST_UnaryPrefix, node, { return make_node(AST_UnaryPrefix, node, {
operator: "!", operator: "!",
expression: node.negate(compressor) expression: node.negate(compressor),
}); });
} }
@@ -13247,7 +13215,7 @@ Compressor.prototype.compress = function(node) {
return node.name === argname.name; return node.name === argname.name;
}, fn.argnames) === argname) { }, fn.argnames) === argname) {
if (assigned) def.reassigned--; if (assigned) def.reassigned--;
var sym = make_node(AST_SymbolRef, self, argname); var sym = make_node(AST_SymbolRef, argname);
sym.reference(); sym.reference();
argname.unused = undefined; argname.unused = undefined;
return sym; return sym;
@@ -13399,7 +13367,7 @@ Compressor.prototype.compress = function(node) {
} else { } else {
return; return;
} }
value = make_node(ctor, value, value); value = make_node(ctor, value);
} }
values.push(value); values.push(value);
} }
@@ -13612,7 +13580,7 @@ Compressor.prototype.compress = function(node) {
} }
function init_ref(compressor, name) { function init_ref(compressor, name) {
var sym = make_node(AST_SymbolRef, name, name); var sym = make_node(AST_SymbolRef, name);
var assign = make_node(AST_Assign, name, { var assign = make_node(AST_Assign, name, {
operator: "=", operator: "=",
left: sym, left: sym,
@@ -13868,7 +13836,7 @@ Compressor.prototype.compress = function(node) {
}); });
[].push.apply(body, in_loop ? fn.body.filter(function(stat) { [].push.apply(body, in_loop ? fn.body.filter(function(stat) {
if (!(stat instanceof AST_LambdaDefinition)) return true; if (!(stat instanceof AST_LambdaDefinition)) return true;
var name = make_node(AST_SymbolVar, stat.name, flatten_var(stat.name)); var name = make_node(AST_SymbolVar, flatten_var(stat.name));
var def = name.definition(); var def = name.definition();
def.fixed = false; def.fixed = false;
def.orig.push(name); def.orig.push(name);
@@ -14068,10 +14036,10 @@ Compressor.prototype.compress = function(node) {
var fn = call.expression; var fn = call.expression;
switch (fn.CTOR) { switch (fn.CTOR) {
case AST_AsyncGeneratorFunction: case AST_AsyncGeneratorFunction:
fn = make_node(AST_AsyncFunction, fn, fn); fn = make_node(AST_AsyncFunction, fn);
break; break;
case AST_GeneratorFunction: case AST_GeneratorFunction:
fn = make_node(AST_Function, fn, fn); fn = make_node(AST_Function, fn);
break; break;
default: default:
return; return;

View File

@@ -406,10 +406,11 @@ function OutputStream(options) {
print(";"); print(";");
} }
function with_block(cont) { function with_block(cont, end) {
print("{"); print("{");
newline(); newline();
with_indent(cont); with_indent(cont);
add_mapping(end);
indent(); indent();
print("}"); print("}");
} }
@@ -953,7 +954,7 @@ function OutputStream(options) {
if (self.body.length > 0) { if (self.body.length > 0) {
output.with_block(function() { output.with_block(function() {
display_body(self.body, false, output, allow_directives); display_body(self.body, false, output, allow_directives);
}); }, self.end);
} else print_braced_empty(self, output); } else print_braced_empty(self, output);
} }
DEFPRINT(AST_BlockStatement, function(output) { DEFPRINT(AST_BlockStatement, function(output) {
@@ -1088,7 +1089,7 @@ function OutputStream(options) {
print_entry(i); print_entry(i);
} }
output.newline(); output.newline();
}); }, self.end);
output.space(); output.space();
output.print("from"); output.print("from");
output.space(); output.space();
@@ -1352,7 +1353,7 @@ function OutputStream(options) {
if (i < last && branch.body.length > 0) if (i < last && branch.body.length > 0)
output.newline(); output.newline();
}); });
}); }, self.end);
}); });
function print_branch_body(self, output) { function print_branch_body(self, output) {
output.newline(); output.newline();
@@ -1472,14 +1473,12 @@ function OutputStream(options) {
output.print("/*@__PURE__*/"); output.print("/*@__PURE__*/");
} }
function print_call_args(self, output) { function print_call_args(self, output) {
if (self.expression instanceof AST_Call || self.expression instanceof AST_Lambda) {
output.add_mapping(self.start);
}
output.with_parens(function() { output.with_parens(function() {
self.args.forEach(function(expr, i) { self.args.forEach(function(expr, i) {
if (i) output.comma(); if (i) output.comma();
expr.print(output); expr.print(output);
}); });
output.add_mapping(self.end);
}); });
} }
DEFPRINT(AST_Call, function(output) { DEFPRINT(AST_Call, function(output) {
@@ -1515,10 +1514,11 @@ function OutputStream(options) {
expr.print(output); expr.print(output);
var prop = self.property; var prop = self.property;
if (output.option("ie") && RESERVED_WORDS[prop]) { if (output.option("ie") && RESERVED_WORDS[prop]) {
output.print(self.optional ? "?.[" : "["); if (self.optional) output.print("?.");
output.add_mapping(self.end); output.with_square(function() {
output.print_string(prop); output.add_mapping(self.end);
output.print("]"); output.print_string(prop);
});
} else { } else {
if (expr instanceof AST_Number && !/[ex.)]/i.test(output.last())) output.print("."); if (expr instanceof AST_Number && !/[ex.)]/i.test(output.last())) output.print(".");
output.print(self.optional ? "?." : "."); output.print(self.optional ? "?." : ".");
@@ -1530,9 +1530,10 @@ function OutputStream(options) {
DEFPRINT(AST_Sub, function(output) { DEFPRINT(AST_Sub, function(output) {
var self = this; var self = this;
self.expression.print(output); self.expression.print(output);
output.print(self.optional ? "?.[" : "["); if (self.optional) output.print("?.");
self.property.print(output); output.with_square(function() {
output.print("]"); self.property.print(output);
});
}); });
DEFPRINT(AST_Spread, function(output) { DEFPRINT(AST_Spread, function(output) {
output.print("..."); output.print("...");
@@ -1551,8 +1552,10 @@ function OutputStream(options) {
exp.print(output); exp.print(output);
}); });
DEFPRINT(AST_UnaryPostfix, function(output) { DEFPRINT(AST_UnaryPostfix, function(output) {
this.expression.print(output); var self = this;
output.print(this.operator); self.expression.print(output);
output.add_mapping(self.end);
output.print(self.operator);
}); });
DEFPRINT(AST_Binary, function(output) { DEFPRINT(AST_Binary, function(output) {
var self = this; var self = this;
@@ -1645,7 +1648,8 @@ function OutputStream(options) {
value.print(output); value.print(output);
}); });
DEFPRINT(AST_DestructuredObject, function(output) { DEFPRINT(AST_DestructuredObject, function(output) {
var props = this.properties, len = props.length, rest = this.rest; var self = this;
var props = self.properties, len = props.length, rest = self.rest;
if (len || rest) output.with_block(function() { if (len || rest) output.with_block(function() {
props.forEach(function(prop, i) { props.forEach(function(prop, i) {
if (i) { if (i) {
@@ -1665,8 +1669,8 @@ function OutputStream(options) {
rest.print(output); rest.print(output);
} }
output.newline(); output.newline();
}); }, self.end);
else print_braced_empty(this, output); else print_braced_empty(self, output);
}); });
function print_properties(self, output, no_comma) { function print_properties(self, output, no_comma) {
var props = self.properties; var props = self.properties;
@@ -1680,7 +1684,7 @@ function OutputStream(options) {
prop.print(output); prop.print(output);
}); });
output.newline(); output.newline();
}); }, self.end);
else print_braced_empty(self, output); else print_braced_empty(self, output);
} }
DEFPRINT(AST_Object, function(output) { DEFPRINT(AST_Object, function(output) {
@@ -1890,7 +1894,7 @@ function OutputStream(options) {
output.indent(); output.indent();
stmt.print(output); stmt.print(output);
output.newline(); output.newline();
}); }, stmt.end);
} }
/* -----[ source map generators ]----- */ /* -----[ source map generators ]----- */
@@ -1913,22 +1917,27 @@ function OutputStream(options) {
// or if we should add even more. // or if we should add even more.
DEFMAP([ DEFMAP([
AST_Array, AST_Array,
AST_Await,
AST_BlockStatement, AST_BlockStatement,
AST_Catch, AST_Catch,
AST_Constant, AST_Constant,
AST_Debugger, AST_Debugger,
AST_Definitions, AST_Definitions,
AST_Destructured, AST_Destructured,
AST_Directive,
AST_Finally, AST_Finally,
AST_Jump, AST_Jump,
AST_Lambda, AST_Lambda,
AST_New, AST_New,
AST_Object, AST_Object,
AST_Spread,
AST_StatementWithBody, AST_StatementWithBody,
AST_Symbol, AST_Symbol,
AST_Switch, AST_Switch,
AST_SwitchBranch, AST_SwitchBranch,
AST_Try, AST_Try,
AST_UnaryPrefix,
AST_Yield,
], function(output) { ], function(output) {
output.add_mapping(this.start); output.add_mapping(this.start);
}); });

View File

@@ -38,4 +38,4 @@ var _require = require("bar"), foo = _require.foo;
var _require2 = require("world"), hello = _require2.hello; var _require2 = require("world"), hello = _require2.hello;
foo.x.apply(foo, _toConsumableArray(foo.y(hello.z))); foo.x.apply(foo, _toConsumableArray(foo.y(hello.z)));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImlucHV0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHtmb299ID0gcmVxdWlyZShcImJhclwiKTtcbmNvbnN0IHtoZWxsb30gPSByZXF1aXJlKFwid29ybGRcIik7XG5cbmZvby54KC4uLmZvby55KGhlbGxvLnopKTtcbiJdLCJuYW1lcyI6WyJyZXF1aXJlIiwiZm9vIiwiaGVsbG8iLCJ4IiwiYXBwbHkiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJ5IiwieiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7ZUFBY0EsUUFBUSxRQUFmQyxNLFNBQUFBOztBLGdCQUNTRCxRQUFRLFVBQWpCRSxRLFVBQUFBOztBQUVQRCxJQUFJRSxFQUFKQyxNQUFBSCxLQUFHSSxtQkFBTUosSUFBSUssRUFBRUosTUFBTUsifQ== //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImlucHV0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHtmb299ID0gcmVxdWlyZShcImJhclwiKTtcbmNvbnN0IHtoZWxsb30gPSByZXF1aXJlKFwid29ybGRcIik7XG5cbmZvby54KC4uLmZvby55KGhlbGxvLnopKTtcbiJdLCJuYW1lcyI6WyJyZXF1aXJlIiwiZm9vIiwiaGVsbG8iLCJ4IiwiYXBwbHkiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJ5IiwieiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7ZUFBY0EsUUFBUSxLQUFELEdBQWRDLE0sU0FBQUE7O0EsZ0JBQ1NELFFBQVEsT0FBRCxHQUFoQkUsUSxVQUFBQTs7QUFFUEQsSUFBSUUsRUFBSkMsTUFBQUgsS0FBR0ksbUJBQU1KLElBQUlLLEVBQUVKLE1BQU1LLENBQVosQ0FBTixDQUFBIn0=

View File

@@ -1,2 +1,2 @@
console.log(3); console.log(3);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0ZGluIl0sInNvdXJjZXNDb250ZW50IjpbImNsYXNzIEZvbyB7IGNvbnN0cnVjdG9yKCl7Y29uc29sZS5sb2coMSsyKTt9IH0gbmV3IEZvbygpO1xuIl0sIm5hbWVzIjpbImNvbnNvbGUiLCJsb2ciXSwibWFwcGluZ3MiOiJBQUEwQkEsUUFBUUMsSUFBSSJ9 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0ZGluIl0sInNvdXJjZXNDb250ZW50IjpbImNsYXNzIEZvbyB7IGNvbnN0cnVjdG9yKCl7Y29uc29sZS5sb2coMSsyKTt9IH0gbmV3IEZvbygpO1xuIl0sIm5hbWVzIjpbImNvbnNvbGUiLCJsb2ciXSwibWFwcGluZ3MiOiJBQUEwQkEsUUFBUUMsSUFBSSxDQUFHIn0=

View File

@@ -2,4 +2,4 @@ function test(a){
"aaaaaaaaaaaaaaaa"; "aaaaaaaaaaaaaaaa";
a(err,data),a(err, a(err,data),a(err,
data)} data)}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjAiXSwibmFtZXMiOlsidGVzdCIsImNhbGxiYWNrIiwiZXJyIiwiZGF0YSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0E7SEFBS0M7QUFFVkE7aEJBQVNDLElBQUtDLE1BQ2RGLEVBQVNDLElBQUtDIn0= //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjAiXSwibmFtZXMiOlsidGVzdCIsImNhbGxiYWNrIiwiZXJyIiwiZGF0YSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0E7SEFBS0MsR0FDVjtBQUNBQTtoQkFBU0MsSUFBS0MsSUFBSSxFQUNsQkYsRUFBU0MsSUFBS0MsSUFBSSxDQUN0QiJ9

View File

@@ -1,2 +1,2 @@
console.log(3); console.log(3);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0ZGluIl0sInNvdXJjZXNDb250ZW50IjpbImNsYXNzIEZvbyB7IGNvbnN0cnVjdG9yKCl7Y29uc29sZS5sb2coMSsyKTt9IH0gbmV3IEZvbygpO1xuIl0sIm5hbWVzIjpbImNvbnNvbGUiLCJsb2ciXSwibWFwcGluZ3MiOiJBQUEwQkEsUUFBUUMsSUFBSSJ9 //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0ZGluIl0sInNvdXJjZXNDb250ZW50IjpbImNsYXNzIEZvbyB7IGNvbnN0cnVjdG9yKCl7Y29uc29sZS5sb2coMSsyKTt9IH0gbmV3IEZvbygpO1xuIl0sIm5hbWVzIjpbImNvbnNvbGUiLCJsb2ciXSwibWFwcGluZ3MiOiJBQUEwQkEsUUFBUUMsSUFBSSxDQUFHIn0=

View File

@@ -143,7 +143,7 @@ describe("bin/uglifyjs", function() {
if (err) throw err; if (err) throw err;
assert.strictEqual(stdout, [ assert.strictEqual(stdout, [
"var bar=function(){function foo(bar){return bar}return foo}();", "var bar=function(){function foo(bar){return bar}return foo}();",
"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvaW5wdXQvaXNzdWUtMTMyMy9zYW1wbGUuanMiXSwibmFtZXMiOlsiYmFyIiwiZm9vIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxJQUFNLFdBQ04sU0FBU0MsSUFBS0QsS0FDVixPQUFPQSxJQUdYLE9BQU9DLElBTEQifQ==", "//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvaW5wdXQvaXNzdWUtMTMyMy9zYW1wbGUuanMiXSwibmFtZXMiOlsiYmFyIiwiZm9vIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxJQUFNLFdBQ04sU0FBU0MsSUFBS0QsS0FDVixPQUFPQSxHQUNYLENBRUEsT0FBT0MsR0FDVixFQUFFIn0=",
"", "",
].join("\n")); ].join("\n"));
done(); done();
@@ -330,7 +330,7 @@ describe("bin/uglifyjs", function() {
if (err) throw err; if (err) throw err;
assert.strictEqual(stdout, [ assert.strictEqual(stdout, [
"var bar=function(){function foo(bar){return bar}return foo}();", "var bar=function(){function foo(bar){return bar}return foo}();",
"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvaW5wdXQvaXNzdWUtMTMyMy9zYW1wbGUuanMiXSwibmFtZXMiOlsiYmFyIiwiZm9vIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxJQUFNLFdBQ04sU0FBU0MsSUFBS0QsS0FDVixPQUFPQSxJQUdYLE9BQU9DLElBTEQifQ==", "//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvaW5wdXQvaXNzdWUtMTMyMy9zYW1wbGUuanMiXSwibmFtZXMiOlsiYmFyIiwiZm9vIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxJQUFNLFdBQ04sU0FBU0MsSUFBS0QsS0FDVixPQUFPQSxHQUNYLENBRUEsT0FBT0MsR0FDVixFQUFFIn0=",
"", "",
].join("\n")); ].join("\n"));
var stderrLines = stderr.split("\n"); var stderrLines = stderr.split("\n");
@@ -350,7 +350,7 @@ describe("bin/uglifyjs", function() {
if (err) throw err; if (err) throw err;
assert.strictEqual(stdout, [ assert.strictEqual(stdout, [
"var Foo=function Foo(){console.log(1+2)};new Foo;var bar=function(){function foo(bar){return bar}return foo}();", "var Foo=function Foo(){console.log(1+2)};new Foo;var bar=function(){function foo(bar){return bar}return foo}();",
"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0ZGluIiwidGVzdC9pbnB1dC9pc3N1ZS0xMzIzL3NhbXBsZS5qcyJdLCJuYW1lcyI6WyJGb28iLCJjb25zb2xlIiwibG9nIiwiYmFyIiwiZm9vIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFNQSxJQUFJLFNBQUVBLE1BQWNDLFFBQVFDLElBQUksRUFBRSxJQUFPLElBQUlGLElDQW5ELElBQUlHLElBQU0sV0FDTixTQUFTQyxJQUFLRCxLQUNWLE9BQU9BLElBR1gsT0FBT0MsSUFMRCJ9", "//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0ZGluIiwidGVzdC9pbnB1dC9pc3N1ZS0xMzIzL3NhbXBsZS5qcyJdLCJuYW1lcyI6WyJGb28iLCJjb25zb2xlIiwibG9nIiwiYmFyIiwiZm9vIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFNQSxJQUFJLFNBQUVBLE1BQWNDLFFBQVFDLElBQUksRUFBRSxDQUFDLENBQUUsRUFBSSxJQUFJRixJQ0FuRCxJQUFJRyxJQUFNLFdBQ04sU0FBU0MsSUFBS0QsS0FDVixPQUFPQSxHQUNYLENBRUEsT0FBT0MsR0FDVixFQUFFIn0=",
"", "",
].join("\n")); ].join("\n"));
var stderrLines = stderr.split("\n"); var stderrLines = stderr.split("\n");
@@ -791,7 +791,7 @@ describe("bin/uglifyjs", function() {
if (err) throw err; if (err) throw err;
assert.strictEqual(stdout, [ assert.strictEqual(stdout, [
'"use strict";var foo=function foo(x){return"foo "+x};console.log(foo("bar"));', '"use strict";var foo=function foo(x){return"foo "+x};console.log(foo("bar"));',
"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbImZvbyIsIngiLCJjb25zb2xlIiwibG9nIl0sIm1hcHBpbmdzIjoiYUFBQSxJQUFJQSxJQUFNLFNBQU5BLElBQU1DLEdBQUEsTUFBSyxPQUFTQSxHQUN4QkMsUUFBUUMsSUFBSUgsSUFBSSJ9", "//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbImZvbyIsIngiLCJjb25zb2xlIiwibG9nIl0sIm1hcHBpbmdzIjoiYUFBQSxJQUFJQSxJQUFNLFNBQU5BLElBQU1DLEdBQUEsTUFBSyxPQUFTQSxDQUFkLEVBQ1ZDLFFBQVFDLElBQUlILElBQUksS0FBSixDQUFaIn0=",
"" ""
].join("\n")); ].join("\n"));
done(); done();
@@ -814,7 +814,7 @@ describe("bin/uglifyjs", function() {
if (err) throw err; if (err) throw err;
assert.strictEqual(stdout, [ assert.strictEqual(stdout, [
'function foo(){return function(){console.log("PASS")}}foo()();', 'function foo(){return function(){console.log("PASS")}}foo()();',
"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvaW5wdXQvaXNzdWUtMjMxMC9pbnB1dC5qcyJdLCJuYW1lcyI6WyJmb28iLCJjb25zb2xlIiwibG9nIiwiZiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsTUFDTCxPQUFPLFdBQ0hDLFFBQVFDLElBQUksU0FLUkYsS0FDUkcifQ==", "//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvaW5wdXQvaXNzdWUtMjMxMC9pbnB1dC5qcyJdLCJuYW1lcyI6WyJmb28iLCJjb25zb2xlIiwibG9nIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxNQUNMLE9BQU8sV0FDSEMsUUFBUUMsSUFBSSxNQUFNLENBQ3RCLENBQ0osQ0FHWUYsSUFBSSxFQUNWIn0=",
"" ""
].join("\n")); ].join("\n"));
done(); done();

View File

@@ -19,11 +19,11 @@ function source_map(code) {
function get_map() { function get_map() {
return { return {
"version": 3, "version": 3,
"sources": ["index.js"], "sources": [ "index.js" ],
"names": [], "names": [],
"mappings": ";;AAAA,IAAI,MAAM,SAAN,GAAM;AAAA,SAAK,SAAS,CAAd;AAAA,CAAV;AACA,QAAQ,GAAR,CAAY,IAAI,KAAJ,CAAZ", "mappings": ";;AAAA,IAAI,MAAM,SAAN,GAAM;AAAA,SAAK,SAAS,CAAd;AAAA,CAAV;AACA,QAAQ,GAAR,CAAY,IAAI,KAAJ,CAAZ",
"file": "bundle.js", "file": "bundle.js",
"sourcesContent": ["let foo = x => \"foo \" + x;\nconsole.log(foo(\"bar\"));"] "sourcesContent": [ "let foo = x => \"foo \" + x;\nconsole.log(foo(\"bar\"));" ],
}; };
} }
@@ -42,7 +42,7 @@ function prepare_map(sourceMap) {
sourceMap: { sourceMap: {
content: sourceMap, content: sourceMap,
includeSources: true, includeSources: true,
} },
}); });
if (result.error) throw result.error; if (result.error) throw result.error;
return JSON.parse(result.map); return JSON.parse(result.map);
@@ -112,7 +112,7 @@ describe("sourcemaps", function() {
}); });
if (result.error) throw result.error; if (result.error) throw result.error;
assert.strictEqual(result.code, "class A{static P=42;set#q(s){}}"); assert.strictEqual(result.code, "class A{static P=42;set#q(s){}}");
assert.strictEqual(result.map, '{"version":3,"sources":["0"],"names":["A","P","#q","v"],"mappings":"MAAMA,EACFC,SAAW,GACXC,MAAOC"}'); assert.strictEqual(result.map, '{"version":3,"sources":["0"],"names":["A","P","#q","v"],"mappings":"MAAMA,EACFC,SAAW,GACXC,MAAOC,IACX"}');
}); });
it("Should mark array/object literals", function() { it("Should mark array/object literals", function() {
var result = UglifyJS.minify([ var result = UglifyJS.minify([
@@ -124,7 +124,7 @@ describe("sourcemaps", function() {
}); });
if (result.error) throw result.error; if (result.error) throw result.error;
assert.strictEqual(result.code, "({}).wat([]);"); assert.strictEqual(result.code, "({}).wat([]);");
assert.strictEqual(result.map, '{"version":3,"sources":["0"],"names":["wat"],"mappings":"CAAU,IACNA,IAAI"}'); assert.strictEqual(result.map, '{"version":3,"sources":["0"],"names":["wat"],"mappings":"CAAU,IACNA,IAAI,EAAE"}');
}); });
it("Should give correct sourceRoot", function() { it("Should give correct sourceRoot", function() {
var code = "console.log(42);"; var code = "console.log(42);";
@@ -135,7 +135,7 @@ describe("sourcemaps", function() {
}); });
if (result.error) throw result.error; if (result.error) throw result.error;
assert.strictEqual(result.code, code); assert.strictEqual(result.code, code);
assert.strictEqual(result.map, '{"version":3,"sourceRoot":"//foo.bar/","sources":["0"],"names":["console","log"],"mappings":"AAAAA,QAAQC,IAAI"}'); assert.strictEqual(result.map, '{"version":3,"sourceRoot":"//foo.bar/","sources":["0"],"names":["console","log"],"mappings":"AAAAA,QAAQC,IAAI,EAAE"}');
}); });
it("Should produce same source map with DOS or UNIX line endings", function() { it("Should produce same source map with DOS or UNIX line endings", function() {
var code = [ var code = [
@@ -160,8 +160,8 @@ describe("sourcemaps", function() {
sourceMap: { sourceMap: {
content: read("test/input/issue-1236/simple.js.map"), content: read("test/input/issue-1236/simple.js.map"),
filename: "simple.min.js", filename: "simple.min.js",
includeSources: true includeSources: true,
} },
}); });
if (result.error) throw result.error; if (result.error) throw result.error;
var map = JSON.parse(result.map); var map = JSON.parse(result.map);
@@ -175,8 +175,8 @@ describe("sourcemaps", function() {
sourceMap: { sourceMap: {
content: "inline", content: "inline",
includeSources: true, includeSources: true,
url: "inline" url: "inline",
} },
}); });
if (result.error) throw result.error; if (result.error) throw result.error;
assert.strictEqual(result.code + "\n", read("test/input/issue-520/output.js")); assert.strictEqual(result.code + "\n", read("test/input/issue-520/output.js"));
@@ -185,7 +185,7 @@ describe("sourcemaps", function() {
var result = UglifyJS.minify(read("test/input/issue-1323/sample.js"), { var result = UglifyJS.minify(read("test/input/issue-1323/sample.js"), {
mangle: false, mangle: false,
sourceMap: { sourceMap: {
content: "inline" content: "inline",
}, },
warnings: true, warnings: true,
}); });
@@ -206,7 +206,7 @@ describe("sourcemaps", function() {
if (result.error) throw result.error; if (result.error) throw result.error;
assert.strictEqual(result.code, [ assert.strictEqual(result.code, [
"var Foo=function(){console.log(3)},bar=(new Foo,function(o){return o});", "var Foo=function(){console.log(3)},bar=(new Foo,function(o){return o});",
"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0ZGluIiwiMSJdLCJuYW1lcyI6WyJGb28iLCJjb25zb2xlIiwibG9nIiwiYmFyIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFNQSxJQUFJLFdBQWdCQyxRQUFRQyxJQUFJLElDQWxDQyxLREEyQyxJQUFJSCxJQ0MvQyxTQUFjRyxHQUNWLE9BQU9BIn0=", "//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0ZGluIiwiMSJdLCJuYW1lcyI6WyJGb28iLCJjb25zb2xlIiwibG9nIiwiYmFyIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFNQSxJQUFJLFdBQWdCQyxRQUFRQyxJQUFJLENBQUcsQ0FBRSxFQ0F2Q0MsS0RBMkMsSUFBSUgsSUNDL0MsU0FBY0csR0FDVixPQUFPQSxDQUNYIn0=",
].join("\n")); ].join("\n"));
assert.deepEqual(result.warnings, [ "WARN: inline source map not found: 1" ]); assert.deepEqual(result.warnings, [ "WARN: inline source map not found: 1" ]);
}); });
@@ -239,8 +239,8 @@ describe("sourcemaps", function() {
sourceMap: { sourceMap: {
content: "inline", content: "inline",
includeSources: true, includeSources: true,
url: "inline" url: "inline",
} },
}); });
if (result.error) throw result.error; if (result.error) throw result.error;
assert.strictEqual(result.code + "\n", read("test/input/issue-3294/output.js")); assert.strictEqual(result.code + "\n", read("test/input/issue-3294/output.js"));
@@ -255,7 +255,7 @@ describe("sourcemaps", function() {
}); });
if (result.error) throw result.error; if (result.error) throw result.error;
assert.strictEqual(result.code, '(function(){console.log("hello")}).call(this);'); assert.strictEqual(result.code, '(function(){console.log("hello")}).call(this);');
assert.strictEqual(result.map, '{"version":3,"sources":["main.coffee"],"names":["console","log"],"mappings":"CAAA,WAAAA,QAAQC,IAAI"}'); assert.strictEqual(result.map, '{"version":3,"sources":["main.coffee"],"names":["console","log"],"mappings":"CAAA,WAAAA,QAAQC,IAAI,OAAZ"}');
}); });
it("Should not overwrite existing sourcesContent", function() { it("Should not overwrite existing sourcesContent", function() {
var result = UglifyJS.minify({ var result = UglifyJS.minify({
@@ -302,7 +302,7 @@ describe("sourcemaps", function() {
if (result.error) throw result.error; if (result.error) throw result.error;
var code = result.code; var code = result.code;
assert.strictEqual(code, "var a=function(n){return n};\n" + assert.strictEqual(code, "var a=function(n){return n};\n" +
"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjAiXSwibmFtZXMiOlsiYSIsImZvbyJdLCJtYXBwaW5ncyI6IkFBQUEsSUFBSUEsRUFBSSxTQUFTQyxHQUFPLE9BQU9BIn0="); "//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjAiXSwibmFtZXMiOlsiYSIsImZvbyJdLCJtYXBwaW5ncyI6IkFBQUEsSUFBSUEsRUFBSSxTQUFTQyxHQUFPLE9BQU9BLENBQUsifQ==");
}); });
it("Should not append source map to output js when sourceMapInline is not enabled", function() { it("Should not append source map to output js when sourceMapInline is not enabled", function() {
var result = UglifyJS.minify('var a = function(foo) { return foo; };'); var result = UglifyJS.minify('var a = function(foo) { return foo; };');