Update Packer code to working copy
[gnome.introspection-doc-generator] / JSDOC / TokenReader.js
index e367849..21db9f0 100644 (file)
@@ -14,17 +14,24 @@ Lang    = imports.Lang.Lang;
 TokenReader = XObject.define(
     function(o) {
         
-        this.keepDocs = true;
-        this.keepWhite = false;
-        this.keepComments = false;
-        this.sepIdents = false; // seperate '.' in identifiers..
         XObject.extend(this, o || {});
         
     },
     Object,
     {
+        /** @cfg {Boolean} collapseWhite merge multiple whitespace/comments into a single token **/
         collapseWhite : false, // only reduces white space...
-
+        /** @cfg {Boolean} keepDocs keep JSDOC comments **/
+        keepDocs : true,
+        /** @cfg {Boolean} keepWhite keep White space **/
+        keepWhite : false,
+        /** @cfg {Boolean} keepComments  keep all comments **/
+        keepComments : false,
+        /** @cfg {Boolean} sepIdents seperate identifiers (eg. a.b.c into ['a', '.', 'b', '.', 'c'] ) **/
+        sepIdents : false,
+        /** @cfg {String} filename name of file being parsed. **/
+        filename : '',
+        
         /**
          * tokenize a stream
          * @return {Array} of tokens
@@ -40,8 +47,10 @@ TokenReader = XObject.define(
         tokenize : function(/**JSDOC.TextStream*/stream) {
             this.line =1;
             var tokens = [];
-            /**@ignore*/ tokens.last    = function() { return tokens[tokens.length-1]; }
-            /**@ignore*/ tokens.lastSym = function() {
+            /**@ignore*/ 
+            tokens.last    = function() { return tokens[tokens.length-1]; }
+            /**@ignore*/ 
+            tokens.lastSym = function() {
                 for (var i = tokens.length-1; i >= 0; i--) {
                     if (!(tokens[i].is("WHIT") || tokens[i].is("COMM"))) return tokens[i];
                 }
@@ -80,29 +89,36 @@ TokenReader = XObject.define(
             if (found === "") {
                 return false;
             }
-            else {
-                var name;
-                if ((name = Lang.keyword(found))) {
-                    tokens.push(new Token(found, "KEYW", name, this.line));
-                    return true;
-                }
-                if (!this.sepIdents || found.indexOf('.') < 0 ) {
-                    tokens.push(new Token(found, "NAME", "NAME", this.line));
-                    return true;
+            
+            var name;
+            if ((name = Lang.keyword(found))) {
+                if (found == 'return' && tokens.lastSym().data == ')') {
+                    throw {
+                        name : "ArgumentError", 
+                        message: "\n" + this.filename + ':' + this.line + " Error - return found after )"
+                    }   
                 }
-                var n = found.split('.');
-                var p = false;
-                var _this = this;
-                n.forEach(function(nm) {
-                    if (p) {
-                        tokens.push(new Token('.', "PUNC", "DOT", _this.line));
-                    }
-                    p=true;
-                    tokens.push(new Token(nm, "NAME", "NAME", _this.line));
-                });
-                return true;
                 
+                tokens.push(new Token(found, "KEYW", name, this.line));
+                return true;
+            }
+            if (!this.sepIdents || found.indexOf('.') < 0 ) {
+                tokens.push(new Token(found, "NAME", "NAME", this.line));
+                return true;
             }
+            var n = found.split('.');
+            var p = false;
+            var _this = this;
+            n.forEach(function(nm) {
+                if (p) {
+                    tokens.push(new Token('.', "PUNC", "DOT", _this.line));
+                }
+                p=true;
+                tokens.push(new Token(nm, "NAME", "NAME", _this.line));
+            });
+            return true;
+                
+
         },
 
         /**
@@ -115,13 +131,23 @@ TokenReader = XObject.define(
                 found += stream.next();
             }
             
+            
             if (found === "") {
                 return false;
             }
-            else {
-                tokens.push(new Token(found, "PUNC", Lang.punc(found), this.line));
-                return true;
+            
+            if ((found == '}' || found == ']') && tokens.lastSym().data == ',') {
+                //print("Error - comma found before " + found);
+                //print(JSON.stringify(tokens.lastSym(), null,4));
+                throw {
+                    name : "ArgumentError", 
+                    message: "\n" + this.filename + ':' + this.line + " Error - comma found before " + found
+                }   
             }
+            
+            tokens.push(new Token(found, "PUNC", Lang.punc(found), this.line));
+            return true;
+            
         },
 
         /**