STINNER Victor added the comment:

When I wrote the _PyObject_CallArg1(), it looks as a cool hack:

#define _PyObject_CallArg1(func, arg) \
    _PyObject_FastCall((func), (PyObject **)&(arg), 1)

It hacks the declaration of an explicit "stack" like:

   PyObject *stack[1];
   stack[0] = arg;
   res = _PyObject_FastCall(func, stack, 1);

And I expected that the C compiler magically computes the memory address of the 
argument. But it seems like requesting the memory address of an argument 
allocates something on the C stack.

On x86_64, first function arguments are passed with CPU registers. Maybe 
requesting the memory address of an argument requires to allocate a local 
variable, copy the register into the variable, to get the address of the local 
variable?

So, I suggest to *remove* the _PyObject_CallArg1() macro, and use existing 
functions like PyObject_CallFunctionObjArgs().

What do you think Serhiy?

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue28858>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to