diff options
| author | Julgodis <> | 2021-04-08 21:05:48 +0200 |
|---|---|---|
| committer | Julgodis <> | 2021-04-08 21:05:48 +0200 |
| commit | 2661db6aaa98a5bbd17691cb438ef64752dbcdf4 (patch) | |
| tree | 4e6d8499431192316bc2bae0cec8e6f92636b4b4 /tools/libdol2asm/data/function | |
| parent | a23a10639979ee10cbea5ffdadadc490d9e60227 (diff) | |
auto decompile more functions
Diffstat (limited to 'tools/libdol2asm/data/function')
| -rw-r--r-- | tools/libdol2asm/data/function/ret.py | 33 |
1 files changed, 28 insertions, 5 deletions
diff --git a/tools/libdol2asm/data/function/ret.py b/tools/libdol2asm/data/function/ret.py index bf15e02e9b..aed96c2315 100644 --- a/tools/libdol2asm/data/function/ret.py +++ b/tools/libdol2asm/data/function/ret.py @@ -6,16 +6,39 @@ from .base import * @dataclass(eq=False) class ReturnFunction(Function): - return_value: str = None - - def export_return_value(self): - return self.return_value + def export_return_value(self, symbol_table): + assert False async def export_function_body(self, exporter, builder: AsyncBuilder): - return_value = self.export_return_value() + return_value = self.export_return_value(exporter.gst) await builder.write(f" {{") if return_value: await builder.write(f"\treturn {return_value};") else: await builder.write(f"\t/* empty function */") await builder.write(f"}}") + +@dataclass(eq=False) +class CustomReturnFunction(ReturnFunction): + return_value: str = None + + def export_return_value(self, symbol_table): + return self.return_value + +@dataclass(eq=False) +class SymbolReturnFunction(ReturnFunction): + symbol_addr: int = 0 + load_or_reference: bool = True + + def gather_references(self, context, valid_range): + self.references = set([ self.symbol_addr ]) + + def export_return_value(self, symbol_table): + symbol = symbol_table[-1, self.symbol_addr] + assert symbol + name = symbol.cpp_reference(self, self.symbol_addr) + type = PointerType(self.return_type) + dereference = "" + if self.load_or_reference: + dereference = "*" + return f"{dereference}({type.type()})({name})" |
