Commit 6cc61605 authored by Lisandro Dalcin's avatar Lisandro Dalcin

introduce CYTHON_UNUSED macro to annotate functions and parametes

- Silent compiler warnings about unused function/parametes
- Defined to __attribute__((__unused__)) for GCC(>3.4) and ICC
- Applied to a __{get|release}buffer__ special methods
- Applied to a couple of (self,unused) parameter pairs
parent f31aac14
...@@ -1771,7 +1771,8 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode): ...@@ -1771,7 +1771,8 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
if not Options.generate_cleanup_code: if not Options.generate_cleanup_code:
return return
code.globalstate.use_utility_code(register_cleanup_utility_code) code.globalstate.use_utility_code(register_cleanup_utility_code)
code.putln('static PyObject* %s(PyObject *self, PyObject *unused) {' % Naming.cleanup_cname) code.putln('static PyObject *%s(CYTHON_UNUSED PyObject *self, CYTHON_UNUSED PyObject *unused) {' %
Naming.cleanup_cname)
if Options.generate_cleanup_code >= 2: if Options.generate_cleanup_code >= 2:
code.putln("/*--- Global cleanup code ---*/") code.putln("/*--- Global cleanup code ---*/")
rev_entries = list(env.var_entries) rev_entries = list(env.var_entries)
...@@ -2333,9 +2334,9 @@ bad: ...@@ -2333,9 +2334,9 @@ bad:
register_cleanup_utility_code = UtilityCode( register_cleanup_utility_code = UtilityCode(
proto = """ proto = """
static int __Pyx_RegisterCleanup(void); /*proto*/ static int __Pyx_RegisterCleanup(void); /*proto*/
static PyObject* __pyx_module_cleanup(PyObject *self, PyObject *unused); /*proto*/ static PyObject* %(module_cleanup)s(CYTHON_UNUSED PyObject *self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyMethodDef cleanup_def = {__Pyx_NAMESTR("__cleanup"), (PyCFunction)&__pyx_module_cleanup, METH_NOARGS, 0}; static PyMethodDef cleanup_def = {__Pyx_NAMESTR("__cleanup"), (PyCFunction)&%(module_cleanup)s, METH_NOARGS, 0};
""", """ % {'module_cleanup': Naming.cleanup_cname},
impl = """ impl = """
static int __Pyx_RegisterCleanup(void) { static int __Pyx_RegisterCleanup(void) {
/* Don't use Py_AtExit because that has a 32-call limit /* Don't use Py_AtExit because that has a 32-call limit
......
...@@ -1192,6 +1192,12 @@ class FuncDefNode(StatNode, BlockNode): ...@@ -1192,6 +1192,12 @@ class FuncDefNode(StatNode, BlockNode):
is_getbuffer_slot = (self.entry.name == "__getbuffer__" and is_getbuffer_slot = (self.entry.name == "__getbuffer__" and
self.entry.scope.is_c_class_scope) self.entry.scope.is_c_class_scope)
is_releasebuffer_slot = (self.entry.name == "__releasebuffer__" and
self.entry.scope.is_c_class_scope)
is_buffer_slot = is_getbuffer_slot or is_releasebuffer_slot
if is_buffer_slot:
if 'cython_unused' not in self.modifiers:
self.modifiers = self.modifiers + ['cython_unused']
profile = code.globalstate.directives['profile'] profile = code.globalstate.directives['profile']
if profile: if profile:
...@@ -2089,14 +2095,16 @@ class DefNode(FuncDefNode): ...@@ -2089,14 +2095,16 @@ class DefNode(FuncDefNode):
arg_code_list.append( arg_code_list.append(
arg.hdr_type.declaration_code(arg.hdr_cname)) arg.hdr_type.declaration_code(arg.hdr_cname))
if not self.entry.is_special and sig.method_flags() == [TypeSlots.method_noargs]: if not self.entry.is_special and sig.method_flags() == [TypeSlots.method_noargs]:
arg_code_list.append("PyObject *unused") arg_code_list.append("CYTHON_UNUSED PyObject *unused")
if sig.has_generic_args: if sig.has_generic_args:
arg_code_list.append( arg_code_list.append(
"PyObject *%s, PyObject *%s" "PyObject *%s, PyObject *%s"
% (Naming.args_cname, Naming.kwds_cname)) % (Naming.args_cname, Naming.kwds_cname))
arg_code = ", ".join(arg_code_list) arg_code = ", ".join(arg_code_list)
dc = self.return_type.declaration_code(self.entry.func_cname) dc = self.return_type.declaration_code(self.entry.func_cname)
header = "static %s(%s)" % (dc, arg_code) mf = " ".join(self.modifiers).upper()
if mf: mf += " "
header = "static %s%s(%s)" % (mf, dc, arg_code)
code.putln("%s; /*proto*/" % header) code.putln("%s; /*proto*/" % header)
if proto_only: if proto_only:
return return
...@@ -5033,6 +5041,7 @@ class FromImportStatNode(StatNode): ...@@ -5033,6 +5041,7 @@ class FromImportStatNode(StatNode):
utility_function_predeclarations = \ utility_function_predeclarations = \
""" """
/* inline attribute */
#ifndef CYTHON_INLINE #ifndef CYTHON_INLINE
#if defined(__GNUC__) #if defined(__GNUC__)
#define CYTHON_INLINE __inline__ #define CYTHON_INLINE __inline__
...@@ -5045,6 +5054,21 @@ utility_function_predeclarations = \ ...@@ -5045,6 +5054,21 @@ utility_function_predeclarations = \
#endif #endif
#endif #endif
/* unused attribute */
#ifndef CYTHON_UNUSED
# if defined(__GNUC__)
# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
# define CYTHON_UNUSED __attribute__ ((__unused__))
# else
# define CYTHON_UNUSED
# endif
# elif defined(__ICC) || defined(__INTEL_COMPILER)
# define CYTHON_UNUSED __attribute__ ((__unused__))
# else
# define CYTHON_UNUSED
# endif
#endif
typedef struct {PyObject **p; char *s; const long n; const char* encoding; const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/ typedef struct {PyObject **p; char *s; const long n; const char* encoding; const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/
""" """
......
"""
>>> import sys
>>> 'numpy' in sys.modules
True
"""
cimport numpy as np
include "numpy_common.pxi"
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment