[Decompiler] Fix let bug (#328)

* fix let definition bug

* remove debug prints and add test
This commit is contained in:
water111
2021-03-22 16:46:02 -04:00
committed by GitHub
parent 8e1c147ad8
commit 123f3b509d
13 changed files with 123 additions and 20 deletions
@@ -2735,4 +2735,58 @@ TEST_F(FormRegressionTest, StripStripTrailingWhitespace) {
" #f\n"
" )";
test_with_expr(func, type, expected);
}
// Let bug (github #328)
TEST_F(FormRegressionTest, TimeToGround) {
std::string func =
"sll r0, r0, 0\n"
" daddiu sp, sp, -16\n"
" sd fp, 8(sp)\n"
" or fp, t9, r0\n"
" mtc1 f0, r0\n"
" addiu v0, r0, 0\n"
" beq r0, r0, L3\n"
" sll r0, r0, 0\n"
"L2:\n"
" mtc1 f1, a0\n"
//" lwc1 f2, L7(fp)\n"
" mtc1 f2, r0\n"
" mtc1 f3, a1\n"
" mul.s f2, f2, f3\n"
" sub.s f1, f1, f2\n"
" mfc1 a0, f1\n"
//" lwc1 f1, L7(fp)\n"
" mtc1 f1, r0\n"
" mtc1 f2, a0\n"
" mul.s f1, f1, f2\n"
" add.s f0, f0, f1\n"
" daddiu v0, v0, 1\n"
"L3:\n"
" mtc1 f1, a2\n"
" neg.s f1, f1\n"
" c.lt.s f1, f0\n"
" bc1t L2\n"
" sll r0, r0, 0\n"
" or v1, s7, r0 \n"
" ld fp, 8(sp)\n"
" jr ra\n"
" daddiu sp, sp, 16";
std::string type = "(function float float float float)";
std::string expected =
"(let ((f0-0 0.0)\n"
" (v0-0 0)\n"
" )\n"
" (while (< (- arg2) f0-0)\n"
" (set! arg0 (- arg0 (* 0.0 arg1)))\n"
" (+! f0-0 (* 0.0 arg0))\n"
" (+! v0-0 1)\n"
" )\n"
" (the-as float v0-0)\n"
" )";
test_with_expr(func, type, expected);
}