Commit de3f9a33 authored by Mark's avatar Mark

Merge pull request #121 from scoder/_minor_fused_cleanup

minor fused cleanups
parents 761fbb3f b1ece04a
...@@ -238,19 +238,11 @@ class FusedCFuncDefNode(StatListNode): ...@@ -238,19 +238,11 @@ class FusedCFuncDefNode(StatListNode):
for specialized_type in normal_types: for specialized_type in normal_types:
# all_numeric = all_numeric and specialized_type.is_numeric # all_numeric = all_numeric and specialized_type.is_numeric
py_type_name = specialized_type.py_type_name() py_type_name = specialized_type.py_type_name()
# in the case of long, unicode or bytes we need to instance
# check for long_, unicode_, bytes_ (long = long is no longer
# valid code with control flow analysis)
specialized_check_name = py_type_name
if py_type_name in ('long', 'unicode', 'bytes'):
specialized_check_name += '_'
specialized_type_name = specialized_type.specialization_string specialized_type_name = specialized_type.specialization_string
pyx_code.context.update(locals()) pyx_code.context.update(locals())
pyx_code.put_chunk( pyx_code.put_chunk(
u""" u"""
{{if_}} isinstance(arg, {{specialized_check_name}}): {{if_}} isinstance(arg, {{py_type_name}}):
dest_sig[{{dest_sig_idx}}] = '{{specialized_type_name}}' dest_sig[{{dest_sig_idx}}] = '{{specialized_type_name}}'
""") """)
if_ = 'elif' if_ = 'elif'
...@@ -539,17 +531,7 @@ class FusedCFuncDefNode(StatListNode): ...@@ -539,17 +531,7 @@ class FusedCFuncDefNode(StatListNode):
pyx_code.put_chunk( pyx_code.put_chunk(
u""" u"""
def __pyx_fused_cpdef(signatures, args, kwargs, defaults): def __pyx_fused_cpdef(signatures, args, kwargs, defaults):
import sys dest_sig = [{{for _ in range(n_fused)}}None,{{endfor}}]
if sys.version_info >= (3, 0):
long_ = int
unicode_ = str
bytes_ = bytes
else:
long_ = long
unicode_ = unicode
bytes_ = str
dest_sig = [None] * {{n_fused}}
if kwargs is None: if kwargs is None:
kwargs = {} kwargs = {}
...@@ -594,10 +576,14 @@ class FusedCFuncDefNode(StatListNode): ...@@ -594,10 +576,14 @@ class FusedCFuncDefNode(StatListNode):
u""" u"""
candidates = [] candidates = []
for sig in signatures: for sig in signatures:
match_found = filter(None, dest_sig) match_found = False
for src_type, dst_type in zip(sig.strip('()').split(', '), dest_sig): for src_type, dst_type in zip(sig.strip('()').split(', '), dest_sig):
if dst_type is not None and match_found: if dst_type is not None:
match_found = src_type == dst_type if src_type == dst_type:
match_found = True
else:
match_found = False
break
if match_found: if match_found:
candidates.append(sig) candidates.append(sig)
...@@ -781,4 +767,4 @@ class FusedCFuncDefNode(StatListNode): ...@@ -781,4 +767,4 @@ class FusedCFuncDefNode(StatListNode):
def annotate(self, code): def annotate(self, code):
for stat in self.stats: for stat in self.stats:
stat.annotate(code) stat.annotate(code)
\ No newline at end of file
...@@ -183,6 +183,7 @@ class Entry(object): ...@@ -183,6 +183,7 @@ class Entry(object):
fused_cfunction = None fused_cfunction = None
is_fused_specialized = False is_fused_specialized = False
utility_code_definition = None utility_code_definition = None
needs_property = False
in_with_gil_block = 0 in_with_gil_block = 0
from_cython_utility_code = None from_cython_utility_code = None
error_on_uninitialized = False error_on_uninitialized = False
......
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