def(AST_SymbolCatch, function() {
this.definition().fixed = false;
});
+ def(AST_SymbolImport, function() {
+ this.definition().fixed = false;
+ });
def(AST_SymbolRef, function(tw, descend, compressor) {
var d = this.definition();
push_ref(d, this);
assignments.add(def.id, node);
return true;
}
+ if (node instanceof AST_SymbolImport) {
+ var def = node.definition();
+ if (!(def.id in in_use_ids) && (!drop_vars || !is_safe_lexical(def))) {
+ in_use_ids[def.id] = true;
+ in_use.push(def);
+ }
+ return true;
+ }
} else if (node instanceof AST_This && scope instanceof AST_DefClass) {
var def = scope.name.definition();
if (!(def.id in in_use_ids)) {
symbols = symbols.replace(/[{}]/g, "").trim().replace(/\s*,\s*/g, ",");
symbols = symbols.replace(/\*/, '"*"').replace(/\bas\s+(?!$|,|as\s)/g, ":");
imports.push([
- "var {",
+ "const {",
symbols,
"} = new Proxy(Object.create(null), { get(_, value) { return { value }; } });",
].join(""));
return "switch (" + createExpression(recurmax, COMMA_OK, stmtDepth, canThrow) + ") { " + createSwitchParts(recurmax, 4, canThrow, canBreak, canContinue, cannotReturn, stmtDepth) + "}";
case STMT_VAR:
if (SUPPORT.destructuring && stmtDepth == 1 && rng(5) == 0) {
- unique_vars.push("c");
- var s = rng(2) ? " " + createVarName(MANDATORY) : "";
+ unique_vars.push("a", "b", "c", "undefined", "NaN", "Infinity");
+ var s = "";
+ if (rng(2)) {
+ var name = createVarName(MANDATORY);
+ block_vars.push(name);
+ s += " " + name;
+ }
if (rng(10)) {
if (s) s += ",";
if (rng(2)) {
- s += " * as " + createVarName(MANDATORY);
+ var name = createVarName(MANDATORY);
+ block_vars.push(name);
+ s += " * as " + name;
} else {
var names = [];
for (var i = rng(4); --i >= 0;) {
var name = createVarName(MANDATORY);
+ block_vars.push(name);
names.push(rng(2) ? getDotKey() + " as " + name : name);
}
s += " { " + names.join(", ") + " }";
}
}
- unique_vars.pop();
+ unique_vars.length -= 6;
if (s) s += " from";
return "import" + s + ' "path/to/module.js";';
} else if (SUPPORT.destructuring && rng(20) == 0) {
return ex.name == "RangeError" && /Invalid string length|Maximum call stack size exceeded/.test(ex.message);
}
+function is_error_redeclaration(ex) {
+ return ex.name == "SyntaxError" && /already been declared|redeclaration/.test(ex.message);
+}
+
function is_error_destructuring(ex) {
return ex.name == "TypeError" && /^Cannot destructure /.test(ex.message);
}
ok = sandbox.same_stdout(original_strict, uglify_strict);
}
}
+ // ignore difference in error message caused by `import` symbol redeclaration
+ if (!ok && errored && /\bimport\b/.test(original_code)) {
+ if (is_error_redeclaration(uglify_result) && is_error_redeclaration(original_result)) ok = true;
+ }
// ignore difference in error message caused by `in`
if (!ok && errored && is_error_in(uglify_result) && is_error_in(original_result)) ok = true;
// ignore difference in error message caused by spread syntax