diff options
author | eli.bendersky <devnull@localhost> | 2011-02-04 07:48:42 +0200 |
---|---|---|
committer | eli.bendersky <devnull@localhost> | 2011-02-04 07:48:42 +0200 |
commit | 8243adabc62f5ce3ddbf7a37c8ccba8d0def5370 (patch) | |
tree | 318f6a64fc75952d331ae4fa3f16454dc159afbc /pycparser/_ast_gen.py | |
parent | 58aadb6aed8803dcc0d0f4084af48ae7e5d93836 (diff) | |
download | pycparser-8243adabc62f5ce3ddbf7a37c8ccba8d0def5370.tar.gz |
Moved the .show method into the base class "Node" in _ast_gen.py, to make generated code much shorter
Diffstat (limited to 'pycparser/_ast_gen.py')
-rw-r--r-- | pycparser/_ast_gen.py | 43 |
1 files changed, 19 insertions, 24 deletions
diff --git a/pycparser/_ast_gen.py b/pycparser/_ast_gen.py index 2bef0fb..ab8be9f 100644 --- a/pycparser/_ast_gen.py +++ b/pycparser/_ast_gen.py @@ -127,29 +127,7 @@ class NodeCfg(object): return src def _gen_show(self): - src = ' def show(self, buf=sys.stdout, offset=0, attrnames=False, showcoord=False):\n' - src += " lead = ' ' * offset\n" - - src += " buf.write(lead + '%s: ')\n\n" % self.name - - if self.attr: - src += " if attrnames:\n" - src += " attrstr = ', '.join('%s=%s' % nv for nv in [" - src += ', '.join('("%s", repr(%s))' % (nv, 'self.%s' % nv) for nv in self.attr) - src += '])\n' - src += " else:\n" - src += " attrstr = ', '.join('%s' % v for v in [" - src += ', '.join('self.%s' % v for v in self.attr) - src += '])\n' - src += " buf.write(attrstr)\n\n" - - src += " if showcoord:\n" - src += " buf.write(' (at %s)' % self.coord)\n" - src += " buf.write('\\n')\n\n" - - src += " for c in self.children():\n" - src += " c.show(buf, offset + 2, attrnames, showcoord)\n" - + src = " attr_names = (" + ''.join("%r," % nm for nm in self.attr) + ')' return src @@ -203,7 +181,24 @@ class Node(object): Do you want the coordinates of each Node to be displayed. """ - pass + lead = ' ' * offset + buf.write(lead + self.__class__.__name__+': ') + + if self.attr_names: + if attrnames: + nvlist = [(n, getattr(self,n)) for n in self.attr_names] + attrstr = ', '.join('%s=%s' % nv for nv in nvlist) + else: + vlist = [getattr(self, n) for n in self.attr_names] + attrstr = ', '.join('%s' % v for v in vlist) + buf.write(attrstr) + + if showcoord: + buf.write(' (at %s)' % self.coord) + buf.write('\n') + + for c in self.children(): + c.show(buf, offset + 2, attrnames, showcoord) class NodeVisitor(object): |