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
b33b5821
Commit
b33b5821
authored
Oct 19, 2006
by
William Stein
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Version of Pyrex distributed with SAGE on October 19, 2006
parent
54ab11e7
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
81 additions
and
36 deletions
+81
-36
Cython/Compiler/ExprNodes.py
Cython/Compiler/ExprNodes.py
+4
-4
Cython/Compiler/Main.py
Cython/Compiler/Main.py
+4
-1
Cython/Compiler/Nodes.py
Cython/Compiler/Nodes.py
+20
-13
Cython/Compiler/Parsing.py
Cython/Compiler/Parsing.py
+1
-1
Cython/Compiler/PyrexTypes.py
Cython/Compiler/PyrexTypes.py
+22
-12
Cython/Compiler/Symtab.py
Cython/Compiler/Symtab.py
+8
-0
Cython/Compiler/TypeSlots.py
Cython/Compiler/TypeSlots.py
+22
-5
No files found.
Cython/Compiler/ExprNodes.py
View file @
b33b5821
...
...
@@ -1035,7 +1035,7 @@ class IndexNode(ExprNode):
self
.
type
=
PyrexTypes
.
error_type
if
self
.
index
.
type
.
is_pyobject
:
self
.
index
=
self
.
index
.
coerce_to
(
PyrexTypes
.
c_
in
t_type
,
env
)
PyrexTypes
.
c_
py_ssize_
t_type
,
env
)
if
not
self
.
index
.
type
.
is_int
:
error
(
self
.
pos
,
"Invalid index type '%s'"
%
...
...
@@ -1107,7 +1107,7 @@ class SliceIndexNode(ExprNode):
if
self
.
stop
:
self
.
stop
.
analyse_types
(
env
)
self
.
base
=
self
.
base
.
coerce_to_pyobject
(
env
)
c_int
=
PyrexTypes
.
c_
in
t_type
c_int
=
PyrexTypes
.
c_
py_ssize_
t_type
if
self
.
start
:
self
.
start
=
self
.
start
.
coerce_to
(
c_int
,
env
)
if
self
.
stop
:
...
...
@@ -3101,7 +3101,7 @@ static void __Pyx_UnpackError(void) {
PyErr_SetString(PyExc_ValueError, "unpack sequence of wrong size");
}
static PyObject *__Pyx_UnpackItem(PyObject *seq,
in
t i) {
static PyObject *__Pyx_UnpackItem(PyObject *seq,
Py_ssize_
t i) {
PyObject *item;
if (!(item = PySequence_GetItem(seq, i))) {
if (PyErr_ExceptionMatches(PyExc_IndexError))
...
...
@@ -3110,7 +3110,7 @@ static PyObject *__Pyx_UnpackItem(PyObject *seq, int i) {
return item;
}
static int __Pyx_EndUnpack(PyObject *seq,
in
t i) {
static int __Pyx_EndUnpack(PyObject *seq,
Py_ssize_
t i) {
PyObject *item;
if (item = PySequence_GetItem(seq, i)) {
Py_DECREF(item);
...
...
Cython/Compiler/Main.py
View file @
b33b5821
...
...
@@ -91,7 +91,10 @@ class Context:
def
find_pxd_file
(
self
,
module_name
,
pos
):
# Search include directories for the .pxd file
# corresponding to the given (full) module name.
pxd_filename
=
"%s.pxd"
%
module_name
if
"."
in
module_name
:
pxd_filename
=
"%s.pxd"
%
os
.
path
.
join
(
*
module_name
.
split
(
'.'
))
else
:
pxd_filename
=
"%s.pxd"
%
module_name
return
self
.
search_include_directories
(
pxd_filename
,
pos
)
def
find_include_file
(
self
,
filename
,
pos
):
...
...
Cython/Compiler/Nodes.py
View file @
b33b5821
...
...
@@ -199,11 +199,19 @@ class ModuleNode(Node, BlockNode):
code
.
putln
(
'/* Generated by Pyrex %s on %s */'
%
(
Version
.
version
,
time
.
asctime
()))
code
.
putln
(
''
)
code
.
putln
(
'#define PY_SSIZE_T_CLEAN'
)
for
filename
in
env
.
python_include_files
:
code
.
putln
(
'#include "%s"'
%
filename
)
code
.
putln
(
"#ifndef PY_LONG_LONG"
)
code
.
putln
(
" #define PY_LONG_LONG LONG_LONG"
)
code
.
putln
(
"#endif"
)
code
.
putln
(
"#if PY_VERSION_HEX < 0x02050000"
)
code
.
putln
(
" typedef int Py_ssize_t;"
)
code
.
putln
(
" #define PY_SSIZE_T_MAX INT_MAX"
)
code
.
putln
(
" #define PY_SSIZE_T_MIN INT_MIN"
)
code
.
putln
(
" #define PyInt_FromSsize_t(z) PyInt_FromLong(z)"
)
code
.
putln
(
" #define PyInt_AsSsize_t(o) PyInt_AsLong(o)"
)
code
.
putln
(
"#endif"
)
self
.
generate_extern_c_macro_definition
(
code
)
code
.
putln
(
"%s double pow(double, double);"
%
Naming
.
extern_c_macro
)
self
.
generate_includes
(
env
,
cimported_modules
,
code
)
...
...
@@ -624,12 +632,12 @@ class ModuleNode(Node, BlockNode):
# a __getitem__ method is present. It converts its
# argument to a Python integer and calls mp_subscript.
code
.
putln
(
"static PyObject *%s(PyObject *o,
in
t i) {"
%
"static PyObject *%s(PyObject *o,
Py_ssize_
t i) {"
%
scope
.
mangle_internal
(
"sq_item"
))
code
.
putln
(
"PyObject *r;"
)
code
.
putln
(
"PyObject *x = PyInt_From
Long
(i); if(!x) return 0;"
)
"PyObject *x = PyInt_From
Ssize_t
(i); if(!x) return 0;"
)
code
.
putln
(
"r = o->ob_type->tp_as_mapping->mp_subscript(o, x);"
)
code
.
putln
(
...
...
@@ -715,7 +723,7 @@ class ModuleNode(Node, BlockNode):
del_entry
=
scope
.
lookup_here
(
"__delslice__"
)
code
.
putln
(
""
)
code
.
putln
(
"static int %s(PyObject *o,
int i, in
t j, PyObject *v) {"
%
"static int %s(PyObject *o,
Py_ssize_t i, Py_ssize_
t j, PyObject *v) {"
%
scope
.
mangle_internal
(
"sq_ass_slice"
))
code
.
putln
(
"if (v) {"
)
...
...
@@ -3542,8 +3550,8 @@ utility_function_predeclarations = \
"""
typedef struct {PyObject **p; char *s;} __Pyx_InternTabEntry; /*proto*/
typedef struct {PyObject **p; char *s; long n;} __Pyx_StringTabEntry; /*proto*/
static PyObject *__Pyx_UnpackItem(PyObject *,
in
t); /*proto*/
static int __Pyx_EndUnpack(PyObject *,
in
t); /*proto*/
static PyObject *__Pyx_UnpackItem(PyObject *,
Py_ssize_
t); /*proto*/
static int __Pyx_EndUnpack(PyObject *,
Py_ssize_
t); /*proto*/
static int __Pyx_PrintItem(PyObject *); /*proto*/
static int __Pyx_PrintNewline(void); /*proto*/
static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
...
...
@@ -3553,7 +3561,7 @@ static PyObject *__Pyx_GetExcValue(void); /*proto*/
static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, char *name); /*proto*/
static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/
static int __Pyx_GetStarArgs(PyObject **args, PyObject **kwds,
\
char *kwd_list[],
in
t nargs, PyObject **args2, PyObject **kwds2); /*proto*/
char *kwd_list[],
Py_ssize_
t nargs, PyObject **args2, PyObject **kwds2); /*proto*/
static void __Pyx_WriteUnraisable(char *name); /*proto*/
static void __Pyx_AddTraceback(char *funcname); /*proto*/
static PyTypeObject *__Pyx_ImportType(char *module_name, char *class_name, long size); /*proto*/
...
...
@@ -3595,7 +3603,7 @@ static int __Pyx_PrintItem(PyObject *v) {
return -1;
if (PyString_Check(v)) {
char *s = PyString_AsString(v);
in
t len = PyString_Size(v);
Py_ssize_
t len = PyString_Size(v);
if (len > 0 &&
isspace(Py_CHARMASK(s[len-1])) &&
s[len-1] != ' ')
...
...
@@ -3650,7 +3658,8 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb) {
}
if (PyString_Check(type))
;
else if (PyClass_Check(type))
/* else if (PyClass_Check(type)) */
else if (PyType_Check(type) || PyClass_Check(type))
; /*PyErr_NormalizeException(&type, &value, &tb);*/
else if (PyInstance_Check(type)) {
/* Raising an instance. The value should be a dummy. */
...
...
@@ -3739,7 +3748,7 @@ static int __Pyx_GetStarArgs(
PyObject **args,
PyObject **kwds,
char *kwd_list[],
in
t nargs,
Py_ssize_
t nargs,
PyObject **args2,
PyObject **kwds2)
{
...
...
@@ -3799,10 +3808,8 @@ static int __Pyx_GetStarArgs(
bad:
Py_XDECREF(args1);
Py_XDECREF(kwds1);
if (*args2)
Py_XDECREF(*args2);
if (*kwds2)
Py_XDECREF(*kwds2);
Py_XDECREF(*args2);
Py_XDECREF(*kwds2);
return -1;
}
"""
...
...
Cython/Compiler/Parsing.py
View file @
b33b5821
...
...
@@ -1257,7 +1257,7 @@ def looking_at_dotted_name(s):
# "void", "signed", "unsigned"
#)
basic_c_type_names
=
(
"void"
,
"char"
,
"int"
,
"float"
,
"double"
)
basic_c_type_names
=
(
"void"
,
"char"
,
"int"
,
"float"
,
"double"
,
"Py_ssize_t"
)
sign_and_longness_words
=
(
"short"
,
"long"
,
"signed"
,
"unsigned"
)
...
...
Cython/Compiler/PyrexTypes.py
View file @
b33b5821
...
...
@@ -293,8 +293,8 @@ class CNumericType(CType):
default_value
=
"0"
parsetuple_formats
=
(
# rank -> format
"?HIkK???"
,
# unsigned
"chilLfd?"
,
# signed
"?HIkK???
?
"
,
# unsigned
"chilL
?
fd?"
,
# signed
)
def
__init__
(
self
,
rank
,
signed
=
1
,
pymemberdef_typecode
=
None
):
...
...
@@ -340,6 +340,12 @@ class CIntType(CNumericType):
self
.
is_returncode
=
is_returncode
class
CPySSizeTType
(
CIntType
):
to_py_function
=
"PyInt_FromSsize_t"
from_py_function
=
"PyInt_AsSsize_t"
class
CUIntType
(
CIntType
):
to_py_function
=
"PyLong_FromUnsignedLong"
...
...
@@ -699,6 +705,7 @@ c_short_type = CIntType(1, 1, "T_SHORT")
c_int_type
=
CIntType
(
2
,
1
,
"T_INT"
)
c_long_type
=
CIntType
(
3
,
1
,
"T_LONG"
)
c_longlong_type
=
CLongLongType
(
4
,
1
,
"T_LONGLONG"
)
c_py_ssize_t_type
=
CPySSizeTType
(
5
,
1
)
c_uchar_type
=
CIntType
(
0
,
0
,
"T_UBYTE"
)
c_ushort_type
=
CIntType
(
1
,
0
,
"T_USHORT"
)
...
...
@@ -706,9 +713,9 @@ c_uint_type = CUIntType(2, 0, "T_UINT")
c_ulong_type
=
CULongType
(
3
,
0
,
"T_ULONG"
)
c_ulonglong_type
=
CULongLongType
(
4
,
0
,
"T_ULONGLONG"
)
c_float_type
=
CFloatType
(
5
,
"T_FLOAT"
)
c_double_type
=
CFloatType
(
6
,
"T_DOUBLE"
)
c_longdouble_type
=
CFloatType
(
7
)
c_float_type
=
CFloatType
(
6
,
"T_FLOAT"
)
c_double_type
=
CFloatType
(
7
,
"T_DOUBLE"
)
c_longdouble_type
=
CFloatType
(
8
)
c_null_ptr_type
=
CNullPtrType
(
c_void_type
)
c_char_array_type
=
CCharArrayType
(
None
)
...
...
@@ -720,7 +727,7 @@ c_returncode_type = CIntType(2, 1, "T_INT", is_returncode = 1)
error_type
=
ErrorType
()
lowest_float_rank
=
5
lowest_float_rank
=
6
rank_to_type_name
=
(
"char"
,
# 0
...
...
@@ -728,9 +735,10 @@ rank_to_type_name = (
"int"
,
# 2
"long"
,
# 3
"PY_LONG_LONG"
,
# 4
"float"
,
# 5
"double"
,
# 6
"long double"
,
# 7
"Py_ssize_t"
,
# 5
"float"
,
# 6
"double"
,
# 7
"long double"
,
# 8
)
sign_and_rank_to_type
=
{
...
...
@@ -745,9 +753,10 @@ sign_and_rank_to_type = {
(
1
,
2
):
c_int_type
,
(
1
,
3
):
c_long_type
,
(
1
,
4
):
c_longlong_type
,
(
1
,
5
):
c_float_type
,
(
1
,
6
):
c_double_type
,
(
1
,
7
):
c_longdouble_type
,
(
1
,
5
):
c_py_ssize_t_type
,
(
1
,
6
):
c_float_type
,
(
1
,
7
):
c_double_type
,
(
1
,
8
):
c_longdouble_type
,
}
modifiers_and_name_to_type
=
{
...
...
@@ -763,6 +772,7 @@ modifiers_and_name_to_type = {
(
1
,
0
,
"int"
):
c_int_type
,
(
1
,
1
,
"int"
):
c_long_type
,
(
1
,
2
,
"int"
):
c_longlong_type
,
(
1
,
0
,
"Py_ssize_t"
):
c_py_ssize_t_type
,
(
1
,
0
,
"float"
):
c_float_type
,
(
1
,
0
,
"double"
):
c_double_type
,
(
1
,
1
,
"double"
):
c_longdouble_type
,
...
...
Cython/Compiler/Symtab.py
View file @
b33b5821
...
...
@@ -566,6 +566,14 @@ class ModuleScope(Scope):
entry
=
self
.
lookup_here
(
name
)
if
entry
:
if
not
(
entry
.
is_pyglobal
and
not
entry
.
as_module
):
# SAGE -- I put this here so Pyrex
# cimport's work across directories.
# Currently it tries to multiply define
# every module appearing in an import list.
# It shouldn't be an error for a module
# name to appear again, and indeed the generated
# code compiles fine.
return
entry
error
(
pos
,
"'%s' redeclared"
%
name
)
return
None
else
:
...
...
Cython/Compiler/TypeSlots.py
View file @
b33b5821
...
...
@@ -26,6 +26,7 @@ class Signature:
# 'i' int
# 'I' int *
# 'l' long
# 'Z' Py_ssize_t
# 's' char *
# 'S' char **
# 'r' int used only to signal exception
...
...
@@ -42,6 +43,7 @@ class Signature:
'i'
:
PyrexTypes
.
c_int_type
,
'I'
:
PyrexTypes
.
c_int_ptr_type
,
'l'
:
PyrexTypes
.
c_long_type
,
'Z'
:
PyrexTypes
.
c_py_ssize_t_type
,
's'
:
PyrexTypes
.
c_char_ptr_type
,
'S'
:
PyrexTypes
.
c_char_ptr_ptr_type
,
'r'
:
PyrexTypes
.
c_returncode_type
,
...
...
@@ -354,18 +356,30 @@ ternaryfunc = Signature("OOO", "O") # typedef PyObject * (*ternaryfunc)(P
iternaryfunc
=
Signature
(
"TOO"
,
"O"
)
# typedef PyObject * (*ternaryfunc)(PyObject *, PyObject *, PyObject *);
callfunc
=
Signature
(
"T*"
,
"O"
)
# typedef PyObject * (*ternaryfunc)(PyObject *, PyObject *, PyObject *);
inquiry
=
Signature
(
"T"
,
"i"
)
# typedef int (*inquiry)(PyObject *);
lenfunc
=
Signature
(
"T"
,
"Z"
)
# typedef Py_ssize_t (*lenfunc)(PyObject *);
# typedef int (*coercion)(PyObject **, PyObject **);
intargfunc
=
Signature
(
"Ti"
,
"O"
)
# typedef PyObject *(*intargfunc)(PyObject *, int);
ssizeargfunc
=
Signature
(
"TZ"
,
"O"
)
# typedef PyObject *(*ssizeargfunc)(PyObject *, Py_ssize_t);
intintargfunc
=
Signature
(
"Tii"
,
"O"
)
# typedef PyObject *(*intintargfunc)(PyObject *, int, int);
ssizessizeargfunc
=
Signature
(
"TZZ"
,
"O"
)
# typedef PyObject *(*ssizessizeargfunc)(PyObject *, Py_ssize_t, Py_ssize_t);
intobjargproc
=
Signature
(
"TiO"
,
'r'
)
# typedef int(*intobjargproc)(PyObject *, int, PyObject *);
ssizeobjargproc
=
Signature
(
"TZO"
,
'r'
)
# typedef int(*ssizeobjargproc)(PyObject *, Py_ssize_t, PyObject *);
intintobjargproc
=
Signature
(
"TiiO"
,
'r'
)
# typedef int(*intintobjargproc)(PyObject *, int, int, PyObject *);
ssizessizeobjargproc
=
Signature
(
"TZZO"
,
'r'
)
# typedef int(*ssizessizeobjargproc)(PyObject *, Py_ssize_t, Py_ssize_t, PyObject *);
intintargproc
=
Signature
(
"Tii"
,
'r'
)
ssizessizeargproc
=
Signature
(
"TZZ"
,
'r'
)
objargfunc
=
Signature
(
"TO"
,
"O"
)
objobjargproc
=
Signature
(
"TOO"
,
'r'
)
# typedef int (*objobjargproc)(PyObject *, PyObject *, PyObject *);
getreadbufferproc
=
Signature
(
"TiP"
,
'i'
)
# typedef int (*getreadbufferproc)(PyObject *, int, void **);
getwritebufferproc
=
Signature
(
"TiP"
,
'i'
)
# typedef int (*getwritebufferproc)(PyObject *, int, void **);
getsegcountproc
=
Signature
(
"TI"
,
'i'
)
# typedef int (*getsegcountproc)(PyObject *, int *);
getcharbufferproc
=
Signature
(
"TiS"
,
'i'
)
# typedef int (*getcharbufferproc)(PyObject *, int, const char **);
readbufferproc
=
Signature
(
"TZP"
,
"Z"
)
# typedef Py_ssize_t (*readbufferproc)(PyObject *, Py_ssize_t, void **);
writebufferproc
=
Signature
(
"TZP"
,
"Z"
)
# typedef Py_ssize_t (*writebufferproc)(PyObject *, Py_ssize_t, void **);
segcountproc
=
Signature
(
"TZ"
,
"Z"
)
# typedef Py_ssize_t (*segcountproc)(PyObject *, Py_ssize_t *);
writebufferproc
=
Signature
(
"TZS"
,
"Z"
)
# typedef Py_ssize_t (*charbufferproc)(PyObject *, Py_ssize_t, char **);
objargproc
=
Signature
(
"TO"
,
'r'
)
# typedef int (*objobjproc)(PyObject *, PyObject *);
# typedef int (*visitproc)(PyObject *, void *);
# typedef int (*traverseproc)(PyObject *, visitproc, void *);
...
...
@@ -454,14 +468,17 @@ PyNumberMethods = (
MethodSlot
(
binaryfunc
,
"nb_true_divide"
,
"__truediv__"
),
MethodSlot
(
ibinaryfunc
,
"nb_inplace_floor_divide"
,
"__ifloordiv__"
),
MethodSlot
(
ibinaryfunc
,
"nb_inplace_true_divide"
,
"__itruediv__"
),
# Added in release 2.5
MethodSlot
(
unaryfunc
,
"nb_index"
,
"__index__"
),
)
PySequenceMethods
=
(
MethodSlot
(
inquiry
,
"sq_length"
,
"__len__"
),
# EmptySlot("sq_length"), # mp_length used instead
MethodSlot
(
lenfunc
,
"sq_length"
,
"__len__"
),
# EmptySlot("sq_length"), # mp_length used instead
EmptySlot
(
"sq_concat"
),
# nb_add used instead
EmptySlot
(
"sq_repeat"
),
# nb_multiply used instead
SyntheticSlot
(
"sq_item"
,
[
"__getitem__"
],
"0"
),
#EmptySlot("sq_item"), # mp_subscript used instead
MethodSlot
(
intint
argfunc
,
"sq_slice"
,
"__getslice__"
),
MethodSlot
(
ssizessize
argfunc
,
"sq_slice"
,
"__getslice__"
),
EmptySlot
(
"sq_ass_item"
),
# mp_ass_subscript used instead
SyntheticSlot
(
"sq_ass_slice"
,
[
"__setslice__"
,
"__delslice__"
],
"0"
),
MethodSlot
(
cmpfunc
,
"sq_contains"
,
"__contains__"
),
...
...
@@ -470,7 +487,7 @@ PySequenceMethods = (
)
PyMappingMethods
=
(
MethodSlot
(
inquiry
,
"mp_length"
,
"__len__"
),
MethodSlot
(
lenfunc
,
"mp_length"
,
"__len__"
),
MethodSlot
(
objargfunc
,
"mp_subscript"
,
"__getitem__"
),
SyntheticSlot
(
"mp_ass_subscript"
,
[
"__setitem__"
,
"__delitem__"
],
"0"
),
)
...
...
@@ -565,8 +582,8 @@ MethodSlot(initproc, "", "__new__")
MethodSlot
(
destructor
,
""
,
"__dealloc__"
)
MethodSlot
(
objobjargproc
,
""
,
"__setitem__"
)
MethodSlot
(
objargproc
,
""
,
"__delitem__"
)
MethodSlot
(
intint
objargproc
,
""
,
"__setslice__"
)
MethodSlot
(
intint
argproc
,
""
,
"__delslice__"
)
MethodSlot
(
ssizessize
objargproc
,
""
,
"__setslice__"
)
MethodSlot
(
ssizessize
argproc
,
""
,
"__delslice__"
)
MethodSlot
(
getattrofunc
,
""
,
"__getattr__"
)
MethodSlot
(
setattrofunc
,
""
,
"__setattr__"
)
MethodSlot
(
delattrofunc
,
""
,
"__delattr__"
)
...
...
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