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
41c102b0
Commit
41c102b0
authored
Jan 15, 2021
by
Xavier Thompson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Improve implementation of qualified cypclass types
parent
45f6afe3
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
25 additions
and
21 deletions
+25
-21
Cython/Compiler/PyrexTypes.py
Cython/Compiler/PyrexTypes.py
+25
-21
No files found.
Cython/Compiler/PyrexTypes.py
View file @
41c102b0
...
@@ -4572,6 +4572,8 @@ class CypClassType(CppClassType):
...
@@ -4572,6 +4572,8 @@ class CypClassType(CppClassType):
is_cyp_class
=
1
is_cyp_class
=
1
to_py_function
=
None
to_py_function
=
None
from_py_function
=
None
from_py_function
=
None
qualifier
=
None
qual_base_type
=
None
def
__init__
(
self
,
name
,
scope
,
cname
,
base_classes
,
templates
=
None
,
template_type
=
None
,
nogil
=
0
,
activable
=
False
):
def
__init__
(
self
,
name
,
scope
,
cname
,
base_classes
,
templates
=
None
,
template_type
=
None
,
nogil
=
0
,
activable
=
False
):
CppClassType
.
__init__
(
self
,
name
,
scope
,
cname
,
base_classes
,
templates
,
template_type
,
nogil
)
CppClassType
.
__init__
(
self
,
name
,
scope
,
cname
,
base_classes
,
templates
,
template_type
,
nogil
)
...
@@ -4582,6 +4584,13 @@ class CypClassType(CppClassType):
...
@@ -4582,6 +4584,13 @@ class CypClassType(CppClassType):
self
.
_wrapped_base_type
=
None
self
.
_wrapped_base_type
=
None
self
.
_qualified_types
=
{}
self
.
_qualified_types
=
{}
def
set_scope
(
self
,
scope
):
super
(
CypClassType
,
self
).
set_scope
(
scope
)
if
scope
and
self
.
_qualified_types
:
from
.Symtab
import
qualified_cypclass_scope
for
qualifier
,
qualified_type
in
self
.
_qualified_types
.
items
():
qualified_type
.
scope
=
qualified_cypclass_scope
(
scope
,
qualifier
)
# iterate over the direct bases that support wrapping
# iterate over the direct bases that support wrapping
def
iter_wrapped_base_types
(
self
):
def
iter_wrapped_base_types
(
self
):
for
base_type
in
self
.
base_classes
:
for
base_type
in
self
.
base_classes
:
...
@@ -4835,7 +4844,7 @@ class ConstCypclassType(BaseType):
...
@@ -4835,7 +4844,7 @@ class ConstCypclassType(BaseType):
class
QualifiedCypclassType
(
BaseType
):
class
QualifiedCypclassType
(
BaseType
):
"A qualified cypclass reference"
"A qualified cypclass reference"
# qualifier string the qualifier keyword
: ('active' | 'iso' | 'iso~' | 'iso->' )
# qualifier string the qualifier keyword
subtypes
=
[
'qual_base_type'
]
subtypes
=
[
'qual_base_type'
]
...
@@ -4846,6 +4855,7 @@ class QualifiedCypclassType(BaseType):
...
@@ -4846,6 +4855,7 @@ class QualifiedCypclassType(BaseType):
from_py_function
=
None
from_py_function
=
None
assignable_to
=
{
assignable_to
=
{
None
:
(
None
,
'iso~'
),
'active'
:
(
'active'
,
'iso~'
),
'active'
:
(
'active'
,
'iso~'
),
'iso'
:
(
'iso~'
,),
'iso'
:
(
'iso~'
,),
'iso~'
:
(),
'iso~'
:
(),
...
@@ -4857,28 +4867,22 @@ class QualifiedCypclassType(BaseType):
...
@@ -4857,28 +4867,22 @@ class QualifiedCypclassType(BaseType):
def
__new__
(
cls
,
base_type
,
qualifier
):
def
__new__
(
cls
,
base_type
,
qualifier
):
# The qualified type is cached in the unqualified type to avoid duplicates.
# The qualified type is cached in the unqualified type to avoid duplicates.
assert
base_type
.
is_cyp_class
base_type
=
base_type
.
qual_base_type
or
base_type
try
:
try
:
return
base_type
.
_qualified_types
[
qualifier
]
qualified_type
=
base_type
.
_qualified_types
[
qualifier
]
except
KeyError
:
except
KeyError
:
if
base_type
.
is_qualified_cyp_class
:
base_type
=
base_type
.
qual_base_type
qualified_type
=
BaseType
.
__new__
(
cls
)
qualified_type
=
BaseType
.
__new__
(
cls
)
qualified_type
.
__init__
(
base_type
,
qualifier
)
qualified_type
.
qual_base_type
=
base_type
qualified_type
.
qualifier
=
qualifier
base_type
.
_qualified_types
[
qualifier
]
=
qualified_type
base_type
.
_qualified_types
[
qualifier
]
=
qualified_type
return
qualified_type
if
qualifier
==
'active'
:
# TODO: raise a proper compilation error.
def
__init__
(
self
,
base_type
,
qualifier
):
assert
base_type
.
activable
assert
base_type
.
is_cyp_class
if
base_type
.
scope
:
self
.
qual_base_type
=
base_type
from
.Symtab
import
qualified_cypclass_scope
self
.
qualifier
=
qualifier
qualified_type
.
scope
=
qualified_cypclass_scope
(
base_type
.
scope
,
qualifier
)
return
qualified_type
if
qualifier
==
'active'
:
# TODO: raise a proper compilation error.
assert
base_type
.
activable
if
base_type
.
scope
is
not
None
:
from
.Symtab
import
qualified_cypclass_scope
self
.
scope
=
qualified_cypclass_scope
(
base_type
.
scope
,
qualifier
)
def
__repr__
(
self
):
def
__repr__
(
self
):
return
"<QualifiedCypclassType %r>"
%
self
.
qual_base_type
return
"<QualifiedCypclassType %r>"
%
self
.
qual_base_type
...
@@ -4946,8 +4950,8 @@ class QualifiedCypclassType(BaseType):
...
@@ -4946,8 +4950,8 @@ class QualifiedCypclassType(BaseType):
return
1
return
1
if
src_type
.
is_null_ptr
:
if
src_type
.
is_null_ptr
:
return
1
return
1
if
src_type
.
is_
qualified_
cyp_class
and
src_type
.
qualifier
in
self
.
assignable_to
[
self
.
qualifier
]:
if
src_type
.
is_cyp_class
and
src_type
.
qualifier
in
self
.
assignable_to
[
self
.
qualifier
]:
return
self
.
qual_base_type
.
assignable_from_resolved_type
(
src_type
.
qual_base_type
)
return
self
.
qual_base_type
.
assignable_from_resolved_type
(
src_type
.
qual_base_type
or
src_type
)
return
0
return
0
def
same_as
(
self
,
other_type
):
def
same_as
(
self
,
other_type
):
...
...
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