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});