summaryrefslogtreecommitdiff
path: root/preprocessor.py
diff options
context:
space:
mode:
authorBryan Bishop <kanzure@gmail.com>2013-08-30 18:26:07 -0500
committerBryan Bishop <kanzure@gmail.com>2013-08-30 18:27:03 -0500
commit69adf48a54a6182f1168fb5bf73f892afc2c6ad4 (patch)
tree4881594fd4fe9487a04f6f711d433bf4211737e8 /preprocessor.py
parent8fe7f4c3a567edbbdc1579dee8f5ffb6afb7df1c (diff)
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
Diffstat (limited to 'preprocessor.py')
-rw-r--r--preprocessor.py41
1 files 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__":