diff options
author | Peter Wu <lekensteyn@gmail.com> | 2011-11-30 16:22:51 +0000 |
---|---|---|
committer | Peter Wu <lekensteyn@gmail.com> | 2011-11-30 16:22:51 +0000 |
commit | d1badbce0b40b1e46dc1ea479aa1f0de0961b381 (patch) | |
tree | dac0dd3218f2218e877db3dad78e10feefdaba48 /pp2cc.py | |
parent | 8975b08d5b5cb59da1d0f8a14a35472f52ab66d5 (diff) | |
download | pp2cc-d1badbce0b40b1e46dc1ea479aa1f0de0961b381.tar.gz |
Fix register allocation function
Diffstat (limited to 'pp2cc.py')
-rwxr-xr-x | pp2cc.py | 20 |
1 files changed, 12 insertions, 8 deletions
@@ -44,13 +44,14 @@ class Registers(object): register = register[1] if self.registers[register]: raise RuntimeError("Register 'R{}' is already in use".format(register)) - for register in range(0, 6): - register = str(register) - # find a free register - if not self.registers[register]: - break else: - raise RuntimeError("No free registers are available") + for register in range(0, 6): + register = str(register) + # find a free register + if not self.registers[register]: + break + else: + raise RuntimeError("No free registers are available") self.registers[register] = True return "R" + register def free(self, register): @@ -63,9 +64,12 @@ class Registers(object): # remove leading R register = register[1:] if register in self.registers: - self.registers[register] = False; + if self.registers[register]: + self.registers[register] = False; + else: + raise RuntimeError("free() of unused register") else: - raise RuntimeError("free() of unused register") + raise RuntimeError("free() of invalid register") def get_register(self, text): """Retrieve the first register from a binary instruction""" text = text.strip() |