Package schrodinger :: Package application :: Package desmond :: Package antlr3 :: Module tree :: Class RewriteRuleSubtreeStream
[hide private]
[frames] | no frames]

Class RewriteRuleSubtreeStream

              object --+    
                       |    
RewriteRuleElementStream --+
                           |
                          RewriteRuleSubtreeStream

@brief Internal helper class.

Instance Methods [hide private]
 
nextNode(self)
Treat next element as a single node even if it's a subtree.
 
dup(self, el)
When constructing trees, sometimes we need to dup a token or AST subtree.

Inherited from RewriteRuleElementStream: __init__, __len__, add, getDescription, hasNext, nextTree, reset, size, toTree

Inherited from RewriteRuleElementStream (private): _next

Inherited from object: __delattr__, __format__, __getattribute__, __hash__, __new__, __reduce__, __reduce_ex__, __repr__, __setattr__, __sizeof__, __str__, __subclasshook__

Properties [hide private]

Inherited from object: __class__

Method Details [hide private]

nextNode(self)

 

Treat next element as a single node even if it's a subtree. This is used instead of next() when the result has to be a tree root node. Also prevents us from duplicating recently-added children; e.g., ^(type ID)+ adds ID to type and then 2nd iteration must dup the type node, but ID has been added.

Referencing a rule result twice is ok; dup entire tree as we can't be adding trees as root; e.g., expr expr.

Hideous code duplication here with super.next(). Can't think of a proper way to refactor. This needs to always call dup node and super.next() doesn't know which to call: dup node or dup tree.

dup(self, el)

 

When constructing trees, sometimes we need to dup a token or AST subtree. Dup'ing a token means just creating another AST node around it. For trees, you must call the adaptor.dupTree() unless the element is for a tree root; then it must be a node dup.

Overrides: RewriteRuleElementStream.dup
(inherited documentation)