Skip to content

Commit 0e6e32f

Browse files
gh-86457: Fix signature for code.replace() (GH-23199)
Also add support of @text_signature in Argument Clinic.
1 parent bea5f93 commit 0e6e32f

File tree

4 files changed

+178
-173
lines changed

4 files changed

+178
-173
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Argument Clinic now supports overriding automatically generated signature by
2+
using directive `@text_signature`.

Diff for: Objects/clinic/codeobject.c.h

+14-20
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: Objects/codeobject.c

+29-29
Original file line numberDiff line numberDiff line change
@@ -1968,27 +1968,28 @@ code_linesiterator(PyCodeObject *code, PyObject *Py_UNUSED(args))
19681968
}
19691969

19701970
/*[clinic input]
1971+
@text_signature "($self, /, **changes)"
19711972
code.replace
19721973
19731974
*
1974-
co_argcount: int(c_default="self->co_argcount") = -1
1975-
co_posonlyargcount: int(c_default="self->co_posonlyargcount") = -1
1976-
co_kwonlyargcount: int(c_default="self->co_kwonlyargcount") = -1
1977-
co_nlocals: int(c_default="self->co_nlocals") = -1
1978-
co_stacksize: int(c_default="self->co_stacksize") = -1
1979-
co_flags: int(c_default="self->co_flags") = -1
1980-
co_firstlineno: int(c_default="self->co_firstlineno") = -1
1981-
co_code: PyBytesObject(c_default="NULL") = None
1982-
co_consts: object(subclass_of="&PyTuple_Type", c_default="self->co_consts") = None
1983-
co_names: object(subclass_of="&PyTuple_Type", c_default="self->co_names") = None
1984-
co_varnames: object(subclass_of="&PyTuple_Type", c_default="NULL") = None
1985-
co_freevars: object(subclass_of="&PyTuple_Type", c_default="NULL") = None
1986-
co_cellvars: object(subclass_of="&PyTuple_Type", c_default="NULL") = None
1987-
co_filename: unicode(c_default="self->co_filename") = None
1988-
co_name: unicode(c_default="self->co_name") = None
1989-
co_qualname: unicode(c_default="self->co_qualname") = None
1990-
co_linetable: PyBytesObject(c_default="(PyBytesObject *)self->co_linetable") = None
1991-
co_exceptiontable: PyBytesObject(c_default="(PyBytesObject *)self->co_exceptiontable") = None
1975+
co_argcount: int(c_default="self->co_argcount") = unchanged
1976+
co_posonlyargcount: int(c_default="self->co_posonlyargcount") = unchanged
1977+
co_kwonlyargcount: int(c_default="self->co_kwonlyargcount") = unchanged
1978+
co_nlocals: int(c_default="self->co_nlocals") = unchanged
1979+
co_stacksize: int(c_default="self->co_stacksize") = unchanged
1980+
co_flags: int(c_default="self->co_flags") = unchanged
1981+
co_firstlineno: int(c_default="self->co_firstlineno") = unchanged
1982+
co_code: object(subclass_of="&PyBytes_Type", c_default="NULL") = unchanged
1983+
co_consts: object(subclass_of="&PyTuple_Type", c_default="self->co_consts") = unchanged
1984+
co_names: object(subclass_of="&PyTuple_Type", c_default="self->co_names") = unchanged
1985+
co_varnames: object(subclass_of="&PyTuple_Type", c_default="NULL") = unchanged
1986+
co_freevars: object(subclass_of="&PyTuple_Type", c_default="NULL") = unchanged
1987+
co_cellvars: object(subclass_of="&PyTuple_Type", c_default="NULL") = unchanged
1988+
co_filename: unicode(c_default="self->co_filename") = unchanged
1989+
co_name: unicode(c_default="self->co_name") = unchanged
1990+
co_qualname: unicode(c_default="self->co_qualname") = unchanged
1991+
co_linetable: object(subclass_of="&PyBytes_Type", c_default="self->co_linetable") = unchanged
1992+
co_exceptiontable: object(subclass_of="&PyBytes_Type", c_default="self->co_exceptiontable") = unchanged
19921993
19931994
Return a copy of the code object with new values for the specified fields.
19941995
[clinic start generated code]*/
@@ -1997,14 +1998,13 @@ static PyObject *
19971998
code_replace_impl(PyCodeObject *self, int co_argcount,
19981999
int co_posonlyargcount, int co_kwonlyargcount,
19992000
int co_nlocals, int co_stacksize, int co_flags,
2000-
int co_firstlineno, PyBytesObject *co_code,
2001-
PyObject *co_consts, PyObject *co_names,
2002-
PyObject *co_varnames, PyObject *co_freevars,
2003-
PyObject *co_cellvars, PyObject *co_filename,
2004-
PyObject *co_name, PyObject *co_qualname,
2005-
PyBytesObject *co_linetable,
2006-
PyBytesObject *co_exceptiontable)
2007-
/*[clinic end generated code: output=b6cd9988391d5711 input=f6f68e03571f8d7c]*/
2001+
int co_firstlineno, PyObject *co_code, PyObject *co_consts,
2002+
PyObject *co_names, PyObject *co_varnames,
2003+
PyObject *co_freevars, PyObject *co_cellvars,
2004+
PyObject *co_filename, PyObject *co_name,
2005+
PyObject *co_qualname, PyObject *co_linetable,
2006+
PyObject *co_exceptiontable)
2007+
/*[clinic end generated code: output=e75c48a15def18b9 input=18e280e07846c122]*/
20082008
{
20092009
#define CHECK_INT_ARG(ARG) \
20102010
if (ARG < 0) { \
@@ -2029,7 +2029,7 @@ code_replace_impl(PyCodeObject *self, int co_argcount,
20292029
if (code == NULL) {
20302030
return NULL;
20312031
}
2032-
co_code = (PyBytesObject *)code;
2032+
co_code = code;
20332033
}
20342034

20352035
if (PySys_Audit("code.__new__", "OOOiiiiii",
@@ -2068,10 +2068,10 @@ code_replace_impl(PyCodeObject *self, int co_argcount,
20682068

20692069
co = PyCode_NewWithPosOnlyArgs(
20702070
co_argcount, co_posonlyargcount, co_kwonlyargcount, co_nlocals,
2071-
co_stacksize, co_flags, (PyObject*)co_code, co_consts, co_names,
2071+
co_stacksize, co_flags, co_code, co_consts, co_names,
20722072
co_varnames, co_freevars, co_cellvars, co_filename, co_name,
20732073
co_qualname, co_firstlineno,
2074-
(PyObject*)co_linetable, (PyObject*)co_exceptiontable);
2074+
co_linetable, co_exceptiontable);
20752075

20762076
error:
20772077
Py_XDECREF(code);

0 commit comments

Comments
 (0)