Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Labels
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
nexedi
cython
Commits
97c61435
Commit
97c61435
authored
Dec 09, 2012
by
Stefan Behnel
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
move some helper code into external utility code files
parent
fcee9e0e
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
150 additions
and
159 deletions
+150
-159
Cython/Compiler/Code.py
Cython/Compiler/Code.py
+1
-2
Cython/Compiler/ModuleNode.py
Cython/Compiler/ModuleNode.py
+2
-2
Cython/Compiler/Nodes.py
Cython/Compiler/Nodes.py
+0
-34
Cython/Compiler/PyrexTypes.py
Cython/Compiler/PyrexTypes.py
+0
-121
Cython/Utility/ModuleSetupCode.c
Cython/Utility/ModuleSetupCode.c
+32
-0
Cython/Utility/TypeConversion.c
Cython/Utility/TypeConversion.c
+115
-0
No files found.
Cython/Compiler/Code.py
View file @
97c61435
...
...
@@ -913,8 +913,7 @@ class GlobalState(object):
# utility_code_def
#
code = self.parts['utility_code_def']
import PyrexTypes
code.put(PyrexTypes.type_conversion_functions)
code.put(UtilityCode.load_cached("
TypeConversions
", "
TypeConversion
.
c
").impl)
code.putln("")
def __getitem__(self, key):
...
...
Cython/Compiler/ModuleNode.py
View file @
97c61435
...
...
@@ -555,8 +555,8 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
code
.
putln
(
"#define CYTHON_CCOMPLEX 1"
)
code
.
putln
(
"#endif"
)
code
.
putln
(
""
)
code
.
put
(
Nodes
.
utility_function_predeclarations
)
code
.
put
(
PyrexTypes
.
type_conversion_predeclarations
)
code
.
put
(
UtilityCode
.
load_cached
(
"UtilityFunctionPredeclarations"
,
"ModuleSetupCode.c"
).
proto
)
code
.
put
(
UtilityCode
.
load_cached
(
"TypeConversions"
,
"TypeConversion.c"
).
proto
)
code
.
put
(
Nodes
.
branch_prediction_macros
)
code
.
putln
(
''
)
code
.
putln
(
'static PyObject *%s;'
%
env
.
module_cname
)
...
...
Cython/Compiler/Nodes.py
View file @
97c61435
...
...
@@ -7898,40 +7898,6 @@ class CnameDecoratorNode(StatNode):
#
#------------------------------------------------------------------------------------
utility_function_predeclarations
=
\
"""
/* inline attribute */
#ifndef CYTHON_INLINE
#if defined(__GNUC__)
#define CYTHON_INLINE __inline__
#elif defined(_MSC_VER)
#define CYTHON_INLINE __inline
#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
#define CYTHON_INLINE inline
#else
#define CYTHON_INLINE
#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) && !defined(_MSC_VER))
# 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*/
"""
if
Options
.
gcc_branch_hints
:
branch_prediction_macros
=
\
"""
...
...
Cython/Compiler/PyrexTypes.py
View file @
97c61435
...
...
@@ -1349,9 +1349,6 @@ class CNumericType(CType):
return
"(int, long)"
return
"float"
type_conversion_predeclarations
=
""
type_conversion_functions
=
""
c_int_from_py_function
=
UtilityCode
(
proto
=
"""
static CYTHON_INLINE %(type)s __Pyx_PyInt_As%(SignWord)s%(TypeName)s(PyObject *);
...
...
@@ -3846,121 +3843,3 @@ def typecast(to_type, from_type, expr_code):
else
:
#print "typecast: to", to_type, "from", from_type ###
return
to_type
.
cast_code
(
expr_code
)
type_conversion_predeclarations
=
"""
/* Type Conversion Predeclarations */
#define __Pyx_PyBytes_FromUString(s) PyBytes_FromString((char*)s)
#define __Pyx_PyBytes_AsUString(s) ((unsigned char*) PyBytes_AsString(s))
#define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None)
#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False))
static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x);
static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*);
#if CYTHON_COMPILING_IN_CPYTHON
#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
#else
#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
#endif
#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x))
"""
+
type_conversion_predeclarations
# Note: __Pyx_PyObject_IsTrue is written to minimize branching.
type_conversion_functions
=
"""
/* Type Conversion Functions */
static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
int is_true = x == Py_True;
if (is_true | (x == Py_False) | (x == Py_None)) return is_true;
else return PyObject_IsTrue(x);
}
static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) {
PyNumberMethods *m;
const char *name = NULL;
PyObject *res = NULL;
#if PY_VERSION_HEX < 0x03000000
if (PyInt_Check(x) || PyLong_Check(x))
#else
if (PyLong_Check(x))
#endif
return Py_INCREF(x), x;
m = Py_TYPE(x)->tp_as_number;
#if PY_VERSION_HEX < 0x03000000
if (m && m->nb_int) {
name = "int";
res = PyNumber_Int(x);
}
else if (m && m->nb_long) {
name = "long";
res = PyNumber_Long(x);
}
#else
if (m && m->nb_int) {
name = "int";
res = PyNumber_Long(x);
}
#endif
if (res) {
#if PY_VERSION_HEX < 0x03000000
if (!PyInt_Check(res) && !PyLong_Check(res)) {
#else
if (!PyLong_Check(res)) {
#endif
PyErr_Format(PyExc_TypeError,
"__%s__ returned non-%s (type %.200s)",
name, name, Py_TYPE(res)->tp_name);
Py_DECREF(res);
return NULL;
}
}
else if (!PyErr_Occurred()) {
PyErr_SetString(PyExc_TypeError,
"an integer is required");
}
return res;
}
static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
Py_ssize_t ival;
PyObject* x = PyNumber_Index(b);
if (!x) return -1;
ival = PyInt_AsSsize_t(x);
Py_DECREF(x);
return ival;
}
static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {
#if PY_VERSION_HEX < 0x02050000
if (ival <= LONG_MAX)
return PyInt_FromLong((long)ival);
else {
unsigned char *bytes = (unsigned char *) &ival;
int one = 1; int little = (int)*(unsigned char*)&one;
return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0);
}
#else
return PyInt_FromSize_t(ival);
#endif
}
static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject* x) {
unsigned PY_LONG_LONG val = __Pyx_PyInt_AsUnsignedLongLong(x);
if (unlikely(val == (unsigned PY_LONG_LONG)-1 && PyErr_Occurred())) {
return (size_t)-1;
} else if (unlikely(val != (unsigned PY_LONG_LONG)(size_t)val)) {
PyErr_SetString(PyExc_OverflowError,
"value too large to convert to size_t");
return (size_t)-1;
}
return (size_t)val;
}
"""
+
type_conversion_functions
Cython/Utility/ModuleSetupCode.c
View file @
97c61435
...
...
@@ -249,6 +249,38 @@
#define __Pyx_DOCSTR(n) (n)
#endif
/////////////// UtilityFunctionPredeclarations.proto ///////////////
/* inline attribute */
#ifndef CYTHON_INLINE
#if defined(__GNUC__)
#define CYTHON_INLINE __inline__
#elif defined(_MSC_VER)
#define CYTHON_INLINE __inline
#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
#define CYTHON_INLINE inline
#else
#define CYTHON_INLINE
#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) && !defined(_MSC_VER))
# 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*/
/////////////// ForceInitThreads.proto ///////////////
#ifndef __PYX_FORCE_INIT_THREADS
...
...
Cython/Utility/TypeConversion.c
View file @
97c61435
/////////////// TypeConversions.proto ///////////////
/* Type Conversion Predeclarations */
#define __Pyx_PyBytes_FromUString(s) PyBytes_FromString((char*)s)
#define __Pyx_PyBytes_AsUString(s) ((unsigned char*) PyBytes_AsString(s))
#define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None)
#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False))
static
CYTHON_INLINE
int
__Pyx_PyObject_IsTrue
(
PyObject
*
);
static
CYTHON_INLINE
PyObject
*
__Pyx_PyNumber_Int
(
PyObject
*
x
);
static
CYTHON_INLINE
Py_ssize_t
__Pyx_PyIndex_AsSsize_t
(
PyObject
*
);
static
CYTHON_INLINE
PyObject
*
__Pyx_PyInt_FromSize_t
(
size_t
);
static
CYTHON_INLINE
size_t
__Pyx_PyInt_AsSize_t
(
PyObject
*
);
#if CYTHON_COMPILING_IN_CPYTHON
#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
#else
#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
#endif
#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x))
/////////////// TypeConversions ///////////////
/* Type Conversion Functions */
/* Note: __Pyx_PyObject_IsTrue is written to minimize branching. */
static
CYTHON_INLINE
int
__Pyx_PyObject_IsTrue
(
PyObject
*
x
)
{
int
is_true
=
x
==
Py_True
;
if
(
is_true
|
(
x
==
Py_False
)
|
(
x
==
Py_None
))
return
is_true
;
else
return
PyObject_IsTrue
(
x
);
}
static
CYTHON_INLINE
PyObject
*
__Pyx_PyNumber_Int
(
PyObject
*
x
)
{
PyNumberMethods
*
m
;
const
char
*
name
=
NULL
;
PyObject
*
res
=
NULL
;
#if PY_VERSION_HEX < 0x03000000
if
(
PyInt_Check
(
x
)
||
PyLong_Check
(
x
))
#else
if
(
PyLong_Check
(
x
))
#endif
return
Py_INCREF
(
x
),
x
;
m
=
Py_TYPE
(
x
)
->
tp_as_number
;
#if PY_VERSION_HEX < 0x03000000
if
(
m
&&
m
->
nb_int
)
{
name
=
"int"
;
res
=
PyNumber_Int
(
x
);
}
else
if
(
m
&&
m
->
nb_long
)
{
name
=
"long"
;
res
=
PyNumber_Long
(
x
);
}
#else
if
(
m
&&
m
->
nb_int
)
{
name
=
"int"
;
res
=
PyNumber_Long
(
x
);
}
#endif
if
(
res
)
{
#if PY_VERSION_HEX < 0x03000000
if
(
!
PyInt_Check
(
res
)
&&
!
PyLong_Check
(
res
))
{
#else
if
(
!
PyLong_Check
(
res
))
{
#endif
PyErr_Format
(
PyExc_TypeError
,
"__%s__ returned non-%s (type %.200s)"
,
name
,
name
,
Py_TYPE
(
res
)
->
tp_name
);
Py_DECREF
(
res
);
return
NULL
;
}
}
else
if
(
!
PyErr_Occurred
())
{
PyErr_SetString
(
PyExc_TypeError
,
"an integer is required"
);
}
return
res
;
}
static
CYTHON_INLINE
Py_ssize_t
__Pyx_PyIndex_AsSsize_t
(
PyObject
*
b
)
{
Py_ssize_t
ival
;
PyObject
*
x
=
PyNumber_Index
(
b
);
if
(
!
x
)
return
-
1
;
ival
=
PyInt_AsSsize_t
(
x
);
Py_DECREF
(
x
);
return
ival
;
}
static
CYTHON_INLINE
PyObject
*
__Pyx_PyInt_FromSize_t
(
size_t
ival
)
{
#if PY_VERSION_HEX < 0x02050000
if
(
ival
<=
LONG_MAX
)
return
PyInt_FromLong
((
long
)
ival
);
else
{
unsigned
char
*
bytes
=
(
unsigned
char
*
)
&
ival
;
int
one
=
1
;
int
little
=
(
int
)
*
(
unsigned
char
*
)
&
one
;
return
_PyLong_FromByteArray
(
bytes
,
sizeof
(
size_t
),
little
,
0
);
}
#else
return
PyInt_FromSize_t
(
ival
);
#endif
}
static
CYTHON_INLINE
size_t
__Pyx_PyInt_AsSize_t
(
PyObject
*
x
)
{
unsigned
PY_LONG_LONG
val
=
__Pyx_PyInt_AsUnsignedLongLong
(
x
);
if
(
unlikely
(
val
==
(
unsigned
PY_LONG_LONG
)
-
1
&&
PyErr_Occurred
()))
{
return
(
size_t
)
-
1
;
}
else
if
(
unlikely
(
val
!=
(
unsigned
PY_LONG_LONG
)(
size_t
)
val
))
{
PyErr_SetString
(
PyExc_OverflowError
,
"value too large to convert to size_t"
);
return
(
size_t
)
-
1
;
}
return
(
size_t
)
val
;
}
/////////////// FromPyStructUtility.proto ///////////////
{{
struct_type_decl
}};
static
{{
struct_type_decl
}}
{{
funcname
}}(
PyObject
*
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment