1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverorg.antlr.runtime.tree.RewriteRuleSubtreeStream = function() { 2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver var sup = org.antlr.runtime.tree.RewriteRuleSubtreeStream.superclass; 3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver sup.constructor.apply(this, arguments); 4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}; 5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverorg.antlr.lang.extend(org.antlr.runtime.tree.RewriteRuleSubtreeStream, 7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver org.antlr.runtime.tree.RewriteRuleElementStream, { 8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** Treat next element as a single node even if it's a subtree. 9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * This is used instead of next() when the result has to be a 10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * tree root node. Also prevents us from duplicating recently-added 11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * children; e.g., ^(type ID)+ adds ID to type and then 2nd iteration 12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * must dup the type node, but ID has been added. 13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Referencing a rule result twice is ok; dup entire tree as 15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * we can't be adding trees as root; e.g., expr expr. 16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Hideous code duplication here with super.next(). Can't think of 18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * a proper way to refactor. This needs to always call dup node 19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * and super.next() doesn't know which to call: dup node or dup tree. 20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver nextNode: function() { 22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver var n = this.size(), 23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver el; 24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if ( this.dirty || (this.cursor>=n && n===1) ) { 25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // if out of elements and size is 1, dup (at most a single node 26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // since this is for making root nodes). 27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver el = this._next(); 28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return this.adaptor.dupNode(el); 29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // test size above then fetch 31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver el = this._next(); 32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return el; 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver }, 34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver dup: function(el) { 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return this.adaptor.dupTree(el); 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver});