comparison python/ppci/codegen/canon.py @ 354:5477e499b039

Added some sort of string functionality
author Windel Bouwman
date Thu, 13 Mar 2014 18:59:06 +0100
parents e609d5296ee9
children c49459768aaa
comparison
equal deleted inserted replaced
353:b8ad45b3a573 354:5477e499b039
62 offset = frame.allocVar(exp) 62 offset = frame.allocVar(exp)
63 return ir.Add(frame.fp, ir.Const(offset)) 63 return ir.Add(frame.fp, ir.Const(offset))
64 elif isinstance(exp, ir.Mem): 64 elif isinstance(exp, ir.Mem):
65 exp.e = rewriteExp(exp.e, frame) 65 exp.e = rewriteExp(exp.e, frame)
66 return exp 66 return exp
67 elif isinstance(exp, ir.Addr):
68 exp.e = rewriteExp(exp.e, frame)
69 return exp
67 elif isinstance(exp, ir.Call): 70 elif isinstance(exp, ir.Call):
68 exp.arguments = [rewriteExp(p, frame) for p in exp.arguments] 71 exp.arguments = [rewriteExp(p, frame) for p in exp.arguments]
69 # Rewrite call into eseq: 72 # Rewrite call into eseq:
70 t = newTemp() 73 t = newTemp()
71 return ir.Eseq(ir.Move(t, exp), t) 74 return ir.Eseq(ir.Move(t, exp), t)
72 else: 75 else:
73 raise NotImplementedError('NI: {}'.format(exp)) 76 raise NotImplementedError('NI: {}, {}'.format(exp, type(exp)))
74 77
75 # The flatten functions pull out seq instructions to the sequence list. 78 # The flatten functions pull out seq instructions to the sequence list.
76 79
77 def flattenExp(exp): 80 def flattenExp(exp):
78 if isinstance(exp, ir.Binop): 81 if isinstance(exp, ir.Binop):
82 elif isinstance(exp, ir.Temp): 85 elif isinstance(exp, ir.Temp):
83 return exp, [] 86 return exp, []
84 elif isinstance(exp, ir.Const): 87 elif isinstance(exp, ir.Const):
85 return exp, [] 88 return exp, []
86 elif isinstance(exp, ir.Mem): 89 elif isinstance(exp, ir.Mem):
90 exp.e, s = flattenExp(exp.e)
91 return exp, s
92 elif isinstance(exp, ir.Addr):
87 exp.e, s = flattenExp(exp.e) 93 exp.e, s = flattenExp(exp.e)
88 return exp, s 94 return exp, s
89 elif isinstance(exp, ir.Eseq): 95 elif isinstance(exp, ir.Eseq):
90 s = flattenStmt(exp.stmt) 96 s = flattenStmt(exp.stmt)
91 exp.e, se = flattenExp(exp.e) 97 exp.e, se = flattenExp(exp.e)