Skip to content

Commit b186ee5

Browse files
committed
ARM:POP: update for conversion to C expressions
1 parent b0cabde commit b186ee5

File tree

1 file changed

+19
-11
lines changed

1 file changed

+19
-11
lines changed

chb/arm/opcodes/ARMPop.py

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,10 @@ def rspresult(self) -> "XXpr":
9999
def rrhsexprs(self) -> List["XXpr"]:
100100
return [self.xpr(i, "rhsexpr") for i in range(3, self.regcount + 3)]
101101

102+
@property
103+
def are_rrhsexprs_ok(self) -> bool:
104+
return all(self.is_xpr_ok(i) for i in range(3, self.regcount + 3))
105+
102106
@property
103107
def xaddrs(self) -> List["XXpr"]:
104108
return [self.xpr(i, "xaddr")
@@ -127,18 +131,22 @@ def r0(self) -> Optional["XXpr"]:
127131

128132
@property
129133
def annotation(self) -> str:
130-
pairs = zip(self.lhsvars, self.rrhsexprs)
131-
spassign = str(self.splhs) + " := " + str(self.rspresult)
132-
assigns = "; ".join(str(v) + " := " + str(x) for (v, x) in pairs)
133-
assigns = spassign + "; " + assigns
134-
if self.has_return_xpr():
135-
cxpr = (
136-
" (C: "
137-
+ (str(self.creturnval()) if self.has_creturnval() else "None")
138-
+ ")")
139-
rxpr = "; return " + str(self.rreturnval()) + cxpr
134+
if self.are_rrhsexprs_ok:
135+
pairs = zip(self.lhsvars, self.rrhsexprs)
136+
spassign = str(self.splhs) + " := " + str(self.rspresult)
137+
assigns = "; ".join(str(v) + " := " + str(x) for (v, x) in pairs)
138+
assigns = spassign + "; " + assigns
139+
if self.has_return_xpr():
140+
cxpr = (
141+
" (C: "
142+
+ (str(self.creturnval()) if self.has_creturnval() else "None")
143+
+ ")")
144+
rxpr = "; return " + str(self.rreturnval()) + cxpr
145+
else:
146+
rxpr = ""
140147
else:
141-
rxpr = ""
148+
assigns = "rhs error value"
149+
rxpr = "?"
142150
return self.add_instruction_condition(assigns + rxpr)
143151

144152

0 commit comments

Comments
 (0)