X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=JSDOC%2FTokenReader.js;h=19b9d1bfda3daa276aeba44a92d812dd93023049;hb=bf51508caec59dd942e6b92b8b344f249e163235;hp=f9aa83109eaf78eef1506976044c429d9a596a54;hpb=05141d13558c377a970de1e5771865a567ac2526;p=gnome.introspection-doc-generator diff --git a/JSDOC/TokenReader.js b/JSDOC/TokenReader.js index f9aa831..19b9d1b 100644 --- a/JSDOC/TokenReader.js +++ b/JSDOC/TokenReader.js @@ -31,7 +31,8 @@ TokenReader = XObject.define( sepIdents : false, /** @cfg {String} filename name of file being parsed. **/ filename : '', - + /** @config {Boolean} ignoreBadGrammer do not throw errors if we find stuff that might break compression **/ + ignoreBadGrammer : false, /** * tokenize a stream * @return {Array} of tokens @@ -41,9 +42,6 @@ TokenReader = XObject.define( * tr.tokenize(ts) * */ - - - tokenize : function(/**JSDOC.TextStream*/stream) { this.line =1; var tokens = []; @@ -77,6 +75,56 @@ TokenReader = XObject.define( return tokens; }, + /** + * findPuncToken - find the id of a token (previous to current) + * need to back check syntax.. + * + * @arg {Array} tokens the array of tokens. + * @arg {String} token data (eg. '(') + * @arg {Number} offset where to start reading from + * @return {Number} position of token + */ + findPuncToken : function(tokens, data, n) { + n = n || tokens.length -1; + var stack = 0; + while (n > -1) { + + if (!stack && tokens[n].data == data) { + return n; + } + + if (tokens[n].data == ')' || tokens[n].data == '}') { + stack++; + n--; + continue; + } + if (stack && (tokens[n].data == '{' || tokens[n].data == '(')) { + stack--; + n--; + continue; + } + + + n--; + } + return -1; + }, + /** + * lastSym - find the last token symbol + * need to back check syntax.. + * + * @arg {Array} tokens the array of tokens. + * @arg {Number} offset where to start.. + * @return {Token} the token + */ + lastSym : function(tokens, n) { + for (var i = n-1; i >= 0; i--) { + if (!(tokens[i].is("WHIT") || tokens[i].is("COMM"))) return tokens[i]; + } + }, + + + /** @returns {Boolean} Was the token found? */ @@ -93,11 +141,24 @@ TokenReader = XObject.define( 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 )" - } - + //Seed.print('@' + tokens.length); + var n = this.findPuncToken(tokens, ')'); + //Seed.print(')@' + n); + n = this.findPuncToken(tokens, '(', n-1); + //Seed.print('(@' + n); + + var lt = this.lastSym(tokens, n); + Seed.print(JSON.stringify(lt)); + if (lt.type != 'KEYW' || ['IF', 'WHILE'].indexOf(lt.name) < -1) { + throw { + name : "ArgumentError", + message: "\n" + this.filename + ':' + this.line + " Error - return found after )" + } + } + + + + } tokens.push(new Token(found, "KEYW", name, this.line)); return true;