aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/ast.js4
-rw-r--r--lib/scope.js10
2 files changed, 12 insertions, 2 deletions
diff --git a/lib/ast.js b/lib/ast.js
index 3e6e1771..0b0273c8 100644
--- a/lib/ast.js
+++ b/lib/ast.js
@@ -698,9 +698,9 @@ function TreeWalker(callback) {
TreeWalker.prototype = {
_visit: function(node, descend) {
this.stack.push(node);
- var ret = this.visit(node, function(){
+ var ret = this.visit(node, descend ? function(){
descend.call(node);
- });
+ } : noop);
if (!ret && descend) {
descend.call(node);
}
diff --git a/lib/scope.js b/lib/scope.js
index 3165186b..1f564431 100644
--- a/lib/scope.js
+++ b/lib/scope.js
@@ -209,6 +209,7 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(){
node.thedef = sym;
}
node.reference();
+ return true;
}
});
self.walk(tw);
@@ -225,6 +226,10 @@ AST_Scope.DEFMETHOD("init_scope_vars", function(){
this.cname = -1; // the current index for mangling functions/variables
});
+AST_Scope.DEFMETHOD("strict", function(){
+ return this.has_directive("use strict");
+});
+
AST_Lambda.DEFMETHOD("init_scope_vars", function(){
AST_Scope.prototype.init_scope_vars.call(this);
this.uses_arguments = false;
@@ -298,6 +303,11 @@ AST_Scope.DEFMETHOD("next_mangled", function(){
}
});
+AST_Scope.DEFMETHOD("references", function(sym){
+ if (sym instanceof AST_Symbol) sym = sym.definition();
+ return this.enclosed.indexOf(sym) < 0 ? null : sym;
+});
+
AST_Symbol.DEFMETHOD("unmangleable", function(){
return this.definition().unmangleable();
});