+ if polymorphic.defaultType is None:
+ switchExpr = self.expand(polymorphic.switchExpr)
+ print r' switch (%s) {' % switchExpr
+ for cases, type in polymorphic.iterSwitch():
+ for case in cases:
+ print r' %s:' % case
+ caseLvalue = lvalue
+ if type.expr is not None:
+ caseLvalue = 'static_cast<%s>(%s)' % (type, caseLvalue)
+ print r' {'
+ try:
+ self.visit(type, caseLvalue, rvalue)
+ finally:
+ print r' }'
+ print r' break;'
+ if polymorphic.defaultType is None:
+ print r' default:'
+ print r' retrace::warning(call) << "unexpected polymorphic case" << %s << "\n";' % (switchExpr,)
+ print r' break;'
+ print r' }'
+ else:
+ self.visit(polymorphic.defaultType, lvalue, rvalue)