mirror of
https://github.com/open-goal/jak-project
synced 2026-09-13 05:05:48 -04:00
[Decomp] Decompile gstring (#267)
* decompile gstring * update * Update code_status.md * Update code_status.md * decompile gstate * add test for states, hope it passes * also test throw and catch xmms * update doc
This commit is contained in:
@@ -277,7 +277,13 @@ TP_Type DecompilerTypeSystem::tp_lca(const TP_Type& existing,
|
||||
*changed = true;
|
||||
return TP_Type::make_from_ts("int");
|
||||
|
||||
case TP_Type::Kind::METHOD:
|
||||
case TP_Type::Kind::VIRTUAL_METHOD:
|
||||
// never allow this to remain method
|
||||
*changed = true;
|
||||
return TP_Type::make_from_ts(
|
||||
ts.lowest_common_ancestor(existing.typespec(), add.typespec()));
|
||||
|
||||
case TP_Type::Kind::NON_VIRTUAL_METHOD:
|
||||
// never allow this to remain method
|
||||
*changed = true;
|
||||
return TP_Type::make_from_ts(
|
||||
|
||||
@@ -55,7 +55,9 @@ std::string TP_Type::print() const {
|
||||
return fmt::format("<integer {} + ({} x {})>", m_int, m_extra_multiplier, m_ts.print());
|
||||
case Kind::DYNAMIC_METHOD_ACCESS:
|
||||
return fmt::format("<dynamic-method-access>");
|
||||
case Kind::METHOD:
|
||||
case Kind::VIRTUAL_METHOD:
|
||||
return fmt::format("<vmethod {}>", m_ts.print());
|
||||
case Kind::NON_VIRTUAL_METHOD:
|
||||
return fmt::format("<method {}>", m_ts.print());
|
||||
case Kind::INVALID:
|
||||
default:
|
||||
@@ -75,7 +77,9 @@ bool TP_Type::operator==(const TP_Type& other) const {
|
||||
return m_ts == other.m_ts;
|
||||
case Kind::TYPE_OF_TYPE_NO_VIRTUAL:
|
||||
return m_ts == other.m_ts;
|
||||
case Kind::METHOD:
|
||||
case Kind::VIRTUAL_METHOD:
|
||||
return m_ts == other.m_ts;
|
||||
case Kind::NON_VIRTUAL_METHOD:
|
||||
return m_ts == other.m_ts;
|
||||
case Kind::FALSE_AS_NULL:
|
||||
return true;
|
||||
@@ -144,7 +148,9 @@ TypeSpec TP_Type::typespec() const {
|
||||
return TypeSpec("object");
|
||||
case Kind::FORMAT_STRING:
|
||||
return TypeSpec("string");
|
||||
case Kind::METHOD:
|
||||
case Kind::VIRTUAL_METHOD:
|
||||
return m_ts;
|
||||
case Kind::NON_VIRTUAL_METHOD:
|
||||
return m_ts;
|
||||
case Kind::INVALID:
|
||||
default:
|
||||
|
||||
@@ -29,7 +29,8 @@ class TP_Type {
|
||||
INTEGER_CONSTANT_PLUS_VAR, // constant + variable. for dynamic addr of
|
||||
INTEGER_CONSTANT_PLUS_VAR_MULT, // like var + 100 + 12 * var2
|
||||
DYNAMIC_METHOD_ACCESS, // partial access into a
|
||||
METHOD,
|
||||
VIRTUAL_METHOD,
|
||||
NON_VIRTUAL_METHOD,
|
||||
INVALID
|
||||
} kind = Kind::UNINITIALIZED;
|
||||
TP_Type() = default;
|
||||
@@ -75,9 +76,16 @@ class TP_Type {
|
||||
|
||||
static TP_Type make_from_ts(const std::string& ts) { return make_from_ts(TypeSpec(ts)); }
|
||||
|
||||
static TP_Type make_method(const TypeSpec& method_type) {
|
||||
static TP_Type make_virtual_method(const TypeSpec& method_type) {
|
||||
TP_Type result;
|
||||
result.kind = Kind::METHOD;
|
||||
result.kind = Kind::VIRTUAL_METHOD;
|
||||
result.m_ts = method_type;
|
||||
return result;
|
||||
}
|
||||
|
||||
static TP_Type make_non_virtual_method(const TypeSpec& method_type) {
|
||||
TP_Type result;
|
||||
result.kind = Kind::NON_VIRTUAL_METHOD;
|
||||
result.m_ts = method_type;
|
||||
return result;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user