[decomp] Split condition and body of until after building expressions (#768)

* improve until decomp

* fix tests
This commit is contained in:
water111
2021-08-18 19:36:52 -04:00
committed by GitHub
parent 4a896aaa71
commit 1f0c2e0e71
13 changed files with 608 additions and 699 deletions
+22 -15
View File
@@ -454,11 +454,14 @@ TEST_F(FormRegressionTest, ExprBasicTypeP) {
std::string type = "(function basic type symbol)";
std::string expected =
"(begin\n"
" (let\n"
" ((v1-0 (-> arg0 type)) (a0-1 object))\n"
" (until\n"
" (begin (set! v1-0 (-> v1-0 parent)) (= v1-0 a0-1))\n"
" (if (= v1-0 arg1) (return #t))\n"
" (let ((v1-0 (-> arg0 type))\n"
" (a0-1 object)\n"
" )\n"
" (until (= v1-0 a0-1)\n"
" (if (= v1-0 arg1)\n"
" (return #t)\n"
" )\n"
" (set! v1-0 (-> v1-0 parent))\n"
" )\n"
" )\n"
" #f\n"
@@ -494,11 +497,14 @@ TEST_F(FormRegressionTest, FinalBasicTypeP) {
std::string type = "(function basic type symbol)";
std::string expected =
"(defun test-function ((arg0 basic) (arg1 type))\n"
" (let\n"
" ((v1-0 (-> arg0 type)) (a0-1 object))\n"
" (until\n"
" (begin (set! v1-0 (-> v1-0 parent)) (= v1-0 a0-1))\n"
" (if (= v1-0 arg1) (return #t))\n"
" (let ((v1-0 (-> arg0 type))\n"
" (a0-1 object)\n"
" )\n"
" (until (= v1-0 a0-1)\n"
" (if (= v1-0 arg1)\n"
" (return #t)\n"
" )\n"
" (set! v1-0 (-> v1-0 parent))\n"
" )\n"
" )\n"
" #f\n"
@@ -547,11 +553,12 @@ TEST_F(FormRegressionTest, ExprTypeTypep) {
std::string expected =
"(begin\n"
" (let\n"
" ((v1-0 object))\n"
" (until\n"
" (begin (set! arg0 (-> arg0 parent)) (or (= arg0 v1-0) (zero? arg0)))\n"
" (if (= arg0 arg1) (return #t))\n"
" (let ((v1-0 object))\n"
" (until (or (= arg0 v1-0) (zero? arg0))\n"
" (if (= arg0 arg1)\n"
" (return #t)\n"
" )\n"
" (set! arg0 (-> arg0 parent))\n"
" )\n"
" )\n"
" #f\n"