diff options
author | José Fonseca <jose.r.fonseca@gmail.com> | 2011-10-14 10:15:02 +0100 |
---|---|---|
committer | José Fonseca <jose.r.fonseca@gmail.com> | 2011-10-14 10:15:02 +0100 |
commit | c636b9d7041f5046dd5bdc1b459b06979915dc79 (patch) | |
tree | 81eb8e742b50a4734687899f71c9c59cbd819b93 | |
parent | 461611165f5088edf02c40dc1544dd5b78fa0c24 (diff) |
Factor out polymorphic type generated code into functions.
-rw-r--r-- | trace.py | 19 |
1 files changed, 11 insertions, 8 deletions
@@ -136,7 +136,16 @@ class DumpDeclarator(stdapi.OnceVisitor): print def visit_polymorphic(self, polymorphic): - pass + print 'static void __tracePolymorphic%s(int selector, const %s & value) {' % (polymorphic.id, polymorphic.expr) + print ' switch (selector) {' + for cases, type in polymorphic.iterswitch(): + for case in cases: + print ' %s:' % case + dump_instance(type, 'static_cast<%s>(value)' % (type,)) + print ' break;' + print ' }' + print '}' + print class DumpImplementer(stdapi.Visitor): @@ -206,13 +215,7 @@ class DumpImplementer(stdapi.Visitor): print ' Trace::localWriter.writeOpaque((const void *)&%s);' % instance def visit_polymorphic(self, polymorphic, instance): - print ' switch (%s) {' % polymorphic.switch_expr - for cases, type in polymorphic.iterswitch(): - for case in cases: - print ' %s:' % case - self.visit(type, 'static_cast<%s>(%s)' % (type, instance)); - print ' break;' - print ' }' + print ' __tracePolymorphic%s(%s, %s);' % (polymorphic.id, polymorphic.switch_expr, instance) dump_instance = DumpImplementer().visit |