ref: 079afeea4626d21a179f3c836e3f1d1c9a1f6d83
parent: 2d763b53a6071b232794795c510363b280f45a89
author: Bryan Bishop <[email protected]>
date: Wed May 16 08:44:55 EDT 2012
fix preprocessor/givepoke for variable-number-of-parameter macros
--- a/extras/crystal.py
+++ b/extras/crystal.py
@@ -1871,6 +1871,8 @@
4: {"name": "trainer_name_pointer", "class": MultiByteParam}, #should probably use TextLabelParam
5: {"name": "pkmn_nickname", "class": MultiByteParam}, #XXX TextLabelParam ?
}
+ allowed_lengths = [4, 6]
+
def parse(self):
self.params = {}
byte = ord(rom[self.address])
--- a/preprocessor.py
+++ b/preprocessor.py
@@ -481,7 +481,13 @@
raise Exception, "dunno what to do with this non db/dw macro param: " + \
str(param_klass) + " in line: " + original_line
- assert len(params) == allowed_length, \
+ # sometimes the allowed length can vary
+ if hasattr(macro, "allowed_lengths"):
+ allowed_lengths = macro.allowed_lengths + [allowed_length]
+ else:
+ allowed_lengths = [allowed_length]
+
+ assert len(params) in allowed_lengths, \
"mismatched number of parameters on this line: " + \
original_line
@@ -488,7 +494,7 @@
# --- end of ridiculously long sanity check ---
index = 0
- while index < len(macro.param_types):
+ while index < len(params):
param_type = macro.param_types[index]
description = param_type["name"]
param_klass = param_type["class"]