Skip to content

Commit

Permalink
bpo-31926: fix missing *_METHODDEF statements by argument clinic (pyt…
Browse files Browse the repository at this point in the history
…hon#4230)

When a single .c file contains several functions and/or methods with
the same name, a safety _METHODDEF #define statement is generated
only for one of them.

This fixes the bug by using the full name of the function to avoid
duplicates rather than just the name.
  • Loading branch information
taleinat authored and serhiy-storchaka committed Nov 3, 2017
1 parent 700d2e4 commit 4f57409
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 7 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Fixed Argument Clinic sometimes causing compilation errors when there was
more than one function and/or method in a .c file with the same name.
6 changes: 5 additions & 1 deletion Modules/clinic/zlibmodule.c.h
Original file line number Diff line number Diff line change
Expand Up @@ -467,4 +467,8 @@ zlib_crc32(PyObject *module, PyObject **args, Py_ssize_t nargs)
#ifndef ZLIB_COMPRESS_COPY_METHODDEF
#define ZLIB_COMPRESS_COPY_METHODDEF
#endif /* !defined(ZLIB_COMPRESS_COPY_METHODDEF) */
/*[clinic end generated code: output=e0184313eb431e95 input=a9049054013a1b77]*/

#ifndef ZLIB_DECOMPRESS_COPY_METHODDEF
#define ZLIB_DECOMPRESS_COPY_METHODDEF
#endif /* !defined(ZLIB_DECOMPRESS_COPY_METHODDEF) */
/*[clinic end generated code: output=6378d429f0819817 input=a9049054013a1b77]*/
4 changes: 0 additions & 4 deletions Modules/zlibmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -1138,19 +1138,15 @@ static PyMethodDef comp_methods[] =
{
ZLIB_COMPRESS_COMPRESS_METHODDEF
ZLIB_COMPRESS_FLUSH_METHODDEF
#ifdef HAVE_ZLIB_COPY
ZLIB_COMPRESS_COPY_METHODDEF
#endif
{NULL, NULL}
};

static PyMethodDef Decomp_methods[] =
{
ZLIB_DECOMPRESS_DECOMPRESS_METHODDEF
ZLIB_DECOMPRESS_FLUSH_METHODDEF
#ifdef HAVE_ZLIB_COPY
ZLIB_DECOMPRESS_COPY_METHODDEF
#endif
{NULL, NULL}
};

Expand Down
4 changes: 2 additions & 2 deletions Tools/clinic/clinic.py
Original file line number Diff line number Diff line change
Expand Up @@ -957,8 +957,8 @@ def insert_keywords(s):
cpp_if = "#if " + conditional
cpp_endif = "#endif /* " + conditional + " */"

if methoddef_define and f.name not in clinic.ifndef_symbols:
clinic.ifndef_symbols.add(f.name)
if methoddef_define and f.full_name not in clinic.ifndef_symbols:
clinic.ifndef_symbols.add(f.full_name)
methoddef_ifndef = normalize_snippet("""
#ifndef {methoddef_name}
#define {methoddef_name}
Expand Down

0 comments on commit 4f57409

Please sign in to comment.