[pypy-svn] r17248 - in pypy/dist/pypy/interpreter: astcompiler pyparser/test
pedronis at codespeak.net
pedronis at codespeak.net
Mon Sep 5 18:40:36 CEST 2005
Author: pedronis
Date: Mon Sep 5 18:40:34 2005
New Revision: 17248
Modified:
pypy/dist/pypy/interpreter/astcompiler/ast.py
pypy/dist/pypy/interpreter/astcompiler/ast.txt
pypy/dist/pypy/interpreter/astcompiler/astgen.py
pypy/dist/pypy/interpreter/pyparser/test/test_astbuilder.py
Log:
don't use a generic type-problematic flatten_nodes for getChildNodes, put special cases treatment specs into ast.txt itself,
flatten_nodes(CLASS.attr):
add to nodelist
added code in astgen.py to support this.
Modified: pypy/dist/pypy/interpreter/astcompiler/ast.py
==============================================================================
--- pypy/dist/pypy/interpreter/astcompiler/ast.py (original)
+++ pypy/dist/pypy/interpreter/astcompiler/ast.py Mon Sep 5 18:40:34 2005
@@ -16,14 +16,14 @@
l.append(elt)
return l
-def flatten_nodes(list):
- return [n for n in flatten(list) if isinstance(n, Node)]
+#def flatten_nodes(list):
+# return [n for n in flatten(list) if isinstance(n, Node)]
nodes = {}
class Node(Wrappable):
"""Abstract base class for ast nodes."""
- def __init__(self, lineno=-1):
+ def __init__(self, lineno = -1):
self.lineno = lineno
self.filename = ""
@@ -79,6 +79,7 @@
self.right = right
def getChildren(self):
+ "NOT_RPYTHON"
return self.left, self.right
def getChildNodes(self):
@@ -96,11 +97,12 @@
self.nodes = nodes
def getChildren(self):
+ "NOT_RPYTHON"
return tuple(flatten(self.nodes))
def getChildNodes(self):
nodelist = []
- nodelist.extend(flatten_nodes(self.nodes))
+ nodelist.extend(self.nodes)
return nodelist
def __repr__(self):
@@ -117,6 +119,7 @@
self.flags = flags
def getChildren(self):
+ "NOT_RPYTHON"
return self.expr, self.attrname, self.flags
def getChildNodes(self):
@@ -134,11 +137,12 @@
self.nodes = nodes
def getChildren(self):
+ "NOT_RPYTHON"
return tuple(flatten(self.nodes))
def getChildNodes(self):
nodelist = []
- nodelist.extend(flatten_nodes(self.nodes))
+ nodelist.extend(self.nodes)
return nodelist
def __repr__(self):
@@ -154,6 +158,7 @@
self.flags = flags
def getChildren(self):
+ "NOT_RPYTHON"
return self.name, self.flags
def getChildNodes(self):
@@ -171,11 +176,12 @@
self.nodes = nodes
def getChildren(self):
+ "NOT_RPYTHON"
return tuple(flatten(self.nodes))
def getChildNodes(self):
nodelist = []
- nodelist.extend(flatten_nodes(self.nodes))
+ nodelist.extend(self.nodes)
return nodelist
def __repr__(self):
@@ -191,6 +197,7 @@
self.fail = fail
def getChildren(self):
+ "NOT_RPYTHON"
children = []
children.append(self.test)
children.append(self.fail)
@@ -216,6 +223,7 @@
self.expr = expr
def getChildren(self):
+ "NOT_RPYTHON"
children = []
children.extend(flatten(self.nodes))
children.append(self.expr)
@@ -223,7 +231,7 @@
def getChildNodes(self):
nodelist = []
- nodelist.extend(flatten_nodes(self.nodes))
+ nodelist.extend(self.nodes)
nodelist.append(self.expr)
return nodelist
@@ -241,6 +249,7 @@
self.expr = expr
def getChildren(self):
+ "NOT_RPYTHON"
return self.node, self.op, self.expr
def getChildNodes(self):
@@ -258,6 +267,7 @@
self.expr = expr
def getChildren(self):
+ "NOT_RPYTHON"
return self.expr,
def getChildNodes(self):
@@ -275,11 +285,12 @@
self.nodes = nodes
def getChildren(self):
+ "NOT_RPYTHON"
return tuple(flatten(self.nodes))
def getChildNodes(self):
nodelist = []
- nodelist.extend(flatten_nodes(self.nodes))
+ nodelist.extend(self.nodes)
return nodelist
def __repr__(self):
@@ -294,11 +305,12 @@
self.nodes = nodes
def getChildren(self):
+ "NOT_RPYTHON"
return tuple(flatten(self.nodes))
def getChildNodes(self):
nodelist = []
- nodelist.extend(flatten_nodes(self.nodes))
+ nodelist.extend(self.nodes)
return nodelist
def __repr__(self):
@@ -313,11 +325,12 @@
self.nodes = nodes
def getChildren(self):
+ "NOT_RPYTHON"
return tuple(flatten(self.nodes))
def getChildNodes(self):
nodelist = []
- nodelist.extend(flatten_nodes(self.nodes))
+ nodelist.extend(self.nodes)
return nodelist
def __repr__(self):
@@ -331,6 +344,7 @@
Node.__init__(self, lineno)
def getChildren(self):
+ "NOT_RPYTHON"
return []
def getChildNodes(self):
@@ -351,6 +365,7 @@
self.dstar_args = dstar_args
def getChildren(self):
+ "NOT_RPYTHON"
children = []
children.append(self.node)
children.extend(flatten(self.args))
@@ -361,7 +376,7 @@
def getChildNodes(self):
nodelist = []
nodelist.append(self.node)
- nodelist.extend(flatten_nodes(self.args))
+ nodelist.extend(self.args)
if self.star_args is not None:
nodelist.append(self.star_args)
if self.dstar_args is not None:
@@ -383,6 +398,7 @@
self.code = code
def getChildren(self):
+ "NOT_RPYTHON"
children = []
children.append(self.name)
children.extend(flatten(self.bases))
@@ -392,7 +408,7 @@
def getChildNodes(self):
nodelist = []
- nodelist.extend(flatten_nodes(self.bases))
+ nodelist.extend(self.bases)
nodelist.append(self.code)
return nodelist
@@ -410,6 +426,7 @@
self.ops = ops
def getChildren(self):
+ "NOT_RPYTHON"
children = []
children.append(self.expr)
children.extend(flatten(self.ops))
@@ -418,10 +435,9 @@
def getChildNodes(self):
nodelist = []
nodelist.append(self.expr)
- # this is a replacement of flatten_nodes
+ # ops is a list of couples (op_name, node)
for op_name, node in self.ops:
nodelist.append(node)
- # nodelist.extend(flatten_nodes(self.ops))
return nodelist
def __repr__(self):
@@ -436,6 +452,7 @@
self.value = value
def getChildren(self):
+ "NOT_RPYTHON"
return self.value,
def getChildNodes(self):
@@ -452,6 +469,7 @@
Node.__init__(self, lineno)
def getChildren(self):
+ "NOT_RPYTHON"
return []
def getChildNodes(self):
@@ -469,11 +487,12 @@
self.nodes = nodes
def getChildren(self):
+ "NOT_RPYTHON"
return tuple(flatten(self.nodes))
def getChildNodes(self):
nodelist = []
- nodelist.extend(flatten_nodes(self.nodes))
+ nodelist.extend(self.nodes)
return nodelist
def __repr__(self):
@@ -489,15 +508,15 @@
self.items = items
def getChildren(self):
+ "NOT_RPYTHON"
return tuple(flatten(self.items))
def getChildNodes(self):
nodelist = []
- # replacement for flatten_nodes()
+ # items is a list of couples (node (key), node (value))
for key, value in self.items:
nodelist.append(key)
nodelist.append(value)
- # nodelist.extend(flatten_nodes(self.items))
return nodelist
def __repr__(self):
@@ -512,6 +531,7 @@
self.expr = expr
def getChildren(self):
+ "NOT_RPYTHON"
return self.expr,
def getChildNodes(self):
@@ -530,6 +550,7 @@
self.right = right
def getChildren(self):
+ "NOT_RPYTHON"
return self.left, self.right
def getChildNodes(self):
@@ -546,6 +567,7 @@
Node.__init__(self, lineno)
def getChildren(self):
+ "NOT_RPYTHON"
return []
def getChildNodes(self):
@@ -565,6 +587,7 @@
self.globals = globals
def getChildren(self):
+ "NOT_RPYTHON"
children = []
children.append(self.expr)
children.append(self.locals)
@@ -593,6 +616,7 @@
self.right = right
def getChildren(self):
+ "NOT_RPYTHON"
return self.left, self.right
def getChildNodes(self):
@@ -613,6 +637,7 @@
self.else_ = else_
def getChildren(self):
+ "NOT_RPYTHON"
children = []
children.append(self.assign)
children.append(self.list)
@@ -642,6 +667,7 @@
self.names = names
def getChildren(self):
+ "NOT_RPYTHON"
return self.modname, self.names
def getChildNodes(self):
@@ -672,6 +698,7 @@
def getChildren(self):
+ "NOT_RPYTHON"
children = []
children.append(self.decorators)
children.append(self.name)
@@ -686,7 +713,7 @@
nodelist = []
if self.decorators is not None:
nodelist.append(self.decorators)
- nodelist.extend(flatten_nodes(self.defaults))
+ nodelist.extend(self.defaults)
nodelist.append(self.code)
return nodelist
@@ -706,6 +733,7 @@
def getChildren(self):
+ "NOT_RPYTHON"
return self.code,
def getChildNodes(self):
@@ -724,9 +752,11 @@
self.iter = iter
self.ifs = ifs
self.is_outmost = False
+
def getChildren(self):
+ "NOT_RPYTHON"
children = []
children.append(self.assign)
children.append(self.iter)
@@ -737,7 +767,7 @@
nodelist = []
nodelist.append(self.assign)
nodelist.append(self.iter)
- nodelist.extend(flatten_nodes(self.ifs))
+ nodelist.extend(self.ifs)
return nodelist
def __repr__(self):
@@ -752,6 +782,7 @@
self.test = test
def getChildren(self):
+ "NOT_RPYTHON"
return self.test,
def getChildNodes(self):
@@ -770,6 +801,7 @@
self.quals = quals
def getChildren(self):
+ "NOT_RPYTHON"
children = []
children.append(self.expr)
children.extend(flatten(self.quals))
@@ -778,7 +810,7 @@
def getChildNodes(self):
nodelist = []
nodelist.append(self.expr)
- nodelist.extend(flatten_nodes(self.quals))
+ nodelist.extend(self.quals)
return nodelist
def __repr__(self):
@@ -794,6 +826,7 @@
self.attrname = attrname
def getChildren(self):
+ "NOT_RPYTHON"
return self.expr, self.attrname
def getChildNodes(self):
@@ -811,6 +844,7 @@
self.names = names
def getChildren(self):
+ "NOT_RPYTHON"
return self.names,
def getChildNodes(self):
@@ -825,10 +859,12 @@
class If(Node):
def __init__(self, tests, else_, lineno=-1):
Node.__init__(self, lineno)
+ # tests is a list of couples (node (test), node (suite))
self.tests = tests
self.else_ = else_
def getChildren(self):
+ "NOT_RPYTHON"
children = []
children.extend(flatten(self.tests))
children.append(self.else_)
@@ -836,7 +872,10 @@
def getChildNodes(self):
nodelist = []
- nodelist.extend(flatten_nodes(self.tests))
+ # tests is a list of couples (node (test), node (suite))
+ for test, suite in self.items:
+ nodelist.append(test)
+ nodelist.append(suite)
if self.else_ is not None:
nodelist.append(self.else_)
return nodelist
@@ -853,6 +892,7 @@
self.names = names
def getChildren(self):
+ "NOT_RPYTHON"
return self.names,
def getChildNodes(self):
@@ -870,6 +910,7 @@
self.expr = expr
def getChildren(self):
+ "NOT_RPYTHON"
return self.expr,
def getChildNodes(self):
@@ -888,6 +929,7 @@
self.expr = expr
def getChildren(self):
+ "NOT_RPYTHON"
return self.name, self.expr
def getChildNodes(self):
@@ -915,6 +957,7 @@
def getChildren(self):
+ "NOT_RPYTHON"
children = []
children.append(self.argnames)
children.extend(flatten(self.defaults))
@@ -924,7 +967,7 @@
def getChildNodes(self):
nodelist = []
- nodelist.extend(flatten_nodes(self.defaults))
+ nodelist.extend(self.defaults)
nodelist.append(self.code)
return nodelist
@@ -941,6 +984,7 @@
self.right = right
def getChildren(self):
+ "NOT_RPYTHON"
return self.left, self.right
def getChildNodes(self):
@@ -958,11 +1002,12 @@
self.nodes = nodes
def getChildren(self):
+ "NOT_RPYTHON"
return tuple(flatten(self.nodes))
def getChildNodes(self):
nodelist = []
- nodelist.extend(flatten_nodes(self.nodes))
+ nodelist.extend(self.nodes)
return nodelist
def __repr__(self):
@@ -978,6 +1023,7 @@
self.quals = quals
def getChildren(self):
+ "NOT_RPYTHON"
children = []
children.append(self.expr)
children.extend(flatten(self.quals))
@@ -986,7 +1032,7 @@
def getChildNodes(self):
nodelist = []
nodelist.append(self.expr)
- nodelist.extend(flatten_nodes(self.quals))
+ nodelist.extend(self.quals)
return nodelist
def __repr__(self):
@@ -1003,6 +1049,7 @@
self.ifs = ifs
def getChildren(self):
+ "NOT_RPYTHON"
children = []
children.append(self.assign)
children.append(self.list)
@@ -1013,7 +1060,7 @@
nodelist = []
nodelist.append(self.assign)
nodelist.append(self.list)
- nodelist.extend(flatten_nodes(self.ifs))
+ nodelist.extend(self.ifs)
return nodelist
def __repr__(self):
@@ -1028,6 +1075,7 @@
self.test = test
def getChildren(self):
+ "NOT_RPYTHON"
return self.test,
def getChildNodes(self):
@@ -1046,6 +1094,7 @@
self.right = right
def getChildren(self):
+ "NOT_RPYTHON"
return self.left, self.right
def getChildNodes(self):
@@ -1064,6 +1113,7 @@
self.node = node
def getChildren(self):
+ "NOT_RPYTHON"
return self.doc, self.node
def getChildNodes(self):
@@ -1082,6 +1132,7 @@
self.right = right
def getChildren(self):
+ "NOT_RPYTHON"
return self.left, self.right
def getChildNodes(self):
@@ -1099,6 +1150,7 @@
self.varname = varname
def getChildren(self):
+ "NOT_RPYTHON"
return self.varname,
def getChildNodes(self):
@@ -1115,6 +1167,7 @@
Node.__init__(self, lineno)
def getChildren(self):
+ "NOT_RPYTHON"
return []
def getChildNodes(self):
@@ -1132,6 +1185,7 @@
self.expr = expr
def getChildren(self):
+ "NOT_RPYTHON"
return self.expr,
def getChildNodes(self):
@@ -1149,6 +1203,7 @@
self.number_value = number_value
def getChildren(self):
+ "NOT_RPYTHON"
return self.number_value,
def getChildNodes(self):
@@ -1166,11 +1221,12 @@
self.nodes = nodes
def getChildren(self):
+ "NOT_RPYTHON"
return tuple(flatten(self.nodes))
def getChildNodes(self):
nodelist = []
- nodelist.extend(flatten_nodes(self.nodes))
+ nodelist.extend(self.nodes)
return nodelist
def __repr__(self):
@@ -1184,6 +1240,7 @@
Node.__init__(self, lineno)
def getChildren(self):
+ "NOT_RPYTHON"
return []
def getChildNodes(self):
@@ -1202,6 +1259,7 @@
self.right = right
def getChildren(self):
+ "NOT_RPYTHON"
return self.left, self.right
def getChildNodes(self):
@@ -1220,6 +1278,7 @@
self.dest = dest
def getChildren(self):
+ "NOT_RPYTHON"
children = []
children.extend(flatten(self.nodes))
children.append(self.dest)
@@ -1227,7 +1286,7 @@
def getChildNodes(self):
nodelist = []
- nodelist.extend(flatten_nodes(self.nodes))
+ nodelist.extend(self.nodes)
if self.dest is not None:
nodelist.append(self.dest)
return nodelist
@@ -1245,6 +1304,7 @@
self.dest = dest
def getChildren(self):
+ "NOT_RPYTHON"
children = []
children.extend(flatten(self.nodes))
children.append(self.dest)
@@ -1252,7 +1312,7 @@
def getChildNodes(self):
nodelist = []
- nodelist.extend(flatten_nodes(self.nodes))
+ nodelist.extend(self.nodes)
if self.dest is not None:
nodelist.append(self.dest)
return nodelist
@@ -1271,6 +1331,7 @@
self.expr3 = expr3
def getChildren(self):
+ "NOT_RPYTHON"
children = []
children.append(self.expr1)
children.append(self.expr2)
@@ -1299,6 +1360,7 @@
self.value = value
def getChildren(self):
+ "NOT_RPYTHON"
return self.value,
def getChildNodes(self):
@@ -1317,6 +1379,7 @@
self.right = right
def getChildren(self):
+ "NOT_RPYTHON"
return self.left, self.right
def getChildNodes(self):
@@ -1337,6 +1400,7 @@
self.upper = upper
def getChildren(self):
+ "NOT_RPYTHON"
children = []
children.append(self.expr)
children.append(self.flags)
@@ -1365,11 +1429,12 @@
self.nodes = nodes
def getChildren(self):
+ "NOT_RPYTHON"
return tuple(flatten(self.nodes))
def getChildNodes(self):
nodelist = []
- nodelist.extend(flatten_nodes(self.nodes))
+ nodelist.extend(self.nodes)
return nodelist
def __repr__(self):
@@ -1384,11 +1449,12 @@
self.nodes = nodes
def getChildren(self):
+ "NOT_RPYTHON"
return tuple(flatten(self.nodes))
def getChildNodes(self):
nodelist = []
- nodelist.extend(flatten_nodes(self.nodes))
+ nodelist.extend(self.nodes)
return nodelist
def __repr__(self):
@@ -1403,6 +1469,7 @@
self.string_value = string_value
def getChildren(self):
+ "NOT_RPYTHON"
return self.string_value,
def getChildNodes(self):
@@ -1421,6 +1488,7 @@
self.right = right
def getChildren(self):
+ "NOT_RPYTHON"
return self.left, self.right
def getChildNodes(self):
@@ -1440,6 +1508,7 @@
self.subs = subs
def getChildren(self):
+ "NOT_RPYTHON"
children = []
children.append(self.expr)
children.append(self.flags)
@@ -1449,7 +1518,7 @@
def getChildNodes(self):
nodelist = []
nodelist.append(self.expr)
- nodelist.extend(flatten_nodes(self.subs))
+ nodelist.extend(self.subs)
return nodelist
def __repr__(self):
@@ -1467,6 +1536,7 @@
self.else_ = else_
def getChildren(self):
+ "NOT_RPYTHON"
children = []
children.append(self.body)
children.extend(flatten(self.handlers))
@@ -1476,7 +1546,7 @@
def getChildNodes(self):
nodelist = []
nodelist.append(self.body)
- # replacement for flatten_nodes(self.handlers)
+ # handlers is a list of triplets (expr1, expr2, body)
for expr1, expr2, body in self.handlers:
if expr1 is not None:
nodelist.append(expr1)
@@ -1501,6 +1571,7 @@
self.final = final
def getChildren(self):
+ "NOT_RPYTHON"
return self.body, self.final
def getChildNodes(self):
@@ -1518,11 +1589,12 @@
self.nodes = nodes
def getChildren(self):
+ "NOT_RPYTHON"
return tuple(flatten(self.nodes))
def getChildNodes(self):
nodelist = []
- nodelist.extend(flatten_nodes(self.nodes))
+ nodelist.extend(self.nodes)
return nodelist
def __repr__(self):
@@ -1537,6 +1609,7 @@
self.expr = expr
def getChildren(self):
+ "NOT_RPYTHON"
return self.expr,
def getChildNodes(self):
@@ -1554,6 +1627,7 @@
self.expr = expr
def getChildren(self):
+ "NOT_RPYTHON"
return self.expr,
def getChildNodes(self):
@@ -1573,6 +1647,7 @@
self.else_ = else_
def getChildren(self):
+ "NOT_RPYTHON"
children = []
children.append(self.test)
children.append(self.body)
@@ -1599,6 +1674,7 @@
self.value = value
def getChildren(self):
+ "NOT_RPYTHON"
return self.value,
def getChildNodes(self):
@@ -1616,7 +1692,7 @@
method in replacement of the former visitor.visit = walker.dispatch
It could also use to identify base type for visit arguments of AST nodes
"""
-
+
def default(self, node):
for child in node.getChildNodes():
child.accept(self)
Modified: pypy/dist/pypy/interpreter/astcompiler/ast.txt
==============================================================================
--- pypy/dist/pypy/interpreter/astcompiler/ast.txt (original)
+++ pypy/dist/pypy/interpreter/astcompiler/ast.txt Mon Sep 5 18:40:34 2005
@@ -100,3 +100,30 @@
init(GenExprFor):
self.is_outmost = False
+
+flatten_nodes(Compare.ops):
+ # ops is a list of couples (op_name, node)
+ for op_name, node in self.ops:
+ nodelist.append(node)
+
+flatten_nodes(TryExcept.handlers):
+ # handlers is a list of triplets (expr1, expr2, body)
+ for expr1, expr2, body in self.handlers:
+ if expr1 is not None:
+ nodelist.append(expr1)
+ if expr2 is not None:
+ nodelist.append(expr2)
+ if body is not None:
+ nodelist.append(body)
+
+flatten_nodes(Dict.items):
+ # items is a list of couples (node (key), node (value))
+ for key, value in self.items:
+ nodelist.append(key)
+ nodelist.append(value)
+
+flatten_nodes(If.tests):
+ # tests is a list of couples (node (test), node (suite))
+ for test, suite in self.items:
+ nodelist.append(test)
+ nodelist.append(suite)
Modified: pypy/dist/pypy/interpreter/astcompiler/astgen.py
==============================================================================
--- pypy/dist/pypy/interpreter/astcompiler/astgen.py (original)
+++ pypy/dist/pypy/interpreter/astcompiler/astgen.py Mon Sep 5 18:40:34 2005
@@ -50,6 +50,7 @@
self.argprops = self.get_argprops()
self.nargs = len(self.argnames)
self.init = []
+ self.flatten_nodes = {}
self.parent = parent
def setup_parent(self, classes):
@@ -130,12 +131,15 @@
print >> buf, " Node.__init__(self, lineno)"
if self.argnames:
for name in self.argnames:
+ if name in self.flatten_nodes:
+ print >>buf, " %s" % self.flatten_nodes[name][0].rstrip()
print >> buf, " self.%s = %s" % (name, name)
if self.init:
print >> buf, "".join([" " + line for line in self.init])
def _gen_getChildren(self, buf):
print >> buf, " def getChildren(self):"
+ print >> buf, ' "NOT_RPYTHON"'
if len(self.argnames) == 0:
print >> buf, " return []"
else:
@@ -184,8 +188,15 @@
" nodelist.append(self.%s)")
print >> buf, tmp % (name, name)
elif self.argprops[name] == P_NESTED:
- print >> buf, template % ("extend", "flatten_nodes(",
- name, ")")
+ if name not in self.flatten_nodes:
+ print >> buf, template % ("extend", "",
+ name, "")
+ else:
+ flat_logic = self.flatten_nodes[name]
+ while not flat_logic[-1].strip():
+ flat_logic.pop()
+ flat_logic[-1] = flat_logic[-1].rstrip()
+ print >> buf, "".join([" " + line for line in flat_logic])
elif self.argprops[name] == P_NODE:
print >> buf, template % ("append", "", name, "")
print >> buf, " return nodelist"
@@ -214,16 +225,27 @@
print >> buf, " return self.default( node )"
rx_init = re.compile('init\((.*)\):')
+rx_flatten_nodes = re.compile('flatten_nodes\((.*)\.(.*)\):')
def parse_spec(file):
classes = {}
cur = None
+ kind = None
for line in fileinput.input(file):
- if line.strip().startswith('#'):
- continue
- mo = rx_init.search(line)
+ mo = None
+ comment = line.strip().startswith('#')
+ if not comment:
+ mo = rx_init.search(line)
+ if mo:
+ kind = 'init'
+ else:
+ mo = rx_flatten_nodes.search(line)
+ if mo:
+ kind = 'flatten_nodes'
if mo is None:
if cur is None:
+ if comment:
+ continue
# a normal entry
try:
name, args = line.split(':')
@@ -236,13 +258,22 @@
parent = None
classes[name] = NodeInfo(name, args, parent)
cur = None
- else:
+ elif kind == 'init':
# some code for the __init__ method
cur.init.append(line)
- else:
+ elif kind == 'flatten_nodes':
+ cur.flatten_nodes['_cur_'].append(line)
+ elif kind == 'init':
# some extra code for a Node's __init__ method
name = mo.group(1)
cur = classes[name]
+ elif kind == 'flatten_nodes':
+ # special case for getChildNodes flattening
+ name = mo.group(1)
+ attr = mo.group(2)
+ cur = classes[name]
+ cur.flatten_nodes[attr] = cur.flatten_nodes['_cur_'] = []
+
for node in classes.values():
node.setup_parent(classes)
return sorted(classes.values(), key=lambda n: n.name)
@@ -300,8 +331,8 @@
l.append(elt)
return l
-def flatten_nodes(list):
- return [n for n in flatten(list) if isinstance(n, Node)]
+#def flatten_nodes(list):
+# return [n for n in flatten(list) if isinstance(n, Node)]
nodes = {}
Modified: pypy/dist/pypy/interpreter/pyparser/test/test_astbuilder.py
==============================================================================
--- pypy/dist/pypy/interpreter/pyparser/test/test_astbuilder.py (original)
+++ pypy/dist/pypy/interpreter/pyparser/test/test_astbuilder.py Mon Sep 5 18:40:34 2005
@@ -32,10 +32,10 @@
def nodes_equal(left, right):
- if type(left)!=type(right):
- return False
if not isinstance(left,stable_ast.Node) or not isinstance(right,ast_ast.Node):
return left==right
+ if left.__class__.__name__ != right.__class__.__name__:
+ return False
if isinstance(left,stable_ast.Function) and isinstance(right,ast_ast.Function):
left_nodes = list(left.getChildren())
right_nodes = list(right.getChildren())
More information about the Pypy-commit
mailing list