@@ -5605,21 +5605,25 @@ merge(Compressor.prototype, {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function mark(sym, read) {
|
function mark(sym, read) {
|
||||||
if (in_try) push();
|
var def = sym.definition(), ldef, seg = segment;
|
||||||
var def = sym.definition(), ldef;
|
if (in_try) {
|
||||||
|
push();
|
||||||
|
seg = segment;
|
||||||
|
pop();
|
||||||
|
}
|
||||||
if (def.id in references) {
|
if (def.id in references) {
|
||||||
var refs = references[def.id];
|
var refs = references[def.id];
|
||||||
if (!refs) return;
|
if (!refs) return;
|
||||||
if (refs.start.block !== segment.block) return references[def.id] = false;
|
if (refs.start.block !== seg.block) return references[def.id] = false;
|
||||||
refs.push(sym);
|
refs.push(sym);
|
||||||
refs.end = segment;
|
refs.end = seg;
|
||||||
if (def.id in prev) {
|
if (def.id in prev) {
|
||||||
last[prev[def.id]] = null;
|
last[prev[def.id]] = null;
|
||||||
} else if (!read) {
|
} else if (!read) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else if ((ldef = self.variables.get(def.name)) !== def) {
|
} else if ((ldef = self.variables.get(def.name)) !== def) {
|
||||||
if (ldef && root === segment) references[ldef.id] = false;
|
if (ldef && root === seg) references[ldef.id] = false;
|
||||||
return references[def.id] = false;
|
return references[def.id] = false;
|
||||||
} else if (compressor.exposed(def) || NO_MERGE[sym.name]) {
|
} else if (compressor.exposed(def) || NO_MERGE[sym.name]) {
|
||||||
return references[def.id] = false;
|
return references[def.id] = false;
|
||||||
@@ -5628,13 +5632,13 @@ merge(Compressor.prototype, {
|
|||||||
refs.push(sym);
|
refs.push(sym);
|
||||||
references[def.id] = refs;
|
references[def.id] = refs;
|
||||||
if (!read) {
|
if (!read) {
|
||||||
refs.start = segment;
|
refs.start = seg;
|
||||||
return first.push({
|
return first.push({
|
||||||
index: index++,
|
index: index++,
|
||||||
definition: def,
|
definition: def,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (segment.block !== self) return references[def.id] = false;
|
if (seg.block !== self) return references[def.id] = false;
|
||||||
refs.start = root;
|
refs.start = root;
|
||||||
}
|
}
|
||||||
prev[def.id] = last.length;
|
prev[def.id] = last.length;
|
||||||
|
|||||||
@@ -1504,14 +1504,14 @@ function parse($TEXT, options) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function export_default_decl() {
|
function export_default_decl() {
|
||||||
switch (S.token.value) {
|
if (is("name", "async")) {
|
||||||
case "async":
|
|
||||||
if (!is_token(peek(), "keyword", "function")) return;
|
if (!is_token(peek(), "keyword", "function")) return;
|
||||||
next();
|
next();
|
||||||
next();
|
next();
|
||||||
if (!is("operator", "*")) return maybe_named(AST_AsyncDefun, function_(AST_AsyncFunction));
|
if (!is("operator", "*")) return maybe_named(AST_AsyncDefun, function_(AST_AsyncFunction));
|
||||||
next();
|
next();
|
||||||
return maybe_named(AST_AsyncGeneratorDefun, function_(AST_AsyncGeneratorFunction));
|
return maybe_named(AST_AsyncGeneratorDefun, function_(AST_AsyncGeneratorFunction));
|
||||||
|
} else if (is("keyword")) switch (S.token.value) {
|
||||||
case "class":
|
case "class":
|
||||||
next();
|
next();
|
||||||
return maybe_named(AST_DefClass, class_(AST_ClassExpression));
|
return maybe_named(AST_DefClass, class_(AST_ClassExpression));
|
||||||
@@ -1524,13 +1524,13 @@ function parse($TEXT, options) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var export_decl = embed_tokens(function() {
|
var export_decl = embed_tokens(function() {
|
||||||
switch (S.token.value) {
|
if (is("name", "async")) {
|
||||||
case "async":
|
|
||||||
next();
|
next();
|
||||||
expect_token("keyword", "function");
|
expect_token("keyword", "function");
|
||||||
if (!is("operator", "*")) return function_(AST_AsyncDefun);
|
if (!is("operator", "*")) return function_(AST_AsyncDefun);
|
||||||
next();
|
next();
|
||||||
return function_(AST_AsyncGeneratorDefun);
|
return function_(AST_AsyncGeneratorDefun);
|
||||||
|
} else if (is("keyword")) switch (S.token.value) {
|
||||||
case "class":
|
case "class":
|
||||||
next();
|
next();
|
||||||
return class_(AST_DefClass);
|
return class_(AST_DefClass);
|
||||||
|
|||||||
@@ -457,3 +457,10 @@ issue_4742_unused_2: {
|
|||||||
a = "bar";
|
a = "bar";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
issue_4761: {
|
||||||
|
input: {
|
||||||
|
export default "function" == 42;
|
||||||
|
}
|
||||||
|
expect_exact: 'export default"function"==42;'
|
||||||
|
}
|
||||||
|
|||||||
@@ -3281,3 +3281,23 @@ issue_4759: {
|
|||||||
}
|
}
|
||||||
expect_stdout: "undefined"
|
expect_stdout: "undefined"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
issue_4761: {
|
||||||
|
options = {
|
||||||
|
merge_vars: true,
|
||||||
|
toplevel: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
var a = "FAIL", b;
|
||||||
|
try {
|
||||||
|
!a && --a && (b = 0)[console] || console.log(b);
|
||||||
|
} catch (e) {}
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
var a = "FAIL", b;
|
||||||
|
try {
|
||||||
|
!a && --a && (b = 0)[console] || console.log(b);
|
||||||
|
} catch (e) {}
|
||||||
|
}
|
||||||
|
expect_stdout: "undefined"
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user