From c810ecd0810c86dc9cd25b443c33aa998649e390 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Fri, 10 Apr 2020 23:36:17 +0100 Subject: improve handling of `eval` (#3776) closes #3768 --- lib/scope.js | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'lib/scope.js') 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; -- cgit v1.2.3