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
6fcea273
Commit
6fcea273
authored
Apr 22, 2011
by
Robert Bradshaw
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
remove trailing whitespace
parent
0a15980d
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
211 additions
and
211 deletions
+211
-211
Cython/Compiler/Main.py
Cython/Compiler/Main.py
+1
-1
Cython/Compiler/ModuleNode.py
Cython/Compiler/ModuleNode.py
+5
-5
Cython/Compiler/Nodes.py
Cython/Compiler/Nodes.py
+9
-9
Cython/Compiler/ParseTreeTransforms.py
Cython/Compiler/ParseTreeTransforms.py
+2
-2
Cython/Compiler/Parsing.py
Cython/Compiler/Parsing.py
+2
-2
Cython/Compiler/PyrexTypes.py
Cython/Compiler/PyrexTypes.py
+180
-180
Cython/Compiler/Symtab.py
Cython/Compiler/Symtab.py
+12
-12
No files found.
Cython/Compiler/Main.py
View file @
6fcea273
...
...
@@ -613,7 +613,7 @@ def run_pipeline(source, options, full_module_name = None):
if
os
.
path
.
exists
(
html_filename
):
line
=
codecs
.
open
(
html_filename
,
"r"
,
encoding
=
"UTF-8"
).
readline
()
if
line
.
startswith
(
u'<!-- Generated by Cython'
):
options
.
annotate
=
True
options
.
annotate
=
True
# Get pipeline
if
source_ext
.
lower
()
==
'.py'
:
...
...
Cython/Compiler/ModuleNode.py
View file @
6fcea273
...
...
@@ -73,7 +73,7 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
self
.
generate_c_code
(
env
,
options
,
result
)
self
.
generate_h_code
(
env
,
options
,
result
)
self
.
generate_api_code
(
env
,
result
)
def
has_imported_c_functions
(
self
):
for
module
in
self
.
referenced_modules
:
for
entry
in
module
.
cfunc_entries
:
...
...
@@ -166,7 +166,7 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
def
api_name
(
self
,
env
):
return
env
.
qualified_name
.
replace
(
"."
,
"__"
)
def
generate_api_code
(
self
,
env
,
result
):
def
api_entries
(
entries
,
pxd
=
0
):
return
[
entry
for
entry
in
entries
...
...
@@ -249,7 +249,7 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
def
generate_cclass_header_code
(
self
,
type
,
h_code
):
h_code
.
putln
(
"%s %s %s;"
%
(
Naming
.
extern_c_macro
,
Naming
.
extern_c_macro
,
PyrexTypes
.
public_decl
(
"PyTypeObject"
,
"DL_IMPORT"
),
type
.
typeobj_cname
))
...
...
@@ -1002,7 +1002,7 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
storage_class
=
"static "
dll_linkage
=
None
type
=
entry
.
type
if
not
definition
and
entry
.
defined_in_pxd
:
type
=
CPtrType
(
type
)
header
=
type
.
declaration_code
(
entry
.
cname
,
...
...
@@ -1775,7 +1775,7 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
code
.
putln
(
"#endif"
)
code
.
putln
(
"{"
)
tempdecl_code
=
code
.
insertion_point
()
code
.
put_declare_refcount_context
()
code
.
putln
(
"#if CYTHON_REFNANNY"
)
code
.
putln
(
"__Pyx_RefNanny = __Pyx_RefNannyImportAPI(
\
"
refnanny
\
"
);"
)
...
...
Cython/Compiler/Nodes.py
View file @
6fcea273
...
...
@@ -548,7 +548,7 @@ class CFuncDeclaratorNode(CDeclaratorNode):
other_type
=
type_node
.
analyse_as_type
(
env
)
if
other_type
is
None
:
error
(
type_node
.
pos
,
"Not a type"
)
elif
(
type
is
not
PyrexTypes
.
py_object_type
elif
(
type
is
not
PyrexTypes
.
py_object_type
and
not
type
.
same_as
(
other_type
)):
error
(
self
.
base
.
pos
,
"Signature does not agree with previous declaration"
)
error
(
type_node
.
pos
,
"Previous declaration here"
)
...
...
@@ -1099,7 +1099,7 @@ class CEnumDefNode(StatNode):
# api boolean
# in_pxd boolean
# entry Entry
child_attrs
=
[
"items"
]
def
analyse_declarations
(
self
,
env
):
...
...
@@ -1146,7 +1146,7 @@ class CEnumDefItemNode(StatNode):
if
not
self
.
value
.
type
.
is_int
:
self
.
value
=
self
.
value
.
coerce_to
(
PyrexTypes
.
c_int_type
,
env
)
self
.
value
.
analyse_const_expression
(
env
)
entry
=
env
.
declare_const
(
self
.
name
,
enum_entry
.
type
,
entry
=
env
.
declare_const
(
self
.
name
,
enum_entry
.
type
,
self
.
value
,
self
.
pos
,
cname
=
self
.
cname
,
visibility
=
enum_entry
.
visibility
,
api
=
enum_entry
.
api
)
enum_entry
.
enum_values
.
append
(
entry
)
...
...
@@ -1170,7 +1170,7 @@ class CTypeDefNode(StatNode):
cname
=
cname
,
visibility
=
self
.
visibility
,
api
=
self
.
api
)
if
self
.
in_pxd
and
not
env
.
in_cinclude
:
entry
.
defined_in_pxd
=
1
def
analyse_expressions
(
self
,
env
):
pass
def
generate_execution_code
(
self
,
code
):
...
...
@@ -1221,7 +1221,7 @@ class FuncDefNode(StatNode, BlockNode):
other_type
=
type_node
.
analyse_as_type
(
env
)
if
other_type
is
None
:
error
(
type_node
.
pos
,
"Not a type"
)
elif
(
type
is
not
PyrexTypes
.
py_object_type
elif
(
type
is
not
PyrexTypes
.
py_object_type
and
not
type
.
same_as
(
other_type
)):
error
(
arg
.
base_type
.
pos
,
"Signature does not agree with previous declaration"
)
error
(
type_node
.
pos
,
"Previous declaration here"
)
...
...
@@ -1815,7 +1815,7 @@ class CFuncDefNode(FuncDefNode):
self
.
modifiers
[
self
.
modifiers
.
index
(
'inline'
)]
=
'cython_inline'
if
self
.
modifiers
:
modifiers
=
"%s "
%
' '
.
join
(
self
.
modifiers
).
upper
()
header
=
self
.
return_type
.
declaration_code
(
entity
,
dll_linkage
=
dll_linkage
)
#print (storage_class, modifiers, header)
code
.
putln
(
"%s%s%s {"
%
(
storage_class
,
modifiers
,
header
))
...
...
@@ -3446,7 +3446,7 @@ class CClassDefNode(ClassDefNode):
visibility
=
self
.
visibility
,
typedef_flag
=
self
.
typedef_flag
,
api
=
self
.
api
,
buffer_defaults
=
buffer_defaults
,
buffer_defaults
=
buffer_defaults
,
shadow
=
self
.
shadow
)
if
self
.
shadow
:
home_scope
.
lookup
(
self
.
class_name
).
as_variable
=
self
.
entry
...
...
@@ -4172,8 +4172,8 @@ class RaiseStatNode(StatNode):
if
self
.
exc_type
and
not
self
.
exc_value
and
not
self
.
exc_tb
:
exc
=
self
.
exc_type
import
ExprNodes
if
(
isinstance
(
exc
,
ExprNodes
.
SimpleCallNode
)
and
not
(
exc
.
args
or
(
exc
.
arg_tuple
is
not
None
and
if
(
isinstance
(
exc
,
ExprNodes
.
SimpleCallNode
)
and
not
(
exc
.
args
or
(
exc
.
arg_tuple
is
not
None
and
exc
.
arg_tuple
.
args
))):
exc
=
exc
.
function
# extract the exception type
if
exc
.
is_name
and
exc
.
entry
.
is_builtin
:
...
...
Cython/Compiler/ParseTreeTransforms.py
View file @
6fcea273
...
...
@@ -1211,7 +1211,7 @@ if VALUE is not None:
arg
=
copy
.
deepcopy
(
arg_template
)
arg
.
declarator
.
name
=
entry
.
name
init_method
.
args
.
append
(
arg
)
# setters/getters
for
entry
,
attr
in
zip
(
var_entries
,
attributes
):
# TODO: branch on visibility
...
...
@@ -1224,7 +1224,7 @@ if VALUE is not None:
},
pos
=
entry
.
pos
).
stats
[
0
]
property
.
name
=
entry
.
name
wrapper_class
.
body
.
stats
.
append
(
property
)
wrapper_class
.
analyse_declarations
(
self
.
env_stack
[
-
1
])
return
self
.
visit_CClassDefNode
(
wrapper_class
)
...
...
Cython/Compiler/Parsing.py
View file @
6fcea273
...
...
@@ -2525,7 +2525,7 @@ def p_c_struct_or_union_definition(s, pos, ctx):
s
.
expect_dedent
()
else
:
s
.
expect_newline
(
"Syntax error in struct or union definition"
)
return
Nodes
.
CStructOrUnionDefNode
(
pos
,
return
Nodes
.
CStructOrUnionDefNode
(
pos
,
name
=
name
,
cname
=
cname
,
kind
=
kind
,
attributes
=
attributes
,
typedef_flag
=
ctx
.
typedef_flag
,
visibility
=
ctx
.
visibility
,
api
=
ctx
.
api
,
in_pxd
=
ctx
.
level
==
'module_pxd'
,
packed
=
packed
)
...
...
@@ -2613,7 +2613,7 @@ def p_ctypedef_statement(s, ctx):
s
.
expect_newline
(
"Syntax error in ctypedef statement"
)
return
Nodes
.
CTypeDefNode
(
pos
,
base_type
=
base_type
,
declarator
=
declarator
,
declarator
=
declarator
,
visibility
=
visibility
,
api
=
api
,
in_pxd
=
ctx
.
level
==
'module_pxd'
)
...
...
Cython/Compiler/PyrexTypes.py
View file @
6fcea273
...
...
@@ -17,10 +17,10 @@ class BaseType(object):
def
cast_code
(
self
,
expr_code
):
return
"((%s)%s)"
%
(
self
.
declaration_code
(
""
),
expr_code
)
def
specialization_name
(
self
):
return
self
.
declaration_code
(
""
).
replace
(
" "
,
"__"
)
def
base_declaration_code
(
self
,
base_code
,
entity_code
):
if
entity_code
:
return
"%s %s"
%
(
base_code
,
entity_code
)
...
...
@@ -56,7 +56,7 @@ class PyrexType(BaseType):
# has_attributes boolean Has C dot-selectable attributes
# default_value string Initial value
#
# declaration_code(entity_code,
# declaration_code(entity_code,
# for_display = 0, dll_linkage = None, pyrex = 0)
# Returns a code fragment for the declaration of an entity
# of this type, given a code fragment for the entity.
...
...
@@ -80,7 +80,7 @@ class PyrexType(BaseType):
# Coerces array type into pointer type for use as
# a formal argument type.
#
is_pyobject
=
0
is_unspecified
=
0
is_extension_type
=
0
...
...
@@ -108,44 +108,44 @@ class PyrexType(BaseType):
is_buffer
=
0
has_attributes
=
0
default_value
=
""
def
resolve
(
self
):
# If a typedef, returns the base type.
return
self
def
specialize
(
self
,
values
):
# TODO(danilo): Override wherever it makes sense.
return
self
def
literal_code
(
self
,
value
):
# Returns a C code fragment representing a literal
# value of this type.
return
str
(
value
)
def
__str__
(
self
):
return
self
.
declaration_code
(
""
,
for_display
=
1
).
strip
()
def
same_as
(
self
,
other_type
,
**
kwds
):
return
self
.
same_as_resolved_type
(
other_type
.
resolve
(),
**
kwds
)
def
same_as_resolved_type
(
self
,
other_type
):
return
self
==
other_type
or
other_type
is
error_type
def
subtype_of
(
self
,
other_type
):
return
self
.
subtype_of_resolved_type
(
other_type
.
resolve
())
def
subtype_of_resolved_type
(
self
,
other_type
):
return
self
.
same_as
(
other_type
)
def
assignable_from
(
self
,
src_type
):
return
self
.
assignable_from_resolved_type
(
src_type
.
resolve
())
def
assignable_from_resolved_type
(
self
,
src_type
):
return
self
.
same_as
(
src_type
)
def
as_argument_type
(
self
):
return
self
def
is_complete
(
self
):
# A type is incomplete if it is an unsized array,
# a struct whose attributes are not defined, etc.
...
...
@@ -167,7 +167,7 @@ def public_decl(base_code, dll_linkage):
return
"%s(%s)"
%
(
dll_linkage
,
base_code
)
else
:
return
base_code
def
create_typedef_type
(
name
,
base_type
,
cname
,
is_external
=
0
):
if
base_type
.
is_complex
:
if
is_external
:
...
...
@@ -189,38 +189,38 @@ class CTypedefType(BaseType):
# typedef_cname string
# typedef_base_type PyrexType
# typedef_is_external bool
is_typedef
=
1
typedef_is_external
=
0
to_py_utility_code
=
None
from_py_utility_code
=
None
def
__init__
(
self
,
name
,
base_type
,
cname
,
is_external
=
0
):
assert
not
base_type
.
is_complex
self
.
typedef_name
=
name
self
.
typedef_cname
=
cname
self
.
typedef_base_type
=
base_type
self
.
typedef_is_external
=
is_external
def
resolve
(
self
):
return
self
.
typedef_base_type
.
resolve
()
def
declaration_code
(
self
,
entity_code
,
def
declaration_code
(
self
,
entity_code
,
for_display
=
0
,
dll_linkage
=
None
,
pyrex
=
0
):
if
pyrex
or
for_display
:
base_code
=
self
.
typedef_name
else
:
base_code
=
public_decl
(
self
.
typedef_cname
,
dll_linkage
)
return
self
.
base_declaration_code
(
base_code
,
entity_code
)
def
as_argument_type
(
self
):
return
self
def
cast_code
(
self
,
expr_code
):
# If self is really an array (rather than pointer), we can't cast.
# For example, the gmp mpz_t.
# For example, the gmp mpz_t.
if
self
.
typedef_base_type
.
is_array
:
base_type
=
self
.
typedef_base_type
.
base_type
return
CPtrType
(
base_type
).
cast_code
(
expr_code
)
...
...
@@ -229,7 +229,7 @@ class CTypedefType(BaseType):
def
__repr__
(
self
):
return
"<CTypedefType %s>"
%
self
.
typedef_cname
def
__str__
(
self
):
return
self
.
typedef_name
...
...
@@ -303,7 +303,7 @@ class BufferType(BaseType):
# Delegates most attribute
# lookups to the base type. ANYTHING NOT DEFINED
# HERE IS DELEGATED!
# dtype PyrexType
# ndim int
# mode str
...
...
@@ -322,7 +322,7 @@ class BufferType(BaseType):
self
.
mode
=
mode
self
.
negative_indices
=
negative_indices
self
.
cast
=
cast
def
as_argument_type
(
self
):
return
self
...
...
@@ -345,10 +345,10 @@ class PyObjectType(PyrexType):
buffer_defaults
=
None
is_extern
=
False
is_subclassed
=
False
def
__str__
(
self
):
return
"Python object"
def
__repr__
(
self
):
return
"<PyObjectType>"
...
...
@@ -362,8 +362,8 @@ class PyObjectType(PyrexType):
def
assignable_from
(
self
,
src_type
):
# except for pointers, conversion will be attempted
return
not
src_type
.
is_ptr
or
src_type
.
is_string
def
declaration_code
(
self
,
entity_code
,
def
declaration_code
(
self
,
entity_code
,
for_display
=
0
,
dll_linkage
=
None
,
pyrex
=
0
):
if
pyrex
or
for_display
:
base_code
=
"object"
...
...
@@ -398,15 +398,15 @@ class BuiltinObjectType(PyObjectType):
self
.
cname
=
cname
self
.
typeptr_cname
=
"(&%s)"
%
cname
self
.
objstruct_cname
=
objstruct_cname
def
set_scope
(
self
,
scope
):
self
.
scope
=
scope
if
scope
:
scope
.
parent_type
=
self
def
__str__
(
self
):
return
"%s object"
%
self
.
name
def
__repr__
(
self
):
return
"<%s>"
%
self
.
cname
...
...
@@ -427,13 +427,13 @@ class BuiltinObjectType(PyObjectType):
src_type
.
name
==
self
.
name
)
else
:
return
True
def
typeobj_is_available
(
self
):
return
True
def
attributes_known
(
self
):
return
True
def
subtype_of
(
self
,
type
):
return
type
.
is_pyobject
and
self
.
assignable_from
(
type
)
...
...
@@ -460,7 +460,7 @@ class BuiltinObjectType(PyObjectType):
error
=
'(PyErr_Format(PyExc_TypeError, "Expected %s, got %%.200s", Py_TYPE(%s)->tp_name), 0)'
%
(
self
.
name
,
arg
)
return
check
+
'||'
+
error
def
declaration_code
(
self
,
entity_code
,
def
declaration_code
(
self
,
entity_code
,
for_display
=
0
,
dll_linkage
=
None
,
pyrex
=
0
):
if
pyrex
or
for_display
:
base_code
=
self
.
name
...
...
@@ -493,12 +493,12 @@ class PyExtensionType(PyObjectType):
# vtabstruct_cname string Name of C method table struct
# vtabptr_cname string Name of pointer to C method table
# vtable_cname string Name of C method table definition
is_extension_type
=
1
has_attributes
=
1
objtypedef_cname
=
None
def
__init__
(
self
,
name
,
typedef_flag
,
base_type
,
is_external
=
0
):
self
.
name
=
name
self
.
scope
=
None
...
...
@@ -515,28 +515,28 @@ class PyExtensionType(PyObjectType):
self
.
vtabptr_cname
=
None
self
.
vtable_cname
=
None
self
.
is_external
=
is_external
def
set_scope
(
self
,
scope
):
self
.
scope
=
scope
if
scope
:
scope
.
parent_type
=
self
def
subtype_of_resolved_type
(
self
,
other_type
):
if
other_type
.
is_extension_type
:
return
self
is
other_type
or
(
self
.
base_type
and
self
.
base_type
.
subtype_of
(
other_type
))
else
:
return
other_type
is
py_object_type
def
typeobj_is_available
(
self
):
# Do we have a pointer to the type object?
return
self
.
typeptr_cname
def
typeobj_is_imported
(
self
):
# If we don't know the C name of the type object but we do
# know which module it's defined in, it will be imported.
return
self
.
typeobj_cname
is
None
and
self
.
module_name
is
not
None
def
assignable_from
(
self
,
src_type
):
if
self
==
src_type
:
return
True
...
...
@@ -545,7 +545,7 @@ class PyExtensionType(PyObjectType):
return
self
.
assignable_from
(
src_type
.
base_type
)
return
False
def
declaration_code
(
self
,
entity_code
,
def
declaration_code
(
self
,
entity_code
,
for_display
=
0
,
dll_linkage
=
None
,
pyrex
=
0
,
deref
=
0
):
if
pyrex
or
for_display
:
base_code
=
self
.
name
...
...
@@ -573,14 +573,14 @@ class PyExtensionType(PyObjectType):
def
attributes_known
(
self
):
return
self
.
scope
is
not
None
def
__str__
(
self
):
return
self
.
name
def
__repr__
(
self
):
return
"<PyExtensionType %s%s>"
%
(
self
.
scope
.
class_name
,
(
""
,
" typedef"
)[
self
.
typedef_flag
])
class
CType
(
PyrexType
):
#
...
...
@@ -589,7 +589,7 @@ class CType(PyrexType):
# to_py_function string C function for converting to Python object
# from_py_function string C function for constructing from Python object
#
to_py_function
=
None
from_py_function
=
None
exception_value
=
None
...
...
@@ -597,7 +597,7 @@ class CType(PyrexType):
def
create_to_py_utility_code
(
self
,
env
):
return
self
.
to_py_function
is
not
None
def
create_from_py_utility_code
(
self
,
env
):
return
self
.
from_py_function
is
not
None
...
...
@@ -624,18 +624,18 @@ class CVoidType(CType):
#
is_void
=
1
def
__repr__
(
self
):
return
"<CVoidType>"
def
declaration_code
(
self
,
entity_code
,
def
declaration_code
(
self
,
entity_code
,
for_display
=
0
,
dll_linkage
=
None
,
pyrex
=
0
):
if
pyrex
or
for_display
:
base_code
=
"void"
else
:
base_code
=
public_decl
(
"void"
,
dll_linkage
)
return
self
.
base_declaration_code
(
base_code
,
entity_code
)
def
is_complete
(
self
):
return
0
...
...
@@ -647,27 +647,27 @@ class CNumericType(CType):
# rank integer Relative size
# signed integer 0 = unsigned, 1 = unspecified, 2 = explicitly signed
#
is_numeric
=
1
default_value
=
"0"
has_attributes
=
True
scope
=
None
sign_words
=
(
"unsigned "
,
""
,
"signed "
)
def
__init__
(
self
,
rank
,
signed
=
1
):
self
.
rank
=
rank
self
.
signed
=
signed
def
sign_and_name
(
self
):
s
=
self
.
sign_words
[
self
.
signed
]
n
=
rank_to_type_name
[
self
.
rank
]
return
s
+
n
def
__repr__
(
self
):
return
"<CNumericType %s>"
%
self
.
sign_and_name
()
def
declaration_code
(
self
,
entity_code
,
def
declaration_code
(
self
,
entity_code
,
for_display
=
0
,
dll_linkage
=
None
,
pyrex
=
0
):
type_name
=
self
.
sign_and_name
()
if
pyrex
or
for_display
:
...
...
@@ -675,7 +675,7 @@ class CNumericType(CType):
else
:
base_code
=
public_decl
(
type_name
,
dll_linkage
)
return
self
.
base_declaration_code
(
base_code
,
entity_code
)
def
attributes_known
(
self
):
if
self
.
scope
is
None
:
import
Symtab
...
...
@@ -846,7 +846,7 @@ static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_%(TypeName)s(%(type)s val) {
} else {
int one = 1; int little = (int)*(unsigned char *)&one;
unsigned char *bytes = (unsigned char *)&val;
return _PyLong_FromByteArray(bytes, sizeof(%(type)s),
return _PyLong_FromByteArray(bytes, sizeof(%(type)s),
little, !is_unsigned);
}
}
...
...
@@ -1101,22 +1101,22 @@ class CFloatType(CNumericType):
from_py_function
=
"__pyx_PyFloat_AsDouble"
exception_value
=
-
1
def
__init__
(
self
,
rank
,
math_h_modifier
=
''
):
CNumericType
.
__init__
(
self
,
rank
,
1
)
self
.
math_h_modifier
=
math_h_modifier
def
assignable_from_resolved_type
(
self
,
src_type
):
return
(
src_type
.
is_numeric
and
not
src_type
.
is_complex
)
or
src_type
is
error_type
class
CComplexType
(
CNumericType
):
is_complex
=
1
to_py_function
=
"__pyx_PyComplex_FromComplex"
has_attributes
=
1
scope
=
None
def
__init__
(
self
,
real_type
):
while
real_type
.
is_typedef
and
not
real_type
.
typedef_is_external
:
real_type
=
real_type
.
typedef_base_type
...
...
@@ -1128,7 +1128,7 @@ class CComplexType(CNumericType):
self
.
funcsuffix
=
real_type
.
math_h_modifier
else
:
self
.
funcsuffix
=
"_%s"
%
real_type
.
specialization_name
()
self
.
real_type
=
real_type
CNumericType
.
__init__
(
self
,
real_type
.
rank
+
0.5
,
real_type
.
signed
)
self
.
binops
=
{}
...
...
@@ -1140,7 +1140,7 @@ class CComplexType(CNumericType):
return
self
.
real_type
==
other
.
real_type
else
:
return
False
def
__ne__
(
self
,
other
):
if
isinstance
(
self
,
CComplexType
)
and
isinstance
(
other
,
CComplexType
):
return
self
.
real_type
!=
other
.
real_type
...
...
@@ -1158,7 +1158,7 @@ class CComplexType(CNumericType):
def
__hash__
(
self
):
return
~
hash
(
self
.
real_type
)
def
declaration_code
(
self
,
entity_code
,
def
declaration_code
(
self
,
entity_code
,
for_display
=
0
,
dll_linkage
=
None
,
pyrex
=
0
):
if
pyrex
or
for_display
:
real_code
=
self
.
real_type
.
declaration_code
(
""
,
for_display
,
dll_linkage
,
pyrex
)
...
...
@@ -1172,7 +1172,7 @@ class CComplexType(CNumericType):
real_type_name
=
real_type_name
.
replace
(
'long__double'
,
'long_double'
)
real_type_name
=
real_type_name
.
replace
(
'PY_LONG_LONG'
,
'long_long'
)
return
Naming
.
type_prefix
+
real_type_name
+
"_complex"
def
assignable_from
(
self
,
src_type
):
# Temporary hack/feature disabling, see #441
if
(
not
src_type
.
is_complex
and
src_type
.
is_numeric
and
src_type
.
is_typedef
...
...
@@ -1180,12 +1180,12 @@ class CComplexType(CNumericType):
return
False
else
:
return
super
(
CComplexType
,
self
).
assignable_from
(
src_type
)
def
assignable_from_resolved_type
(
self
,
src_type
):
return
(
src_type
.
is_complex
and
self
.
real_type
.
assignable_from_resolved_type
(
src_type
.
real_type
)
or
src_type
.
is_numeric
and
self
.
real_type
.
assignable_from_resolved_type
(
src_type
)
or
src_type
.
is_numeric
and
self
.
real_type
.
assignable_from_resolved_type
(
src_type
)
or
src_type
is
error_type
)
def
attributes_known
(
self
):
if
self
.
scope
is
None
:
import
Symtab
...
...
@@ -1216,7 +1216,7 @@ class CComplexType(CNumericType):
complex_arithmetic_utility_code
):
env
.
use_utility_code
(
utility_code
.
specialize
(
self
,
self
,
real_type
=
self
.
real_type
.
declaration_code
(
''
),
m
=
self
.
funcsuffix
,
is_float
=
self
.
real_type
.
is_float
))
...
...
@@ -1234,13 +1234,13 @@ class CComplexType(CNumericType):
complex_from_py_utility_code
):
env
.
use_utility_code
(
utility_code
.
specialize
(
self
,
self
,
real_type
=
self
.
real_type
.
declaration_code
(
''
),
m
=
self
.
funcsuffix
,
is_float
=
self
.
real_type
.
is_float
))
self
.
from_py_function
=
"__Pyx_PyComplex_As_"
+
self
.
specialization_name
()
return
True
def
lookup_op
(
self
,
nargs
,
op
):
try
:
return
self
.
binops
[
nargs
,
op
]
...
...
@@ -1255,10 +1255,10 @@ class CComplexType(CNumericType):
def
unary_op
(
self
,
op
):
return
self
.
lookup_op
(
1
,
op
)
def
binary_op
(
self
,
op
):
return
self
.
lookup_op
(
2
,
op
)
complex_ops
=
{
(
1
,
'-'
):
'neg'
,
(
1
,
'zero'
):
'is_zero'
,
...
...
@@ -1529,31 +1529,31 @@ impl="""
class
CArrayType
(
CType
):
# base_type CType Element type
# size integer or None Number of elements
is_array
=
1
def
__init__
(
self
,
base_type
,
size
):
self
.
base_type
=
base_type
self
.
size
=
size
if
base_type
in
(
c_char_type
,
c_uchar_type
,
c_schar_type
):
self
.
is_string
=
1
def
__repr__
(
self
):
return
"<CArrayType %s %s>"
%
(
self
.
size
,
repr
(
self
.
base_type
))
def
same_as_resolved_type
(
self
,
other_type
):
return
((
other_type
.
is_array
and
self
.
base_type
.
same_as
(
other_type
.
base_type
))
or
other_type
is
error_type
)
def
assignable_from_resolved_type
(
self
,
src_type
):
# Can't assign to a variable of an array type
return
0
def
element_ptr_type
(
self
):
return
c_ptr_type
(
self
.
base_type
)
def
declaration_code
(
self
,
entity_code
,
def
declaration_code
(
self
,
entity_code
,
for_display
=
0
,
dll_linkage
=
None
,
pyrex
=
0
):
if
self
.
size
is
not
None
:
dimension_code
=
self
.
size
...
...
@@ -1564,38 +1564,38 @@ class CArrayType(CType):
return
self
.
base_type
.
declaration_code
(
"%s[%s]"
%
(
entity_code
,
dimension_code
),
for_display
,
dll_linkage
,
pyrex
)
def
as_argument_type
(
self
):
return
c_ptr_type
(
self
.
base_type
)
def
is_complete
(
self
):
return
self
.
size
is
not
None
class
CPtrType
(
CType
):
# base_type CType Referenced type
is_ptr
=
1
default_value
=
"0"
def
__init__
(
self
,
base_type
):
self
.
base_type
=
base_type
def
__repr__
(
self
):
return
"<CPtrType %s>"
%
repr
(
self
.
base_type
)
def
same_as_resolved_type
(
self
,
other_type
):
return
((
other_type
.
is_ptr
and
self
.
base_type
.
same_as
(
other_type
.
base_type
))
or
other_type
is
error_type
)
def
declaration_code
(
self
,
entity_code
,
def
declaration_code
(
self
,
entity_code
,
for_display
=
0
,
dll_linkage
=
None
,
pyrex
=
0
):
#print "CPtrType.declaration_code: pointer to", self.base_type ###
return
self
.
base_type
.
declaration_code
(
"*%s"
%
entity_code
,
for_display
,
dll_linkage
,
pyrex
)
def
assignable_from_resolved_type
(
self
,
other_type
):
if
other_type
is
error_type
:
return
1
...
...
@@ -1608,13 +1608,13 @@ class CPtrType(CType):
return
self
.
base_type
.
pointer_assignable_from_resolved_type
(
other_type
)
else
:
return
0
if
(
self
.
base_type
.
is_cpp_class
and
other_type
.
is_ptr
if
(
self
.
base_type
.
is_cpp_class
and
other_type
.
is_ptr
and
other_type
.
base_type
.
is_cpp_class
and
other_type
.
base_type
.
is_subclass
(
self
.
base_type
)):
return
1
if
other_type
.
is_array
or
other_type
.
is_ptr
:
return
self
.
base_type
.
is_void
or
self
.
base_type
.
same_as
(
other_type
.
base_type
)
return
0
def
specialize
(
self
,
values
):
base_type
=
self
.
base_type
.
specialize
(
values
)
if
base_type
==
self
.
base_type
:
...
...
@@ -1626,7 +1626,7 @@ class CPtrType(CType):
class
CNullPtrType
(
CPtrType
):
is_null_ptr
=
1
class
CReferenceType
(
BaseType
):
...
...
@@ -1637,20 +1637,20 @@ class CReferenceType(BaseType):
def
__repr__
(
self
):
return
"<CReferenceType %s>"
%
repr
(
self
.
ref_base_type
)
def
__str__
(
self
):
return
"%s &"
%
self
.
ref_base_type
def
as_argument_type
(
self
):
return
self
def
declaration_code
(
self
,
entity_code
,
def
declaration_code
(
self
,
entity_code
,
for_display
=
0
,
dll_linkage
=
None
,
pyrex
=
0
):
#print "CReferenceType.declaration_code: pointer to", self.base_type ###
return
self
.
ref_base_type
.
declaration_code
(
"&%s"
%
entity_code
,
for_display
,
dll_linkage
,
pyrex
)
def
specialize
(
self
,
values
):
base_type
=
self
.
ref_base_type
.
specialize
(
values
)
if
base_type
==
self
.
ref_base_type
:
...
...
@@ -1672,10 +1672,10 @@ class CFuncType(CType):
# nogil boolean Can be called without gil
# with_gil boolean Acquire gil around function body
# templates [string] or None
is_cfunction
=
1
original_sig
=
None
def
__init__
(
self
,
return_type
,
args
,
has_varargs
=
0
,
exception_value
=
None
,
exception_check
=
0
,
calling_convention
=
""
,
nogil
=
0
,
with_gil
=
0
,
is_overridable
=
0
,
optional_arg_count
=
0
,
...
...
@@ -1691,7 +1691,7 @@ class CFuncType(CType):
self
.
with_gil
=
with_gil
self
.
is_overridable
=
is_overridable
self
.
templates
=
templates
def
__repr__
(
self
):
arg_reprs
=
map
(
repr
,
self
.
args
)
if
self
.
has_varargs
:
...
...
@@ -1707,14 +1707,14 @@ class CFuncType(CType):
self
.
calling_convention_prefix
(),
","
.
join
(
arg_reprs
),
except_clause
)
def
calling_convention_prefix
(
self
):
cc
=
self
.
calling_convention
if
cc
:
return
cc
+
" "
else
:
return
""
def
same_c_signature_as
(
self
,
other_type
,
as_cmethod
=
0
):
return
self
.
same_c_signature_as_resolved_type
(
other_type
.
resolve
(),
as_cmethod
)
...
...
@@ -1750,7 +1750,7 @@ class CFuncType(CType):
def
compatible_signature_with
(
self
,
other_type
,
as_cmethod
=
0
):
return
self
.
compatible_signature_with_resolved_type
(
other_type
.
resolve
(),
as_cmethod
)
def
compatible_signature_with_resolved_type
(
self
,
other_type
,
as_cmethod
):
#print "CFuncType.same_c_signature_as_resolved_type:", \
# self, other_type, "as_cmethod =", as_cmethod ###
...
...
@@ -1784,11 +1784,11 @@ class CFuncType(CType):
if
as_cmethod
:
self
.
args
[
0
]
=
other_type
.
args
[
0
]
return
1
def
narrower_c_signature_than
(
self
,
other_type
,
as_cmethod
=
0
):
return
self
.
narrower_c_signature_than_resolved_type
(
other_type
.
resolve
(),
as_cmethod
)
def
narrower_c_signature_than_resolved_type
(
self
,
other_type
,
as_cmethod
):
if
other_type
is
error_type
:
return
1
...
...
@@ -1824,7 +1824,7 @@ class CFuncType(CType):
sc1
=
self
.
calling_convention
==
'__stdcall'
sc2
=
other
.
calling_convention
==
'__stdcall'
return
sc1
==
sc2
def
same_exception_signature_as
(
self
,
other_type
):
return
self
.
same_exception_signature_as_resolved_type
(
other_type
.
resolve
())
...
...
@@ -1832,18 +1832,18 @@ class CFuncType(CType):
def
same_exception_signature_as_resolved_type
(
self
,
other_type
):
return
self
.
exception_value
==
other_type
.
exception_value
\
and
self
.
exception_check
==
other_type
.
exception_check
def
same_as_resolved_type
(
self
,
other_type
,
as_cmethod
=
0
):
return
self
.
same_c_signature_as_resolved_type
(
other_type
,
as_cmethod
)
\
and
self
.
same_exception_signature_as_resolved_type
(
other_type
)
\
and
self
.
nogil
==
other_type
.
nogil
def
pointer_assignable_from_resolved_type
(
self
,
other_type
):
return
self
.
same_c_signature_as_resolved_type
(
other_type
)
\
and
self
.
same_exception_signature_as_resolved_type
(
other_type
)
\
and
not
(
self
.
nogil
and
not
other_type
.
nogil
)
def
declaration_code
(
self
,
entity_code
,
def
declaration_code
(
self
,
entity_code
,
for_display
=
0
,
dll_linkage
=
None
,
pyrex
=
0
,
with_calling_convention
=
1
):
arg_decl_list
=
[]
...
...
@@ -1881,7 +1881,7 @@ class CFuncType(CType):
return
self
.
return_type
.
declaration_code
(
"%s%s(%s)%s"
%
(
cc
,
entity_code
,
arg_decl_code
,
trailer
),
for_display
,
dll_linkage
,
pyrex
)
def
function_header_code
(
self
,
func_name
,
arg_code
):
return
"%s%s(%s)"
%
(
self
.
calling_convention_prefix
(),
func_name
,
arg_code
)
...
...
@@ -1893,7 +1893,7 @@ class CFuncType(CType):
def
signature_cast_string
(
self
):
s
=
self
.
declaration_code
(
"(*)"
,
with_calling_convention
=
False
)
return
'(%s)'
%
s
def
specialize
(
self
,
values
):
if
self
.
templates
is
None
:
new_templates
=
None
...
...
@@ -1910,7 +1910,7 @@ class CFuncType(CType):
is_overridable
=
self
.
is_overridable
,
optional_arg_count
=
self
.
optional_arg_count
,
templates
=
new_templates
)
def
opt_arg_cname
(
self
,
arg_name
):
return
self
.
op_arg_struct
.
base_type
.
scope
.
lookup
(
arg_name
).
cname
...
...
@@ -1935,13 +1935,13 @@ class CFuncTypeArg(object):
self
.
type
=
type
self
.
pos
=
pos
self
.
needs_type_test
=
False
# TODO: should these defaults be set in analyse_types()?
def
__repr__
(
self
):
return
"%s:%s"
%
(
self
.
name
,
repr
(
self
.
type
))
def
declaration_code
(
self
,
for_display
=
0
):
return
self
.
type
.
declaration_code
(
self
.
cname
,
for_display
)
def
specialize
(
self
,
values
):
return
CFuncTypeArg
(
self
.
name
,
self
.
type
.
specialize
(
values
),
self
.
pos
,
self
.
cname
)
...
...
@@ -1955,11 +1955,11 @@ class StructUtilityCode(object):
return
isinstance
(
other
,
StructUtilityCode
)
and
self
.
header
==
other
.
header
def
__hash__
(
self
):
return
hash
(
self
.
header
)
def
put_code
(
self
,
output
):
code
=
output
[
'utility_code_def'
]
proto
=
output
[
'utility_code_proto'
]
code
.
putln
(
"%s {"
%
self
.
header
)
code
.
putln
(
"PyObject* res;"
)
code
.
putln
(
"PyObject* member;"
)
...
...
@@ -1982,7 +1982,7 @@ class StructUtilityCode(object):
if
self
.
forward_decl
:
proto
.
putln
(
self
.
type
.
declaration_code
(
''
)
+
';'
)
proto
.
putln
(
self
.
header
+
";"
)
class
CStructOrUnionType
(
CType
):
# name string
...
...
@@ -1991,12 +1991,12 @@ class CStructOrUnionType(CType):
# scope StructOrUnionScope, or None if incomplete
# typedef_flag boolean
# packed boolean
# entry Entry
is_struct_or_union
=
1
has_attributes
=
1
def
__init__
(
self
,
name
,
kind
,
scope
,
typedef_flag
,
cname
,
packed
=
False
):
self
.
name
=
name
self
.
cname
=
cname
...
...
@@ -2009,7 +2009,7 @@ class CStructOrUnionType(CType):
self
.
exception_check
=
True
self
.
_convert_code
=
None
self
.
packed
=
packed
def
create_to_py_utility_code
(
self
,
env
):
if
env
.
outer_scope
is
None
:
return
False
...
...
@@ -2024,15 +2024,15 @@ class CStructOrUnionType(CType):
return
False
forward_decl
=
(
self
.
entry
.
visibility
!=
'extern'
)
self
.
_convert_code
=
StructUtilityCode
(
self
,
forward_decl
)
env
.
use_utility_code
(
self
.
_convert_code
)
return
True
def
__repr__
(
self
):
return
"<CStructOrUnionType %s %s%s>"
%
(
self
.
name
,
self
.
cname
,
(
""
,
" typedef"
)[
self
.
typedef_flag
])
def
declaration_code
(
self
,
entity_code
,
def
declaration_code
(
self
,
entity_code
,
for_display
=
0
,
dll_linkage
=
None
,
pyrex
=
0
):
if
pyrex
or
for_display
:
base_code
=
self
.
name
...
...
@@ -2064,7 +2064,7 @@ class CStructOrUnionType(CType):
def
is_complete
(
self
):
return
self
.
scope
is
not
None
def
attributes_known
(
self
):
return
self
.
is_complete
()
...
...
@@ -2087,12 +2087,12 @@ class CppClassType(CType):
# cname string
# scope CppClassScope
# templates [string] or None
is_cpp_class
=
1
has_attributes
=
1
exception_check
=
True
namespace
=
None
def
__init__
(
self
,
name
,
scope
,
cname
,
base_classes
,
templates
=
None
,
template_type
=
None
):
self
.
name
=
name
self
.
cname
=
cname
...
...
@@ -2108,11 +2108,11 @@ class CppClassType(CType):
error
(
pos
,
"'%s' type is not a template"
%
self
);
return
PyrexTypes
.
error_type
if
len
(
self
.
templates
)
!=
len
(
template_values
):
error
(
pos
,
"%s templated type receives %d arguments, got %d"
%
error
(
pos
,
"%s templated type receives %d arguments, got %d"
%
(
self
.
name
,
len
(
self
.
templates
),
len
(
template_values
)))
return
error_type
return
self
.
specialize
(
dict
(
zip
(
self
.
templates
,
template_values
)))
def
specialize
(
self
,
values
):
if
not
self
.
templates
and
not
self
.
namespace
:
return
self
...
...
@@ -2159,7 +2159,7 @@ class CppClassType(CType):
if
base_class
.
is_subclass
(
other_type
):
return
1
return
0
def
same_as_resolved_type
(
self
,
other_type
):
if
other_type
.
is_cpp_class
:
if
self
==
other_type
:
...
...
@@ -2178,23 +2178,23 @@ class CppClassType(CType):
if
other_type
is
error_type
:
return
True
return
other_type
.
is_cpp_class
and
other_type
.
is_subclass
(
self
)
def
attributes_known
(
self
):
return
self
.
scope
is
not
None
class
TemplatePlaceholderType
(
CType
):
def
__init__
(
self
,
name
):
self
.
name
=
name
def
declaration_code
(
self
,
entity_code
,
def
declaration_code
(
self
,
entity_code
,
for_display
=
0
,
dll_linkage
=
None
,
pyrex
=
0
):
if
entity_code
:
return
self
.
name
+
" "
+
entity_code
else
:
return
self
.
name
def
specialize
(
self
,
values
):
if
self
in
values
:
return
values
[
self
]
...
...
@@ -2206,10 +2206,10 @@ class TemplatePlaceholderType(CType):
return
self
.
name
==
other_type
.
name
else
:
return
0
def
__hash__
(
self
):
return
hash
(
self
.
name
)
def
__cmp__
(
self
,
other
):
if
isinstance
(
other
,
TemplatePlaceholderType
):
return
cmp
(
self
.
name
,
other
.
name
)
...
...
@@ -2232,15 +2232,15 @@ class CEnumType(CType):
self
.
cname
=
cname
self
.
values
=
[]
self
.
typedef_flag
=
typedef_flag
def
__str__
(
self
):
return
self
.
name
def
__repr__
(
self
):
return
"<CEnumType %s %s%s>"
%
(
self
.
name
,
self
.
cname
,
(
""
,
" typedef"
)[
self
.
typedef_flag
])
def
declaration_code
(
self
,
entity_code
,
def
declaration_code
(
self
,
entity_code
,
for_display
=
0
,
dll_linkage
=
None
,
pyrex
=
0
):
if
pyrex
or
for_display
:
base_code
=
self
.
name
...
...
@@ -2258,7 +2258,7 @@ class CStringType(object):
is_string
=
1
is_unicode
=
0
to_py_function
=
"PyBytes_FromString"
from_py_function
=
"PyBytes_AsString"
exception_value
=
"NULL"
...
...
@@ -2270,32 +2270,32 @@ class CStringType(object):
class
CUTF8CharArrayType
(
CStringType
,
CArrayType
):
# C 'char []' type.
is_unicode
=
1
to_py_function
=
"PyUnicode_DecodeUTF8"
exception_value
=
"NULL"
def
__init__
(
self
,
size
):
CArrayType
.
__init__
(
self
,
c_char_type
,
size
)
class
CCharArrayType
(
CStringType
,
CArrayType
):
# C 'char []' type.
def
__init__
(
self
,
size
):
CArrayType
.
__init__
(
self
,
c_char_type
,
size
)
class
CCharPtrType
(
CStringType
,
CPtrType
):
# C 'char *' type.
def
__init__
(
self
):
CPtrType
.
__init__
(
self
,
c_char_type
)
class
CUCharPtrType
(
CStringType
,
CPtrType
):
# C 'unsigned char *' type.
to_py_function
=
"__Pyx_PyBytes_FromUString"
from_py_function
=
"__Pyx_PyBytes_AsUString"
...
...
@@ -2305,39 +2305,39 @@ class CUCharPtrType(CStringType, CPtrType):
class
UnspecifiedType
(
PyrexType
):
# Used as a placeholder until the type can be determined.
is_unspecified
=
1
def
declaration_code
(
self
,
entity_code
,
def
declaration_code
(
self
,
entity_code
,
for_display
=
0
,
dll_linkage
=
None
,
pyrex
=
0
):
return
"<unspecified>"
def
same_as_resolved_type
(
self
,
other_type
):
return
False
class
ErrorType
(
PyrexType
):
# Used to prevent propagation of error messages.
is_error
=
1
exception_value
=
"0"
exception_check
=
0
to_py_function
=
"dummy"
from_py_function
=
"dummy"
def
create_to_py_utility_code
(
self
,
env
):
return
True
def
create_from_py_utility_code
(
self
,
env
):
return
True
def
declaration_code
(
self
,
entity_code
,
def
declaration_code
(
self
,
entity_code
,
for_display
=
0
,
dll_linkage
=
None
,
pyrex
=
0
):
return
"<error>"
def
same_as_resolved_type
(
self
,
other_type
):
return
1
def
error_condition
(
self
,
result_code
):
return
"dummy"
...
...
@@ -2467,7 +2467,7 @@ modifiers_and_name_to_type = {
def
is_promotion
(
src_type
,
dst_type
):
# It's hard to find a hard definition of promotion, but empirical
# evidence suggests that the below is all that's allowed.
# evidence suggests that the below is all that's allowed.
if
src_type
.
is_numeric
:
if
dst_type
.
same_as
(
c_int_type
):
unsigned
=
(
not
src_type
.
signed
)
...
...
@@ -2490,7 +2490,7 @@ def best_match(args, functions, pos=None):
functions based on how much work must be done to convert the
arguments, with the following priorities:
* identical types or pointers to identical types
* promotions
* promotions
* non-Python types
That is, we prefer functions where no arguments need converted,
and failing that, functions where only promotions are required, and
...
...
@@ -2500,7 +2500,7 @@ def best_match(args, functions, pos=None):
the same weight, we return None (as there is no best match). If pos
is not None, we also generate an error.
"""
# TODO: args should be a list of types, not a list of Nodes.
# TODO: args should be a list of types, not a list of Nodes.
actual_nargs
=
len
(
args
)
candidates
=
[]
...
...
@@ -2532,7 +2532,7 @@ def best_match(args, functions, pos=None):
errors
.
append
((
func
,
error_mesg
))
continue
candidates
.
append
((
func
,
func_type
))
# Optimize the most common case of no overloading...
if
len
(
candidates
)
==
1
:
return
candidates
[
0
][
0
]
...
...
@@ -2543,7 +2543,7 @@ def best_match(args, functions, pos=None):
else
:
error
(
pos
,
"no suitable method found"
)
return
None
possibilities
=
[]
bad_types
=
[]
for
func
,
func_type
in
candidates
:
...
...
@@ -2593,7 +2593,7 @@ def widest_numeric_type(type1, type2):
return
ntype
widest_type
=
CComplexType
(
widest_numeric_type
(
real_type
(
type1
),
real_type
(
type1
),
real_type
(
type2
)))
elif
type1
.
is_enum
and
type2
.
is_enum
:
widest_type
=
c_int_type
...
...
@@ -2685,7 +2685,7 @@ def simple_c_type(signed, longness, name):
# Find type descriptor for simple type given name and modifiers.
# Returns None if arguments don't make sense.
return
modifiers_and_name_to_type
.
get
((
signed
,
longness
,
name
))
def
parse_basic_type
(
name
):
base
=
None
if
name
.
startswith
(
'p_'
):
...
...
@@ -2719,7 +2719,7 @@ def parse_basic_type(name):
if
name
.
startswith
(
'u'
):
name
=
name
[
1
:]
signed
=
0
elif
(
name
.
startswith
(
's'
)
and
elif
(
name
.
startswith
(
's'
)
and
not
name
.
startswith
(
'short'
)):
name
=
name
[
1
:]
signed
=
2
...
...
@@ -2763,7 +2763,7 @@ def c_ref_type(base_type):
def
same_type
(
type1
,
type2
):
return
type1
.
same_as
(
type2
)
def
assignable_from
(
type1
,
type2
):
return
type1
.
assignable_from
(
type2
)
...
...
Cython/Compiler/Symtab.py
View file @
6fcea273
...
...
@@ -401,13 +401,13 @@ class Scope(object):
except ValueError, e:
error(pos, e.args[0])
type = PyrexTypes.error_type
entry = self.declare_type(name, type, pos, cname,
entry = self.declare_type(name, type, pos, cname,
visibility = visibility, api = api)
type.qualified_name = entry.qualified_name
return entry
def declare_struct_or_union(self, name, kind, scope,
typedef_flag, pos, cname = None,
def declare_struct_or_union(self, name, kind, scope,
typedef_flag, pos, cname = None,
visibility = 'private', api = 0,
packed = False):
# Add an entry for a struct or union definition.
...
...
@@ -488,7 +488,7 @@ class Scope(object):
if entry.visibility != visibility:
error(pos, "'%s'
previously
declared
as
'%s'" % (
entry.name, entry.visibility))
def declare_enum(self, name, pos, cname, typedef_flag,
visibility = 'private', api = 0):
if name:
...
...
@@ -504,7 +504,7 @@ class Scope(object):
visibility = visibility, api = api)
entry.enum_values = []
self.sue_entries.append(entry)
return entry
return entry
def declare_var(self, name, type, pos,
cname = None, visibility = 'private', api = 0, is_cdef = 0):
...
...
@@ -1059,7 +1059,7 @@ class ModuleScope(Scope):
buffer_defaults = None, shadow = 0):
# If this is a non-extern typedef class, expose the typedef, but use
# the non-typedef struct internally to avoid needing forward
# declarations for anonymous structs.
# declarations for anonymous structs.
if typedef_flag and visibility != 'extern':
if not (visibility == 'public' or api):
warning(pos, "
ctypedef
only
valid
for
'extern'
,
'public'
,
and
'api'", 2)
...
...
@@ -1462,7 +1462,7 @@ class StructOrUnionScope(Scope):
def
declare_cfunction
(
self
,
name
,
type
,
pos
,
cname
=
None
,
visibility
=
'private'
,
defining
=
0
,
api
=
0
,
in_pxd
=
0
,
modifiers
=
()):
# currently no utility code ...
return
self
.
declare_var
(
name
,
type
,
pos
,
return
self
.
declare_var
(
name
,
type
,
pos
,
cname
=
cname
,
visibility
=
visibility
)
class
ClassScope
(
Scope
):
...
...
@@ -1627,7 +1627,7 @@ class CClassScope(ClassScope):
if
name
==
"__new__"
:
error
(
pos
,
"__new__ method of extension type will change semantics "
"in a future version of Pyrex and Cython. Use __cinit__ instead."
)
entry
=
self
.
declare_var
(
name
,
py_object_type
,
pos
,
entry
=
self
.
declare_var
(
name
,
py_object_type
,
pos
,
visibility
=
'extern'
)
special_sig
=
get_special_method_signature
(
name
)
if
special_sig
:
...
...
@@ -1753,7 +1753,7 @@ class CppClassScope(Scope):
self
.
inherited_var_entries
=
[]
def
declare_var
(
self
,
name
,
type
,
pos
,
cname
=
None
,
visibility
=
'extern'
,
api
=
0
,
cname
=
None
,
visibility
=
'extern'
,
api
=
0
,
is_cdef
=
0
,
allow_pyobject
=
0
):
# Add an entry for an attribute.
if
not
cname
:
...
...
@@ -1795,7 +1795,7 @@ class CppClassScope(Scope):
error
(
pos
,
"no matching function for call to %s::%s()"
%
(
self
.
default_constructor
,
self
.
default_constructor
))
def
declare_cfunction
(
self
,
name
,
type
,
pos
,
cname
=
None
,
def
declare_cfunction
(
self
,
name
,
type
,
pos
,
cname
=
None
,
visibility
=
'extern'
,
api
=
0
,
defining
=
0
,
in_pxd
=
0
,
modifiers
=
(),
utility_code
=
None
):
if
name
==
self
.
name
.
split
(
'::'
)[
-
1
]
and
cname
is
None
:
...
...
@@ -1803,7 +1803,7 @@ class CppClassScope(Scope):
name
=
'<init>'
type
.
return_type
=
self
.
lookup
(
self
.
name
).
type
prev_entry
=
self
.
lookup_here
(
name
)
entry
=
self
.
declare_var
(
name
,
type
,
pos
,
entry
=
self
.
declare_var
(
name
,
type
,
pos
,
cname
=
cname
,
visibility
=
visibility
)
if
prev_entry
:
entry
.
overloaded_alternatives
=
prev_entry
.
all_alternatives
()
...
...
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