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
90603b71
Commit
90603b71
authored
Dec 09, 2010
by
Mark Florisson
Browse files
Options
Browse Files
Download
Plain Diff
Compile C test sample code with -fPIC
parents
51714ebf
645bec2f
Changes
37
Hide whitespace changes
Inline
Side-by-side
Showing
37 changed files
with
300 additions
and
111 deletions
+300
-111
.hgtags
.hgtags
+4
-0
Cython/Build/Dependencies.py
Cython/Build/Dependencies.py
+5
-2
Cython/Compiler/Builtin.py
Cython/Compiler/Builtin.py
+1
-1
Cython/Compiler/CmdLine.py
Cython/Compiler/CmdLine.py
+3
-3
Cython/Compiler/Code.pxd
Cython/Compiler/Code.pxd
+79
-0
Cython/Compiler/Code.py
Cython/Compiler/Code.py
+20
-12
Cython/Compiler/Errors.py
Cython/Compiler/Errors.py
+8
-3
Cython/Compiler/Lexicon.py
Cython/Compiler/Lexicon.py
+1
-0
Cython/Compiler/Main.py
Cython/Compiler/Main.py
+18
-14
Cython/Compiler/ModuleNode.py
Cython/Compiler/ModuleNode.py
+1
-0
Cython/Compiler/Nodes.py
Cython/Compiler/Nodes.py
+4
-3
Cython/Compiler/Options.py
Cython/Compiler/Options.py
+1
-1
Cython/Compiler/Parsing.pxd
Cython/Compiler/Parsing.pxd
+12
-9
Cython/Compiler/Parsing.py
Cython/Compiler/Parsing.py
+17
-13
Cython/Compiler/Scanning.py
Cython/Compiler/Scanning.py
+4
-3
Cython/Compiler/Symtab.py
Cython/Compiler/Symtab.py
+31
-22
Cython/Compiler/Tests/TestParseTreeTransforms.py
Cython/Compiler/Tests/TestParseTreeTransforms.py
+2
-1
Cython/Compiler/Visitor.py
Cython/Compiler/Visitor.py
+2
-0
Cython/Debugger/Tests/TestLibCython.py
Cython/Debugger/Tests/TestLibCython.py
+2
-2
Cython/Debugger/Tests/cfuncs.c
Cython/Debugger/Tests/cfuncs.c
+1
-1
Cython/Debugger/Tests/test_libcython_in_gdb.py
Cython/Debugger/Tests/test_libcython_in_gdb.py
+1
-1
Cython/Debugger/libcython.py
Cython/Debugger/libcython.py
+1
-1
Cython/__init__.py
Cython/__init__.py
+1
-1
MANIFEST.in
MANIFEST.in
+4
-0
runtests.py
runtests.py
+3
-1
setup.py
setup.py
+3
-0
tests/broken/cascadedass.pyx
tests/broken/cascadedass.pyx
+1
-1
tests/compile/extimported.pyx
tests/compile/extimported.pyx
+1
-1
tests/compile/for.pyx
tests/compile/for.pyx
+1
-1
tests/compile/fromimport.pyx
tests/compile/fromimport.pyx
+1
-1
tests/compile/gencall.pyx
tests/compile/gencall.pyx
+1
-1
tests/compile/import.pyx
tests/compile/import.pyx
+1
-1
tests/compile/indices.pyx
tests/compile/indices.pyx
+1
-1
tests/compile/tryfinally.pyx
tests/compile/tryfinally.pyx
+1
-1
tests/errors/e_redeclmeth.pyx
tests/errors/e_redeclmeth.pyx
+0
-8
tests/run/pyfunction_redefine_T489.pyx
tests/run/pyfunction_redefine_T489.pyx
+62
-0
tests/run/slice_ptr.pyx
tests/run/slice_ptr.pyx
+1
-1
No files found.
.hgtags
View file @
90603b71
...
...
@@ -33,3 +33,7 @@ ef9d2c680684d0df7d81f529cda29e9e1741f575 cython-0.10.1
59c67af0674bd93c5fd8958e08c76a9dab9aae37 sage-cythonizes
0000000000000000000000000000000000000000 sage-cythonizes
478f57be445d18fe294db849d7ad317fe7d7658f 0.14.alpha0
31b531a6c45b2c34ae5a1af8a2c09f152adea60d 0.14.beta1
7fa84cb6d3d75eb3d015aeeb60bf8b642171fe93 0.14.beta2
7fa84cb6d3d75eb3d015aeeb60bf8b642171fe93 0.14.beta2
8412b39fbc3eb709a543e2f1e95c0c8881ea9ed4 0.14.beta2
Cython/Build/Dependencies.py
View file @
90603b71
...
...
@@ -273,7 +273,7 @@ class DependencyTree(object):
cimports
.
update
(
a
)
externs
.
update
(
b
)
else
:
print
"Unable to locate '%s' referenced from '%s'"
%
(
filename
,
include
)
print
(
"Unable to locate '%s' referenced from '%s'"
%
(
filename
,
include
)
)
return
tuple
(
cimports
),
tuple
(
externs
)
cimports_and_externs
=
cached_method
(
cimports_and_externs
)
...
...
@@ -304,6 +304,7 @@ class DependencyTree(object):
if
pxd
:
return
pxd
return
self
.
context
.
find_pxd_file
(
module
,
None
)
find_pxd
=
cached_method
(
find_pxd
)
#@cached_method
def
cimported_files
(
self
,
filename
):
...
...
@@ -429,7 +430,9 @@ def create_extension_list(patterns, ctx=None, aliases=None):
return
module_list
# This is the user-exposed entry point.
def
cythonize
(
module_list
,
nthreads
=
0
,
aliases
=
None
,
**
options
):
def
cythonize
(
module_list
,
nthreads
=
0
,
aliases
=
None
,
**
options
):
if
'include_path'
not
in
options
:
options
[
'include_path'
]
=
[
'.'
]
c_options
=
CompilationOptions
(
**
options
)
cpp_options
=
CompilationOptions
(
**
options
);
cpp_options
.
cplus
=
True
ctx
=
c_options
.
create_context
()
...
...
Cython/Compiler/Builtin.py
View file @
90603b71
...
...
@@ -123,7 +123,7 @@ static PyObject* __Pyx_PyRun(PyObject* o, PyObject* globals, PyObject* locals) {
"code object passed to exec() may not contain free variables");
goto bad;
}
#if PY_VERSION_HEX < 0x030200
A4
#if PY_VERSION_HEX < 0x030200
B1
result = PyEval_EvalCode((PyCodeObject *)o, globals, locals);
#else
result = PyEval_EvalCode(o, globals, locals);
...
...
Cython/Compiler/CmdLine.py
View file @
90603b71
...
...
@@ -37,7 +37,7 @@ Options:
--embed Embed the Python interpreter in a main() method.
-2 Compile based on Python-2 syntax and code semantics.
-3 Compile based on Python-3 syntax and code semantics.
--fa
tal-errors
Abort the compilation on the first error
--fa
st-fail
Abort the compilation on the first error
-X, --directive <name>=<value>[,<name=value,...] Overrides a compiler directive
"""
...
...
@@ -123,8 +123,8 @@ def parse_command_line(args):
options
.
language_level
=
2
elif
option
==
'-3'
:
options
.
language_level
=
3
elif
option
==
"--fa
tal-errors
"
:
Options
.
fa
tal_errors
=
True
elif
option
==
"--fa
st-fail
"
:
Options
.
fa
st_fail
=
True
elif
option
in
(
"-X"
,
"--directive"
):
try
:
options
.
compiler_directives
=
Options
.
parse_directive_list
(
...
...
Cython/Compiler/Code.pxd
0 → 100644
View file @
90603b71
cimport
cython
cdef
class
UtilityCode
:
cdef
public
object
proto
cdef
public
object
impl
cdef
public
object
init
cdef
public
object
cleanup
cdef
public
object
requires
cdef
public
dict
_cache
cdef
public
list
specialize_list
cdef
public
object
proto_block
cpdef
put_code
(
self
,
output
)
cdef
class
FunctionState
:
cdef
public
set
names_taken
cdef
public
object
owner
cdef
public
object
error_label
cdef
public
size_t
label_counter
cdef
public
set
labels_used
cdef
public
object
return_label
cdef
public
object
continue_label
cdef
public
object
break_label
cdef
public
object
return_from_error_cleanup_label
# not used in __init__ ?
cdef
public
bint
in_try_finally
cdef
public
object
exc_vars
cdef
public
list
temps_allocated
cdef
public
dict
temps_free
cdef
public
dict
temps_used_type
cdef
public
size_t
temp_counter
@
cython
.
locals
(
n
=
size_t
)
cpdef
new_label
(
self
,
name
=*
)
cpdef
tuple
get_loop_labels
(
self
)
cpdef
set_loop_labels
(
self
,
labels
)
cpdef
tuple
get_all_labels
(
self
)
cpdef
set_all_labels
(
self
,
labels
)
cpdef
list
temps_in_use
(
self
)
cdef
class
IntConst
:
cdef
public
object
cname
cdef
public
object
value
cdef
public
bint
is_long
cdef
class
PyObjectConst
:
cdef
public
object
cname
cdef
public
object
type
cdef
class
StringConst
:
cdef
public
object
cname
cdef
public
object
text
cdef
public
object
escaped_value
cdef
public
dict
py_strings
@
cython
.
locals
(
intern
=
bint
,
is_str
=
bint
,
is_unicode
=
bint
)
cpdef
get_py_string_const
(
self
,
encoding
,
identifier
=*
,
is_str
=*
)
## cdef class PyStringConst:
## cdef public object cname
## cdef public object encoding
## cdef public bint is_str
## cdef public bint is_unicode
## cdef public bint intern
#class GlobalState(object):
#def funccontext_property(name):
#class CCodeWriter(object):
cdef
class
PyrexCodeWriter
:
cdef
public
object
f
cdef
public
Py_ssize_t
level
Cython/Compiler/Code.py
View file @
90603b71
# cython: language_level = 3
#
# Pyrex - Code output module
#
import
cython
cython
.
declare
(
re
=
object
,
Naming
=
object
,
Options
=
object
,
StringEncoding
=
object
,
Utils
=
object
,
SourceDescriptor
=
object
,
StringIOTree
=
object
,
DebugFlags
=
object
,
none_or_sub
=
object
)
import
re
import
Naming
import
Options
...
...
@@ -9,13 +15,13 @@ import StringEncoding
from
Cython
import
Utils
from
Scanning
import
SourceDescriptor
from
Cython.StringIOTree
import
StringIOTree
try
:
set
except
NameError
:
from
sets
import
Set
as
set
import
DebugFlags
from
Cython.Utils
import
none_or_sub
try
:
basestring
except
NameError
:
basestring
=
str
class
UtilityCode
(
object
):
# Stores utility code to add during code generation.
...
...
@@ -92,13 +98,13 @@ class FunctionState(object):
# exc_vars (string * 3) exception variables for reraise, or None
# Not used for now, perhaps later
def
__init__
(
self
,
owner
,
names_taken
=
set
()):
def
__init__
(
self
,
owner
,
names_taken
=
cython
.
set
()):
self
.
names_taken
=
names_taken
self
.
owner
=
owner
self
.
error_label
=
None
self
.
label_counter
=
0
self
.
labels_used
=
{}
self
.
labels_used
=
cython
.
set
()
self
.
return_label
=
self
.
new_label
()
self
.
new_error_label
()
self
.
continue_label
=
None
...
...
@@ -168,7 +174,7 @@ class FunctionState(object):
return
old_labels
def
use_label
(
self
,
lbl
):
self
.
labels_used
[
lbl
]
=
1
self
.
labels_used
.
add
(
lbl
)
def
label_used
(
self
,
lbl
):
return
lbl
in
self
.
labels_used
...
...
@@ -260,7 +266,7 @@ class FunctionState(object):
error case.
"""
return
[(
cname
,
type
)
for
(
type
,
manage_ref
),
freelist
in
self
.
temps_free
.
ite
rite
ms
()
for
(
type
,
manage_ref
),
freelist
in
self
.
temps_free
.
items
()
if
manage_ref
for
cname
in
freelist
]
...
...
@@ -287,6 +293,8 @@ class PyObjectConst(object):
self
.
cname
=
cname
self
.
type
=
type
cython
.
declare
(
possible_unicode_identifier
=
object
,
possible_bytes_identifier
=
object
,
nice_identifier
=
object
,
find_alphanums
=
object
)
possible_unicode_identifier
=
re
.
compile
(
ur"(?![0-9])\
w+$
", re.U).match
possible_bytes_identifier = re.compile(r"
(
?!
[
0
-
9
])
\
w
+
$
".encode('ASCII')).match
nice_identifier = re.compile(r'
\
A[
a
-zA-Z0-9_]+
\
Z
'
).match
...
...
@@ -436,7 +444,7 @@ class GlobalState(object):
self.filename_table = {}
self.filename_list = []
self.input_file_contents = {}
self.utility_codes = set()
self.utility_codes =
cython.
set()
self.declared_cnames = {}
self.in_utility_code_generation = False
self.emit_linenums = emit_linenums
...
...
@@ -683,7 +691,7 @@ class GlobalState(object):
def generate_string_constants(self):
c_consts = [ (len(c.cname), c.cname, c)
for c in self.string_const_index.
iter
values() ]
for c in self.string_const_index.values() ]
c_consts.sort()
py_strings = []
...
...
@@ -692,7 +700,7 @@ class GlobalState(object):
decls_writer.putln('static char %s[] = "
%
s
";' % (
cname, StringEncoding.split_string_literal(c.escaped_value)))
if c.py_strings is not None:
for py_string in c.py_strings.
iter
values():
for py_string in c.py_strings.values():
py_strings.append((c.cname, len(py_string.cname), py_string))
if py_strings:
...
...
@@ -735,7 +743,7 @@ class GlobalState(object):
def generate_int_constants(self):
consts = [ (len(c.value), c.value, c.is_long, c)
for c in self.int_const_index.
iter
values() ]
for c in self.int_const_index.values() ]
consts.sort()
decls_writer = self.parts['decls']
for _, value, longness, c in consts:
...
...
Cython/Compiler/Errors.py
View file @
90603b71
...
...
@@ -61,7 +61,6 @@ class CompileWarning(PyrexWarning):
# self.message = message
Exception
.
__init__
(
self
,
format_position
(
position
)
+
message
)
class
InternalError
(
Exception
):
# If this is ever raised, there is a bug in the compiler.
...
...
@@ -70,6 +69,12 @@ class InternalError(Exception):
Exception
.
__init__
(
self
,
u"Internal compiler error: %s"
%
message
)
class
AbortError
(
Exception
):
# Throw this to stop the compilation immediately.
def
__init__
(
self
,
message
):
self
.
message_only
=
message
Exception
.
__init__
(
self
,
u"Abort error: %s"
%
message
)
class
CompilerCrash
(
CompileError
):
# raised when an unexpected exception occurs in a transform
...
...
@@ -143,8 +148,8 @@ def report_error(err):
except
UnicodeEncodeError
:
echo_file
.
write
(
line
.
encode
(
'ASCII'
,
'replace'
))
num_errors
=
num_errors
+
1
if
Options
.
fa
tal_errors
:
raise
InternalError
,
"abort
"
if
Options
.
fa
st_fail
:
raise
AbortError
,
"fatal errors
"
def
error
(
position
,
message
):
#print "Errors.error:", repr(position), repr(message) ###
...
...
Cython/Compiler/Lexicon.py
View file @
90603b71
# cython: language_level=3
#
# Cython Scanner - Lexical Definitions
#
...
...
Cython/Compiler/Main.py
View file @
90603b71
...
...
@@ -21,7 +21,7 @@ import Errors
import
Parsing
import
Version
from
Scanning
import
PyrexScanner
,
FileSourceDescriptor
from
Errors
import
PyrexError
,
CompileError
,
InternalError
,
error
,
warning
from
Errors
import
PyrexError
,
CompileError
,
InternalError
,
AbortError
,
error
,
warning
from
Symtab
import
BuiltinScope
,
ModuleScope
from
Cython
import
Utils
from
Cython.Utils
import
open_new_file
,
replace_suffix
...
...
@@ -40,7 +40,7 @@ def dumptree(t):
def
abort_on_errors
(
node
):
# Stop the pipeline if there are any errors.
if
Errors
.
num_errors
!=
0
:
raise
InternalError
,
"abort
"
raise
AbortError
,
"pipeline break
"
return
node
class
CompilationData
(
object
):
...
...
@@ -231,23 +231,26 @@ class Context(object):
error
=
None
data
=
source
try
:
for
phase
in
pipeline
:
if
phase
is
not
None
:
if
DebugFlags
.
debug_verbose_pipeline
:
t
=
time
()
print
"Entering pipeline phase %r"
%
phase
data
=
phase
(
data
)
if
DebugFlags
.
debug_verbose_pipeline
:
print
" %.3f seconds"
%
(
time
()
-
t
)
except
CompileError
,
err
:
# err is set
Errors
.
report_error
(
err
)
error
=
err
try
:
for
phase
in
pipeline
:
if
phase
is
not
None
:
if
DebugFlags
.
debug_verbose_pipeline
:
t
=
time
()
print
"Entering pipeline phase %r"
%
phase
data
=
phase
(
data
)
if
DebugFlags
.
debug_verbose_pipeline
:
print
" %.3f seconds"
%
(
time
()
-
t
)
except
CompileError
,
err
:
# err is set
Errors
.
report_error
(
err
)
error
=
err
except
InternalError
,
err
:
# Only raise if there was not an earlier error
if
Errors
.
num_errors
==
0
:
raise
error
=
err
except
AbortError
,
err
:
error
=
err
return
(
error
,
data
)
def
find_module
(
self
,
module_name
,
...
...
@@ -714,6 +717,7 @@ def compile_multiple(sources, options):
a CompilationResultSet. Performs timestamp checking and/or recursion
if these are specified in the options.
"""
context
=
options
.
create_context
()
sources
=
[
os
.
path
.
abspath
(
source
)
for
source
in
sources
]
processed
=
set
()
results
=
CompilationResultSet
()
...
...
Cython/Compiler/ModuleNode.py
View file @
90603b71
...
...
@@ -578,6 +578,7 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
#endif
#if PY_MAJOR_VERSION >= 3
#define PyIntObject PyLongObject
#define PyInt_Type PyLong_Type
#define PyInt_Check(op) PyLong_Check(op)
#define PyInt_CheckExact(op) PyLong_CheckExact(op)
...
...
Cython/Compiler/Nodes.py
View file @
90603b71
...
...
@@ -2148,9 +2148,10 @@ class DefNode(FuncDefNode):
entry
=
env
.
lookup_here
(
name
)
if
entry
and
entry
.
type
.
is_cfunction
and
not
self
.
is_wrapper
:
warning
(
self
.
pos
,
"Overriding cdef method with def method."
,
5
)
entry
=
env
.
declare_pyfunction
(
name
,
self
.
pos
)
entry
=
env
.
declare_pyfunction
(
name
,
self
.
pos
,
allow_redefine
=
not
self
.
is_wrapper
)
self
.
entry
=
entry
prefix
=
env
.
scope_prefix
prefix
=
env
.
next_id
(
env
.
scope_prefix
)
entry
.
func_cname
=
\
Naming
.
pyfunc_prefix
+
prefix
+
name
entry
.
pymethdef_cname
=
\
...
...
@@ -2225,7 +2226,7 @@ class DefNode(FuncDefNode):
def
needs_assignment_synthesis
(
self
,
env
,
code
=
None
):
# Should enable for module level as well, that will require more testing...
if
self
.
entry
.
is_
lambda
:
if
self
.
entry
.
is_
anonymous
:
return
True
if
env
.
is_module_scope
:
if
code
is
None
:
...
...
Cython/Compiler/Options.py
View file @
90603b71
...
...
@@ -20,7 +20,7 @@ annotate = 0
# This will abort the compilation on the first error occured rather than trying
# to keep going and printing further error messages.
fa
tal_errors
=
False
fa
st_fail
=
False
# This will convert statements of the form "for i in range(...)"
# to "for i from ..." when i is a cdef'd integer type, and the direction
...
...
Cython/Compiler/Parsing.pxd
View file @
90603b71
...
...
@@ -3,6 +3,8 @@
cimport
cython
from
Cython.Compiler.Scanning
cimport
PyrexScanner
ctypedef
object
(
*
p_sub_expr_func
)(
object
)
# entry points
cpdef
p_module
(
PyrexScanner
s
,
pxd
,
full_module_name
)
...
...
@@ -13,8 +15,8 @@ cpdef p_code(PyrexScanner s, level= *)
cdef
p_ident
(
PyrexScanner
s
,
message
=*
)
cdef
p_ident_list
(
PyrexScanner
s
)
cdef
p_binop_operator
(
PyrexScanner
s
)
cdef
p_binop_expr
(
PyrexScanner
s
,
ops
,
p_sub_expr
)
cdef
tuple
p_binop_operator
(
PyrexScanner
s
)
cdef
p_binop_expr
(
PyrexScanner
s
,
ops
,
p_sub_expr
_func
p_sub_expr
)
cpdef
p_lambdef
(
PyrexScanner
s
,
bint
allow_conditional
=*
)
cdef
p_lambdef_nocond
(
PyrexScanner
s
)
cdef
p_test
(
PyrexScanner
s
)
...
...
@@ -29,12 +31,13 @@ cdef p_starred_expr(PyrexScanner s)
cdef
p_cascaded_cmp
(
PyrexScanner
s
)
cdef
p_cmp_op
(
PyrexScanner
s
)
cdef
p_bit_expr
(
PyrexScanner
s
)
cpdef
p_xor_expr
(
PyrexScanner
s
)
cpdef
p_and_expr
(
PyrexScanner
s
)
cpdef
p_shift_expr
(
PyrexScanner
s
)
cpdef
p_arith_expr
(
PyrexScanner
s
)
cpdef
p_term
(
PyrexScanner
s
)
cpdef
p_factor
(
PyrexScanner
s
)
cdef
p_xor_expr
(
s
)
cdef
p_and_expr
(
s
)
cdef
p_shift_expr
(
s
)
cdef
p_arith_expr
(
s
)
cdef
p_term
(
s
)
cdef
p_factor
(
s
)
cdef
_p_factor
(
PyrexScanner
s
)
cdef
p_typecast
(
PyrexScanner
s
)
cdef
p_sizeof
(
PyrexScanner
s
)
cdef
p_yield_expression
(
PyrexScanner
s
)
...
...
@@ -101,7 +104,7 @@ cdef p_if_clause(PyrexScanner s)
cdef
p_else_clause
(
PyrexScanner
s
)
cdef
p_while_statement
(
PyrexScanner
s
)
cdef
p_for_statement
(
PyrexScanner
s
)
cpdef
p_for_bounds
(
PyrexScanner
s
,
bint
allow_testlist
=
*
)
cpdef
dict
p_for_bounds
(
PyrexScanner
s
,
bint
allow_testlist
=
*
)
cdef
p_for_from_relation
(
PyrexScanner
s
)
cdef
p_for_from_step
(
PyrexScanner
s
)
cdef
p_target
(
PyrexScanner
s
,
terminator
)
...
...
Cython/Compiler/Parsing.py
View file @
90603b71
# cython: auto_cpdef=True, infer_types=True
# cython: auto_cpdef=True, infer_types=True
, language_level=3
#
# Pyrex Parser
#
...
...
@@ -269,6 +269,10 @@ def p_term(s):
#factor: ('+'|'-'|'~'|'&'|typecast|sizeof) factor | power
def
p_factor
(
s
):
# little indirection for C-ification purposes
return
_p_factor
(
s
)
def
_p_factor
(
s
):
sy
=
s
.
sy
if
sy
in
(
'+'
,
'-'
,
'~'
):
op
=
s
.
sy
...
...
@@ -873,8 +877,7 @@ def p_comp_for(s, body):
pos
=
s
.
position
()
s
.
next
()
kw
=
p_for_bounds
(
s
,
allow_testlist
=
False
)
kw
[
'else_clause'
]
=
None
kw
[
'body'
]
=
p_comp_iter
(
s
,
body
)
kw
.
update
(
dict
(
else_clause
=
None
,
body
=
p_comp_iter
(
s
,
body
)))
return
Nodes
.
ForStatNode
(
pos
,
**
kw
)
def
p_comp_if
(
s
,
body
):
...
...
@@ -1368,8 +1371,9 @@ def p_for_statement(s):
pos
=
s
.
position
()
s
.
next
()
kw
=
p_for_bounds
(
s
,
allow_testlist
=
True
)
kw
[
'body'
]
=
p_suite
(
s
)
kw
[
'else_clause'
]
=
p_else_clause
(
s
)
body
=
p_suite
(
s
)
else_clause
=
p_else_clause
(
s
)
kw
.
update
(
dict
(
body
=
body
,
else_clause
=
else_clause
))
return
Nodes
.
ForStatNode
(
pos
,
**
kw
)
def
p_for_bounds
(
s
,
allow_testlist
=
True
):
...
...
@@ -1377,7 +1381,7 @@ def p_for_bounds(s, allow_testlist=True):
if
s
.
sy
==
'in'
:
s
.
next
()
iterator
=
p_for_iterator
(
s
,
allow_testlist
)
return
{
'target'
:
target
,
'iterator'
:
iterator
}
return
dict
(
target
=
target
,
iterator
=
iterator
)
elif
not
s
.
in_python_file
:
if
s
.
sy
==
'from'
:
s
.
next
()
...
...
@@ -1404,12 +1408,13 @@ def p_for_bounds(s, allow_testlist=True):
if
rel1
[
0
]
!=
rel2
[
0
]:
error
(
rel2_pos
,
"Relation directions in for-from do not match"
)
return
{
'target'
:
target
,
'bound1'
:
bound1
,
'relation1'
:
rel1
,
'relation2'
:
rel2
,
'bound2'
:
bound2
,
'step'
:
step
}
return
dict
(
target
=
target
,
bound1
=
bound1
,
relation1
=
rel1
,
relation2
=
rel2
,
bound2
=
bound2
,
step
=
step
,
)
else
:
s
.
expect
(
'in'
)
return
{}
...
...
@@ -1701,7 +1706,6 @@ def p_statement(s, ctx, first_statement = 0):
return
p_IF_statement
(
s
,
ctx
)
elif
s
.
sy
==
'DECORATOR'
:
if
ctx
.
level
not
in
(
'module'
,
'class'
,
'c_class'
,
'function'
,
'property'
,
'module_pxd'
,
'c_class_pxd'
):
print
ctx
.
level
s
.
error
(
'decorator not allowed here'
)
s
.
level
=
ctx
.
level
decorators
=
p_decorators
(
s
)
...
...
Cython/Compiler/Scanning.py
View file @
90603b71
# cython: infer_types=True, language_level=3
#
# Cython Scanner
#
...
...
@@ -7,7 +8,7 @@ import os
import
platform
import
cython
cython
.
declare
(
EncodedString
=
object
,
string_prefixes
=
object
,
raw_prefixes
=
object
,
IDENT
=
object
,
cython
.
declare
(
EncodedString
=
object
,
string_prefixes
=
object
,
raw_prefixes
=
object
,
IDENT
=
unicode
,
print_function
=
object
)
from
Cython
import
Plex
,
Utils
...
...
@@ -359,10 +360,10 @@ class PyrexScanner(Scanner):
if
sy
==
IDENT
:
if
systring
in
self
.
keywords
:
if
systring
==
u'print'
and
print_function
in
self
.
context
.
future_directives
:
self
.
keywords
.
remove
(
'print'
)
self
.
keywords
.
discard
(
'print'
)
systring
=
EncodedString
(
systring
)
elif
systring
==
u'exec'
and
self
.
context
.
language_level
>=
3
:
self
.
keywords
.
remove
(
'exec'
)
self
.
keywords
.
discard
(
'exec'
)
systring
=
EncodedString
(
systring
)
else
:
sy
=
systring
...
...
Cython/Compiler/Symtab.py
View file @
90603b71
...
...
@@ -75,7 +75,7 @@ class Entry(object):
# is_cfunction boolean Is a C function
# is_cmethod boolean Is a C method of an extension type
# is_unbound_cmethod boolean Is an unbound C method of an extension type
# is_
lambda boolean Is a lambda function
# is_
anonymous boolean Is a anonymous pyfunction entry
# is_type boolean Is a type definition
# is_cclass boolean Is an extension class
# is_cpp_class boolean Is a C++ class
...
...
@@ -138,7 +138,7 @@ class Entry(object):
is_cfunction = 0
is_cmethod = 0
is_unbound_cmethod = 0
is_
lambda
= 0
is_
anonymous
= 0
is_type = 0
is_cclass = 0
is_cpp_class = 0
...
...
@@ -513,18 +513,36 @@ class Scope(object):
def declare_builtin(self, name, pos):
return self.outer_scope.declare_builtin(name, pos)
def declare_pyfunction(self, name, pos):
# Add an entry for a Python function.
entry = self.lookup_here(name)
def _declare_pyfunction(self, name, pos, visibility='extern', entry=None):
if entry and not entry.type.is_cfunction:
# This is legal Python, but for now will produce invalid C.
error(pos, "'%s'
already
declared
" % name)
entry = self.declare_var(name, py_object_type, pos, visibility='extern')
error(entry.pos, "
Previous
declaration
is
here
")
entry = self.declare_var(name, py_object_type, pos, visibility=visibility)
entry.signature = pyfunction_signature
self.pyfunc_entries.append(entry)
return entry
def declare_pyfunction(self, name, pos, allow_redefine=False, visibility='extern'):
# Add an entry for a Python function.
entry = self.lookup_here(name)
if not allow_redefine:
return self._declare_pyfunction(name, pos, visibility=visibility, entry=entry)
if entry:
if entry.type.is_unspecified:
entry.type = py_object_type
elif entry.type is not py_object_type:
return self._declare_pyfunction(name, pos, visibility=visibility, entry=entry)
else: # declare entry stub
self.declare_var(name, py_object_type, pos, visibility=visibility)
entry = self.declare_var(None, py_object_type, pos,
cname=name, visibility='private')
entry.name = EncodedString(name)
entry.qualified_name = self.qualify_name(name)
entry.signature = pyfunction_signature
entry.is_anonymous = True
return entry
def declare_lambda_function(self, func_cname, pos):
# Add an entry for an anonymous Python function.
entry = self.declare_var(None, py_object_type, pos,
...
...
@@ -532,7 +550,7 @@ class Scope(object):
entry.name = EncodedString(func_cname)
entry.func_cname = func_cname
entry.signature = pyfunction_signature
entry.is_
lambda
= True
entry.is_
anonymous
= True
return entry
def add_lambda_def(self, def_node):
...
...
@@ -1337,17 +1355,8 @@ class ClosureScope(LocalScope):
# return "%s->%s" % (self.cur_scope_cname, name)
# return "%s->%s" % (self.closure_cname, name)
def declare_pyfunction(self, name, pos):
# Add an entry for a Python function.
entry = self.lookup_here(name)
if entry and not entry.type.is_cfunction:
# This is legal Python, but for now may produce invalid C.
error(pos, "'
%
s
' already declared" % name)
entry = self.declare_var(name, py_object_type, pos)
entry.signature = pyfunction_signature
self.pyfunc_entries.append(entry)
return entry
def declare_pyfunction(self, name, pos, allow_redefine=False):
return LocalScope.declare_pyfunction(self, name, pos, allow_redefine, visibility='
private
')
class StructOrUnionScope(Scope):
# Namespace of a C struct or union.
...
...
@@ -1521,7 +1530,7 @@ class CClassScope(ClassScope):
return
entry
def
declare_pyfunction
(
self
,
name
,
pos
):
def
declare_pyfunction
(
self
,
name
,
pos
,
allow_redefine
=
False
):
# Add an entry for a method.
if
name
in
(
'__eq__'
,
'__ne__'
,
'__lt__'
,
'__gt__'
,
'__le__'
,
'__ge__'
):
error
(
pos
,
"Special method %s must be implemented via __richcmp__"
%
name
)
...
...
@@ -1765,7 +1774,7 @@ class PropertyScope(Scope):
is_property_scope
=
1
def
declare_pyfunction
(
self
,
name
,
pos
):
def
declare_pyfunction
(
self
,
name
,
pos
,
allow_redefine
=
False
):
# Add an entry for a method.
signature
=
get_property_accessor_signature
(
name
)
if
signature
:
...
...
Cython/Compiler/Tests/TestParseTreeTransforms.py
View file @
90603b71
...
...
@@ -144,7 +144,8 @@ class TestWithTransform(object): # (TransformTest): # Disabled!
"""
,
t
)
if
sys
.
version_info
[:
2
]
>
(
2
,
4
):
# TODO: Re-enable once they're more robust.
if
sys
.
version_info
[:
2
]
>=
(
2
,
5
)
and
False
:
from
Cython.Debugger
import
DebugWriter
from
Cython.Debugger.Tests.TestLibCython
import
DebuggerTestCase
else
:
...
...
Cython/Compiler/Visitor.py
View file @
90603b71
...
...
@@ -173,6 +173,8 @@ class TreeVisitor(object):
result
=
handler_method
(
child
)
except
Errors
.
CompileError
:
raise
except
Errors
.
AbortError
:
raise
except
Exception
,
e
:
if
DebugFlags
.
debug_no_exception_intercept
:
raise
...
...
Cython/Debugger/Tests/TestLibCython.py
View file @
90603b71
...
...
@@ -45,7 +45,7 @@ class DebuggerTestCase(unittest.TestCase):
shutil
.
copy
(
cfuncs_file
,
self
.
cfuncs_destfile
+
'.c'
)
compiler
=
ccompiler
.
new_compiler
()
compiler
.
compile
([
'cfuncs.c'
],
debug
=
True
)
compiler
.
compile
([
'cfuncs.c'
],
debug
=
True
,
extra_postargs
=
[
'-fPIC'
]
)
opts
=
dict
(
test_directory
=
self
.
tempdir
,
...
...
@@ -194,4 +194,4 @@ class TestAll(GdbDebuggerTestCase):
sys
.
stderr
.
write
(
err
)
if
__name__
==
'__main__'
:
unittest
.
main
()
\ No newline at end of file
unittest
.
main
()
Cython/Debugger/Tests/cfuncs.c
View file @
90603b71
...
...
@@ -5,4 +5,4 @@ some_c_function(void)
a
=
1
;
b
=
2
;
}
\ No newline at end of file
}
Cython/Debugger/Tests/test_libcython_in_gdb.py
View file @
90603b71
...
...
@@ -401,4 +401,4 @@ def main(version, trace_code=False):
ignoredirs
=
[
sys
.
prefix
,
sys
.
exec_prefix
])
tracer
.
runfunc
(
runtests
)
else
:
runtests
()
\ No newline at end of file
runtests
()
Cython/Debugger/libcython.py
View file @
90603b71
...
...
@@ -1286,4 +1286,4 @@ class CyLine(gdb.Function, CythonBase):
return
self
.
get_cython_lineno
()
cy
=
CyCy
.
register
()
\ No newline at end of file
cy
=
CyCy
.
register
()
Cython/__init__.py
View file @
90603b71
__version__
=
"0.14.
alpha0
"
__version__
=
"0.14.
beta2
"
# Void cython.* directives (for case insensitive operating systems).
from
Cython.Shadow
import
*
MANIFEST.in
View file @
90603b71
...
...
@@ -5,6 +5,7 @@ include setup.py
include setupegg.py
include bin/*
include cython.py
include cygdb.py
recursive-include Cython *.pyx *.pxd
include Doc/*
...
...
@@ -24,5 +25,8 @@ include runtests.py
include Cython/Mac/Makefile
include Cython/Mac/_Filemodule_patched.c
include Cython/Debugger/Tests/cfuncs.c
include Cython/Debugger/Tests/codefile
recursive-include pyximport *.py
include pyximport/PKG-INFO pyximport/README
runtests.py
View file @
90603b71
...
...
@@ -65,6 +65,7 @@ VER_DEP_MODULES = {
]),
(2,6) : (operator.lt, lambda x: x in ['
run
.
print_function
',
'
run
.
cython3
',
'
run
.
pure_py
', # decorators, with statement
]),
# The next line should start (3,); but this is a dictionary, so
# we can only have one (3,) key. Since 2.7 is supposed to be the
...
...
@@ -643,6 +644,7 @@ class CythonUnitTestCase(CythonCompileTestCase):
except
Exception
:
pass
include_debugger
=
sys
.
version_info
[:
2
]
>
(
2
,
5
)
def
collect_unittests
(
path
,
module_prefix
,
suite
,
selectors
):
...
...
@@ -767,7 +769,7 @@ class EndToEndTest(unittest.TestCase):
.
replace
(
"PYTHON"
,
sys
.
executable
))
try
:
old_path
=
os
.
environ
.
get
(
'PYTHONPATH'
)
os
.
environ
[
'PYTHONPATH'
]
=
os
.
path
.
join
(
self
.
cython_syspath
,
(
old_path
or
''
))
os
.
environ
[
'PYTHONPATH'
]
=
self
.
cython_syspath
+
os
.
pathsep
+
os
.
path
.
join
(
self
.
cython_syspath
,
(
old_path
or
''
))
for
command
in
commands
.
split
(
'
\
n
'
):
if
sys
.
version_info
[:
2
]
>=
(
2
,
4
):
import
subprocess
...
...
setup.py
View file @
90603b71
...
...
@@ -95,9 +95,11 @@ def compile_cython_modules(profile=False, compile_more=False, cython_with_refnan
source_root
=
os
.
path
.
abspath
(
os
.
path
.
dirname
(
__file__
))
compiled_modules
=
[
"Cython.Plex.Scanners"
,
"Cython.Plex.Actions"
,
"Cython.Compiler.Lexicon"
,
"Cython.Compiler.Scanning"
,
"Cython.Compiler.Parsing"
,
"Cython.Compiler.Visitor"
,
"Cython.Compiler.Code"
,
"Cython.Runtime.refnanny"
]
if
compile_more
:
compiled_modules
.
extend
([
...
...
@@ -267,6 +269,7 @@ packages = [
if
include_debugger
:
packages
.
append
(
'Cython.Debugger'
)
packages
.
append
(
'Cython.Debugger.Tests'
)
setup
(
name
=
'Cython'
,
...
...
tests/broken/cascadedass.pyx
View file @
90603b71
...
...
@@ -5,4 +5,4 @@ cdef void foo():
i
=
j
=
c
a
=
b
=
k
(
a
,
b
),
c
=
(
d
,
e
),
f
=
(
x
,
y
),
z
# a, b = p, q = x, y
\ No newline at end of file
# a, b = p, q = x, y
tests/compile/extimported.pyx
View file @
90603b71
...
...
@@ -3,4 +3,4 @@ cdef extern class Spam.Eggs.Ham:
cdef
Ham
ham
ham
=
None
\ No newline at end of file
ham
=
None
tests/compile/for.pyx
View file @
90603b71
...
...
@@ -23,4 +23,4 @@ def f(a, b, c):
i
=
1
\ No newline at end of file
tests/compile/fromimport.pyx
View file @
90603b71
...
...
@@ -2,4 +2,4 @@ def f():
from
spam
import
eggs
from
spam.morespam
import
bacon
,
eggs
,
ham
from
spam
import
eggs
as
ova
\ No newline at end of file
tests/compile/gencall.pyx
View file @
90603b71
...
...
@@ -8,4 +8,4 @@ def z(a, b, c):
f
(
x
=
42
,
**
b
)
f
(
a
,
*
b
)
f
(
a
,
x
=
42
,
*
b
,
**
c
)
\ No newline at end of file
tests/compile/import.pyx
View file @
90603b71
...
...
@@ -3,4 +3,4 @@ def f():
import
spam.eggs
import
spam
,
eggs
,
ham
import
spam
as
tasty
\ No newline at end of file
tests/compile/indices.pyx
View file @
90603b71
...
...
@@ -14,4 +14,4 @@ a[f(2)] += 4
print
x
[
1
]
print
a
[
1
]
x
[
<
object
>
f
(
1
)]
=
15
\ No newline at end of file
x
[
<
object
>
f
(
1
)]
=
15
tests/compile/tryfinally.pyx
View file @
90603b71
...
...
@@ -16,4 +16,4 @@ def f(a, b, c, x):
finally
:
i
=
42
\ No newline at end of file
tests/errors/e_redeclmeth.pyx
deleted
100644 → 0
View file @
51714ebf
class
C
:
def
f
(
self
):
pass
def
f
(
self
):
pass
_ERRORS
=
u"""
4:1: 'f' already declared
"""
tests/run/pyfunction_redefine_T489.pyx
0 → 100644
View file @
90603b71
"""
>>> xxx
[0, 1, 2, 3]
"""
xxx
=
[]
foo
=
0
xxx
.
append
(
foo
)
def
foo
():
return
1
xxx
.
append
(
foo
())
def
foo
():
return
2
xxx
.
append
(
foo
())
foo
=
3
xxx
.
append
(
foo
)
def
closure_scope
(
a
):
"""
>>> closure_scope(0)
[0, 1, 'X', -4, 3]
"""
ret
=
[]
foo
=
a
+
0
ret
.
append
(
foo
)
def
foo
():
return
a
+
1
ret
.
append
(
foo
())
def
foo
():
return
'X'
ret
.
append
(
foo
())
def
foo
(
b
):
return
a
-
b
ret
.
append
(
foo
(
4
))
foo
=
a
+
3
ret
.
append
(
foo
)
return
ret
class
ClassScope
(
object
):
"""
>>> obj = ClassScope()
[0, 1, 2, 3]
"""
x
=
[]
def
__init__
(
self
):
r
=
[]
for
x
in
self
.
x
:
if
isinstance
(
x
,
int
):
r
.
append
(
x
)
else
:
r
.
append
(
x
(
self
))
print
r
foo
=
0
x
.
append
(
foo
)
def
foo
(
self
):
return
1
x
.
append
(
foo
)
def
foo
(
self
):
return
2
x
.
append
(
foo
)
foo
=
3
x
.
append
(
foo
)
tests/run/slice_ptr.pyx
View file @
90603b71
...
...
@@ -64,4 +64,4 @@ cdef class EqualsEvens:
elif
op
==
Py_NE
:
return
other
%
2
==
1
else
:
return
False
\ No newline at end of file
return
False
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