JSDOC/ScopeParser.js
[gnome.introspection-doc-generator] / JSDOC / ScopeParser.js
index a69d15d..ead73bc 100644 (file)
@@ -223,7 +223,12 @@ ScopeParser.prototype = {
         
         var isObjectLitAr = [ false ];
         var isInObjectLitAr;
-        this.scopes.push(scope);
+        thisScope = scope;
+        if (thisScope) {
+            this.scopes.push(scope);
+        } else {
+            thisScope = this.scopes[this.scopes.length-1]
+        }
        
         //var scopeIndent = ''; 
         //this.scopes.forEach(function() {
@@ -253,7 +258,7 @@ ScopeParser.prototype = {
                     while (true) {
                         token = this.ts.nextTok();
                         //!this.debug|| print( token.toString());
-                        print('SCOPE-VAR:' + token.toString());
+                        print('SCOPE-VAR-VAL:' + token.toString());
                         if (!token) { // can return false at EOF!
                             break;
                         }
@@ -272,10 +277,10 @@ ScopeParser.prototype = {
                         
 
                         if (this.mode == "BUILDING_SYMBOL_TREE") {
-                            identifier = scope.getIdentifier(token.data) ;
+                            identifier = thisScope.getIdentifier(token.data) ;
                             
                             if (identifier == false) {
-                                scope.declareIdentifier(token.data, token);
+                                thisScope.declareIdentifier(token.data, token);
                             } else {
                                 token.identifier = identifier;
                                 this.warn("(SCOPE) The variable " + token.data  + ' (line:' + token.line + ")  has already been declared in the same scope...");
@@ -343,7 +348,7 @@ ScopeParser.prototype = {
                             // key value..
                             
                             this.ts = new TokenStream(token.props[prop].val);
-                            this.parseScope(scope);
+                            this.parseScope(false);
                             
                         }
                         this.ts = curTS;
@@ -357,7 +362,7 @@ ScopeParser.prototype = {
                     var _this = this;
                     token.items.forEach(function(expr) {
                           _this.ts = new TokenStream(expr);
-                          _this.parseExpression(scope)
+                          _this.parseExpression()
                     });
                     this.ts = curTS;
                     //print("NOT PROPS"); Seed.quit();
@@ -400,7 +405,7 @@ ScopeParser.prototype = {
                         // object member. As a consequence, the only thing we can
                         // do is turn the obfuscation off for the highest scope
                         // containing the 'with' block.
-                        this.protectScopeFromObfuscation(scope);
+                        this.protectScopeFromObfuscation(thisScope);
                         this.warn("Using 'with' is not recommended." + (this.munge ? " Moreover, using 'with' reduces the level of compression!" : ""), true);
                     }
                     break;
@@ -492,7 +497,7 @@ ScopeParser.prototype = {
                         //println("GOT IDENT: <B>" + symbol + "</B><BR/>");
                              
                             //println("GOT IDENT (2): <B>" + symbol + "</B><BR/>");
-                        identifier = this.getIdentifier(symbol, scope);
+                        identifier = this.getIdentifier(symbol, thisScope);
                         
                         if (identifier == false) {
 // BUG!find out where builtin is defined...
@@ -532,7 +537,7 @@ ScopeParser.prototype = {
                                 var _t = this;
                                 this.ts.look(-1).data.replace(/eval:var:([a-z_]+)/ig, function(m, a) {
                                     
-                                    var hi = _t.getIdentifier(a, scope);
+                                    var hi = _t.getIdentifier(a, thisScope);
                                    // println("PROTECT "+a+" from munge" + (hi ? "FOUND" : "MISSING"));
                                     if (hi) {
                                      //   println("PROTECT "+a+" from munge");
@@ -545,7 +550,7 @@ ScopeParser.prototype = {
                             } else {
                                 
                             
-                                this.protectScopeFromObfuscation(scope);
+                                this.protectScopeFromObfuscation(thisScope);
                                 this.warn("Using 'eval' is not recommended. (use  eval:var:noreplace in comments to optimize) " + (this.munge ? " Moreover, using 'eval' reduces the level of compression!" : ""), true);
                             }
 
@@ -694,61 +699,33 @@ ScopeParser.prototype = {
                 case 'STRN': // used for object lit detection..
                     if (this.mode == 'BUILDING_SYMBOL_TREE')    
                         print("EXPR-STR:" + JSON.stringify(token, null, 4));
-                    if (this.ts.lookTok(-1).data == "{" && this.ts.lookTok(1).data == ":" ) {
-                        // then we are in an object lit.. -> we need to flag the brace as such...
-                        isObjectLitAr.pop();
-                        isObjectLitAr.push(true);
-                        //print(">>>>> EXP PUSH(true)");
-                    }
-                    
-                    
+               
                      
-                    isInObjectLitAr = isObjectLitAr[isObjectLitAr.length-1];
-                    if (isInObjectLitAr &&  this.ts.lookTok(1).data == ":"  &&
-                        ( this.ts.lookTok(-1).data == "{"  ||  this.ts.lookTok(-1).data == "," )) {
-                        // see if we can replace..
-                        // remove the quotes..
-                        var str = token.data.substring(1,token.data.length-1);
-                        if (/^[a-z_]+$/i.test(str) && ScopeParser.idents.indexOf(str) < 0) {
-                            token.outData = str;
-                        }
-                        
-                         
-                        
-                    }
-                    
                     break;
                 
                       
              
                 case 'NAME':
-                    if (this.mode == 'BUILDING_SYMBOL_TREE') 
+                    if (this.mode == 'BUILDING_SYMBOL_TREE') {
+                        
                         print("EXPR-NAME:" + JSON.stringify(token, null, 4));
+                    } else {
+                        print("EXPR-NAME:" + token.toString());
+                       }
                     symbol = token.data;
                     //print("in NAME = " + token.toString());
                     //print("in NAME 0: " + this.ts.look(0).toString());
                     //print("in NAME 2: " + this.ts.lookTok(2).toString());
-                    if (this.ts.look(0).data == "{"  && this.ts.lookTok(2).data == ":") {
-                        // then we are in an object lit.. -> we need to flag the brace as such...
-                        isObjectLitAr.pop();
-                        isObjectLitAr.push(true);
-                         //print(">>>>> EXP  PUSH(true)");
-                        break;
-                    }
-                    
-                    isInObjectLitAr = isObjectLitAr[isObjectLitAr.length-1];
-                    //print ("isInObjectLitAr : " + isInObjectLitAr + ' ' + token.toString());
                     
-                    if (isInObjectLitAr && this.ts.lookTok(0).data == "," && this.ts.lookTok(2).data == ":") {
-                        break;
-                    }
-                    //print(this.ts.lookTok(0).data);
+                    print(this.ts.lookTok(0).data);
+                    // prefixed with '.'
                     if (this.ts.lookTok(0).data == ".") {
                         //skip '.'
                         break;
                     }
                     
-                     if (this.mode == 'PASS2_SYMBOL_TREE') {
+                    
+                    if (this.mode == 'PASS2_SYMBOL_TREE') {
 
                         identifier = this.getIdentifier(symbol, currentScope);
                         //println("<B>??</B>");
@@ -761,8 +738,10 @@ ScopeParser.prototype = {
                                 // any conflict with other munged symbols.
                                 this.globalScope.declareIdentifier(symbol, token);
                                 this.warn("Found an undeclared symbol: " + symbol + ' (line:' + token.line + ')', true);
+                                print("Found an undeclared symbol: " + symbol + ' (line:' + token.line + ')');
+                                throw "OOPS";
                             } else {
-                                //println("undeclared")
+                                print("undeclared:" + token.toString())
                             }