Changeset 549
- Timestamp:
- 06/10/08 10:13:24 (6 months ago)
- Files:
-
- cly/trunk/cly/builder.py (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
cly/trunk/cly/builder.py
r548 r549 135 135 for this node. See __init__ for more information on attributes. 136 136 137 As a special case, if a positional argument is a `Grammar` object, its138 *children* will be merged.139 140 137 >>> top = Node(name='top') 141 138 >>> top(subnode=Node()) … … 145 142 """ 146 143 for node in anonymous: 147 if isinstance(node, Grammar):148 children = dict([(n.name, n) for n in node])149 self(**children)150 continue151 144 if not isinstance(node, Node): 152 145 raise InvalidAnonymousNode('"%r" must be a Node object' % node) … … 159 152 for k, v in options.iteritems(): 160 153 if isinstance(v, Node): 161 if k.endswith('_'): 162 k = k[:-1] 154 k = k.rstrip('_') 163 155 v.name = k 164 156 v.parent = self … … 399 391 400 392 anonymous = property(_get_anonymous, doc=_get_anonymous.__doc__) 393 394 def update(self, node): 395 """Merge another node into this one. 396 397 If a merging node collides with an existing one, the existing node 398 will be preserved and the merging nodes children merged. 399 400 :param node: Node to merge into this. 401 """ 402 self.__anonymous_children += node.__anonymous_children 403 for key, child in node._children.iteritems(): 404 if key not in self: 405 self[key] = child 406 else: 407 self[key].update(child) 401 408 402 409 def __repr__(self):
