def get_tree(self): from AnalysedTreeTransforms import AutoTestDictTransform # The AutoTestDictTransform creates the statement "__test__ = {}", # which when copied into the main ModuleNode overwrites # any __test__ in user code; not desired excludes = [AutoTestDictTransform] import Pipeline, ParseTreeTransforms context = CythonUtilityCodeContext(self.name) context.prefix = self.prefix #context = StringParseContext(self.name) tree = parse_from_strings(self.name, self.pyx, context=context) pipeline = Pipeline.create_pipeline(context, 'pyx', exclude_classes=excludes) transform = ParseTreeTransforms.CnameDirectivesTransform(context) # InterpretCompilerDirectives already does a cdef declarator check #before = ParseTreeTransforms.DecoratorTransform before = ParseTreeTransforms.InterpretCompilerDirectives pipeline = Pipeline.insert_into_pipeline(pipeline, transform, before=before) (err, tree) = Pipeline.run_pipeline(pipeline, tree) assert not err, err return tree
def get_tree(self, entries_only=False, cython_scope=None): from AnalysedTreeTransforms import AutoTestDictTransform # The AutoTestDictTransform creates the statement "__test__ = {}", # which when copied into the main ModuleNode overwrites # any __test__ in user code; not desired excludes = [AutoTestDictTransform] import Pipeline, ParseTreeTransforms context = CythonUtilityCodeContext(self.name) context.prefix = self.prefix context.cython_scope = cython_scope #context = StringParseContext(self.name) tree = parse_from_strings(self.name, self.impl, context=context, allow_struct_enum_decorator=True) pipeline = Pipeline.create_pipeline(context, 'pyx', exclude_classes=excludes) if entries_only: p = [] for t in pipeline: p.append(t) if isinstance( p, ParseTreeTransforms.AnalyseDeclarationsTransform): break pipeline = p transform = ParseTreeTransforms.CnameDirectivesTransform(context) # InterpretCompilerDirectives already does a cdef declarator check #before = ParseTreeTransforms.DecoratorTransform before = ParseTreeTransforms.InterpretCompilerDirectives pipeline = Pipeline.insert_into_pipeline(pipeline, transform, before=before) if self.from_scope: def scope_transform(module_node): module_node.scope.merge_in(self.from_scope) return module_node transform = ParseTreeTransforms.AnalyseDeclarationsTransform pipeline = Pipeline.insert_into_pipeline(pipeline, scope_transform, before=transform) (err, tree) = Pipeline.run_pipeline(pipeline, tree, printtree=False) assert not err, err return tree
def get_tree(self, entries_only=False, cython_scope=None): from AnalysedTreeTransforms import AutoTestDictTransform # The AutoTestDictTransform creates the statement "__test__ = {}", # which when copied into the main ModuleNode overwrites # any __test__ in user code; not desired excludes = [AutoTestDictTransform] import Pipeline, ParseTreeTransforms context = CythonUtilityCodeContext(self.name) context.prefix = self.prefix context.cython_scope = cython_scope #context = StringParseContext(self.name) tree = parse_from_strings(self.name, self.impl, context=context, allow_struct_enum_decorator=True) pipeline = Pipeline.create_pipeline(context, 'pyx', exclude_classes=excludes) if entries_only: p = [] for t in pipeline: p.append(t) if isinstance(p, ParseTreeTransforms.AnalyseDeclarationsTransform): break pipeline = p transform = ParseTreeTransforms.CnameDirectivesTransform(context) # InterpretCompilerDirectives already does a cdef declarator check #before = ParseTreeTransforms.DecoratorTransform before = ParseTreeTransforms.InterpretCompilerDirectives pipeline = Pipeline.insert_into_pipeline(pipeline, transform, before=before) if self.from_scope: def scope_transform(module_node): module_node.scope.merge_in(self.from_scope) return module_node transform = ParseTreeTransforms.AnalyseDeclarationsTransform pipeline = Pipeline.insert_into_pipeline(pipeline, scope_transform, before=transform) (err, tree) = Pipeline.run_pipeline(pipeline, tree, printtree=False) assert not err, err return tree