[C++-sig] Re: Boost.Python v2: Keywords
Nikolay Mladenov
nickm at sitius.com
Wed Feb 5 22:43:13 CET 2003
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/cplusplus-sig/attachments/20030205/4d6885b4/attachment.htm>
-------------- next part --------------
35a36
> , m_nkeyword_values(0)
42d42
<
48a49,50
> object tpl (handle<>(PyTuple_New(names_and_defaults[i].default_value?2:1)));
>
50,51c52,53
< m_arg_names.ptr()
< , i + keyword_offset
---
> tpl.ptr()
> , 0
55a58,72
> if(names_and_defaults[i].default_value){
> PyTuple_SET_ITEM(
> tpl.ptr()
> , 1
> , incref(names_and_defaults[i].default_value.get())
> );
> ++m_nkeyword_values;
> }
>
>
> PyTuple_SET_ITEM(
> m_arg_names.ptr()
> , i + keyword_offset
> , incref(tpl.ptr())
> );
82c99
< if (total_args >= f->m_min_arity && total_args <= f->m_max_arity)
---
> if (total_args+f->m_nkeyword_values >= f->m_min_arity && total_args <= f->m_max_arity)
85c102
< if (nkeywords > 0)
---
> if (nkeywords > 0 || total_args < f->m_min_arity)
94,95c111,112
< // build a new arg tuple
< args2 = handle<>(PyTuple_New(total_args));
---
> // build a new arg tuple, will adjust its size later
> args2 = handle<>(PyTuple_New(f->m_max_arity));
102c119,120
< for (std::size_t j = nargs; j < total_args; ++j)
---
> std::size_t j = nargs, k = nargs, size=PyTuple_GET_SIZE(f->m_arg_names.ptr());
> for (; j < f->m_max_arity && j<size ; ++j)
103a122,123
> PyObject* kwd=PyTuple_GET_ITEM(f->m_arg_names.ptr(), j);
>
105c125
< keywords, PyTuple_GET_ITEM(f->m_arg_names.ptr(), j));
---
> keywords, PyTuple_GET_ITEM(kwd, 0));
108a129,132
> if(PyTuple_GET_SIZE(kwd)>1)
> value = PyTuple_GET_ITEM(kwd, 1);
> if (!value)
> {
112a137
> }else ++k;
114a140,156
>
> if(args2.get()){
> //check if we proccessed all the arguments
> if(k < total_args)
> args2 = handle<>();
>
> //adjust the parameter tuple size
> if(j<f->m_max_arity){
> handle<> args3( PyTuple_New(j) );
> for(size_t l=0; l!=j; ++l)
> {
> PyTuple_SET_ITEM(args3.get(), l, PyTuple_GET_ITEM(args3.get(), l));
> PyTuple_SET_ITEM(args2.get(), l, 0);
> }
> args2 = args3;
> }
> }
More information about the Cplusplus-sig
mailing list