def from_xml(t): s = Switch() if t.get('location'): s.location = Location(t.get('location')) s.expr = expression.expression_from_xml(descend_one(t.find('index'))) if t.find('default') is not None: s.default = int(t.find('default').get('id')) for c in t.findall('case'): if len(c.getchildren()) == 1: k = descend_one(c) assert k.tag == 'exact', 'strange case label' s.mapping[constant.convert(descend_one(k))] = int(c.get('id')) else: assert len(c.getchildren()) == 2, 'strange case label' low, high = c.getchildren() assert low.tag == 'low-bound' assert high.tag == 'high-bound' low_const, high_const = constant.convert(descend_one(low)).get_value(), constant.convert(descend_one(high)).get_value() for x in range(low_const, high_const + 1): s.mapping[x] = int(c.get('id')) return s
def expression_from_xml(t): if t.tag in valid_lvalues: return result_from_xml(t) if t.tag in ('constant',): return constant.convert(t) if t.tag in binary_operators.keys(): return BinaryOp(binary_operators[t.tag]) if t.tag in unary_operators.keys(): return UnaryOp(unary_operators[t.tag]) if t.tag == 'addr-of': return AddrOf(t) if t.tag == 'void': return Void() if t.tag == 'function': return expression_from_xml(descend_one(t)) print 'warn: tag %s unhandled, returning dummy bound' % (t.tag) dump(t) return Bound()