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
b4160ee5
Commit
b4160ee5
authored
4 years ago
by
Xavier Thompson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Improve mangling of cypclass related names in the global namespace
parent
fdf191d2
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
25 additions
and
1 deletion
+25
-1
Cython/Compiler/Symtab.py
Cython/Compiler/Symtab.py
+25
-1
No files found.
Cython/Compiler/Symtab.py
View file @
b4160ee5
...
...
@@ -431,6 +431,9 @@ class Scope(object):
return
"%s%s%s"
%
(
prefix
,
self
.
scope_prefix
,
name
)
else
:
return
self
.
parent_scope
.
mangle
(
prefix
,
self
.
name
)
# mangle cypclass related C names in the global namespace
c_mangle
=
mangle
def
mangle_internal
(
self
,
name
):
# Mangle an internal name so as not to clash with any
...
...
@@ -707,7 +710,7 @@ class Scope(object):
if
cypclass
:
type
=
PyrexTypes
.
CypClassType
(
name
,
scope
,
cname
,
base_classes
,
templates
=
templates
,
lock_mode
=
lock_mode
,
activable
=
activable
)
type
.
typeptr_cname
=
self
.
mangle
(
Naming
.
typeptr_prefix
,
c
name
)
type
.
typeptr_cname
=
self
.
c_mangle
(
Naming
.
typeptr_prefix
,
name
)
else
:
type
=
PyrexTypes
.
CppClassType
(
name
,
scope
,
cname
,
base_classes
,
templates
=
templates
)
...
...
@@ -2627,6 +2630,13 @@ class CppClassScope(Scope):
self
.
inherited_var_entries
=
[]
self
.
inherited_type_entries
=
[]
self
.
reifying_entries
=
[]
# _scope_prefix is used interally for mangling in cases where c++ namespaces aren't used
# it is used in conjunction with 'c_mangle'
if
(
outer_scope
):
outer_prefix
=
outer_scope
.
_scope_prefix
if
outer_scope
.
is_cpp_class_scope
else
outer_scope
.
scope_prefix
self
.
_scope_prefix
=
outer_prefix
+
self
.
scope_prefix
else
:
self
.
_scope_prefix
=
self
.
scope_prefix
if
templates
is
not
None
:
for
T
in
templates
:
template_entry
=
self
.
declare
(
...
...
@@ -2991,6 +3001,20 @@ class CppClassScope(Scope):
if
as_operator_name
:
name
=
'operator '
+
as_operator_name
return
super
(
CppClassScope
,
self
).
lookup_here
(
name
)
# mangle names in the global namespace.
# Normally 'mangle' would be used for this, but CppClassScope doesn't
# have a parent_scope, and therefore no qualified 'scope_prefix':
# unneeded thanks to C++ namespaces.
# '_scope_prefix' is used instead to use a scope-qualified name
# only when required.
def
c_mangle
(
self
,
prefix
,
name
=
None
):
if
name
:
return
"%s%s%s"
%
(
prefix
,
self
.
_scope_prefix
,
name
)
elif
self
.
outer_scope
:
return
self
.
outer_scope
.
mangle
(
prefix
,
self
.
name
)
else
:
return
self
.
mangle
(
prefix
,
name
)
class
PropertyScope
(
Scope
):
...
...
This diff is collapsed.
Click to expand it.
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