From: José Fonseca Date: Fri, 14 Oct 2011 09:15:02 +0000 (+0100) Subject: Factor out polymorphic type generated code into functions. X-Git-Url: https://git.cworth.org/git?a=commitdiff_plain;h=c636b9d7041f5046dd5bdc1b459b06979915dc79;p=apitrace Factor out polymorphic type generated code into functions. --- 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