fix for variable names like `toString`
authorMihai Bazon <mihai@bazon.net>
Wed, 5 Sep 2012 11:31:05 +0000 (14:31 +0300)
committerMihai Bazon <mihai@bazon.net>
Wed, 5 Sep 2012 11:31:05 +0000 (14:31 +0300)
lib/scope.js

index 0518a49..adf3649 100644 (file)
@@ -258,9 +258,10 @@ AST_SymbolRef.DEFMETHOD("reference", function(symbol) {
 
 AST_Scope.DEFMETHOD("find_variable", function(name){
     if (name instanceof AST_Symbol) name = name.name;
-    return this.variables[name] ||
-        (this.name && this.name.name == name && this.name) ||
-        (this.parent_scope && this.parent_scope.find_variable(name));
+    return HOP(this.variables, name)
+        ? this.variables[name]
+        : ((this.name && this.name.name == name && this.name)
+           || (this.parent_scope && this.parent_scope.find_variable(name)));
 });
 
 AST_Scope.DEFMETHOD("def_function", function(symbol){
@@ -270,11 +271,10 @@ AST_Scope.DEFMETHOD("def_function", function(symbol){
 
 AST_Scope.DEFMETHOD("def_variable", function(symbol){
     symbol.global = !this.parent_scope;
-    var existing = this.variables[symbol.name];
-    if (!existing) {
+    if (!HOP(this.variables, symbol.name)) {
         this.variables[symbol.name] = symbol;
     } else {
-        symbol.uniq = existing;
+        symbol.uniq = this.variables[symbol.name];
     }
     symbol.scope = this;
 });