summaryrefslogtreecommitdiff
path: root/tools/libdol2asm/data/function
diff options
context:
space:
mode:
authorJulgodis <>2021-04-08 01:47:05 +0200
committerJulgodis <>2021-04-08 01:47:05 +0200
commita23a10639979ee10cbea5ffdadadc490d9e60227 (patch)
tree75a86f6d6760a9f4183f3e97606eb7747399a0a8 /tools/libdol2asm/data/function
parentdca1d2a1c032f239c65aa1b7767132c12e89f628 (diff)
demangle data-symbols
Diffstat (limited to 'tools/libdol2asm/data/function')
-rw-r--r--tools/libdol2asm/data/function/base.py33
1 files changed, 8 insertions, 25 deletions
diff --git a/tools/libdol2asm/data/function/base.py b/tools/libdol2asm/data/function/base.py
index e74d2aeaa6..0eda461881 100644
--- a/tools/libdol2asm/data/function/base.py
+++ b/tools/libdol2asm/data/function/base.py
@@ -18,15 +18,13 @@ special_func_no_return = set([
class Function(Symbol):
return_type: Type = None
argument_types: List[Type] = field(default_factory=list)
- func_name: libdemangle.QualifiedName = None
special_func_name: str = None
func_is_const: bool = False
- template_index: int = -1
asm: bool = False
@property
def uses_any_templates(self):
- if self.func_name and self.func_name.has_template:
+ if self.demangled_name and self.demangled_name.has_template:
return True
is_templated = [False]
@@ -45,10 +43,6 @@ class Function(Symbol):
return is_templated[0]
@property
- def uses_class_template(self):
- return self.func_name and self.func_name.has_template
-
- @property
def is_static(self):
s = self.reference_count.static
e = self.reference_count.extern
@@ -57,7 +51,7 @@ class Function(Symbol):
if not static_by_references:
return False
- if not self.func_name:
+ if not self.demangled_name:
# very arbitrary, but function begining with __ are often special
if self.identifier.name and self.identifier.name.startswith("__"):
return False
@@ -70,13 +64,13 @@ class Function(Symbol):
return self.identifier.label
def function_name(self, c_export: bool, full_qualified_name: bool):
- if not self.func_name or c_export:
+ if not self.demangled_name or c_export:
return self.identifier.label
- if self.func_name.require_specialization:
+ if self.demangled_name.require_specialization:
return self.identifier.label
- name = self.func_name
+ name = self.demangled_name
if self.special_func_name and self.has_class:
# fix up the constructor and destructor if the function is template specialized
special_name = None
@@ -87,16 +81,13 @@ class Function(Symbol):
if special_name:
name = NamedType(
- self.func_name.names[:-1] + [ClassName(special_name, [])])
+ self.demangled_name.names[:-1] + [ClassName(special_name, [])])
if full_qualified_name:
return name.to_str()
else:
return name.last.to_str()
- def is_demangled(self):
- return self.func_name != None
-
def valid_reference(self, addr):
return addr % 4 == 0
@@ -115,14 +106,6 @@ class Function(Symbol):
def types(self):
return set()
- @property
- def has_class(self):
- return self.func_name and self.func_name.has_class
-
- @property
- def has_template(self):
- return self.func_name and self.func_name.has_template
-
async def export_function_header(self, exporter,
builder: AsyncBuilder,
forward: bool,
@@ -158,7 +141,7 @@ class Function(Symbol):
if self._section == ".init":
await builder.write_nonewline(f"SECTION_INIT ")
- elif c_export or (self.func_name and self.func_name.require_specialization and full_qualified_name):
+ elif c_export or (self.demangled_name and self.demangled_name.require_specialization and full_qualified_name):
await builder.write_nonewline(f"extern \"C\" ")
if self.is_static and not self.has_class:
@@ -173,7 +156,7 @@ class Function(Symbol):
is_special_function = (
self.special_func_name in special_func_no_return)
specialized = (
- self.func_name and self.func_name.require_specialization)
+ self.demangled_name and self.demangled_name.require_specialization)
if c_export:
await builder.write_nonewline(f"{return_type.type()} ")
await builder.write_nonewline(f"{self.function_name(c_export=True,full_qualified_name=full_qualified_name)}")