From 079afeea4626d21a179f3c836e3f1d1c9a1f6d83 Mon Sep 17 00:00:00 2001 From: Bryan Bishop Date: Wed, 16 May 2012 12:44:55 -0500 Subject: [PATCH] fix preprocessor/givepoke for variable-number-of-parameter macros --- extras/crystal.py | 2 ++ preprocessor.py | 10 ++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/extras/crystal.py b/extras/crystal.py index e26cf6dda..efe55b1bb 100644 --- a/extras/crystal.py +++ b/extras/crystal.py @@ -1871,6 +1871,8 @@ class GivePoke(Command): 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]) diff --git a/preprocessor.py b/preprocessor.py index f350971af..0a0c8a0d6 100644 --- a/preprocessor.py +++ b/preprocessor.py @@ -481,14 +481,20 @@ def macro_translator(macro, token, line): 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 # --- 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"]