shithub: pokecrystal

Download patch

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"]