X-Git-Url: http://git.roojs.org/?p=gnome.introspection-doc-generator;a=blobdiff_plain;f=JSDOC%2FWalker2.js;h=e525fab3607b57b9cbf7f6889e4e5c3f61ab99da;hp=0bdaf7ab089cb91444a0630a9cdc150bd51891e3;hb=c8377bbd183de807c4b8924f660c7a09cf842312;hpb=e3277a2e6c2f9187df1dc23d83c4498bd6282629 diff --git a/JSDOC/Walker2.js b/JSDOC/Walker2.js index 0bdaf7a..e525fab 100644 --- a/JSDOC/Walker2.js +++ b/JSDOC/Walker2.js @@ -4,7 +4,7 @@ XObject = imports.XObject.XObject; Scope = imports.Scope.Scope; DocComment = imports.DocComment.DocComment; Symbol = imports.Symbol.Symbol; -Parser = imports.Parser.Parser; + /** * Scope stuff @@ -71,6 +71,7 @@ Walker2 = XObject.define( this.mode = 'BUILDING_SYMBOL_TREE'; this.parseScope(this.globalScope); + }, @@ -148,37 +149,37 @@ Walker2 = XObject.define( var scopeLen = this.scopes.length; if (this.ts.cursor < 1) { - this.ts.cursor--; // hopeflly this kludge will work - } - + // this.ts.cursor--; // hopeflly this kludge will work + } + //print(JSON.stringify(this.ts, null, 4)); Seed.quit(); - while (false != (token = this.ts.next())) { + while (null != (token = this.ts.next())) { //print("TOK"+ token.toString()); // this.timerPrint("parseScope AFTER lookT: " + token.toString()); - if (token.is('WHIT')) { + if (token.is('COMM')) { - if (!token._isDoc) { + if (token.name != 'JSDOC') { + //print("Walker2 : spce is not JSDOC"); continue; //skip. } if (this.currentDoc) { // add it to the current scope???? this.addSymbol('', true); - - + //print ( "Unconsumed Doc: " + token.toString()) //throw "Unconsumed Doc (TOKwhitespace): " + this.currentDoc.toSource(); } - + // print ( "NEW COMMENT: " + token.toString()) var newDoc = new DocComment(token.data); // it's a scope changer.. if (newDoc.getTag("scope").length) { - //print(newDoc.getTag("scope").toSource()); + //print("Walker2 : doctag changes scope"); //throw "done"; scope.ident = '$private$|' + newDoc.getTag("scope")[0].desc; continue; @@ -188,6 +189,7 @@ Walker2 = XObject.define( if (newDoc.getTag("scopeAlias").length) { //print(newDoc.getTag("scopeAlias").toSource()); // @scopeAlias a=b + //print("Walker2 : doctag changes scope (alias)"); var sal = newDoc.getTag("scopeAlias")[0].desc.split("="); aliases[sal[0]] = sal[1]; @@ -197,6 +199,7 @@ Walker2 = XObject.define( /// got a doc comment.. //token.data might be this.??? (not sure though) + //print("Walker2 : setting currentDoc"); this.currentDoc = newDoc; continue; } @@ -208,8 +211,8 @@ Walker2 = XObject.define( // things that stop comments carrying on...?? if (this.currentDoc && ( - token.tokN.data == ';' || - token.tokN.data == '}')) { + token.data == ';' || + token.data == '}')) { this.addSymbol('', true); //throw "Unconsumed Doc ("+ token.toString() +"): " + this.currentDoc.toSource(); } @@ -221,16 +224,16 @@ Walker2 = XObject.define( if (token.name == 'VAR' && - this.ts.lookT(1).type == 'NAME' && - this.ts.lookT(2).data == '-' && - this.ts.lookT(3).type == 'NAME' && - this.ts.lookT(4).data == ';' + this.ts.lookTok(1).type == 'NAME' && + this.ts.lookTok(2).data == '-' && + this.ts.lookTok(3).type == 'NAME' && + this.ts.lookTok(4).data == ';' ) { - //print("SET ALIAS:" + this.ts.lookT(1).data +'=' + this.ts.lookT(3).data); + //print("SET ALIAS:" + this.ts.lookTok(1).data +'=' + this.ts.lookTok(3).data); - aliases[this.ts.lookT(1).data] = this.ts.lookT(3).data; + aliases[this.ts.lookTok(1).data] = this.ts.lookTok(3).data; } @@ -244,38 +247,34 @@ Walker2 = XObject.define( // a << scope // xxx.applyIf(a, { // a << scope - if (token.type = 'NAME') { + if (token.type == 'NAME') { //print("TOK(ident)"+ token.toString()); - - - - - + if (/\.extend$/.test(token.data) && - this.ts.lookT(1).data == '(' && - this.ts.lookT(2).type == 'NAME' && - this.ts.lookT(3).data == ',' && - this.ts.lookT(4).type == 'NAME' && - this.ts.lookT(5).data == ',' && - this.ts.lookT(6).data == '{' - } + this.ts.lookTok(1).data == '(' && + this.ts.lookTok(2).type == 'NAME' && + this.ts.lookTok(3).data == ',' && + this.ts.lookTok(4).type == 'NAME' && + this.ts.lookTok(5).data == ',' && + this.ts.lookTok(6).data == '{' + ) { // ignore test for ( a and , - this.ts.nextT(); /// ( - token = this.ts.nextT(); // a + this.ts.nextTok(); /// ( + token = this.ts.nextTok(); // a scopeName = token.data; if (this.currentDoc) { this.addSymbol(scopeName,false,'OBJECT'); } - this.ts.nextT(); // , - this.ts.nextT(); // b + this.ts.nextTok(); // , + this.ts.nextTok(); // b - this.ts.nextT(); // , - token = this.ts.nextT(); // { + this.ts.nextTok(); // , + token = this.ts.nextTok(); // { scopeName = fixAlias(scopeName); @@ -294,25 +293,25 @@ Walker2 = XObject.define( // a = Roo.extend(parentname, { if (/\.extend$/.test(token.data) && - this.ts.lookT(-2).type == 'NAME' && - this.ts.lookT(-1).data == '=' && - this.ts.lookT(1).data == '(' && - this.ts.lookT(2).type == 'NAME' && - this.ts.lookT(3).data == ',' && - this.ts.lookT(4).data == '{' + this.ts.lookTok(-2).type == 'NAME' && + this.ts.lookTok(-1).data == '=' && + this.ts.lookTok(1).data == '(' && + this.ts.lookTok(2).type == 'NAME' && + this.ts.lookTok(3).data == ',' && + this.ts.lookTok(4).data == '{' ) { // ignore test for ( a and , - token = this.ts.lookT(-2); + token = this.ts.lookTok(-2); scopeName = token.data; if (this.currentDoc) { this.addSymbol(scopeName,false,'OBJECT'); } - this.ts.nextT(); /// ( - this.ts.nextT(); // parent + this.ts.nextTok(); /// ( + this.ts.nextTok(); // parent - this.ts.nextT(); // , - token = this.ts.nextT(); // { + this.ts.nextTok(); // , + token = this.ts.nextTok(); // { scopeName = fixAlias(scopeName); @@ -330,32 +329,40 @@ Walker2 = XObject.define( // apply ( XXXX, { - + /* + print(JSON.stringify([ + token.data, + this.ts.lookTok(1).data , + this.ts.lookTok(2).type , + this.ts.lookTok(3).data , + this.ts.lookTok(4).data + ], null, 4)); + */ + if (/\.(applyIf|apply)$/.test(token.data) && - this.ts.lookT(1).data == '(' && - this.ts.lookT(2).type == 'NAME' && - this.ts.lookT(3).data == ',' && - this.ts.lookT(4).data == '{' + this.ts.lookTok(1).data == '(' && + this.ts.lookTok(2).type == 'NAME' && + this.ts.lookTok(3).data == ',' && + this.ts.lookTok(4).data == '{' ) { - this.ts.nextT(); /// ( + this.ts.nextTok(); /// ( //print("GOT : applyIF!"); - token = this.ts.nextT(); // b + token = this.ts.nextTok(); // b scopeName = token.data; if (this.currentDoc) { this.addSymbol(scopeName,false,'OBJECT'); - } - this.ts.nextT(); /// , - this.ts.nextT(); // { - scopeName = fixAlias(scopeName); + this.ts.nextTok(); /// , + this.ts.nextTok(); // { + scopeName = fixAlias(scopeName); var fnScope = new Scope(this.braceNesting, scope, token.n, scopeName); this.indexedScopes[this.ts.cursor] = fnScope; scope = fnScope; @@ -370,12 +377,20 @@ Walker2 = XObject.define( // xxx = new yyy ( { // change scope to xxxx - - if ( this.ts.lookT(1).data == '=' && - this.ts.lookT(2).name == 'NEW' && - this.ts.lookT(3).type == 'NAME' && - this.ts.lookT(4).data == '(' && - this.ts.lookT(5)..data == '{' + /* + print(JSON.stringify([ + this.ts.lookTok(1).data , + this.ts.lookTok(2).name , + this.ts.lookTok(3).type , + this.ts.lookTok(4).data , + this.ts.lookTok(5).data + ], null, 4)); + */ + if ( this.ts.lookTok(1).data == '=' && + this.ts.lookTok(2).name == 'NEW' && + this.ts.lookTok(3).type == 'NAME' && + this.ts.lookTok(4).data == '(' && + this.ts.lookTok(5).data == '{' ) { scopeName = token.data; if (this.currentDoc) { @@ -383,11 +398,11 @@ Walker2 = XObject.define( } - this.ts.nextT(); /// = - this.ts.nextT(); /// new - this.ts.nextT(); /// yyy - this.ts.nextT(); /// ( - this.ts.nextT(); /// { + this.ts.nextTok(); /// = + this.ts.nextTok(); /// new + this.ts.nextTok(); /// yyy + this.ts.nextTok(); /// ( + this.ts.nextTok(); /// { scopeName = fixAlias(scopeName); var fnScope = new Scope(this.braceNesting, scope, token.n, scopeName); @@ -402,19 +417,7 @@ Walker2 = XObject.define( } - - - - - - - - - - - - - + @@ -432,26 +435,35 @@ Walker2 = XObject.define( // ident = function () var atype = 'OBJECT'; - if (((this.ts.lookT(1).data == ':' )|| (this.ts.lookT(1).data == '=')) && - (this.ts.lookT(2).name == "FUNCTION") + if (((this.ts.lookTok(1).data == ':' )|| (this.ts.lookTok(1).data == '=')) && + (this.ts.lookTok(2).name == "FUNCTION") ) { + // this.ts.nextTok(); + // this.ts.nextTok(); atype = 'FUNCTION'; } - //print("ADD SYM:" + atype + ":" + token.toString() + this.ts.lookT(1).toString() + this.ts.lookT(2).toString()); + //print("ADD SYM:" + atype + ":" + token.toString() + this.ts.lookTok(1).toString() + this.ts.lookTok(2).toString()); this.addSymbol( - this.ts.lookT(-1).tokN == Script.TOKdot ? token.data : fixAlias(token.data), + this.ts.lookTok(-1).data == '.' ? token.data : fixAlias(token.data), false, atype); + this.currentDoc = false; + + } continue; // dont care about other idents.. - } - if (token.type == "STRN") { + } + + //print ("NOT NAME"); + + + if (token.type == "STRN") { // THIS WILL NOT HAPPEN HERE?!!? if (this.currentDoc) { this.addSymbol(token.data.substring(1,token.data.length-1),false,'OBJECT'); @@ -461,13 +473,16 @@ Walker2 = XObject.define( // really we only have to deal with object constructs and function calls that change the scope... - if (token.name == 'FUNCTION') { - + if (token.name == 'FUNCTION') { + //print("GOT FUNCTION"); // see if we have an unconsumed doc... if (this.currentDoc) { - print(this.ts.dumpToCur()); - throw "Unhandled doc (TOKfunction)" + token.toString(); + throw { + name: "ArgumentError", + message: "Unhandled doc (TOKfunction)" + token.toString() + }; + //this.addSymbol(this.currentDoc.getTag('class')[0].name, true); //throw "Unconsumed Doc: (TOKrbrace)" + this.currentDoc.toSource(); @@ -481,18 +496,19 @@ Walker2 = XObject.define( //$this$=foo.prototype|$private$|foo.prototype if ( - (this.ts.lookT(-1).data == '=') && - (this.ts.lookT(-2).type == 'NAME') + (this.ts.lookTok(-1).data == '=') && + (this.ts.lookTok(-2).type == 'NAME') ) { - scopeName = this.ts.lookT(-2).data; - this.ts.balanceN('('); - token = this.ts.nextT(); // should be { + scopeName = this.ts.lookTok(-2).data; + this.ts.balance('('); + token = this.ts.nextTok(); // should be { //print("FOO=FUNCITON() {}" + this.ts.context() + "\n" + token.toString()); scopeName = fixAlias(scopeName); var fnScope = new Scope(this.braceNesting, scope, token.n, '$this$='+scopeName+'.prototype|$private$|'+scopeName+'.prototype'); + this.indexedScopes[this.ts.cursor] = fnScope; //scope = fnScope; //this.scopesIn(fnScope); @@ -513,13 +529,13 @@ Walker2 = XObject.define( //$private$ if ( - (this.ts.lookT(-1).name == 'NEW') && - (this.ts.lookT(-2).data == '=') - (this.ts.lookT(-3).type = 'FUNCTION') + (this.ts.lookTok(-1).name == 'NEW') && + (this.ts.lookTok(-2).data == '=') && + (this.ts.lookTok(-3).type = 'FUNCTION') ) { //scopeName = this.ts.look(-3).data; - this.ts.balanceN(Script.TOKlparen); - token = this.ts.nextT(); // should be { + this.ts.balance("("); + token = this.ts.nextTok(); // should be { scopeName = fixAlias(scopeName); var fnScope = new Scope(this.braceNesting, scope, token.n, '$private$'); this.indexedScopes[this.ts.cursor] = fnScope; @@ -542,18 +558,18 @@ Walker2 = XObject.define( // no change to scoping.. //print("checking for : function() {"); - //print( [this.ts.lookT(-3).type , this.ts.lookT(-2).type , this.ts.lookT(-1).type ].join(":")); + //print( [this.ts.lookTok(-3).type , this.ts.lookTok(-2).type , this.ts.lookTok(-1).type ].join(":")); if ( - (this.ts.lookT(-1).tokN == Script.TOKcolon) && - (this.ts.lookT(-2).tokN == Script.TOKidentifier) && - (this.ts.lookT(-3).tokN == Script.TOKlbrace || this.ts.lookT(-3).tokN == Script.TOKcomma) + (this.ts.lookTok(-1).data == ':') && + (this.ts.lookTok(-2).type == 'NAME') && + (this.ts.lookTok(-3).data == '(' || this.ts.lookTok(-3).data== ',') ) { //print("got for : function() {"); //scopeName = this.ts.look(-3).data; - this.ts.balanceN(Script.TOKlparen); + this.ts.balance('('); //print(token.toString()) - token = this.ts.nextT(); // should be { + token = this.ts.nextTok(); // should be { //print(token.toString()) scopeName = fixAlias(scopeName); var fnScope = new Scope(this.braceNesting, scope, token.n, ''); @@ -571,11 +587,11 @@ Walker2 = XObject.define( //$this$=foo if ( - (this.ts.lookT(1).tokN == Script.TOKidentifier) + (this.ts.lookTok(1).type == 'NAME') ) { //scopeName = this.ts.look(-3).data; - this.ts.balanceN(Script.TOKlparen); - token = this.ts.nextT(); // should be { + this.ts.balance('('); + token = this.ts.nextTok(); // should be { var fnScope = new Scope(this.braceNesting, scope, token.n, ''); this.indexedScopes[this.ts.cursor] = fnScope; @@ -594,16 +610,16 @@ Walker2 = XObject.define( // RETURN function(...) { if ( - // (this.ts.lookT(-1).tokN == Script.TOKlparen) && - (this.ts.lookT(1).tokN != Script.TOKidentifier) + // (this.ts.lookTok(-1).tokN == Script.TOKlparen) && + (this.ts.lookTok(1).name != 'NAME') - // (this.ts.lookT(-2).tokN == Script.TOKnew) && - // (this.ts.lookT(-3).tokN == Script.TOKassign) && - // (this.ts.lookT(-4).tokN == Script.TOKidentifier) + // (this.ts.lookTok(-2).tokN == Script.TOKnew) && + // (this.ts.lookTok(-3).tokN == Script.TOKassign) && + // (this.ts.lookTok(-4).tokN == Script.TOKidentifier) ) { //scopeName = this.ts.look(-3).data; - this.ts.balanceN(Script.TOKlparen); - token = this.ts.nextT(); // should be { + this.ts.balance('('); + token = this.ts.nextTok(); // should be { var fnScope = new Scope(this.braceNesting, scope, token.n, '$private$'); this.indexedScopes[this.ts.cursor] = fnScope; //scope = ; @@ -617,8 +633,12 @@ Walker2 = XObject.define( } - print(this.ts.context()); - throw "dont know how to handle function syntax??"; + throw { + name: "ArgumentError", + message: "dont know how to handle function syntax??\n" + + token.toString() + }; + continue; @@ -627,16 +647,16 @@ Walker2 = XObject.define( } // end checking for TOKfunction - if (token.tokN == Script.TOKlbrace) { + if (token.data == '{') { // foo = { // !var!!! //$this$=foo|Foo if ( - (this.ts.lookT(-1).tokN == Script.TOKassign) && - (this.ts.lookT(-2).tokN == Script.TOKidentifier) && - (this.ts.lookT(-3).tokN != Script.TOKvar) + (this.ts.lookTok(-1).data == '=') && + (this.ts.lookTok(-2).type == 'NAME') && + (this.ts.lookTok(-3).nane != 'VAR') ) { scopeName = this.ts.look(-2).data; @@ -658,12 +678,12 @@ Walker2 = XObject.define( //print("GOT LBRACE : check for :"); if ( - (this.ts.lookT(-1).tokN == Script.TOKcolon) && - (this.ts.lookT(-2).tokN == Script.TOKidentifier) && - (this.ts.lookT(-3).tokN != Script.TOKvar) + (this.ts.lookTok(-1).data == ':') && + (this.ts.lookTok(-2).type == 'NAME') && + (this.ts.lookTok(-3).name != 'VAR') ) { - scopeName = this.ts.lookT(-2).data; + scopeName = this.ts.lookTok(-2).data; scopeName = fixAlias(scopeName); var fnScope = new Scope(this.braceNesting, scope, token.n, scopeName); this.indexedScopes[this.ts.cursor] = fnScope; @@ -684,7 +704,7 @@ Walker2 = XObject.define( continue; } - if (token.tokN == Script.TOKrbrace) { + if (token.data == '}') { if (this.currentDoc) { @@ -720,6 +740,8 @@ Walker2 = XObject.define( addSymbol: function(lastIdent, appendIt, atype ) { + //print("Walker.addSymbol : " + lastIdent); + //print("Walker.curdoc: " + JSON.stringify(this.currentDoc, null,4)); /*if (!this.currentDoc.tags.length) { @@ -737,18 +759,18 @@ Walker2 = XObject.define( //print(this.currentDoc.toSource()); this.currentDoc = false; - print("SKIP ADD SYM: it's private"); + //print("SKIP ADD SYM: it's private"); return; } - var token = this.ts.cur(); + var token = this.ts.lookTok(0); if (typeof(appendIt) == 'undefined') { appendIt= false; } // print(this.currentDoc.toSource();); if (this.currentDoc.getTag('event').length) { //?? why does it end up in desc - and not name/... - print(this.currentDoc.getTag('event')[0]); + //print(this.currentDoc.getTag('event')[0]); lastIdent = '*' + this.currentDoc.getTag('event')[0].desc; //lastIdent = '*' + lastIdent ; } @@ -768,8 +790,12 @@ Walker2 = XObject.define( } s.push(lastIdent); + //print("FULLSCOPE: " + JSON.stringify(s)); + + var s = s.join('|').split('|'); - print("Walker:ADDSymbol: " + s.join('|') ); + //print("FULLSCOPE: " + s); + // print("Walker:ADDSymbol: " + s.join('|') ); var _t = ''; _s = ''; @@ -786,17 +812,18 @@ Walker2 = XObject.define( if (s[i].substring(0,6) == '$this$') { var ts = s[i].split('='); _t = ts[1]; + _s = ''; // ??? VERY QUESTIONABLE!!! continue; } // when to use $this$ (probabl for events) _s += _s.length ? '.' : ''; _s += s[i]; } - + //print("FULLSCOPE: s , t : " + _s +', ' + _t); /// calc scope!! //print("ADDING SYMBOL: "+ s.join('|') +"\n"+ _s + "\n" +Script.prettyDump(this.currentDoc.toSource())); - + //print("Walker.addsymbol - add : " + _s); if (appendIt && !lastIdent.length) { // append, and no symbol??? @@ -805,6 +832,7 @@ Walker2 = XObject.define( if (this.currentDoc.getTag('class').length) { _s = this.currentDoc.getTag('class')[0].desc; var symbol = new Symbol(_s, [], "CONSTRUCTOR", this.currentDoc); + Parser = imports.Parser.Parser; Parser.addSymbol(symbol); this.symbols[_s] = symbol; return; @@ -817,10 +845,16 @@ Walker2 = XObject.define( _s = _s.replace(/\.prototype.*$/, ''); if (typeof(this.symbols[_s]) == 'undefined') { - print("Symbol:" + _s); - print(this.currentDoc.src); - - throw "Trying to append symbol, but no doc available"; + //print("Symbol:" + _s); + //print(this.currentDoc.src); + + throw { + name: "ArgumentError", + message: "Trying to append symbol '" + _s + "', but no doc available\n" + + this.ts.lookTok(0).toString() + }; + + } for (var i =0; i < this.currentDoc.tags.length;i++) { @@ -830,22 +864,30 @@ Walker2 = XObject.define( return; } } + //print("Walker.addsymbol - chkdup: " + _s); if (typeof(this.symbols[_s]) != 'undefined') { if (this.symbols[_s].comment.hasTags) { // then existing comment doesnt has tags - throw "DUPLICATE Symbol " + _s; + //throw { + // name: "ArgumentError", + // message:"DUPLICATE Symbol " + _s + "\n" + token.toString() + //}; + return; } // otherwise existing comment has tags - overwrite.. } + //print("Walker.addsymbol - ATYPE: " + _s); + if (typeof(atype) == "undefined") { atype = 'OBJECT'; //this.currentDoc.getTag('class').length ? 'OBJECT' : 'FUNCTION';; } + //print("Walker.addsymbol - add : "); var symbol = new Symbol(_s, [], atype, this.currentDoc); - + Parser = imports.Parser.Parser; Parser.addSymbol(symbol); this.symbols[_s] = symbol;