From 69adf48a54a6182f1168fb5bf73f892afc2c6ad4 Mon Sep 17 00:00:00 2001 From: Bryan Bishop Date: Fri, 30 Aug 2013 18:26:07 -0500 Subject: [PATCH] remove "skippable_macros" from preprocessor The preprocessor no longer has the concept of skippable_macros and now always skips any line that starts with "db" or "dw" because neither of these should be treated as macros. fixes #178 --- preprocessor.py | 41 +++++++++++++++++------------------------ 1 file changed, 17 insertions(+), 24 deletions(-) diff --git a/preprocessor.py b/preprocessor.py index 0d55c906f..6bed4ad80 100644 --- a/preprocessor.py +++ b/preprocessor.py @@ -39,9 +39,6 @@ show_original_lines = False # helpful for debugging macros do_macro_sanity_check = False -class SkippableMacro(object): - macro_name = "db" - chars = { "ガ": 0x05, "ギ": 0x06, @@ -418,11 +415,14 @@ def macro_test(asm, macro_table): """ # macros are determined by the first symbol on the line token = extract_token(asm) - # check against all names - if token in macro_table: - return (macro_table[token], token) - else: - return (None, None) + + # skip db and dw since rgbasm handles those and they aren't macros + if token not in ["db", "dw"]: + # check against all names + if token in macro_table: + return (macro_table[token], token) + + return (None, None) def is_based_on(something, base): """ @@ -436,7 +436,7 @@ def is_based_on(something, base): options += [something.__name__] return (base in options) -def macro_translator(macro, token, line, skippable_macros): +def macro_translator(macro, token, line): """ Converts a line with a macro into a rgbasm-compatible line. """ @@ -475,10 +475,9 @@ def macro_translator(macro, token, line, skippable_macros): if show_original_lines: sys.stdout.write("; original_line: " + original_line) - # "db" is a macro because of SkippableMacro - # rgbasm can handle "db" so no preprocessing is required - # (don't check its param count) - if macro.__name__ in skippable_macros or (macro.macro_name == "db" and macro in skippable_macros): + # rgbasm can handle "db" so no preprocessing is required, plus this wont be + # reached because of earlier checks in macro_test. + if macro.macro_name in ["db", "dw"]: sys.stdout.write(original_line) return @@ -584,7 +583,7 @@ def macro_translator(macro, token, line, skippable_macros): sys.stdout.write(output) -def read_line(l, skippable_macros, macro_table): +def read_line(l, macro_table): """Preprocesses a given line of asm.""" # strip comments from asm @@ -612,21 +611,15 @@ def read_line(l, skippable_macros, macro_table): else: macro, token = macro_test(asm, macro_table) if macro: - macro_translator(macro, token, asm, skippable_macros) + macro_translator(macro, token, asm) else: sys.stdout.write(asm) if comment: sys.stdout.write(comment) -def preprocess(macros, skippable_macros=None, lines=None): +def preprocess(macros, lines=None): """Main entry point for the preprocessor.""" - if skippable_macros == None: - skippable_macros = [SkippableMacro] - - macro_table = make_macro_table(list(set(macros + skippable_macros))) - - # HACK for pokecrystal. Must be after make_macro_table call. - skippable_macros += ["TextEndingCommand", "ItemFragment"] + macro_table = make_macro_table(macros) if not lines: # read each line from stdin @@ -636,7 +629,7 @@ def preprocess(macros, skippable_macros=None, lines=None): lines = lines.split("\n") for l in lines: - read_line(l, skippable_macros, macro_table) + read_line(l, macro_table) # only run against stdin when not included as a module if __name__ == "__main__":