mirror of
https://github.com/open-goal/jak-project
synced 2026-05-24 23:22:14 -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:
@@ -2189,4 +2189,393 @@ TEST_F(FormRegressionTest, ExprValid) {
|
||||
{"L315", "ERROR: object #x~X ~S is not a valid object of type '~A' (not in symbol table)~%"},
|
||||
{"L314",
|
||||
"ERROR: object #x~X ~S is not a valid object of type '~A' (inside symbol table)~%"}});
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(FormRegressionTest, ExprStringToInt) {
|
||||
std::string func =
|
||||
" sll r0, r0, 0\n"
|
||||
"L14:\n"
|
||||
" daddiu a0, a0, 4\n"
|
||||
" addiu v0, r0, 0\n"
|
||||
" or v1, s7, r0\n"
|
||||
" addiu a1, r0, 35\n"
|
||||
" lbu a2, 0(a0)\n"
|
||||
" bne a2, a1, L33\n"
|
||||
" sll r0, r0, 0\n"
|
||||
|
||||
" daddiu a0, a0, 1\n"
|
||||
" lbu a1, 0(a0)\n"
|
||||
" daddiu a1, a1, -120\n"
|
||||
" daddiu a2, s7, 8\n"
|
||||
" movn a2, s7, a1\n"
|
||||
" bnel s7, a2, L15\n"
|
||||
|
||||
" or a1, a2, r0\n"
|
||||
|
||||
" lbu a1, 0(a0)\n"
|
||||
" daddiu a2, a1, -88\n"
|
||||
" daddiu a1, s7, 8\n"
|
||||
" movn a1, s7, a2\n"
|
||||
|
||||
"L15:\n"
|
||||
" beq s7, a1, L27\n"
|
||||
" or a1, s7, r0\n"
|
||||
|
||||
" daddiu a0, a0, 1\n"
|
||||
" addiu a1, r0, 45\n"
|
||||
" lbu a2, 1(a0)\n"
|
||||
" bne a2, a1, L16\n"
|
||||
" or a1, s7, r0\n"
|
||||
|
||||
" daddiu v1, s7, #t\n"
|
||||
" daddiu a0, a0, 1\n"
|
||||
" or a1, a0, r0\n"
|
||||
|
||||
"L16:\n"
|
||||
" beq r0, r0, L23\n"
|
||||
" sll r0, r0, 0\n"
|
||||
"\n"
|
||||
|
||||
"L17:\n"
|
||||
" lbu a1, 0(a0)\n"
|
||||
" sltiu a1, a1, 65\n"
|
||||
" daddiu a2, s7, 8\n"
|
||||
" movn a2, s7, a1\n"
|
||||
" beql s7, a2, L18\n"
|
||||
|
||||
" or a1, a2, r0\n"
|
||||
|
||||
" addiu a1, r0, 70\n"
|
||||
" lbu a2, 0(a0)\n"
|
||||
" sltu a2, a1, a2\n"
|
||||
" daddiu a1, s7, 8\n"
|
||||
" movn a1, s7, a2\n"
|
||||
|
||||
"L18:\n"
|
||||
" beq s7, a1, L19\n"
|
||||
" sll r0, r0, 0\n"
|
||||
|
||||
" lbu a1, 0(a0)\n"
|
||||
" daddiu a1, a1, -55\n"
|
||||
" dsll a2, v0, 4\n"
|
||||
" daddu v0, a1, a2\n"
|
||||
" or a1, v0, r0\n"
|
||||
" beq r0, r0, L22\n"
|
||||
" sll r0, r0, 0\n"
|
||||
|
||||
"L19:\n"
|
||||
" lbu a1, 0(a0)\n"
|
||||
" sltiu a1, a1, 97\n"
|
||||
" daddiu a2, s7, 8\n"
|
||||
" movn a2, s7, a1\n"
|
||||
" beql s7, a2, L20\n"
|
||||
|
||||
" or a1, a2, r0\n"
|
||||
|
||||
" addiu a1, r0, 102\n"
|
||||
" lbu a2, 0(a0)\n"
|
||||
" sltu a2, a1, a2\n"
|
||||
" daddiu a1, s7, 8\n"
|
||||
" movn a1, s7, a2\n"
|
||||
|
||||
"L20:\n"
|
||||
" beq s7, a1, L21\n"
|
||||
" sll r0, r0, 0\n"
|
||||
|
||||
" lbu a1, 0(a0)\n"
|
||||
" daddiu a1, a1, -87\n"
|
||||
" dsll a2, v0, 4\n"
|
||||
" daddu v0, a1, a2\n"
|
||||
" or a1, v0, r0\n"
|
||||
" beq r0, r0, L22\n"
|
||||
" sll r0, r0, 0\n"
|
||||
|
||||
"L21:\n"
|
||||
" lbu a1, 0(a0)\n"
|
||||
" daddiu a1, a1, -48\n"
|
||||
" dsll a2, v0, 4\n"
|
||||
" daddu v0, a1, a2\n"
|
||||
" or a1, v0, r0\n"
|
||||
|
||||
"L22:\n"
|
||||
" daddiu a0, a0, 1\n"
|
||||
|
||||
"L23:\n"
|
||||
" lbu a1, 0(a0)\n"
|
||||
" sltiu a1, a1, 48\n"
|
||||
" daddiu a2, s7, 8\n"
|
||||
" movn a2, s7, a1\n"
|
||||
" beql s7, a2, L24\n"
|
||||
|
||||
" or a1, a2, r0\n"
|
||||
|
||||
" addiu a1, r0, 57\n"
|
||||
" lbu a2, 0(a0)\n"
|
||||
" sltu a2, a1, a2\n"
|
||||
" daddiu a1, s7, 8\n"
|
||||
" movn a1, s7, a2\n"
|
||||
|
||||
"L24:\n"
|
||||
" bnel s7, a1, L26\n"
|
||||
|
||||
" or a1, a1, r0\n"
|
||||
|
||||
" lbu a1, 0(a0)\n"
|
||||
" sltiu a1, a1, 65\n"
|
||||
" daddiu a2, s7, 8\n"
|
||||
" movn a2, s7, a1\n"
|
||||
" beql s7, a2, L25\n"
|
||||
|
||||
" or a1, a2, r0\n"
|
||||
|
||||
" addiu a1, r0, 70\n"
|
||||
" lbu a2, 0(a0)\n"
|
||||
" sltu a2, a1, a2\n"
|
||||
" daddiu a1, s7, 8\n"
|
||||
" movn a1, s7, a2\n"
|
||||
|
||||
"L25:\n"
|
||||
" bnel s7, a1, L26\n"
|
||||
|
||||
" or a1, a1, r0\n"
|
||||
|
||||
" lbu a1, 0(a0)\n"
|
||||
" sltiu a1, a1, 97\n"
|
||||
" daddiu a2, s7, 8\n"
|
||||
" movn a2, s7, a1\n"
|
||||
" beql s7, a2, L26\n"
|
||||
|
||||
" or a1, a2, r0\n"
|
||||
|
||||
" addiu a1, r0, 102\n"
|
||||
" lbu a2, 0(a0)\n"
|
||||
" sltu a2, a1, a2\n"
|
||||
" daddiu a1, s7, 8\n"
|
||||
" movn a1, s7, a2\n"
|
||||
|
||||
"L26:\n"
|
||||
" bne s7, a1, L17\n"
|
||||
" sll r0, r0, 0\n"
|
||||
|
||||
" or a1, s7, r0\n"
|
||||
" beq r0, r0, L32\n"
|
||||
" sll r0, r0, 0\n"
|
||||
|
||||
"L27:\n"
|
||||
" lbu a1, 0(a0)\n"
|
||||
" daddiu a1, a1, -98\n"
|
||||
" daddiu a2, s7, 8\n"
|
||||
" movn a2, s7, a1\n"
|
||||
" bnel s7, a2, L28\n"
|
||||
|
||||
" or a1, a2, r0\n"
|
||||
|
||||
" lbu a1, 0(a0)\n"
|
||||
" daddiu a2, a1, -66\n"
|
||||
" daddiu a1, s7, 8\n"
|
||||
" movn a1, s7, a2\n"
|
||||
|
||||
"L28:\n"
|
||||
" beq s7, a1, L32\n"
|
||||
" or a1, s7, r0\n"
|
||||
|
||||
" daddiu a0, a0, 1\n"
|
||||
" beq r0, r0, L30\n"
|
||||
" sll r0, r0, 0\n"
|
||||
"\n"
|
||||
|
||||
"L29:\n"
|
||||
" lbu a1, 0(a0)\n"
|
||||
" daddiu a1, a1, -48\n"
|
||||
" dsll a2, v0, 1\n"
|
||||
" daddu v0, a1, a2\n"
|
||||
" daddiu a0, a0, 1\n"
|
||||
|
||||
"L30:\n"
|
||||
" lbu a1, 0(a0)\n"
|
||||
" sltiu a1, a1, 48\n"
|
||||
" daddiu a2, s7, 8\n"
|
||||
" movn a2, s7, a1\n"
|
||||
" beql s7, a2, L31\n"
|
||||
|
||||
" or a1, a2, r0\n"
|
||||
|
||||
" addiu a1, r0, 49\n"
|
||||
" lbu a2, 0(a0)\n"
|
||||
" sltu a2, a1, a2\n"
|
||||
" daddiu a1, s7, 8\n"
|
||||
" movn a1, s7, a2\n"
|
||||
|
||||
"L31:\n"
|
||||
" bne s7, a1, L29\n"
|
||||
" sll r0, r0, 0\n"
|
||||
|
||||
" or a1, s7, r0\n"
|
||||
|
||||
"L32:\n"
|
||||
" beq r0, r0, L38\n"
|
||||
" sll r0, r0, 0\n"
|
||||
|
||||
"L33:\n"
|
||||
" addiu a1, r0, 45\n"
|
||||
" lbu a2, 1(a0)\n"
|
||||
" bne a2, a1, L34\n"
|
||||
" or a1, s7, r0\n"
|
||||
|
||||
" daddiu v1, s7, #t\n"
|
||||
" daddiu a0, a0, 1\n"
|
||||
" or a1, a0, r0\n"
|
||||
|
||||
"L34:\n"
|
||||
" beq r0, r0, L36\n"
|
||||
" sll r0, r0, 0\n"
|
||||
|
||||
"L35:\n"
|
||||
" lbu a1, 0(a0)\n"
|
||||
" daddiu a1, a1, -48\n"
|
||||
" addiu a2, r0, 10\n"
|
||||
" mult3 a2, a2, v0\n"
|
||||
" daddu v0, a1, a2\n"
|
||||
" daddiu a0, a0, 1\n"
|
||||
|
||||
"L36:\n"
|
||||
" lbu a1, 0(a0)\n"
|
||||
" sltiu a1, a1, 48\n"
|
||||
" daddiu a2, s7, 8\n"
|
||||
" movn a2, s7, a1\n"
|
||||
" beql s7, a2, L37\n"
|
||||
|
||||
" or a1, a2, r0\n"
|
||||
|
||||
" addiu a1, r0, 57\n"
|
||||
" lbu a2, 0(a0)\n"
|
||||
" sltu a2, a1, a2\n"
|
||||
" daddiu a1, s7, 8\n"
|
||||
" movn a1, s7, a2\n"
|
||||
|
||||
"L37:\n"
|
||||
" bne s7, a1, L35\n"
|
||||
" sll r0, r0, 0\n"
|
||||
|
||||
" or a0, s7, r0\n"
|
||||
|
||||
"L38:\n"
|
||||
" beq s7, v1, L39\n"
|
||||
" sll r0, r0, 0\n"
|
||||
|
||||
" dsubu v0, r0, v0\n"
|
||||
" beq r0, r0, L39\n"
|
||||
" sll r0, r0, 0\n"
|
||||
|
||||
"L39:\n"
|
||||
" jr ra\n"
|
||||
" daddu sp, sp, r0";
|
||||
std::string type = "(function string int)";
|
||||
std::string expected =
|
||||
"(defun test-function ((arg0 string))\n"
|
||||
" (local-vars\n"
|
||||
" (v0-0 int)\n"
|
||||
" (v1-0 symbol)\n"
|
||||
" (a0-1 (pointer uint8))\n"
|
||||
" (a0-2 (pointer uint8))\n"
|
||||
" (a0-3 (pointer uint8))\n"
|
||||
" (a0-4 (pointer uint8))\n"
|
||||
" (a0-5 symbol)\n"
|
||||
" (a1-8 (pointer uint8))\n"
|
||||
" (a1-14 uint)\n"
|
||||
" (a1-16 symbol)\n"
|
||||
" (a1-20 uint)\n"
|
||||
" (a1-23 uint)\n"
|
||||
" (a1-33 symbol)\n"
|
||||
" (a1-44 symbol)\n"
|
||||
" (a1-47 (pointer uint8))\n"
|
||||
" )\n"
|
||||
" (set! a0-1 (-> arg0 data))\n"
|
||||
" (set! v0-0 0)\n"
|
||||
" (set! v1-0 (quote #f))\n"
|
||||
" (cond\n"
|
||||
" ((= (-> a0-1 0) 35)\n"
|
||||
" (set! a0-2 (&-> a0-1 1))\n"
|
||||
" (cond\n"
|
||||
" ((or (zero? (+ (-> a0-2 0) -120)) (zero? (+ (-> a0-2 0) -88)))\n"
|
||||
" (set! a0-3 (&-> a0-2 1))\n"
|
||||
" (when\n"
|
||||
" (= (-> a0-3 1) 45)\n"
|
||||
" (set! v1-0 (quote #t))\n"
|
||||
" (set! a0-3 (&-> a0-3 1))\n"
|
||||
" (set! a1-8 a0-3)\n"
|
||||
" )\n"
|
||||
" (while\n"
|
||||
" (or\n"
|
||||
" (and\n"
|
||||
" (>= (-> a0-3 0) (the-as uint 48))\n"
|
||||
" (>= (the-as uint 57) (-> a0-3 0))\n"
|
||||
" )\n"
|
||||
" (and\n"
|
||||
" (>= (-> a0-3 0) (the-as uint 65))\n"
|
||||
" (>= (the-as uint 70) (-> a0-3 0))\n"
|
||||
" )\n"
|
||||
" (and\n"
|
||||
" (>= (-> a0-3 0) (the-as uint 97))\n"
|
||||
" (>= (the-as uint 102) (-> a0-3 0))\n"
|
||||
" )\n"
|
||||
" )\n"
|
||||
" (cond\n"
|
||||
" ((and\n"
|
||||
" (>= (-> a0-3 0) (the-as uint 65))\n"
|
||||
" (>= (the-as uint 70) (-> a0-3 0))\n"
|
||||
" )\n"
|
||||
" (set! v0-0 (+ (+ (-> a0-3 0) -55) (the-as uint (shl v0-0 4))))\n"
|
||||
" (set! a1-14 v0-0)\n"
|
||||
" )\n"
|
||||
" (else\n"
|
||||
" (set!\n"
|
||||
" a1-16\n"
|
||||
" (and\n"
|
||||
" (>= (-> a0-3 0) (the-as uint 97))\n"
|
||||
" (>= (the-as uint 102) (-> a0-3 0))\n"
|
||||
" )\n"
|
||||
" )\n"
|
||||
" (cond\n"
|
||||
" (a1-16\n"
|
||||
" (set! v0-0 (+ (+ (-> a0-3 0) -87) (the-as uint (shl v0-0 4))))\n"
|
||||
" (set! a1-20 v0-0)\n"
|
||||
" )\n"
|
||||
" (else\n"
|
||||
" (set! v0-0 (+ (+ (-> a0-3 0) -48) (the-as uint (shl v0-0 4))))\n"
|
||||
" (set! a1-23 v0-0)\n"
|
||||
" )\n"
|
||||
" )\n"
|
||||
" )\n"
|
||||
" )\n"
|
||||
" (set! a0-3 (&-> a0-3 1))\n"
|
||||
" )\n"
|
||||
" )\n"
|
||||
" ((or (zero? (+ (-> a0-2 0) -98)) (zero? (+ (-> a0-2 0) -66)))\n"
|
||||
" (set! a0-4 (&-> a0-2 1))\n"
|
||||
" (while\n"
|
||||
" (and (>= (-> a0-4 0) (the-as uint 48)) (>= (the-as uint 49) (-> a0-4 0)))\n"
|
||||
" (set! v0-0 (+ (+ (-> a0-4 0) -48) (the-as uint (shl v0-0 1))))\n"
|
||||
" (set! a0-4 (&-> a0-4 1))\n"
|
||||
" )\n"
|
||||
" )\n"
|
||||
" )\n"
|
||||
" )\n"
|
||||
" (else\n"
|
||||
" (when\n"
|
||||
" (= (-> a0-1 1) 45)\n"
|
||||
" (set! v1-0 (quote #t))\n"
|
||||
" (set! a0-1 (&-> a0-1 1))\n"
|
||||
" (set! a1-47 a0-1)\n"
|
||||
" )\n"
|
||||
" (while\n"
|
||||
" (and (>= (-> a0-1 0) (the-as uint 48)) (>= (the-as uint 57) (-> a0-1 0)))\n"
|
||||
" (set! v0-0 (+ (+ (-> a0-1 0) -48) (the-as uint (* 10 v0-0))))\n"
|
||||
" (set! a0-1 (&-> a0-1 1))\n"
|
||||
" )\n"
|
||||
" )\n"
|
||||
" )\n"
|
||||
" (cond (v1-0 (- v0-0)) (else (empty) v0-0))\n"
|
||||
" )";
|
||||
test_final_function(func, type, expected);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user