summaryrefslogtreecommitdiff
path: root/preprocessor.py
diff options
context:
space:
mode:
authorBryan Bishop <kanzure@gmail.com>2013-08-31 10:19:17 -0700
committerBryan Bishop <kanzure@gmail.com>2013-08-31 10:19:17 -0700
commitc0a01c998240bacae77addbb08a5d2133cf58a21 (patch)
tree17e3c9d738a13450f9d5719226c7d3e88d7ce7be /preprocessor.py
parentd8c82b789636560c6789793b8b2534930986ea4e (diff)
parent6191559c539af5b4e6f05254d10c6f52993d0321 (diff)
Merge pull request #185 from kanzure/preprocessor-performance
Preprocessor performance improvements. This recliams 0.4 seconds.
Diffstat (limited to 'preprocessor.py')
-rw-r--r--preprocessor.py29
1 files changed, 18 insertions, 11 deletions
diff --git a/preprocessor.py b/preprocessor.py
index bac8d7020..59850729a 100644
--- a/preprocessor.py
+++ b/preprocessor.py
@@ -427,12 +427,10 @@ def macro_test(asm, macro_table):
token = extract_token(asm)
# 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)
+ if token is not None and token not in ["db", "dw"] and token in macro_table:
+ return (macro_table[token], token)
+ else:
+ return (None, None)
def is_based_on(something, base):
"""
@@ -619,6 +617,10 @@ def macro_translator(macro, token, line, show_original_lines=False, do_macro_san
def read_line(l, macro_table):
"""Preprocesses a given line of asm."""
+ if l in ["\n", ""] or l[0] == ";":
+ sys.stdout.write(l)
+ return # jump out early
+
# strip comments from asm
asm, comment = separate_comment(l)
@@ -632,7 +634,7 @@ def read_line(l, macro_table):
sys.stdout.write(asm)
# ascii string macro preserves the bytes as ascii (skip the translator)
- elif len(asm) > 6 and "ascii " == asm[:6] or "\tascii " == asm[:7]:
+ elif len(asm) > 6 and ("ascii " == asm[:6] or "\tascii " == asm[:7]):
asm = asm.replace("ascii", "db", 1)
sys.stdout.write(asm)
@@ -648,11 +650,11 @@ def read_line(l, macro_table):
else:
sys.stdout.write(asm)
- if comment: sys.stdout.write(comment)
+ if comment:
+ sys.stdout.write(comment)
-def preprocess(macros, lines=None):
+def preprocess(macro_table, lines=None):
"""Main entry point for the preprocessor."""
- macro_table = make_macro_table(macros)
if not lines:
# read each line from stdin
@@ -664,6 +666,11 @@ def preprocess(macros, lines=None):
for l in lines:
read_line(l, macro_table)
+def main():
+ macros = load_pokecrystal_macros()
+ macro_table = make_macro_table(macros)
+ preprocess(macro_table)
+
# only run against stdin when not included as a module
if __name__ == "__main__":
- preprocess(load_pokecrystal_macros())
+ main()