X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=wrappers%2Ftrace.py;h=0064d86667afe5d48337b1fa23a56c6c022e1c80;hb=b95e37292dde2d11b48b1d2e927d4ca2766be8de;hp=dd9fdd7e0d4959994bd2c64f0bce78500048582d;hpb=ee590be87b26f3518106dbbe101db2ceba9d42ae;p=apitrace diff --git a/wrappers/trace.py b/wrappers/trace.py index dd9fdd7..0064d86 100644 --- a/wrappers/trace.py +++ b/wrappers/trace.py @@ -136,6 +136,8 @@ class ComplexValueSerializer(stdapi.OnceVisitor): pass def visitPolymorphic(self, polymorphic): + if not polymorphic.contextLess: + return print 'static void _write__%s(int selector, const %s & value) {' % (polymorphic.tag, polymorphic.expr) print ' switch (selector) {' for cases, type in polymorphic.iterSwitch(): @@ -242,7 +244,16 @@ class ValueSerializer(stdapi.Visitor): assert False def visitPolymorphic(self, polymorphic, instance): - print ' _write__%s(%s, %s);' % (polymorphic.tag, polymorphic.switchExpr, instance) + if polymorphic.contextLess: + print ' _write__%s(%s, %s);' % (polymorphic.tag, polymorphic.switchExpr, instance) + else: + print ' switch (%s) {' % polymorphic.switchExpr + 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 ' }' class WrapDecider(stdapi.Traverser):