fix AST_Scope.clone()

fixes #2799
This commit is contained in:
alexlamsl 2018-01-17 14:42:54 +08:00
parent 79cfac77bd
commit 3b679cd5d2
3 changed files with 48 additions and 0 deletions

View File

@ -308,6 +308,13 @@ 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",
cname: "[integer/S] current index for mangling variables (used internally by the mangler)",
},
clone: function(deep) {
var node = this._clone(deep);
node.variables = this.variables.clone();
node.functions = this.functions.clone();
node.enclosed = this.enclosed.slice();
return node;
}
}, AST_Block);
var AST_Toplevel = DEFNODE("Toplevel", "globals", {

View File

@ -303,6 +303,13 @@ Dictionary.prototype = {
ret.push(f(this._values[i], i.substr(1)));
return ret;
},
clone: function() {
var ret = new Dictionary();
for (var i in this._values)
ret._values[i] = this._values[i];
ret._size = this._size;
return ret;
},
toObject: function() { return this._values }
};
Dictionary.fromObject = function(obj) {

View File

@ -5302,3 +5302,37 @@ issue_2774: {
}
expect_stdout: "undefined"
}
issue_2799: {
options = {
reduce_funcs: true,
reduce_vars: true,
unused: true,
}
input: {
console.log(function() {
return f;
function f(n) {
function g(i) {
return i && i + g(i - 1);
}
function h(j) {
return g(j);
}
return h(n);
}
}()(5));
}
expect: {
console.log(function() {
return function(n) {
return function(j) {
return function g(i) {
return i && i + g(i - 1);
}(j);
}(n);
}
}()(5));
}
expect_stdout: "15"
}