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
df1b2449
Commit
df1b2449
authored
Sep 29, 2018
by
Stefan Behnel
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Minor cleanups of 'check_size' implementation (#2627).
parent
a6990434
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
18 additions
and
17 deletions
+18
-17
Cython/Compiler/ModuleNode.py
Cython/Compiler/ModuleNode.py
+2
-5
Cython/Compiler/Nodes.py
Cython/Compiler/Nodes.py
+1
-0
Cython/Compiler/Parsing.pxd
Cython/Compiler/Parsing.pxd
+1
-1
Cython/Compiler/Parsing.py
Cython/Compiler/Parsing.py
+5
-2
Cython/Compiler/PyrexTypes.py
Cython/Compiler/PyrexTypes.py
+2
-2
Cython/Compiler/Symtab.py
Cython/Compiler/Symtab.py
+7
-7
No files found.
Cython/Compiler/ModuleNode.py
View file @
df1b2449
...
@@ -3061,9 +3061,6 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
...
@@ -3061,9 +3061,6 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
# check_size
# check_size
if
not
type
.
is_external
or
type
.
is_subclassed
:
if
not
type
.
is_external
or
type
.
is_subclassed
:
if
type
.
check_size
!=
'min'
:
raise
AttributeError
(
"unexpected check_size value '%s' when "
"compiling %s.%s"
%
(
type
.
check_size
,
module_name
,
type
.
name
))
cs
=
0
cs
=
0
elif
type
.
check_size
==
'min'
:
elif
type
.
check_size
==
'min'
:
cs
=
1
cs
=
1
...
@@ -3072,8 +3069,8 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
...
@@ -3072,8 +3069,8 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
elif
type
.
check_size
==
False
:
elif
type
.
check_size
==
False
:
cs
=
2
cs
=
2
else
:
else
:
raise
AttributeError
(
"invalid value for check_size '%s' when compiling "
raise
RuntimeError
(
"invalid value for check_size '%s' when compiling %s.%s"
%
(
"%s.%s"
%
(
type
.
check_size
,
module_name
,
type
.
name
))
type
.
check_size
,
module_name
,
type
.
name
))
code
.
putln
(
'%d);'
%
cs
)
code
.
putln
(
'%d);'
%
cs
)
code
.
putln
(
' if (!%s) %s'
%
(
type
.
typeptr_cname
,
error_code
))
code
.
putln
(
' if (!%s) %s'
%
(
type
.
typeptr_cname
,
error_code
))
...
...
Cython/Compiler/Nodes.py
View file @
df1b2449
...
@@ -4617,6 +4617,7 @@ class PyClassDefNode(ClassDefNode):
...
@@ -4617,6 +4617,7 @@ class PyClassDefNode(ClassDefNode):
self
.
bases
.
free_temps
(
code
)
self
.
bases
.
free_temps
(
code
)
code
.
pyclass_stack
.
pop
()
code
.
pyclass_stack
.
pop
()
class
CClassDefNode
(
ClassDefNode
):
class
CClassDefNode
(
ClassDefNode
):
# An extension type definition.
# An extension type definition.
#
#
...
...
Cython/Compiler/Parsing.pxd
View file @
df1b2449
...
@@ -188,7 +188,7 @@ cdef p_varargslist(PyrexScanner s, terminator=*, bint annotated = *)
...
@@ -188,7 +188,7 @@ cdef p_varargslist(PyrexScanner s, terminator=*, bint annotated = *)
cdef
p_py_arg_decl
(
PyrexScanner
s
,
bint
annotated
=
*
)
cdef
p_py_arg_decl
(
PyrexScanner
s
,
bint
annotated
=
*
)
cdef
p_class_statement
(
PyrexScanner
s
,
decorators
)
cdef
p_class_statement
(
PyrexScanner
s
,
decorators
)
cdef
p_c_class_definition
(
PyrexScanner
s
,
pos
,
ctx
)
cdef
p_c_class_definition
(
PyrexScanner
s
,
pos
,
ctx
)
cdef
p_c_class_options
(
PyrexScanner
s
)
cdef
tuple
p_c_class_options
(
PyrexScanner
s
)
cdef
p_property_decl
(
PyrexScanner
s
)
cdef
p_property_decl
(
PyrexScanner
s
)
cdef
p_doc_string
(
PyrexScanner
s
)
cdef
p_doc_string
(
PyrexScanner
s
)
cdef
p_ignorable_statement
(
PyrexScanner
s
)
cdef
p_ignorable_statement
(
PyrexScanner
s
)
...
...
Cython/Compiler/Parsing.py
View file @
df1b2449
...
@@ -3471,7 +3471,7 @@ def p_c_class_definition(s, pos, ctx):
...
@@ -3471,7 +3471,7 @@ def p_c_class_definition(s, pos, ctx):
objstruct_name
=
None
objstruct_name
=
None
typeobj_name
=
None
typeobj_name
=
None
bases
=
None
bases
=
None
check_size
=
'min'
check_size
=
None
if
s
.
sy
==
'('
:
if
s
.
sy
==
'('
:
positional_args
,
keyword_args
=
p_call_parse_args
(
s
,
allow_genexp
=
False
)
positional_args
,
keyword_args
=
p_call_parse_args
(
s
,
allow_genexp
=
False
)
if
keyword_args
:
if
keyword_args
:
...
@@ -3512,6 +3512,8 @@ def p_c_class_definition(s, pos, ctx):
...
@@ -3512,6 +3512,8 @@ def p_c_class_definition(s, pos, ctx):
error
(
pos
,
"Type object name specification required for 'api' C class"
)
error
(
pos
,
"Type object name specification required for 'api' C class"
)
else
:
else
:
error
(
pos
,
"Invalid class visibility '%s'"
%
ctx
.
visibility
)
error
(
pos
,
"Invalid class visibility '%s'"
%
ctx
.
visibility
)
if
check_size
is
None
:
check_size
=
'min'
# TODO: move into 'CClassDefNode'
return
Nodes
.
CClassDefNode
(
pos
,
return
Nodes
.
CClassDefNode
(
pos
,
visibility
=
ctx
.
visibility
,
visibility
=
ctx
.
visibility
,
typedef_flag
=
ctx
.
typedef_flag
,
typedef_flag
=
ctx
.
typedef_flag
,
...
@@ -3527,10 +3529,11 @@ def p_c_class_definition(s, pos, ctx):
...
@@ -3527,10 +3529,11 @@ def p_c_class_definition(s, pos, ctx):
doc
=
doc
,
doc
=
doc
,
body
=
body
)
body
=
body
)
def
p_c_class_options
(
s
):
def
p_c_class_options
(
s
):
objstruct_name
=
None
objstruct_name
=
None
typeobj_name
=
None
typeobj_name
=
None
check_size
=
'min'
check_size
=
None
s
.
expect
(
'['
)
s
.
expect
(
'['
)
while
1
:
while
1
:
if
s
.
sy
!=
'IDENT'
:
if
s
.
sy
!=
'IDENT'
:
...
...
Cython/Compiler/PyrexTypes.py
View file @
df1b2449
...
@@ -1346,14 +1346,14 @@ class PyExtensionType(PyObjectType):
...
@@ -1346,14 +1346,14 @@ class PyExtensionType(PyObjectType):
# early_init boolean Whether to initialize early (as opposed to during module execution).
# early_init boolean Whether to initialize early (as opposed to during module execution).
# defered_declarations [thunk] Used to declare class hierarchies in order
# defered_declarations [thunk] Used to declare class hierarchies in order
# check_size 'min' or boolean What to do if tp_basicsize does not match
# check_size 'min' or boolean What to do if tp_basicsize does not match
is_extension_type
=
1
is_extension_type
=
1
has_attributes
=
1
has_attributes
=
1
early_init
=
1
early_init
=
1
objtypedef_cname
=
None
objtypedef_cname
=
None
def
__init__
(
self
,
name
,
typedef_flag
,
base_type
,
is_external
=
0
,
def
__init__
(
self
,
name
,
typedef_flag
,
base_type
,
is_external
=
0
,
check_size
=
'min'
):
check_size
=
'min'
):
self
.
name
=
name
self
.
name
=
name
self
.
scope
=
None
self
.
scope
=
None
self
.
typedef_flag
=
typedef_flag
self
.
typedef_flag
=
typedef_flag
...
...
Cython/Compiler/Symtab.py
View file @
df1b2449
...
@@ -1479,11 +1479,11 @@ class ModuleScope(Scope):
...
@@ -1479,11 +1479,11 @@ class ModuleScope(Scope):
if
entry
.
utility_code_definition
:
if
entry
.
utility_code_definition
:
self
.
utility_code_list
.
append
(
entry
.
utility_code_definition
)
self
.
utility_code_list
.
append
(
entry
.
utility_code_definition
)
def
declare_c_class
(
self
,
name
,
pos
,
defining
=
0
,
implementing
=
0
,
def
declare_c_class
(
self
,
name
,
pos
,
defining
=
0
,
implementing
=
0
,
module_name
=
None
,
base_type
=
None
,
objstruct_cname
=
None
,
module_name
=
None
,
base_type
=
None
,
objstruct_cname
=
None
,
typeobj_cname
=
None
,
typeptr_cname
=
None
,
visibility
=
'private'
,
typeobj_cname
=
None
,
typeptr_cname
=
None
,
visibility
=
'private'
,
typedef_flag
=
0
,
api
=
0
,
check_size
=
'min'
,
typedef_flag
=
0
,
api
=
0
,
check_size
=
'min'
,
buffer_defaults
=
None
,
shadow
=
0
):
buffer_defaults
=
None
,
shadow
=
0
):
# If this is a non-extern typedef class, expose the typedef, but use
# If this is a non-extern typedef class, expose the typedef, but use
# the non-typedef struct internally to avoid needing forward
# the non-typedef struct internally to avoid needing forward
# declarations for anonymous structs.
# declarations for anonymous structs.
...
@@ -1515,8 +1515,8 @@ class ModuleScope(Scope):
...
@@ -1515,8 +1515,8 @@ class ModuleScope(Scope):
# Make a new entry if needed
# Make a new entry if needed
#
#
if
not
entry
or
shadow
:
if
not
entry
or
shadow
:
type
=
PyrexTypes
.
PyExtensionType
(
name
,
typedef_flag
,
base_type
,
type
=
PyrexTypes
.
PyExtensionType
(
visibility
==
'extern'
,
check_size
=
check_size
)
name
,
typedef_flag
,
base_type
,
visibility
==
'extern'
,
check_size
=
check_size
)
type
.
pos
=
pos
type
.
pos
=
pos
type
.
buffer_defaults
=
buffer_defaults
type
.
buffer_defaults
=
buffer_defaults
if
objtypedef_cname
is
not
None
:
if
objtypedef_cname
is
not
None
:
...
...
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