New submission from Larry Hastings:

I'm monkeying around with CPython trunk, and just noticed the following 
declaration in Objects/dictobject.c:

    static PyObject *
    dict_contains(register PyDictObject *mp, PyObject *key)

Although dict_contains is a static method, it's cast to PyCFunction and stored 
in the methoddef array for the dict class.  Therefore it must be callable when 
cast to a PyCFunction--indeed, that's the only way it is ever called.

Although the "register" keyword is at best a vague hope, surely it'd be bad 
news if our wish was granted?  The first argument to the PyCFunction typedef is 
*not* declared register.  So if the caller pushed the first argument on the 
stack, and dict_contains went looking for its first argument in a register... 
kablooey.

Surely we must remove the "register" keyword to this function, and similarly 
clean up all other functions ever cast to PyCFunction or 
PyCFunctionWithKeywords.

The "register" keyword isn't just a euphemism for "I want this code to go 
faster" -ly yours,

----------
components: Interpreter Core
messages: 190263
nosy: larry
priority: low
severity: normal
stage: needs patch
status: open
title: dict_contains first argument declared register, and shouldn't be
type: behavior
versions: Python 3.4

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

Reply via email to