JSDOC/ScopeParser.vala
[gnome.introspection-doc-generator] / JSDOC / TokenStream.vala
index cdb5cb4..5c9bee8 100644 (file)
@@ -74,7 +74,7 @@ namespace JSDOC {
                    i += (n < 0) ? -1 : 1;
                }
 
-               return new Token("", "VOID", "STREAM_ERROR"); // because null isn't an object and caller always expects an object
+              // return new Token("", "VOID", "STREAM_ERROR"); // because null isn't an object and caller always expects an object
                    
                }
 
@@ -94,7 +94,7 @@ namespace JSDOC {
                        
                    }
                    // should not get here!
-                   return -1;
+                  // return -1;
 
                }
 
@@ -137,7 +137,7 @@ namespace JSDOC {
                        i += (n < 0) ? -1 : 1;
                    }
                // should never get here..
-                   return  new Token("", "VOID", "END_OF_STREAM");; // because null isn't an object and caller always expects an object;
+               //    return  new Token("", "VOID", "END_OF_STREAM");; // because null isn't an object and caller always expects an object;
                    
                }
 
@@ -210,17 +210,19 @@ namespace JSDOC {
                 * @param start {String}  token name or data (eg. '{'
                 * @param stop {String} (Optional) token name or data (eg. '}'
                 */
-               public Gee.ArrayList<Token> balance (string start, string stop = "") {
+               public Gee.ArrayList<Token> balance (string start, string stop = "") throws TokenStreamError 
+               {
                    
                    // accepts names or "{" etc..
                    
                    start = Lang.punc(start) == null ? start : Lang.punc(start);
                    
                    if (stop=="") {
-                               stop = "" + Lang.matching(start);
+                               var newstop = Lang.matching(start);
+                               stop = newstop;
                        }
                        if (stop == null) {
-                               throw new JSDOC.TokenStreamError("balance called with invalid start/stop : %s",start);
+                               throw new TokenStreamError.ArgumentError("balance called with invalid start/stop : %s",start);
                        }
                    
                    var depth = 0;
@@ -228,8 +230,9 @@ namespace JSDOC {
                    var started = false;
                    //Seed.print("START:" + start);
                    //Seed.print("STOP:" + stop);
+                   Token token;
                    
-                   while ((token = this.look())) {
+                   while (null != (token = this.look(1,false))) {
                        if (token.is(start)) {
                      //      Seed.print("balance: START : " + depth + " " + token.data);
                            depth++;
@@ -237,7 +240,7 @@ namespace JSDOC {
                        }
                        
                        if (started) {
-                           got.push(token);
+                           got.add(token);
                        }
                        
                        if (token.is(stop)) {
@@ -247,40 +250,50 @@ namespace JSDOC {
                                        return got;
                                }
                        }
-                       if (!this.next()) {
+                       if (null == this.next()) {
                                break;
                        }
                    }
                    return new Gee.ArrayList<Token>();
                }
 
-               public Token getMatchingToken(string start, string stop) {
+               public Token? getMatchingToken(string start, string stop) 
+               {
                    var depth = 0;
                    var cursor = this.cursor;
                    
-                   if (!start) {
-                       start = Lang.matching(stop);
+                   if (start.length < 1) {
+                           var ns = Lang.matching(stop);
+                       start = ns;
                        depth = 1;
                    }
-                   if (!stop) stop = Lang.matching(start);
+                   if (stop.length < 1) {
+                               var ns = Lang.matching(start);
+                               stop = ns;
+                       }
+                       Token token;
                    
-                   while ((token = this.tokens[cursor])) {
+                   while (null != (token = this.tokens[cursor])) {
                        if (token.is(start)) {
                            depth++;
                        }
                        
-                       if (token.is(stop) && cursor) {
+                       if (token.is(stop) && cursor != 0) {
                            depth--;
-                           if (depth == 0) return this.tokens[cursor];
+                           if (depth == 0) {
+                                       return this.tokens[cursor];
+                               }
                        }
                        cursor++;
                    }
-                   return false;
+                   return null;
                }
-
-               public Gee.ArrayList<Token> insertAhead(Token token) {
+               /*
+               public Gee.ArrayList<Token> insertAhead(Token token) 
+               {
                    this.tokens.splice(this.cursor+1, 0, token); // fixme...
                }
+               */
                 
                public Gee.ArrayList<Token> remaining() {
                    var ret = new Gee.ArrayList<Token>();
@@ -289,7 +302,10 @@ namespace JSDOC {
                        if (tok.is("VOID")) {
                            return ret;
                        }
-                       ret.push(this.next(1));
+                       var nt = this.next();
+                       if (nt != null) {
+                               ret.add(nt);
+                       }
                    }
                }