Commit 37c57643 authored by Stefan Behnel's avatar Stefan Behnel

fix default arguments for C89 (based on patch by Lisandro)

parent 35efaff7
...@@ -2186,18 +2186,20 @@ class DefNode(FuncDefNode): ...@@ -2186,18 +2186,20 @@ class DefNode(FuncDefNode):
max_args = len(all_args) max_args = len(all_args)
default_args = [] default_args = []
for arg in all_args: for i, arg in enumerate(all_args):
if arg.default and arg.type.is_pyobject: if arg.default and arg.type.is_pyobject:
default_value = arg.default_result_code default_value = arg.default_result_code
if arg.type is not PyrexTypes.py_object_type: if arg.type is not PyrexTypes.py_object_type:
default_value = "(PyObject*)"+default_value default_value = "(PyObject*)"+default_value
default_args.append(default_value) default_args.append((i, default_value))
else:
default_args.append('0')
code.putln("PyObject* values[%d] = {%s};" % (
max_args, ', '.join(default_args)))
code.putln("Py_ssize_t kw_args = PyDict_Size(%s);" % code.putln("Py_ssize_t kw_args = PyDict_Size(%s);" %
Naming.kwds_cname) Naming.kwds_cname)
# it looks funny to separate the init-to-0 from setting the
# default value, but C89 needs this
code.putln("PyObject* values[%d] = {%s};" % (
max_args, ','.join(['0']*max_args)))
for i, default_value in default_args:
code.putln('values[%d] = %s;' % (i, default_value))
# parse the tuple and check that it's not too long # parse the tuple and check that it's not too long
code.putln('switch (PyTuple_GET_SIZE(%s)) {' % Naming.args_cname) code.putln('switch (PyTuple_GET_SIZE(%s)) {' % Naming.args_cname)
......
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