From 37c57643115b684fd7488e1161dccdeb30d18063 Mon Sep 17 00:00:00 2001 From: Stefan Behnel Date: Wed, 25 Feb 2009 13:25:47 +0100 Subject: [PATCH] fix default arguments for C89 (based on patch by Lisandro) --- Cython/Compiler/Nodes.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Cython/Compiler/Nodes.py b/Cython/Compiler/Nodes.py index 415814d0..344bdb8c 100644 --- a/Cython/Compiler/Nodes.py +++ b/Cython/Compiler/Nodes.py @@ -2186,18 +2186,20 @@ class DefNode(FuncDefNode): max_args = len(all_args) default_args = [] - for arg in all_args: + for i, arg in enumerate(all_args): if arg.default and arg.type.is_pyobject: default_value = arg.default_result_code if arg.type is not PyrexTypes.py_object_type: default_value = "(PyObject*)"+default_value - default_args.append(default_value) - else: - default_args.append('0') - code.putln("PyObject* values[%d] = {%s};" % ( - max_args, ', '.join(default_args))) + default_args.append((i, default_value)) code.putln("Py_ssize_t kw_args = PyDict_Size(%s);" % 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 code.putln('switch (PyTuple_GET_SIZE(%s)) {' % Naming.args_cname) -- 2.26.2