Commit 2c3e76e2 authored by Robert Bradshaw's avatar Robert Bradshaw

Fix bug #252, mangle illegal optional c argument names.

parent f3fd7f91
......@@ -2572,7 +2572,7 @@ class SimpleCallNode(CallNode):
for formal_arg, actual_arg in args[expected_nargs:actual_nargs]:
code.putln("%s.%s = %s;" % (
self.opt_arg_struct,
formal_arg.name,
func_type.opt_arg_cname(formal_arg.name),
actual_arg.result_as(formal_arg.type)))
exc_checks = []
if self.type.is_pyobject:
......
......@@ -1473,13 +1473,11 @@ class CFuncDefNode(FuncDefNode):
code.putln('if (%s) {' % Naming.optional_args_cname)
for arg in self.args:
if arg.default:
# FIXME: simple name prefixing doesn't work when
# argument name mangling is in place
code.putln('if (%s->%sn > %s) {' % (Naming.optional_args_cname, Naming.pyrex_prefix, i))
declarator = arg.declarator
while not hasattr(declarator, 'name'):
declarator = declarator.base
code.putln('%s = %s->%s;' % (arg.cname, Naming.optional_args_cname, declarator.name))
code.putln('%s = %s->%s;' % (arg.cname, Naming.optional_args_cname, self.type.opt_arg_cname(declarator.name)))
i += 1
for _ in range(self.type.optional_arg_count):
code.putln('}')
......
......@@ -1536,6 +1536,9 @@ class CFuncType(CType):
s = self.declaration_code("(*)", with_calling_convention=False)
return '(%s)' % s
def opt_arg_cname(self, arg_name):
return self.op_arg_struct.base_type.scope.lookup(arg_name).cname
class CFuncTypeArg(object):
# name string
......
......@@ -5,5 +5,4 @@ methodmangling_T5
class_attribute_init_values_T18
numpy_ValueError_T172
unsignedbehaviour_T184
bad_c_struct_T252
missing_baseclass_in_predecl_T262
cdef cf(default=None):
return default
cpdef cpf(default=None):
cpdef cpf(default=100):
"""
>>> cpf()
None
100
>>> cpf(1)
1
>>> cpf(default=2)
......@@ -13,10 +13,10 @@ cpdef cpf(default=None):
default = cf(default)
return default
def pf(default=None):
def pf(default=100):
"""
>>> pf()
None
100
>>> pf(1)
1
>>> pf(default=2)
......
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