From a86af80836695838bb80f4c1e1bc900722fd50dc Mon Sep 17 00:00:00 2001 From: Jeff Williams Date: Sun, 21 Dec 2014 17:39:56 -0800 Subject: [PATCH] fire jsdocCommentFound and symbolFound events in the correct order (#770) On Rhino, for each file, we now fire all the jsdocCommentFound events in source order, followed by all the symbolFound events in source order. This behavior is consistent with previous versions of JSDoc. On Node.js, we now fire interleaved jsdocCommentFound and symbolFound events in source order. Includes a new Rhino .jar file: jsdoc3/rhino@5fbcc2d953f4ab451f827e0315ebf09124d1f274 --- lib/jsdoc/src/astbuilder.js | 103 +++++++++++++++++++++------------ lib/jsdoc/src/parser.js | 17 ++++-- lib/jsdoc/src/visitor.js | 24 ++------ lib/jsdoc/src/walker.js | 9 ++- rhino/js.jar | Bin 1168318 -> 1171306 bytes rhino/jsdoc/src/parser.js | 10 ++++ rhino/jsdoc/src/visitor.js | 16 ++++- test/fixtures/eventorder.js | 32 ++++++++++ test/specs/jsdoc/src/parser.js | 65 +++++++++++++++++++++ 9 files changed, 208 insertions(+), 68 deletions(-) create mode 100644 test/fixtures/eventorder.js diff --git a/lib/jsdoc/src/astbuilder.js b/lib/jsdoc/src/astbuilder.js index 504d6cdb..ed478e46 100644 --- a/lib/jsdoc/src/astbuilder.js +++ b/lib/jsdoc/src/astbuilder.js @@ -185,17 +185,16 @@ function CommentAttacher(comments, tokens) { this._tokens = tokens || []; this._tokenIndex = 0; - this._previousNodeEnd = 0; + this._previousNode = null; this._astRoot = null; - this._strayComments = []; - this._resetPendingComment() + this._resetPendingComments() ._resetCandidates(); } // TODO: docs -CommentAttacher.prototype._resetPendingComment = function() { - this._pendingComment = null; +CommentAttacher.prototype._resetPendingComments = function() { + this._pendingComments = []; this._pendingCommentRange = null; return this; @@ -221,7 +220,7 @@ CommentAttacher.prototype._nextToken = function() { // TODO: docs // find the index of the atom whose end position is closest to (but not after) the specified // position -CommentAttacher.prototype._nextIndexBefore = function(startIndex, atoms, position) { +CommentAttacher.prototype._nextIndexBefore = function(atoms, startIndex, position) { var atom; var newIndex = startIndex; @@ -244,7 +243,7 @@ CommentAttacher.prototype._nextIndexBefore = function(startIndex, atoms, positio CommentAttacher.prototype._advanceTokenIndex = function(node) { var position = node.range[0]; - this._tokenIndex = this._nextIndexBefore(this._tokenIndex, this._tokens, position); + this._tokenIndex = this._nextIndexBefore(this._tokens, this._tokenIndex, position); return this; }; @@ -252,33 +251,54 @@ CommentAttacher.prototype._advanceTokenIndex = function(node) { // TODO: docs CommentAttacher.prototype._fastForwardComments = function(node) { var position = node.range[0]; - var commentIndex = this._nextIndexBefore(0, this._comments, position); + var commentIndex = this._nextIndexBefore(this._comments, 0, position); - // all comments before the node (except the last one) are considered stray comments + // all comments before the node (except the last one) are pended if (commentIndex > 0) { - this._strayComments = this._strayComments.concat( this._comments.splice(0, + this._pendingComments = this._pendingComments.concat( this._comments.splice(0, commentIndex) ); } }; +CommentAttacher.prototype._attachPendingCommentsAsLeading = function(target) { + target.leadingComments = (target.leadingComments || []).concat(this._pendingComments); +}; + +CommentAttacher.prototype._attachPendingCommentsAsTrailing = function(target) { + target.trailingComments = (target.trailingComments || []).concat(this._pendingComments); +}; + // TODO: docs -CommentAttacher.prototype._attachPendingComment = function() { +CommentAttacher.prototype._attachPendingComments = function(currentNode) { var target; - if (!this._pendingComment) { + if (!this._pendingComments.length) { return this; } + // if there are one or more candidate nodes, attach the pending comments before the last + // candidate node if (this._candidates.length > 0) { target = this._candidates[this._candidates.length - 1]; - target.leadingComments = target.leadingComments || []; - target.leadingComments.push(this._pendingComment); + this._attachPendingCommentsAsLeading(target); } + // if we don't have a previous node, attach pending comments before the AST root; this should + // mean that we haven't encountered any other nodes yet, or that the source file contains + // JSDoc comments but not code + else if (!this._previousNode) { + target = this._astRoot; + this._attachPendingCommentsAsLeading(target); + } + // otherwise, the comments must come after the current node (or the last node of the AST, if + // we've run out of nodes) else { - this._strayComments.push(this._pendingComment); + this._attachPendingCommentsAsTrailing(currentNode || this._previousNode); } - this._resetPendingComment() + // update the previous node + this._previousNode = currentNode; + + this._resetPendingComments() ._resetCandidates(); return this; @@ -329,8 +349,8 @@ CommentAttacher.prototype.visit = function(node) { // now we can check whether the current node is in the right position to accept the next comment isEligible = this._isEligible(node); - // attach the pending comment, if there is one - this._attachPendingComment(); + // attach the pending comments, if any + this._attachPendingComments(node); // okay, now that we've done all that bookkeeping, we can check whether the current node accepts // leading comments and add it to the candidate list if needed @@ -341,8 +361,8 @@ CommentAttacher.prototype.visit = function(node) { } this._candidates.push(node); - // we have a candidate node, so pend the current comment if necessary - this._pendingComment = this._pendingComment || this._comments.splice(0, 1)[0]; + // we have a candidate node, so pend the current comment + this._pendingComments.push(this._comments.splice(0, 1)[0]); } return VISITOR_CONTINUE; @@ -350,41 +370,50 @@ CommentAttacher.prototype.visit = function(node) { // TODO: docs CommentAttacher.prototype.finish = function() { - // any remaining comments are stray comments - this._strayComments = this._strayComments.concat(this._comments); + var length = this._comments.length; - // deal with the pending comment, if there is one - this._attachPendingComment(); - - // attach stray comments to the AST root - if (this._strayComments.length) { - this._astRoot.trailingComments = this._strayComments.slice(0); + // any leftover comments are pended + if (length) { + this._pendingComments = this._pendingComments.concat( this._comments.splice(0, length) ); } + + // attach the pending comments, if any + this._attachPendingComments(); }; // TODO: docs // TODO: refactor to make this extensible /** + * @private * @param {string} filename - The full path to the source file. * @param {Object} ast - An abstract syntax tree that conforms to the Mozilla Parser API. */ AstBuilder.prototype._postProcess = function(filename, ast) { var attachComments = !!ast.comments && !!ast.comments.length; - var commentAttacher = new CommentAttacher( scrubComments(ast.comments.slice(0)), ast.tokens ); - var visitor = { + var commentAttacher; + var scrubbed; + var visitor; + var walker; + + if (!attachComments) { + return; + } + + scrubbed = scrubComments(ast.comments.slice(0)); + commentAttacher = new CommentAttacher(scrubbed.slice(0), ast.tokens); + visitor = { visit: function(node) { - if (attachComments) { - attachComments = commentAttacher.visit(node); - } + return commentAttacher.visit(node); } }; + walker = new jsdoc.src.Walker(); - var walker = new jsdoc.src.Walker(); - walker.recurse(filename, ast, visitor); + walker.recurse(ast, visitor, filename); commentAttacher.finish(); - // remove the comment/token arrays; we no longer need then - ast.comments = []; + // replace the comments with the filtered comments + ast.comments = scrubbed; + // we no longer need the tokens ast.tokens = []; }; diff --git a/lib/jsdoc/src/parser.js b/lib/jsdoc/src/parser.js index aa357a12..d3d025c7 100644 --- a/lib/jsdoc/src/parser.js +++ b/lib/jsdoc/src/parser.js @@ -1,5 +1,3 @@ -/*global env, Packages */ -/*eslint no-script-url:0 */ /** * @module jsdoc/src/parser */ @@ -26,13 +24,15 @@ var util = require('util'); var hasOwnProp = Object.prototype.hasOwnProperty; var Syntax = jsdoc.src.syntax.Syntax; -// Prefix for JavaScript strings that were provided in lieu of a filename. -var SCHEMA = 'javascript:'; // TODO: docs var PARSERS = exports.PARSERS = { esprima: 'jsdoc/src/parser', rhino: 'rhino/jsdoc/src/parser' }; +/*eslint-disable no-script-url */ +// Prefix for JavaScript strings that were provided in lieu of a filename. +var SCHEMA = 'javascript:'; +/*eslint-enable no-script-url */ // TODO: docs exports.createParser = function(type) { @@ -120,7 +120,7 @@ Parser.prototype.clear = function() { * var docs = jsdocParser.parse(myFiles); */ Parser.prototype.parse = function(sourceFiles, encoding) { - encoding = encoding || env.conf.encoding || 'utf8'; + encoding = encoding || global.env.conf.encoding || 'utf8'; var filename = ''; var sourceCode = ''; @@ -233,7 +233,7 @@ Parser.prototype._parseSourceCode = function(sourceCode, sourceName) { ast = this._astBuilder.build(sourceCode, sourceName); if (ast) { - this._walker.recurse(sourceName, ast, this._visitor); + this._walkAst(ast, this._visitor, sourceName); } } @@ -241,6 +241,11 @@ Parser.prototype._parseSourceCode = function(sourceCode, sourceName) { logger.info('complete.'); }; +/** @private */ +Parser.prototype._walkAst = function(ast, visitor, sourceName) { + this._walker.recurse(ast, visitor, sourceName); +}; + // TODO: docs Parser.prototype.addDocletRef = function(e) { var node; diff --git a/lib/jsdoc/src/visitor.js b/lib/jsdoc/src/visitor.js index 80e909e0..5a72b3d2 100644 --- a/lib/jsdoc/src/visitor.js +++ b/lib/jsdoc/src/visitor.js @@ -182,13 +182,6 @@ Visitor.prototype.visit = function(node, filename) { this._visitors[i].call(this, node, this._parser, filename); } - // we also need to visit standalone comments, which are not attached to a node - if (node.type === Syntax.Program && node.comments && node.comments.length) { - for (i = 0, l = node.comments.length; i < l; i++) { - this.visitNodeComments.call(this, node.comments[i], this._parser, filename); - } - } - return true; }; @@ -206,8 +199,8 @@ function isValidJsdoc(commentSrc) { // TODO: docs function hasJsdocComments(node) { - return (node && node.leadingComments && node.leadingComments.length > 0) || - (node && node.trailingComments && node.trailingComments.length > 0); + return (node && node.leadingComments && node.leadingComments.length) || + (node && node.trailingComments && node.trailingComments.length); } // TODO: docs @@ -233,13 +226,10 @@ Visitor.prototype.visitNodeComments = function(node, parser, filename) { return true; } - comments = []; - if (node.type === BLOCK_COMMENT) { - comments.push(node); - } + comments = (node.type === BLOCK_COMMENT) ? [node] : []; if (node.leadingComments && node.leadingComments.length) { - comments = node.leadingComments.slice(0); + comments = comments.concat( node.leadingComments.slice(0) ); } if (node.trailingComments && node.trailingComments.length) { @@ -269,12 +259,6 @@ Visitor.prototype.visitNode = function(node, parser, filename) { var e = this.makeSymbolFoundEvent(node, parser, filename); - if (!node.nodeId) { - Object.defineProperty(node, 'nodeId', { - value: parser.getUniqueId() - }); - } - if (this._nodeVisitors && this._nodeVisitors.length) { for (i = 0, l = this._nodeVisitors.length; i < l; i++) { this._nodeVisitors[i].visitNode(node, e, parser, filename); diff --git a/lib/jsdoc/src/walker.js b/lib/jsdoc/src/walker.js index 2407dc89..ad1ac917 100644 --- a/lib/jsdoc/src/walker.js +++ b/lib/jsdoc/src/walker.js @@ -521,14 +521,17 @@ Walker.prototype._recurse = function(filename, ast) { }; // TODO: docs -// TODO: allow visitor.visit to prevent traversal of child nodes // TODO: skip the AST root node to be consistent with Rhino? -Walker.prototype.recurse = function(filename, ast, visitor) { +Walker.prototype.recurse = function(ast, visitor, filename) { + var shouldContinue; var state = this._recurse(filename, ast); if (visitor) { for (var i = 0, l = state.nodes.length; i < l; i++) { - visitor.visit.call(visitor, state.nodes[i], filename); + shouldContinue = visitor.visit.call(visitor, state.nodes[i], filename); + if (!shouldContinue) { + break; + } } } diff --git a/rhino/js.jar b/rhino/js.jar index 696a37d4f92ca5340309cf12296c0391181a3d5b..83b3b70f17461f818bdf76c0d3886dbde7483560 100644 GIT binary patch delta 54285 zcmZs?V_+anur3_iwz;vLY;4=M?aaouZQIxw8{6i_cCyLt-S@l)-?{gjKT}=P-PK)F z-Ca-BOmDg5d9Ngrk}Nm`90&*u2#9A{ig+RtHLSs zH)o39rjDlqagrAZ{+Bm7nPN$Fljhn1(e>mqI|f#z%Uu66O|E2B@nmjLB8X-EB=KY& zPzs3u-~@qELGb+Zs0NhzUt$lGJpJPIR`+vnzCqYB~-&|BEhU8mFSe*Zn{Qo!nIXpz<^n!fE z|EE(_sIUJm^>6QJHm;`s_avsl{*jwrK!l2rJPif&Z}oL3fqw}+=>MF92K0aF5}Fs{ zpD`p)LyP`f2Lp!ZKi*5TGR!9i>OUqa`SeC_0|o+u3JC&2kUYLctFup6sV0daj(~g*w2LMgDT0cmqOzA?N(pH<{vJrWnQLJ=8QeFHjUIa%e78<) z-ra0ZAtk#ZZ+VlmPCNyn z2G7gPD3+9n06vwDZEC3$FavTc+FEM$F}p8e+pk_Z?$=QBVDi|eeujU?&_QSvSogpw zJ0En->X|7#1opxiN!PntIyVn`=YE0WES4Y`G4Fci9o}^6(S|3i7b0}Rjc0IU%0M8{ z`C}5kDR(foE4+z7_G`o*eB@npPsUOw+5P;6tzwtYo$)zHYODrRm7DdD zCzs(vY&pC%XGb8vEqVH?4chen2J~&y69>&t^+vl^5{X46^=Syxdm|Fib{yE`kd;-q z3ySj!bia{8rj4I!7ylv^`NLiYGo8>X>>EoFU0QE6;uztF;)M(5W{)M=+hn_J z_ai(e_JpnrhY=M$f|MR$H!R>5A=>AVYP^R=F5g5*HttFyZ0JWD2|b??i(|1&w1q-c zo8;LS_uG(eiwOPvrl9NEAs^yaZ%pJ#!yEP8IL)_1@dihnzu%2U**CPW@4uD|49Gtw zDMc^_C&B>*0-}xhpEe1wGMd^MySj#^|8m4w#T=dGsp$!*xfNA^A}nO-)@HgETe&9bM(E zP>3v52&D3Hwd&+M{0oxJhSV+3iL2*v9-FJ>b-&@C&jCp>H?AIFRl*z3zSJ1ccG-^L zT`P+yTn%m)>MRsih-34rZ}tpV!;3qb6K>_+Sc|A2aBxaHe>=_mds1XdpC zc?Mbb)Kw!2Jed>9&|fG}nM}w*1mgenFV`6Xv%K2g;9|Q;Gb!7N=gYQ!7*)vf($GQo zeqb4`C&gXk^s2c1GrRQjW`|IGMnzDsLhL#RU#*AP=={&o!-BEeGuUXoP{w;n-Jct8 zIAg8(>bgHlwPP5IAh{fV-gu<+7Q?G50uyQH4uRB7N=P-abBbK zbUmZ`fXeL9`|rN0 zvX*nPSETh&3i{cStHZMI4+iRTn?4Vv&ouW-Ps=AwHs#d-t~&8?-$i!)g~O+@Gwua} zAx2-*!%04^k-9Jng$w!_@qH5$64jU_`1vO@U{7qdR(-a$)?ta^P2p&GHD2Mg?2M<^ zAg))a7W%}^)0SR!RG3LY!@&p6SFO#kPwwSBJ*wG%Z83@!c1 z{d%78_wj2SgI=`zU;~1mrf*|c9K&|4dWd_+-x+SRYj)vw?fgLknx6=|ci-)Ab!!|0 zcWwOX{QBQHy=LA?J~%JhhuXFJzUhyYLQ8zYMVH9vrp>Dk4>L zeiFs@Y|Vn>xpoKN%yUnD=dO27Dc8DiO+;>9IbqfOOHEO0T|BVno7K+J`9-w~*56yN zy!(aCHm#hv`sK9>8tz5cJiVbATGY;JhKOCr$}|-{m1@3=U&tzWM69G6uT$z6N|?*E z^kV#Mu=1ys6>sSsb`fdmrJn?(=ii&i%Ec}wt8%bvnJkZLto(VXPsA@KAvnAG z2cF;sDzcT?IEnMh!&89O<=y&+V$fuRQR0h72|S%-Mi@`arW=E$I&t&&d-=aEtjFzlR^G%Y;~x z?Z}Dv0!)b1;jR`uqiDp*Cn!HRYfXn5?4o}=nuPRr+a3ZS|NA^)piT1?1qA_t`s?P9 z{Nv&zACn^ivO`}{{5Q*DW9I|3s%we(AC>5EAek0a=89;<1k`+X%VfWkQZ-3K0BO*u z{IB32$_I8B{4GtFy_xNf7DV6k4R44+;u=*&h}_|!IOXj!*DPqLTyfjuaqt{UEaHe2 z$!B?@lONQeR11AdPA8S9z{4yoJI#P8BZT5gBbx63D@Oa-kXVJUAZ$csXX0oui>As+ zUrAv&D+c4Bm;l?_sxi$H^PV$(#Ew31S#IRGqBVsjsiKN_tb%^NkTbQs*`D5=SHKYQ zFCn%5p-fkTU5m_A1^t^1jUQd1e ze)z=xCf*$(A|WG=*9?aScdTZWaY8$k7Yg%Erln^6E8=PtE)RxAw>0+S*I-zGf0=eQ z?sMD4C4QYH9wKNhV6++b-Qg@2Dw|DwwARuCpQAiW+t!OIyG)&JtFqdAGNl7>@ZVT? zK?wA6))bm!OLJIdGoR(S;vJz;O>I5M_R}VLtFzs^4Rqkhl;zDl7nC*dv=JlMV7E7| z?rb;hsDC1iR=^;xdlWX}@y<1^x&XT?QeCc%y3UH(1WUIE4E?w*H_F;YSixm5z^XK8 zmVa3#jajYNY<8`>!CKHnkc9p?4{P6^zY=4`T)L5}vuVwclAf7r6aRU2Y)~iLNe5Au zmRqLFVUS7B?tv>Xn}7%P_DRW3zh4<-3AU(DYKt@CiikdD(-FwsI#cFLxAc127AA-Q z^XTb<1*6UYjP{mwwKUtR36N#MRM9sq?a2QLWP;uXELno^k-CP|%-sV8QzZJ7bO_D! zS}u%X`}=XYf-g~ua0Zzn9FjPs>5!jr4(NPlNC=ZCnMGVP{1*(Ph)1;O0wQm@i#<_X z-tk2&6Ocd2u3+1(>T|=5bE1>;c_rCI?L^3uFcR|sLLqT(ffvY$c}NK%Z_;qoG|a~d zRASo|wq%iv7BL_xLaJ2LaJWVH$M=GC-J1XjVH8I|7n{T zFfbrV8cE{(Qrto#e~q*3uW>T`2gqG14k zqSYduV$MA3@to~^*>*M9ss9K0X!YxWu{N<{9GM*{M-_l>oU=$Q;qCZ@^qT{d!!v|RZ8dWh;RLT6&)e;#dcCVP0N{+ z+Kky5rfvCJCT$J1Cx07dl$E(OZ92vHD!4^@rz>Z<5yBzD z;z>gwDdsVFaKg_%`}>k*w~6=7Hj6Gxf(6+LyK}K@MA0Dy2XD=ir^H^CgRcaVQODhI zjm%M#?5x+u^@EO8Gz(TI@cJ;ssF=KOsEyI5q$aa)lFd&=uY@WP;SrvRG_d~BiV+gL z;`?^o+mj5CLzXkxe7zVu$Mk4R#~j1rNpuS2lorgiGsfCeCgK47L9CXDEd4Lmd*NyU zTtAOc3o~Ma{V!BfuM`Gze8R2usCi{l-{c8RRZ)^`&HA76Ku#j74q;$XXGbrQ4rd#a)y*oF6SD*l}ARy9MARrWfBPxzAmP|Iu z=PW4ce-{EWP?`bjg)fOYy1PavoAy)7!2e0*B(+^~JzX>$o2l+Ci- zLnn{#jaB&RlhKx|$ngKD;BZkAD0)6tH|^#!&+KC94OVuoFv4J1ZU|fQlYW>xA^qYh z53y(s@ZdhoVdJzy8k>?}rJ7m~l!W(=(ae<(2aThKzsknw`6qf=#fSG!Rg5^ql`Rak zOfh(!(&=TS1S9Qhk|IEoqlTB(v)qRUoz3l8(V$J0m?8V;&MzqO!=(!I{799cBlizh z4u1%?I?awr3qNRVNP>dO4fca?9B6Mrn;a_wBzMF3>0ivDppHst{vf4~N`^zHMu`6T zo)JhOUm_{C|ANDiO(^$qPoq&Olt-XWuyCVUau=Zd4o(lB4p&4x=mbz<9iZbOPDUuQ zX0)9=kcU*fi|3ri<9equ`_O$x3jgFcHk=7l{yhDKt(y^p9GwLK;sp!Rl3*W*RBR7zW4kQda%2b$;jhG6ONB-% zu+OBe1kvw`Q^q^#+*o&px26VPe&ZVtu@f|VA;iVdxKLc;+<_fnOWaR3%B7&Ho+~$= zHvm^+$6sUc*cuzQ>W7aSnxlqCk!-Z#)x}uhcw*;&CI<2B@M(8w&z>wB)M-uuS??*! z_^J$_5gO`_4OEW@?{p26S4hy&og!^qS}pG~K7!?$dZy(Lrz?ySbX_*pZpg+<2?92< zVq7g+)-G~vi|1Mfhk{s5HUUx`?lYK$?B-ZyTNz~D=vLNcrMBX|pa`ODqTa1qM_$&` z`zy20d(Gti0#VmuU)0`2ah!6a^njRJ<9G? zMc?GGkD^L5tJL>wna+L$f)y`gH^-GMdy$uF^MhJkeQg+;p<@A!Q=Fy%2I6$;E_3o1 z9w@&XaUKv@o%}J5$*v|o*>OD00vJ74H_V>G*=xi<)nIcuS5DdckPX3CQ3D#trEui7 z!nPz{$X=?s)M+xcYYk6G?K1UaYP+N39ZFALPdPPiERy0oPqByvk{z6zp@>}J^VO)P z#Jc0W4Zv|&|ENYI67lw|#;;Sswy^n)Xv@x_VL2_Gpt4G$^mzG9oyH1mgcKOvBqfF; z8YgX(duLNLSQ?wRUv8otgoOJ3Zz9hqGL4@K+F#nheVhX;E0Kf&sp*rEI(gFN355ds z)Tr))P`Kn*&O+P|+Yy`ZqBI^3L#2%6x>nUl#h_yh+cegLV}T8v8hFI3a>B>R*kRNS zYem8LM=9=lDD=4;^i@yTa^`g;0bfyGNl>OA(_`pg*lWxmzQ}yLvbu;-d)%omXwZHK z)n`K`7H2q)ZIf z?4*|CxPg&gPRYiF`q@vWI`{C-+kDRAo`k%xtbc*M+9kfEH~jtb*^bDaq3VE+A4>qc;No6Pzv!NEU_E#|OgD13;oijn7mOddm)hU(SXIC2UQItw1Jy0)ZAU-4k^Wxr zo+#J}Fpvy}zZcZ6x;F%ty;sza)j@HKdaE259~cks$F`wZSg!GAy;lzZfnf8qUG#fw zG-=}Q>`lB8wwn{-@Pqg3^ci&|9tnppXD-=_Yu33BQNg<^#ZwOHDy-Y2e z#ElY;7p0S9&ak+}5sc36BRbTz*%UZ7h@hs6j znzXV_3e-5$NQJ)49F{fH)gT{zsdauzp{N&eTG$!nTwfku<0{yrh!3nqGu*HH(nnU` zS;vBOa;T@Zvx`%t7K$V3ZwA8kK|2MtFE*!FmFFW>J`o^2VFs3e5c*;b4C9b;>%}Y^ z0Lw+|d;7c}_U4n?I)hfXss)N##!E7@@E#v}49tm+BeiO`_486te7+MFGT%I|hZ?!kSy zGil$IbqxI3F4DDCr_p@^`$!M?;`c(H0)jri<_5w}gget)L-HRi@{@`h*d?Gg6xMCz zlao=)!r5np9(Yiv0X~)^dSG#PfH8e#mT1L>1@_vcy%cn%Hm}*{CB3btJ!9qCQLQJb z^@Y*rwp)`)PkP4ZG}5&mHGG?}p?0B3L)?U@&{w9m=1KAPMO>fxRzf%Go%-SL41_nU z2b=m{yRn|%1cg1h*ndO+kNalwHza;1C%1U}7r$`+jfykd^a|Aa7Vva0C9D8H%r#>33XL5IlU@QzZkAy5n3fgYCD#i;Is8* zKB)}^ye3A18y}6FpCz@QFTu#@HNJ5032Ym_xB=UlhJC;XM8mfe0VQR%g#Mb>sS#zB z0wV+9hX|92R*JKsFo7&95lx66&0%8SV?iii9H!qR1!#kEx&=}fr{Bcr+0 zGRG?S%EggRBQg?)q^o_naIH?-wVGV*@&YWN4%6e#I+fm(ivK&3(HpbG*9c&iQ>DAI z9o4Dc#|d|!b=uzAUd4Clq*JP!KxxFrDeDS?za?WivC>ebt~Zk>kt#AW5i8&9`&PsZ@b%S3^ThyDNR6EVsQb` zQ%q?0)|V5??Te{*8wrUh|MwSye3ed&XgOYIKuG% zppmxB;=I?-6`By@BcSV-lpJ6=Oja--b>%UhADXLJg$-#LCo~-xqAtesPnX~lA)F~+ za|~qhj#L=5ICRDtbJP<~G63l4DlJPk&+_+NUYZhtW>Hxc*ldL zIupbzPYO&`4d$T~H;K$__MI$`=jgNN8)_f&W8DF2SfJ4Vte1aMNd3ug+sW%JiU1k- zkK$!19j&XVb^Vajo)@A~hMvS>gh*#6xrjxA(X+@yZUJYs6UTrfONHK>P1{D^;|!^j z?pZ<4>mJw1scrv@gFj0xMAJ6!m5sx;WL2Il~MTJEgtF4e}g20+=&wyXqbN zAGw3#$2XXaEPo1|GT$Ua>86Be^~`^3@8dl%!L4Qj>Ky|gx*#{&G*uq@-^;01)_?L6 zDzFp9i8GjS{m{uR%VVT=Agvd~bKlB}AdGL0vx(@u!qh#iZB!C>=Wpc3jceh(?%07! z#exdxm<-dZiS9~*N8ArN1U69Nd6w_IIs`V(#L%(8me#YhVg$_@xOJzHmIahtlA z;=^%mnk88EO_%cm*c`(m9!J62*#@7=-t zbkaNO7kv#1Lx(RH*6BnI9g0HZhj;-Y^dO!u<7`{E(6repc0DywzIm z4`jF1`D~b?jBE5h69Ad{vVQ{AD~Kp4oS9w~rg)(0l54;(g! z$&S3&%4O--L(gOpSL1v{IOQxq8`o0d}+ z86%tFIfICTQ_>EoBckV2ymS^2t5K^^-u^CP~MKx(P zarY@%Q)#4rq-peNH1}y)b7_PUkgyBYDkh?9Q?W}WqHfc%izQ;h!mwRHA6|*7T|^&Q ziMF3BHJLV1JZEi;HOY4CT(f8_f23$+Fj2f1H)+#~&Lab`&}^4gM+o%q@Vvt$cSEKF zkUIyC<>CWY*)6>v!OM8|3Jn{yy=jm*ZNK1sEoc&k_(C8u_RO5})$!0tq%J%$gde#W z_KoNV8XSKNHHJ@y)EvyM~ zPzWs13L2G(jD0sQa>e z8^S7EY}U6nv%kq4qqA1L@L=!J+G9=|%<`P&%)*sT-Ck#zK4nbOmzfhoCM<}s9d=>dot0YNRmD=a>AjzjsV!gQOx%eOJs**i5~dB6G578oR|^mtO? zMq^D?)%v=pTk!^$pt2iqbT7mA$d|DRZ^upnDYao}w9}dBCrZ&C{;tP5#m!>HSUFv~ zoCaBTECFHo=B$W>9}P)(RCi(ns)2#F+#HX4nPCBP)*XQmy1VPFUWaXA8ZGcG`f9W& zUv%UAM^0p{hiH5$m~qwa7M9-?J$X;-n6SvZ>I!rxF;0G*BF~?;Cms7}QP=9Mfz0gy zlkx@JAvC=6kb&74i1SnVUC4K+43Y^Rv}mVgEK`;X$b&Bh?Sc6ef-@2BUuObDPGRor z43GQ<8FXw%nID~ zK|mq`KtS;RLLqG6U)WRY2knPGdjH3+@rIswZH;|VWHc2|27%O#c?3m{B;kvlF?`68 z6e|PlS;>nG9xa6oG9?a-GzsFugUXJqFH_IUyFt=R(ud`cx~?UjxW$7($_1aSU-Q| z9{Xn-5()^60Oqa`WBbm6{C)@h*mV&Oe4E@dzsg?q9)o`AfIgpFX$#=qr5Gt@_P}9do?B*@uu_67V30R z@hYu=<$iv(Cf(+>DN2UNikfk|D2l9O)S{09BGkF$-8=^xKOprV`_&$Y^H6(E&rrIa z$~Kx|Z|WK6p*O#!K9%YU$v;wiXpLL3^p9Mlfj3eQlh`DT8E1>J^w7-dX$!T-zBk^Rgtqy2pux(6G zOC@bhSW0Etoe@e$Z4S6);#Y@ZQ}QZcxk_a@lx3}RsrXa=4yXtI8XGa|7Oh7QosQWp7MdaL?k-Tu^0q{!)6u;fz;WZhL?r zGrKgbosw4@=}NO*5b5gfoX0p*-rLy^$rJ^D_9@P2g@LWgq+b**>+Xy@pMG%wCsV)V zEu^nk8eOfAg0Xsfpd(YiI3gia?-_|d9Loq3o$cn_%*c6mfK}wMJYwI~u?-1S4_lac zKnrY3w?{Bula+a191vmWkXZNeGz%#ib>-$O zh0W(SU*j6$6t-6RP))mC`hZTmeHGL^Jk+&T94)Em6z7%V5PxP;&-i?H;EbI^mp3<( zoFZ5nUGCm!hz+gh)Mzy~!o~=6sOgEeUz|SEY}c)hGC9lM~Z=hW(z>QH}n;I99ne=>T0K>T=ssNXGZ9}o>g|K7&9Q#cANTp2QU zXmnRczx>ViINV$ufMeTHjN4Nb+GC(%Z;=QtjYxLAYGLP}9;oX3l|=)yXHSq_uY;7m z7=~vDw)%d>(T?tc$EQ?xJ&bcW_Gm&2SJe6+HSp}>?NPuYVz$@!*LcPN_W{BK*e=rF z5wFvf0oZ>^%WD}svU#6?u2)fP04+54J)Lm?@&&ERw~>x=NXojV&>d&59E-jq&=(4*B5?F&|MOMwMpG0ExN@==Gg><89 zxt#J@M`g&nESa3?x)kYiTYkIZ?Grs|@7!~4)J_-gx-64r*NLAb>bjJ+X3{4rn%rUZ zQh6T8ennZ9dUhXJJn+_kE`Eg7FY4s|8YJ{hpB%blPut{A%_}etIXfBHMUXPY`L~B` zb7`dSszvKvs%chDa>+llYK%Y-V!rh4qUT(?hKuB(1lLslc5-3}&dDsK4cs{Ynk$(c zjC(YDyRz*4@emX!p~!ss6vECE5;!T1JR*_;3~WeLNmb|ZnV-X|tKwix8C)CuBsy^Y zbrHT45^Ml`Y5`C#0|(x!xVIY|2tKn&5EtP!2sIDye%GWaJZkuloMGW|NUuYA9L7_5 zm{sBm2r??>waSscm9uP~XD*5ispAfA(4u)H!J;adS>>!o8v970xCm0I^&5oGby4b< zaGYMBpf+@EY_oRys%sbctfSizLMKaJ7oXQoswj5~@xUKb@_icNNb_Ep1}U$~2Ve^TVRdg^N(qD*RQiV|CfdQM3kmLscuC>@3s+=`D}p^jLq zFC`jbgMV^%knkn6tsUEGwhnLOT|PFQmZ?rq6RPuAK0~rb(L5Q<2qDsU zTYL-OEq5z0lQu6G2^T3FvR~CGrZueH2Ed;tkYJ*-`~AHaN|zgxqO2S3GYQe_k5c^{ z(ZQW&Ji98?muJhl`T09_W5qc_qy#5d(HX`uWaw=JL%rorhkPc9PMcsN&o$E(TWNB2 zS+=FHopHKGauyf85>Rz_>n^4M1Wa})@YXyft0HtCANNQo)Fq*fFOFl;2gV6)FhHQL z)iHr>RrA#_%tb>=Xzf4}h2Ujo8_apgGBcSaoo>!gE`O>_&q@Eb2>uCH_n6Vvh9z9A z>A5yc-aSQ!{s4*Dup#5n_BfFfoyEmMV1nIEW;p+%g81U8#(G$gpIzU&<rU`6)#kRVCn8tYO7qNzR7Y#axpZ} zJaqw|jDMMlc5?Z(AaUR$cvz-XXN2$IkCLUFvRc@>0js7U6q^pT)lYj&4Vh4TW%Mvd zW#$UJr+~$N1>2DfG1oRYGo`Sng1|;&8rjr9HWjE^4v;YQD+;#>IvhDUU7&Je$tKlb zw;oL2E`^CV1@kmukVv)ZEV%M@tCmdKwioSOMEBg4>FL$v+O&yJZ{`$J+t*aDX&D)Ly2)B`l$^eHdXuEgy_+d$CG5>Ze_{ zu**{LVn0nxYV3Zi!l$&5uGHAhmxBA?N_q>;B_`a>)YmQhW;$4RmQ$=yvqQJNtZX99 zNwV4?e4hqPlPyQm94r_O?fL$tmX6Dq+9KQxZ4MUQ@EbXZGyB}sT0s4`wWZ&@j0x&! z3l+eiT{O;pWzBHlbZoCXjH;BK&jMB_88&al*-XhS#d!_F0o_cx9(E}MZyUhuoqJ#~{ zK%ljM$E3uTW!2BM2_SeZK>K}B-2@YChJ(`2@e^=I63E)-g^>KMF|S6TX3s6GVr&>; z5e3b1!=BBtW87ikJLr5tRte|Bs!J(j+fkItecWwR=`He(2|u;?Wmm9vrN6*5rP8w1 zbxpnWy;= ztNks{Np%jFwd}nl{f-hQXrG4IT4cUtEag%izAy#^) zJt3B%x}Bg#Gq53>?8(J|U6LO^;?fp1td4&h&QHyesY`^bAv2jyq(kHpTBMI1MVpez zVj3zlw!<0vk7l#6*df5H+434jP8_oBWh&^f045k-%Y?H-N6VeIkzHpFW<%r^e5fDdK>*d~Vy{~Q?Rn1Q5;a`-{L&c#~+ zSES>avP;MxVICB6X}{PtJmI7v$|ff;XBGEzjXWKc3)pP;P3Ynn`Ec~FQg8kZc7@4~+wmw=7{ z@F**o%(01EKbXamQcu#-=o6(lHHXU0?@B%kGuV}6IvN-{s=A$?@|a}Wd!Qj{7B!8=LJ zjTG%o8V!GrLetu%bpT%J$%|-K5=h>-#c_$%6Zen&;)eWvHR0lDJd8gyODC}oSkUBUPriV0Q$}Z3VfkT&8>cUue7^H{j+#lJy`R00Kunx zyt0iCQ81(!mrgpJ$$@QQZ|Du?(KRzv8;W>D690oaZYaQN12oYrdwS3GjT<3gjr%xjMn1In@S1p*I=bP;?1gBUU=W(S2?k|2hHajvuZ_@~!6aQT9Ov#HOgtK| z$n+lK?hyR_ZQ-#f-Y}HYi}0m{n9fFec@L3*!ERl+W*^TF@})Grv(>-`xRnS%3l`PU z-e>oUD4u1Uaf4jgtA0J#xaZS^LF`Sdm(3S)fSlbczg1m?=L_(k-YdUb#6?hShf4c6 zN+wlIy;!`6HGP`ev%GI!;G%GFpWHjSMLc_=Hy#<^J9&U#sE*aaVtpO?NP3hyNV7)> z!0qGjF^{S($N7*6Q1@8_U@!2XcE{=!cTMlAk)Zk#cT)nq_*NkidLws}h?EC&R`)y~ zd>68NDIOGph5Cu7YEn!Yt!``mbbW%YXBQB9gSpCYIy$sd20ZV!&oD)%eGq!Xg@Pmo zP?O*M@_gDIi&_JC+~sS_=W}*Fc_xS-m!Qr+*|B_7{g$#7{yhBvzSeU++lo3qumk3f zqIqF~$Pzl``25+nVf>FU{B-xLMx0N zt-i6zpO}xF`}~>?TeMX*5?sq9^(mS-_g}nQN$V4ZX^qhigNM*3Sg~kr1HkdGt9<^4BS-*G7*%Ncvq7;s{1S~X@v{n+;fh^f`L%a zT_j&O7yMH!#1mI{4G+KEY`?Q(K1{oM<0A+#9EI zqx#494yeci<2+A9z~3*d*;%@x9X!!{^(<*fZN+N1GB*gxu?0TEz$L3pUXqnkQ@DZ8wZ;;2veTPzw5IfiwpP| zcIpa*o!%Lrzb;x0Uz3)2M+RU(Z;*%irSPu(+^QI}ZNxWP@*dBq8%CmFt;TvNbl{f| z-=y{e7&_C#76sAf4%t2OjTDU`?=FtDWv2%|OBSMwQ%v~qb5~8wx$%ivHrS6;mjpY% z?2T9m$&bJ%*UjR&vwRWz40L){1u!Tq%75NI-%)|`QSA&Alt_J>i00-^-X=%JxyNn# z^D=I!yqz>1e|Y>puUMZnyB4lHFBwgYCdAtc94uqK@mugA#$FrO2FgGl$qz2FiO7`iOxV%{vl|cmu z?)fR2l2ix^(B*XvzmH`{vJlEKxo<5KayH!_v3G2xfgR(Sn%3`AjB{<9- zPvP4JfRuLLpJ*tm+BVe>tHxbf9c?3K)@=vXEPsag=k?C^fdZOkMwD2vr*Q+hL33Q7 zQ?j&qJ2v+GVl9fo#rmz#;IbI-B;+d?_&E43*^Q%fgaBQnJAJop3jA6Xn640~L$mqH z!Gioon1x~f4g-Rl^2jCn_wSyp%ookfU)0FhuPkP$seJ`jnK3bJUv14VW7ue-&6zuG`%)Hfo^GQASa$dBx>0Or+#TB!4arF2A z%b85__ZTs=@2coXMhf#$#*b0Z7%P@M=`UMuNFPYG%5juCG5xd#$+=xf44r#CZAmjR z8Vzx6VnR^?riU+oC0ORYi)B?nBI4xJML{^OY>?+t4@u0IxCxU0EBeQ(3TkAe&9pPt z8S4W!??HV?io1>DvoQ%aJk(voGkTF4jHWVMZssxt(w~^&3L~mH`i{LC^T-olYJSiP zu4u(m#A}h%_XcUODawB59f@brjo;wG$7fX!rYe~ir1*ZQYs(N>*%yrJxg*VCr%fL+ zDd7)O)5Hs3p06Pc4D%?;Q_9z>n5JF&IdC)cHEf`>m-h!JZO#mPXFNgk6vcAzH7MRU z#i`7NZx1^_ebYOY_+I+D6q|;?;yy17o+>!jW;Ah@5Gd2$9In^* z{6IANOY+tyMZjXw_y17#-tkoa@8h_0IL>sOWABV?N_LWwl|rbD?3r0eQq)0N86|Qj zvNOsi$10nQtR$3Op%5t}((iW8{d&J&pZE8#-+9!dtLO9D*Y(`b`@Yx4JNd|qqM4YC z4Cga5f82xR4sh%t7f2WCm_HqQJ&qsyz+cZ%(mdK!p<1ykna!h7_E`}L5#!0#yYtkWq96D|zJBJ?n~|ztjad@zeP~g0({bjk6pHATLg4Dd=S9|vS{EN+O|KuzI$ijS|73v07aG@(2pj2VnW*mt_z7(}fAH~F;#664 zfjiB`Q2L8=Z)=T7H1k@QYiRDyI4ZLo(u}sjBu--rLM0uD*2UukAKEUWL(*+^7+k(C zDg@7F8g*DKFJ|3>-7iqGN@{YHt>wG2cl+g_Y<~KqE6fFRhs^q5uW#?Y_@Mi>KuN3r z=741R>*Y**r^QXV_oh`RDo-w6Qof@p_j3|?vmn!lC06;yv-_l%w{sAq>T{F3JuCIs zSQ9s;tevDpmJLNF9%q%FZ#>Jqa&>qr{bj$Jan5h8jfC?(7#^*kR_%NXkrI<6Gx3cr znmPulWg13>)=X0c`j}0Pu36Jz#-))8j>Jo^>Fu%jaPI+pwG*I5r&C5-@16g~A`-Ub zv=J?_F22+27<_m9@*bw2A1-O%`T z7d`mtFX~4i?uWzSpJ6v;2z;G`Yq_(eg05Dx46U*GC2V+M+Rf;eFBZ?#ckbSdYgs}( z8B^LixQv&%axeFOcq`RVgECNf2EBBNf@8~-8Cdwh&D%qq4duWw(sOfx=-*s91HzC@Zeb5i;hpLxXz}q-h8bX6P4hzVdD{r(*m9T7JeE7dzk2aSj=A53p>;C7Hcb zdvrA4dMU#4XFvc+A-d!kL#ZIoLQ^Tnu{`?l* zL`+4}Nj(;q&Oc_ww|W#wG5SGj{%t#U_v2c6oNyE6O+L4)l(Fc!->)Q+=){2C>O2>uHQv=2i zTO5jbM9P|F5*g07aFuravbK6MF9ALe#q1Q8Q5zrE9WJhleCfvKPd0E;{3(>vY4gma z_G1~>RhGNSs=kwa77ZNduXm-%(p@!>;_*16UYT&eHC}_HC)YgFuE<+wOF!V4)Q)TkT3gX=e^P|;S7d&whK;Bg zlL?*^c1>>DNXpf=1(kP{=`BPnIe#Y$C_Pbl3?GkKN_+@s^QI-4n90%6Pid9S(}=Afqbr?Xy>UB2)>eJ` zm+0P|wS(WDb->GJ0;M}VIc)_Rj5@zLHk5QqhOzfq`MA;24>V0Se*;ev1YmOyBh48b zPOWlkX4_*xTHDLbfCUSK3m+2KreA zcq#g+%T8uO)z@59&=NJCjc+kBE9ftc1z>Pbb0<$>5zSz}x?KGXX zF=7eP7f<9CT)HOMCp_DL+KGr-kFMcwnG~HpA$aI++54!PM^UE*z0`>Sldt8SWszAw z!IG%5ov4}zQO^avn88P!d=2l|Xtur3wq|#jCzK~deG~FxASw}jo$eI#&x#0MiZ7ds z9@TD>CJ_S;63I-yR(A{qW&;Ej^+w$USNLc9P?ExeC)#X?BZ*P<(KVtiKcZ`Zs2xFr z>GeMkFNkw~Mh@V6qnkE=?%e*llZ*=1ZZi|C)|oz_?Ik*!g;G7;h8KJ+w2C4giymbS zMMjSrwzU##;-Zdgt1^W?j}AJ;?hBL+o}lGsBNqXW~TL<@)2#PI zQ7lQJJi&{VyLF^Y-%C2R+sO6Gn7EgkRe!uoemV0fXKznm+tB><;rWWUW7oZC>qBfh z4!N3FoE|gW^2gSPP23*-v*b~oXw%B)`o27WR5u`GqRG}lX?E$m>&BrEZEE&pN0blu zPO`UaW5uz7_c{Ydr`oRuF#Zk;x-J@^u72k@scEM|x*^T`v({+9Esmh5drohHxju9~ zAH8JT%J&63CbX-)Ay(=Vw0)}jo>GPAmdeIK^@qpb^twJYD;I=pmqPjbiD zXM>dR+A$+ab)!(sJ|l*23G0j6Ih9mas&jP5EY@)z+`& zQ{!FcvG0yYcS~FY#RMK+ux2+Np4Zv0%~N zzM$1~7F^ENYN_LDDaq+EdIO|F_Xsz$gwPNY+&AMc_d$Pl^1AIV;pdgK_)aUnMORN1 zc{J zfzQ~#a)NJ*&in=#)@=l*D!Vole%rGLb1)hs;0?!WjFWU4*jaKcbk`>13oceMT#^st zE@+CYZt_+6by-uTJxu$`bvPIX_WH)-Z1@?WV(`h~d({B0mmUzKQBS40mBsgmJkjhy z_g55=R4W!HWU@1#v+-WJ&Dc>(TvN=6C5g!j7wN#L^Gn)FGyg@Ro#ByP*NQ(c1+lcP ze_h`xwEpc?A{nPUU#LcX_Lc9R<5;*oc;TozX;L5&!+jDF@Tc^P3Lu^6nD%PwxwCBY zy-NNk7rSyzv$o%U`ooS1)jTH>9!q@VRKOXo1j2le$ggtfqP7fIT*! zTuhQ--ad%c9c3~qjMj)LM7{NnGimA84;9AM2DAFN`qbSi^+gF@>JDvII(x=M(_rQ- zujFNq6E1>2mb~{RrFUZc>DMl^e@olYo`1TKc9zh8W1;1Y7V}k=*e@5AWsZt?N4Y<4 zk?-h`=S5~k7mhy$->;Ro8>n{Z@%Y-6g#PRCq&kNBOSIogOs{eWOvr5)-7eS>EZUh( zy4r745QHzS{%Y&dRS{`<4SCuYaj>+7?T2jK zlWw8EqA?k1!KWd`c!G0kw#oRClb9Y(PZIZ8krdG$934KR*CXq#!AG0q(h?bJN!BnD z;ARP3I$`G3EavV|u<9c2AQ_{3C%njd$&nRL#K*hvwiHEXZQZi)YGCI-+7ND(H1t4{ zgfg^~qt~u?pd)dJtRI&F)Zv}$dRcrIzdzryRgV0A?_4*E$M&^|vC7a9 z_e0Li?+j85TXOFkb_Dg?c-k#SJ`9ZS~?sehmLD*Y~`m?Usti%h4x@Rwk_DzNQ z?vm_eo-|_her(#q{?Zst9|!|TbZUF(JKOnX>7q;hHdXjplsuX4waB6BzuLfr>H?T*jG3{i921!pSPySG_ zF`RgGsc;eJ<$qq*ZWX!l$8JC;B&WZAe3w)&`1kXOZg5qHzUa(+!ud5E@W#; z9V_y{xt)@f7^c5nRJkFo+nM@q3~%Ev)r~>dp12*HrB(Ynw7lgrhxnYA^&H{-DNn7* zwukpLb20+_mxK*}(a#BU9gEvNh`o}i5YTPVdqryd9CKdn8ev|Tk)$1T=h3~&1-$WH zlHA^-(QdCm7u4Z`>4#&ESclPJ4|d*^+!*bPpWd_97l^sAD+v1!O5ol+xB+Y%eK$>< zwqZNCc_>@-hdSMd58U0_8A+2ahGEw%d)`}ez}X^TA`$K*pJJ{=S$Jf_LpgD7hgQea6Ljg5P^%IMDZHnVhpVYCv%f6OqC;YeY}1Y z))vqh;v$S3#eT90*%$cq-Hsfyj}UnD3j=P`_PTQ z-4IcK{*d41Al+gQQ`pbnpNw=3G!5Pw$K<#2AEDKad6s1KWr7vbks zH`5e1SB7`;V^#8nf}ER2U*A0BPgpm87=K62@l|Wl&lk0uIxF)MD>tQAcr$4ucE9ZY z2)-2>*BZ-C?-=ybtfA~9Q_J0vJU>SP=ja^LV4HL(tfkgTZlL1`!PmOL2Uqpx)`43I ztSIZ=!`tf80a46N!XF1Lr3`CFecf9eJ6)8`Wh}R)&HgacA2~I}&f79{!^mq@mgN?0 zz)SYu(Vy{?Ycag$ZPEcgzYmVj{vnQ>u*$47{wVo;?MrE|M7IhJeS6BMxhtn*DttyC z?~&^6BZ>y3EsMGxS3de5qZL3N_%kXhD$vWnaT;|s7k$;4p)T{PjAj~6u3a3nfg3Q+ zplf_wf9~F!3T_!Jw@;i$lT>|Y-kRt6d%v1F!z=~aTWi0$RgMRker5QcH{z%?+bdf5 z?ow4*hW4B!hv(_21s}}wn<~{`460xkv)-wZM4!HUCD80K6(v`a%iNP!aD%!3e3xkQ zZ1AV+0zVqWKDYh&awqz;$gLPw4cqwLGEsZUk;XdHif*Z3i?b=b$L+INUB0_|&KaG< zm7h6RR9fQZ`mL;F7jur`rqZz#%}=G|yH$4=@T)Pdaz^EkeI*o}ZW<)zC#WszSQ1~G z)Ul9ml5V&su%(WsWeK(l7W#Fu5qst3+4&Dedie@}ih9m}#+t#VU7_IAdk0akJ0`O? zI1XP5iJsMcBz!4CXI9ZdLQ%{3BaA)j*o+D>RJtWin=ht?BmDNOsCy=kA3b7xCGW18 z33n7Hb5zdQ-bx)W=?ksjTHZ=RT=(IgDl*dYCxyrD;)92biHGN|4e4W^-WonG!ER(z zY+VpFXnoBgxN9--)@fcf^6buMF|yqG;Ecv#=1)I+?R-xU7pAk$pX;x74#2aG+Hc3E zZ-2WS`td}-A%^j^bY;tC0jt&UqX%=kui9cibK$EvgAU*acQn}Q3Mf-b2 zn-{-K^;Vf`xel9YkjZ2Jlyx{enyy}X%s3bm*?x{Cxvvm3iP z)2w+JXCAWje3;sU7n{aTg>4h262Jlr~6%TklKPq77sJeQ- zJCHOz_-Re!Ro{WRAZeb5BZH}47?}1f=g?$)qT*O^#`$ZCq_hoOdAjIUqP~&*`lojm zkq_Q@l&zlKT|5XLwuk#Ny_{0}aGb7py&?R=XoqXSpMX_wCnfnxZgT6lgNkfcN5WsZ zE&p~Urso= z=6@K!;CCTy}A2kFwwQzICj?OAPc~X70TJGDD6u_R&pDyND&^(;0Kc^I} zFQ8}}4a@1czs0_wq#hV7bBpJvFv(*hEuvzs%vSubWUS;ECL|~U! zcWl1Re3{OX&U$|(Cy@{H21kArHCsN`F$&Rd$}9U3b-N^`E3aX@#&r(wqDrpkpFZ<# zQs!M`CZD2B>HDr6cETTR!^gK(qP-9@AfUo9BO_StX>K?s>XbrjfTf$(_;n+R#~2MdA$s6%vhQ?vQ@! zhV?h>u%46Bftb1>9$7i(8#*re5s!{s(Nd~(3tF>29My3Ouio|Mjp4gAGsi<>cVF&_ zOjPw`?~3n^zR`GgFIjt-I4AH-yg6I#h^bLWn%%e)XFt!I)^C2|K_z;(tDc=hoYHyf ztUB>a7AX~<={)iK=yekE!zEJ_CyQ(3!0m4G`spOz*DQQ#7X&8?!k=2`s0Zzu(>GV1 z`Q}mA?#^C?G_wnE$_It#I^e@;ybTyXVefHV~#(6UL~G{ zP}BG&AAHlfxA7tq?9E~M#!`g=f7Wt$x|Boi0)zPo1$_oXO|^Giq({01XBce4vbROc zE8Q`lFGO8;cr)e0*OO;5*!jNubdAp0b1smOu%&4y6rc3WR3sFpXq3gCVdpnD z&r-Kl-^lG7Bo$9DS-NY=wTLOc&g{XFR!v(ZfgXJlAP)vgoLAaT9gMLGj*i{pvs@GUQ?+N%n9?{9)K|I2 zz-DZ)YgwD_n#C#MFrgt=k)HiBag~12EV6##po!GOJ9~V; i+CiPr->)&&wzASup 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 delta 51495 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

lI|~OV`pF(Ak#w&K^{E~ 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 diff --git a/rhino/jsdoc/src/parser.js b/rhino/jsdoc/src/parser.js index 1b1c05b2..3d26552d 100644 --- a/rhino/jsdoc/src/parser.js +++ b/rhino/jsdoc/src/parser.js @@ -36,3 +36,13 @@ Parser.prototype.addNodeVisitor = function(visitor) { Parser.prototype.getNodeVisitors = function() { return this._visitor.getRhinoNodeVisitors(); }; + +// TODO: docs +Parser.prototype._walkAst = function(ast, visitor, sourceName) { + // On Rhino, we visit the comments all at once before we walk the AST + this._visitor.visitNodeComments({ + leadingComments: ast.comments + }, this, sourceName); + + Parser.super_.prototype._walkAst.call(this, ast, visitor, sourceName); +}; diff --git a/rhino/jsdoc/src/visitor.js b/rhino/jsdoc/src/visitor.js index 0295f2df..783c17a6 100644 --- a/rhino/jsdoc/src/visitor.js +++ b/rhino/jsdoc/src/visitor.js @@ -15,6 +15,11 @@ var Visitor = exports.Visitor = function(parser) { // Rhino nodes retrieved from the org.jsdoc.AstBuilder instance this._rhinoNodes = null; + // only visit nodes, not their comments--the parser visits all the comments at once + this._visitors = [ + this.visitNode + ]; + this.addAstNodeVisitor({ visitNode: this._visitRhinoNode.bind(this) }); @@ -26,6 +31,14 @@ Visitor.prototype.addRhinoNodeVisitor = function(visitor) { this._rhinoNodeVisitors.push(visitor); }; +// TODO: docs (deprecated) +Visitor.prototype.removeRhinoNodeVisitor = function(visitor) { + var idx = this._rhinoNodeVisitors.indexOf(visitor); + if (idx !== -1) { + this._rhinoNodeVisitors.splice(idx, 1); + } +}; + // TODO: docs (deprecated) Visitor.prototype.getRhinoNodeVisitors = function() { return this._rhinoNodeVisitors; @@ -34,9 +47,8 @@ Visitor.prototype.getRhinoNodeVisitors = function() { // TODO: docs (deprecated) Visitor.prototype._visitRhinoNode = function(astNode, e, parser, filename) { var rhinoNode; - var visitors = this._rhinoNodeVisitors; - // if there are no visitors, bail out before we retrieve all the nodes + if (!visitors.length) { return; } diff --git a/test/fixtures/eventorder.js b/test/fixtures/eventorder.js new file mode 100644 index 00000000..0c9e497b --- /dev/null +++ b/test/fixtures/eventorder.js @@ -0,0 +1,32 @@ +'use strict'; + +var _ = require('underscore'); + +/** + * Socket class. + * @class + */ +function Socket() { + // ... +} + +/** + * Send a packet. + * @param {Packet} packet - The packet to send. + * @return {boolean} `true` on success, `false` on failure. + */ +Socket.prototype.send = function(packet) { + // ... +}; + +/** + * Virtual doclet for `Packet` class. + * @class Packet + */ + +/** + * Close the socket. + */ +Socket.prototype.close = function() { + // ... +}; diff --git a/test/specs/jsdoc/src/parser.js b/test/specs/jsdoc/src/parser.js index 2da1d9d0..0266d03e 100644 --- a/test/specs/jsdoc/src/parser.js +++ b/test/specs/jsdoc/src/parser.js @@ -340,6 +340,71 @@ describe('jsdoc/src/parser', function() { expect(doclet.comment).toMatch('REPLACED!'); }); }); + + describe('event order', function() { + var events = { + all: [], + jsdocCommentFound: [], + symbolFound: [] + }; + var source = fs.readFileSync(path.join(global.env.dirname, + 'test/fixtures/eventorder.js'), 'utf8'); + + function pushEvent(e) { + events.all.push(e); + events[e.event].push(e); + } + + function sourceOrderSort(atom1, atom2) { + if (atom1.range[1] < atom2.range[0]) { + return -1; + } + else if (atom1.range[0] < atom2.range[0] && atom1.range[1] === atom2.range[1]) { + return 1; + } + else { + return 0; + } + } + + // Rhino fires events in a different order + if (jasmine.jsParser === 'rhino') { + it('should fire all jsdocCommentFound events, in source order, ' + + 'then all symbolFound events, in source order', function() { + parser.on('jsdocCommentFound', pushEvent); + + parser.on('symbolFound', pushEvent); + + jsdoc.src.handlers.attachTo(parser); + parser.parse('javascript:' + source); + + // make sure jsdocCommentFound events are in the correct order + events.jsdocCommentFound.slice(0).sort(sourceOrderSort) + .forEach(function(e, i) { + expect(e).toBe(events.jsdocCommentFound[i]); + }); + // make sure symbolFound events are in the correct order + events.symbolFound.slice(0).sort(sourceOrderSort).forEach(function(e, i) { + expect(e).toBe(events.symbolFound[i]); + }); + // make sure jsdocCommentFound events are all first + events.all.slice(0, events.jsdocCommentFound.length) + .forEach(function(e, i) { + expect(e).toBe(events.all[i]); + }); + }); + } + else { + it('should fire interleaved jsdocCommentFound and symbolFound events, ' + + 'in source order', function() { + jsdoc.src.handlers.attachTo(parser); + parser.parse(source); + events.all.slice(0).sort(sourceOrderSort).forEach(function(e, i) { + expect(e).toBe(events.all[i]); + }); + }); + } + }); }); describe('addAstNodeVisitor', function() {