shithub: pokecrystal

Download patch

ref: 94052ab5b94a8817c62f1d3d06da2e1c9d5be658
parent: 9eb2cf3d217e8f9e0e86b8d41eac21ce54dd2ba4
author: yenatch <[email protected]>
date: Sun Dec 8 12:05:28 EST 2013

prequeue: dont initialize a new preprocessor for each file

--- a/preprocessor.py
+++ b/preprocessor.py
@@ -51,17 +51,16 @@
 
     return ourmacros
 
-def preprocess(config, macros, lines=None):
-    """
-    Entry point for the preprocessor.
-    """
+def setup_processor():
+    config = configuration.Config()
+    macros = load_pokecrystal_macros()
     processor = preprocessor.Preprocessor(config, macros)
-    return processor.preprocess(lines=lines)
+    return processor
 
 def main():
-    config = configuration.Config()
-    macros = load_pokecrystal_macros()
-    return preprocess(config, macros)
+    processor = setup_processor()
+    processor.preprocess()
+    processor.update_globals
 
 # only run against stdin when not included as a module
 if __name__ == "__main__":
--- a/prequeue.py
+++ b/prequeue.py
@@ -8,24 +8,33 @@
 import os
 import sys
 
-import extras.pokemontools.configuration as configuration
-
 import preprocessor
 
-def main():
-    config = configuration.Config()
-    macros = preprocessor.load_pokecrystal_macros()
+def preprocess_queue(filenames=sys.argv[1:]):
 
+    stdin = sys.stdin
     stdout = sys.stdout
 
-    for source in sys.argv[1:]:
+    processor = preprocessor.setup_processor()
+
+    for source in filenames:
         dest = os.path.splitext(source)[0] + '.tx'
         sys.stdin  = open(source, 'r')
         sys.stdout = open(dest, 'w')
-        preprocessor.preprocess(config, macros)
+        processor.preprocess()
 
-    # reset stdout
+    processor.update_globals()
+
+    sys.stdin = stdin
     sys.stdout = stdout
+
+def main():
+    filenames = list(set(sys.argv[1:]))
+    if filenames:
+        num_files = len(filenames)
+        s = '' if num_files == 1 else 's'
+        sys.stdout.write('Preprocessing {0} file{1}...\n'.format(num_files, s))
+        preprocess_queue(filenames)
 
 if __name__ == '__main__':
     main()