if (node instanceof AST_BlockScope
&& !(node instanceof AST_Scope)
&& !(node.variables && node.variables.all(function(def) {
- return !lvalues.has(def.name);
+ return !enclosed.has(def.name) && !lvalues.has(def.name);
}))) {
var replace = can_replace;
can_replace = false;
var read_toplevel = false;
var modify_toplevel = false;
// Locate symbols which may execute code outside of scanning range
+ var enclosed = new Dictionary();
var well_defined = true;
var lvalues = get_lvalues(candidate);
var lhs_local = is_lhs_local(lhs);
break;
}
}
+ node.enclosed.forEach(function(def) {
+ if (def.scope !== node) enclosed.set(def.name, true);
+ });
return true;
} else if (find_arguments && node instanceof AST_Sub) {
scope.each_argname(function(argname) {