JSDOC/Scope.js
[gnome.introspection-doc-generator] / JSDOC / Scope.js
index 49d6cbd..5fe7403 100644 (file)
@@ -6,11 +6,11 @@
 * // FIXME - I need this to do next() without doccomments..
 */
 
-Identifier = imports['JSDOC/Identifier.js'].Identifier
+Identifier = imports.Identifier.Identifier
 XObject = imports.XObject.XObject; 
 
 
-function Scope(braceN, parent, startTokN, lastIdent)
+function Scope(braceN, parent, startTokN, lastIdent, token)
 {
     if (lastIdent.length) {
        //  println("NEW SCOPE: " + lastIdent);
@@ -23,9 +23,10 @@ function Scope(braceN, parent, startTokN, lastIdent)
     this.subScopes = [];
     this.hints = { };
     this.ident = lastIdent;
+    this.gid = Scope.gid++;
     
-    
-    //println("ADD SCOPE(" + this.id + ") TO "+ (parent ? this.parent.id : 'TOP') + "<BR/>");
+    print("ADD SCOPE(" + this.gid + ") TO "+ (parent ? this.parent.gid : 'TOP') + ' : ' + 
+        (token ? token.toString() : ''));
     
     if (parent) {
         this.parent.subScopes.push(this);
@@ -45,7 +46,7 @@ Scope.prototype = {
     braceN : -1,
     parent : false,
     subScopes : false,
-    identifiers : false, 
+    identifiers : false,  // map of identifiers to {Identifier} objects
     hints: false, 
     mungeM : true, 
     ident: '',
@@ -54,7 +55,7 @@ Scope.prototype = {
     protectedVars : {}, // only used by to parent..
     declareIdentifier : function(symbol, token) {
         
-        //println("ADD IDENT(" + this.id + "):<B>" + symbol+"</B><BR/>");
+        print("SCOPE : " + this.gid +  " : " + token.toString()+"");
         
         if (typeof(this.identifiers[symbol])== 'undefined') {
             
@@ -72,8 +73,17 @@ Scope.prototype = {
         this.addToParentScope(symbol);
         return this.identifiers[symbol];
     },
-    getIdentifier : function(symbol) {
-        return (typeof(this.identifiers[symbol])== 'undefined') ? false : this.identifiers[symbol];
+    getIdentifier : function(symbol, token) {
+        if (typeof(this.identifiers[symbol])== 'undefined') {
+            if (['String', 'Date'].indexOf(symbol)> -1) {
+                return false;
+            }
+            
+            print("SCOPE : " + this.gid +" = SYMBOL NOT FOUND?" + token.toString());
+            return false;
+        }
+         print("SCOPE : " + this.gid +" = FOUND:" + token.toString());
+        return this.identifiers[symbol];
     },
     
     addHint : function(varName, varType) {
@@ -120,7 +130,8 @@ Scope.prototype = {
         return result;
     },
     /** - we need to register short vairalbes so they never get munged into.. */
-    addToParentScope: function(ident) {
+    addToParentScope: function(ident) 
+    {
         if (ident.length > 2) {
             return;
         }
@@ -134,7 +145,8 @@ Scope.prototype = {
         }
         
     },
-    isProtectedVar: function(ident) {
+    isProtectedVar: function(ident)
+    {
         if (ident.length > 2) {
             return false;
         }
@@ -149,9 +161,14 @@ Scope.prototype = {
         return false;
     },
     
-    
+    /**
+     * set's all the munged values on the identifiers.
+     * 
+     * 
+     */
 
-    munge :function() {
+    munge :function() 
+    {
 
         if (!this.mungeM) {
             // Stop right here if this scope was flagged as unsafe for munging.
@@ -163,13 +180,18 @@ Scope.prototype = {
         }
         
 
-        //println("MUNGE: Scope:" + this.id+"</BR>");
+        
         
         var pickFromSet = 1;
 
         // Do not munge symbols in the global scope!
         if (this.parent) {
-
+            
+            var all = [];
+            for (var ii in this.identifiers) {
+                all.push(ii);
+            }
+            //print("MUNGE: " + all.join(', '));
             
             //println("MUNGE: Building FreeSyms:" + this.id+"</BR>");
             
@@ -185,30 +207,9 @@ Scope.prototype = {
                     freeSymbols.push(batch[i]);
                 }
             }
-            /*
-            var exsymbols  = function(n) {
-                if (sy.indexOf(n) > -1) {
-                    return;
-                }
-                freeSymbols.push(n);
-            }
-            */
-            addSyms(JSDOC.Scope.ones); 
-            
-            //if (freeSymbols.length == 0) {
-            //    pickFromSet = 2;
-               // JSDOC.Scope.twos.filter(exsymbols);
-                
-            //}
-            //if (freeSymbols.length == 0) {
-            //    pickFromSet = 3;
-            //    throw "disabled  threes!"
-            //    JSDOC.Scope.threes.filter(exsymbols);
-            //    
-            //}
-            //if (freeSymbols.length == 0) {
-            //    throw  "The Compressor ran out of symbols. Aborting...???? ";
-           // }
+             
+            addSyms(Scope.ones); 
+             
             var repsym = '';
             //println(freeSymbols.toSource());
             
@@ -219,18 +220,21 @@ Scope.prototype = {
                 
                 
                 if (!this.identifiers[i].toMunge) {
+                    //print("SKIP toMunge==false : " + i)
                     continue;
                 }
                 
                 if (this.isProtectedVar(i)) {
+                    //print("SKIP PROTECTED: " + i)
                     continue; // 
                 }
                 
                 
                 
-                if (this.identifiers[i].constructor != JSDOC.Identifier) {
-                    continue;
-                }
+                //if (this.identifiers[i].constructor !=  Identifier) {
+                //    print("SKIP NOT IDENTIFIER : " + i)
+                //    continue;
+               // }
                // println("IDENT:" +i+'</BR>');
                 
                 if (!repsym.length) {
@@ -247,24 +251,25 @@ Scope.prototype = {
                 //println([     repsym,mungedValue ]);
                 
                 if (this.mungeM && repsym.length < mungedValue.length) {
-                    //println("REPLACE:"+ mungedValue +" with " + repsym + "<BR>");
+                    //print("REPLACE:"+ mungedValue +" with " + repsym );    
                     mungedValue = repsym;
                     repsym = '';
                 }
+                
                 identifier.mungedValue =  mungedValue;
             }
             //println("MUNGE: Done " + this.id+"</BR>");
         }
         this.munged = true;
         //println("Doing sub scopes");
-        for (var i = 0; i < this.subScopes.length; i++) {
-            var ss = this.subScopes[i];
+        for (var j = 0; j < this.subScopes.length; j++) {
+            var ss = this.subScopes[j];
             ss.munge();
         }
     }
  
 
-});
+};
 
 
 
@@ -318,4 +323,4 @@ XObject.extend(Scope, {
 })
 // init the scope constants..
 Scope.init();
\ No newline at end of file
+Scope.gid = 0;
\ No newline at end of file