@@ -313,9 +313,9 @@ var AST_Scope = DEFNODE("Scope", "variables functions uses_with uses_eval parent
|
|||||||
enclosed: "[SymbolDef*/S] a list of all symbol definitions that are accessed from this scope or any subscopes",
|
enclosed: "[SymbolDef*/S] a list of all symbol definitions that are accessed from this scope or any subscopes",
|
||||||
cname: "[integer/S] current index for mangling variables (used internally by the mangler)",
|
cname: "[integer/S] current index for mangling variables (used internally by the mangler)",
|
||||||
},
|
},
|
||||||
get_defun_scope: function () {
|
get_defun_scope: function() {
|
||||||
var self = this;
|
var self = this;
|
||||||
while (self.is_block_scope() && self.parent_scope) {
|
while (self.is_block_scope()) {
|
||||||
self = self.parent_scope;
|
self = self.parent_scope;
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
|
|||||||
@@ -4645,8 +4645,10 @@ merge(Compressor.prototype, {
|
|||||||
var init;
|
var init;
|
||||||
if (fixed instanceof AST_This) {
|
if (fixed instanceof AST_This) {
|
||||||
if (!(d.orig[0] instanceof AST_SymbolFunarg)
|
if (!(d.orig[0] instanceof AST_SymbolFunarg)
|
||||||
&& all(d.references, function(ref) {
|
&& all(d.references, d.scope.is_block_scope() ? function(ref) {
|
||||||
return d.scope === ref.scope;
|
return d.scope === ref.scope;
|
||||||
|
} : function(ref) {
|
||||||
|
return d.scope === ref.scope.get_defun_scope();
|
||||||
})) {
|
})) {
|
||||||
init = fixed;
|
init = fixed;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -183,11 +183,7 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options){
|
|||||||
// scope when we encounter the AST_Defun node (which is
|
// scope when we encounter the AST_Defun node (which is
|
||||||
// instanceof AST_Scope) but we get to the symbol a bit
|
// instanceof AST_Scope) but we get to the symbol a bit
|
||||||
// later.
|
// later.
|
||||||
var parent_lambda = defun.parent_scope;
|
mark_export((node.scope = defun.parent_scope.get_defun_scope()).def_function(node), 1);
|
||||||
while (parent_lambda.is_block_scope()) {
|
|
||||||
parent_lambda = parent_lambda.parent_scope;
|
|
||||||
}
|
|
||||||
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), 1);
|
mark_export(defun.def_variable(node), 1);
|
||||||
|
|||||||
@@ -4887,3 +4887,21 @@ issue_2416: {
|
|||||||
expect_stdout: "Foo"
|
expect_stdout: "Foo"
|
||||||
node_version: ">=6"
|
node_version: ">=6"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
issue_2455: {
|
||||||
|
options = {
|
||||||
|
reduce_vars: true,
|
||||||
|
unused: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
function foo() {
|
||||||
|
var that = this;
|
||||||
|
for (;;) that.bar();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
function foo() {
|
||||||
|
for (;;) this.bar();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user