From 1ccf0b8eaddf664dabf85f2bd48ea9c3e50e82ad Mon Sep 17 00:00:00 2001 From: Dag Sverre Seljebotn Date: Thu, 19 Jun 2008 13:07:56 -0700 Subject: [PATCH] More Main refactoring cleanup --- Cython/Compiler/Main.py | 73 +++++++++++++++++------------------------ 1 file changed, 30 insertions(+), 43 deletions(-) diff --git a/Cython/Compiler/Main.py b/Cython/Compiler/Main.py index 8ae57153..445055e9 100644 --- a/Cython/Compiler/Main.py +++ b/Cython/Compiler/Main.py @@ -25,22 +25,6 @@ from Cython import Utils module_name_pattern = re.compile(r"[A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z_][A-Za-z0-9_]*)*$") -# Note: PHASES and TransformSet should be removed soon; but that's for -# another day and another commit. -PHASES = [ - 'before_analyse_function', # run in FuncDefNode.generate_function_definitions - 'after_analyse_function' # run in FuncDefNode.generate_function_definitions -] - -class TransformSet(dict): - def __init__(self): - for name in PHASES: - self[name] = [] - def run(self, name, node, **options): - assert name in self, "Transform phase %s not defined" % name - for transform in self[name]: - transform(node, phase=name, **options) - verbose = 0 class Context: @@ -295,7 +279,10 @@ class Context: else: Errors.open_listing_file(None) - def teardown_errors(self, errors_occurred, options, result, source_desc): + def teardown_errors(self, errors_occurred, options, result): + source_desc = result.compilation_source.source_desc + if not isinstance(source_desc, FileSourceDescriptor): + raise RuntimeError("Only file sources for code supported") Errors.close_listing_file() result.num_errors = Errors.num_errors if result.num_errors > 0: @@ -315,17 +302,16 @@ class Context: extra_objects = options.objects, verbose_flag = options.show_version, cplus = options.cplus) - -class CompilationSource(object): - """ - Contains the data necesarry to start up a compilation pipeline for - a single compilation source (= file, usually). - """ - def __init__(self, source_desc, full_module_name, cwd): - self.source_desc = source_desc - self.full_module_name = full_module_name - self.cwd = cwd + def run_pipeline(self, pipeline, source): + errors_occurred = False + data = source + try: + for phase in pipeline: + data = phase(data) + except CompileError: + errors_occurred = True + return (errors_occurred, data) def create_parse(context): def parse(compsrc): @@ -365,6 +351,7 @@ def create_default_pipeline(context, options): def create_default_resultobj(compilation_source, options): result = CompilationResult() result.main_source_file = compilation_source.source_desc.filename + result.compilation_source = compilation_source source_desc = compilation_source.source_desc if options.output_file: result.c_file = os.path.join(compilation_source.cwd, options.output_file) @@ -383,13 +370,9 @@ def create_default_resultobj(compilation_source, options): pass return result -def run_pipeline(source, options = None, full_module_name = None): - if not options: - options = default_options - +def run_pipeline(source, options, full_module_name = None): # Set up context context = Context(options.include_path) - context.setup_errors(options) # Set up source object cwd = os.getcwd() @@ -400,15 +383,9 @@ def run_pipeline(source, options = None, full_module_name = None): # Get pipeline pipeline = create_default_pipeline(context, options) - data = source - errors_occurred = False - try: - for phase in pipeline: - data = phase(data) - except CompileError: - errors_occurred = True - result = data - context.teardown_errors(errors_occurred, options, result, source_desc) + context.setup_errors(options) + errors_occurred, result = context.run_pipeline(pipeline, source) + context.teardown_errors(errors_occurred, options, result) return result #------------------------------------------------------------------------ @@ -417,6 +394,16 @@ def run_pipeline(source, options = None, full_module_name = None): # #------------------------------------------------------------------------ +class CompilationSource(object): + """ + Contains the data necesarry to start up a compilation pipeline for + a single compilation unit. + """ + def __init__(self, source_desc, full_module_name, cwd): + self.source_desc = source_desc + self.full_module_name = full_module_name + self.cwd = cwd + class CompilationOptions: """ Options to the Cython compiler: @@ -432,7 +419,6 @@ class CompilationOptions: defaults to true when recursive is true. verbose boolean Always print source names being compiled quiet boolean Don't print source names in recursive mode - transforms Transform.TransformSet Transforms to use on the parse tree Following options are experimental and only used on MacOSX: @@ -470,6 +456,7 @@ class CompilationResult: object_file string or None Result of compiling the C file extension_file string or None Result of linking the object file num_errors integer Number of compilation errors + compilation_source CompilationSource """ def __init__(self): @@ -619,9 +606,9 @@ default_options = dict( output_file = None, annotate = False, generate_pxi = 0, - transforms = TransformSet(), working_path = "", recursive = 0, + transforms = None, # deprecated timestamps = None, verbose = 0, quiet = 0) -- 2.26.2