From c636b9d7041f5046dd5bdc1b459b06979915dc79 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Fonseca?= Date: Fri, 14 Oct 2011 10:15:02 +0100 Subject: [PATCH] Factor out polymorphic type generated code into functions. --- trace.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/trace.py b/trace.py index 9cc2b0a..68cfa2d 100644 --- a/trace.py +++ b/trace.py @@ -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 -- 2.45.2