diff options
Diffstat (limited to 'lib/scope.js')
-rw-r--r-- | lib/scope.js | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/lib/scope.js b/lib/scope.js index 35d97e12..ad33c5e0 100644 --- a/lib/scope.js +++ b/lib/scope.js @@ -162,17 +162,22 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options) { } if (node instanceof AST_SymbolRef) { var name = node.name; - if (name == "eval" && tw.parent() instanceof AST_Call) { - for (var s = node.scope; s && !s.uses_eval; s = s.parent_scope) { - s.uses_eval = true; - } - } var sym = node.scope.find_variable(name); if (!sym) { sym = self.def_global(node); } else if (sym.scope instanceof AST_Lambda && name == "arguments") { sym.scope.uses_arguments = true; } + if (name == "eval") { + var parent = tw.parent(); + if (parent.TYPE == "Call" && parent.expression === node) { + for (var s = node.scope; s && !s.uses_eval; s = s.parent_scope) { + s.uses_eval = true; + } + } else if (sym.undeclared) { + self.uses_eval = true; + } + } node.thedef = sym; node.reference(options); return true; |