Commit c7dbcf9a authored by Stefan Behnel's avatar Stefan Behnel

split builtin type call optimisations into pre and post type analysis phase

parent 21442aba
...@@ -2641,28 +2641,32 @@ class SimpleCallNode(CallNode): ...@@ -2641,28 +2641,32 @@ class SimpleCallNode(CallNode):
class PythonCapiFunctionNode(ExprNode): class PythonCapiFunctionNode(ExprNode):
subexprs = [] subexprs = []
def __init__(self, pos, name, func_type, utility_code = None): def __init__(self, pos, py_name, cname, func_type, utility_code = None):
self.pos = pos self.pos = pos
self.name = name self.name = py_name
self.cname = cname
self.type = func_type self.type = func_type
self.utility_code = utility_code self.utility_code = utility_code
def analyse_types(self, env):
pass
def generate_result_code(self, code): def generate_result_code(self, code):
if self.utility_code: if self.utility_code:
code.globalstate.use_utility_code(self.utility_code) code.globalstate.use_utility_code(self.utility_code)
def calculate_result_code(self): def calculate_result_code(self):
return self.name return self.cname
class PythonCapiCallNode(SimpleCallNode): class PythonCapiCallNode(SimpleCallNode):
# Python C-API Function call (only created in transforms) # Python C-API Function call (only created in transforms)
def __init__(self, pos, function_name, func_type, def __init__(self, pos, function_name, func_type,
utility_code = None, **kwargs): utility_code = None, py_name=None, **kwargs):
self.type = func_type.return_type self.type = func_type.return_type
self.result_ctype = self.type self.result_ctype = self.type
self.function = PythonCapiFunctionNode( self.function = PythonCapiFunctionNode(
pos, function_name, func_type, pos, py_name, function_name, func_type,
utility_code = utility_code) utility_code = utility_code)
# call this last so that we can override the constructed # call this last so that we can override the constructed
# attributes above with explicit keyword arguments if required # attributes above with explicit keyword arguments if required
......
...@@ -92,7 +92,8 @@ class Context(object): ...@@ -92,7 +92,8 @@ class Context(object):
from AnalysedTreeTransforms import AutoTestDictTransform from AnalysedTreeTransforms import AutoTestDictTransform
from AutoDocTransforms import EmbedSignature from AutoDocTransforms import EmbedSignature
from Optimize import FlattenInListTransform, SwitchTransform, IterationTransform from Optimize import FlattenInListTransform, SwitchTransform, IterationTransform
from Optimize import OptimizeBuiltinCalls, ConstantFolding, FinalOptimizePhase from Optimize import EarlyReplaceBuiltinCalls, OptimizeBuiltinCalls
from Optimize import ConstantFolding, FinalOptimizePhase
from Optimize import DropRefcountingTransform from Optimize import DropRefcountingTransform
from Buffer import IntroduceBufferAuxiliaryVars from Buffer import IntroduceBufferAuxiliaryVars
from ModuleNode import check_c_declarations, check_c_declarations_pxd from ModuleNode import check_c_declarations, check_c_declarations_pxd
...@@ -131,6 +132,7 @@ class Context(object): ...@@ -131,6 +132,7 @@ class Context(object):
AnalyseDeclarationsTransform(self), AnalyseDeclarationsTransform(self),
AutoTestDictTransform(self), AutoTestDictTransform(self),
EmbedSignature(self), EmbedSignature(self),
EarlyReplaceBuiltinCalls(self),
MarkAssignments(self), MarkAssignments(self),
TransformBuiltinMethods(self), TransformBuiltinMethods(self),
IntroduceBufferAuxiliaryVars(self), IntroduceBufferAuxiliaryVars(self),
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment