shithub: pokecrystal

Download patch

ref: c0a01c998240bacae77addbb08a5d2133cf58a21
parent: d8c82b789636560c6789793b8b2534930986ea4e
parent: 6191559c539af5b4e6f05254d10c6f52993d0321
author: Bryan Bishop <[email protected]>
date: Sat Aug 31 06:19:17 EDT 2013

Merge pull request #185 from kanzure/preprocessor-performance

Preprocessor performance improvements.

This recliams 0.4 seconds.

--- a/preprocessor.py
+++ b/preprocessor.py
@@ -427,13 +427,11 @@
     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)
+    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)
 
-    return (None, None)
-
 def is_based_on(something, base):
     """
     Checks whether or not 'something' is a class that is a subclass of a class
@@ -619,6 +617,10 @@
 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 @@
         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 @@
         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 @@
     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()
--- a/prequeue.py
+++ b/prequeue.py
@@ -9,9 +9,20 @@
 import sys
 import preprocessor
 
-if __name__ == '__main__':
+def main():
+    macros = preprocessor.load_pokecrystal_macros()
+    macro_table = preprocessor.make_macro_table(macros)
+
+    stdout = sys.stdout
+
     for source in sys.argv[1:]:
         dest = os.path.splitext(source)[0] + '.tx'
         sys.stdin  = open(source, 'r')
         sys.stdout = open(dest, 'w')
-        preprocessor.preprocess(preprocessor.load_pokecrystal_macros())
+        preprocessor.preprocess(macro_table)
+
+    # reset stdout
+    sys.stdout = stdout
+
+if __name__ == '__main__':
+    main()