can_replace = replace;
return signal_abort(node);
}
+ // Scan but don't replace inside block scope with colliding variable
+ if (node instanceof AST_BlockScope
+ && !(node instanceof AST_Scope)
+ && !(node.variables && node.variables.all(function(def) {
+ return !lvalues.has(def.name);
+ }))) {
+ var replace = can_replace;
+ can_replace = false;
+ if (!handle_custom_scan_order(node, scanner)) descend(node, scanner);
+ can_replace = replace;
+ return signal_abort(node);
+ }
return handle_custom_scan_order(node, scanner);
}, signal_abort);
var multi_replacer = new TreeTransformer(function(node) {
}
// Skip (non-executed) functions
if (node instanceof AST_Scope) return node;
- // Stop upon collision with block-scoped variables
- if (!(node.variables && node.variables.all(function(def) {
- return !lvalues.has(def.name);
- }))) {
- abort = true;
- return node;
- }
// Scan object only in a for-in/of statement
if (node instanceof AST_ForEnumeration) {
node.object = node.object.transform(tt);