about summary refs log tree commit diff stats
path: root/apps/sigils.subx
diff options
context:
space:
mode:
authorKartik Agaram <vc@akkartik.com>2019-09-04 17:38:30 -0700
committerKartik Agaram <vc@akkartik.com>2019-09-04 17:47:38 -0700
commit7a69dd4dc6a0c9505dc7c5161e50057472245b8e (patch)
treea1395aafbf8b31a82106e4391e76f85b8437b8dd /apps/sigils.subx
parent531f14c9730e6ba00829b701eb0f9ab3219d1b0d (diff)
downloadmu-7a69dd4dc6a0c9505dc7c5161e50057472245b8e.tar.gz
5620
Further flesh out next-word variant for calls.subx. All the code is
sketched out, and baseline tests pass. No tests yet for new
functionality compared to sigils.subx.
Diffstat (limited to 'apps/sigils.subx')
-rw-r--r--apps/sigils.subx11
1 files changed, 5 insertions, 6 deletions
diff --git a/apps/sigils.subx b/apps/sigils.subx
index 4d8ec55f..f5963976 100644
--- a/apps/sigils.subx
+++ b/apps/sigils.subx
@@ -1698,10 +1698,10 @@ next-word-or-expression:  # line : (address stream byte), out : (address slice)
     81          0/subop/add         3/mod/direct    4/rm32/esp    .           .             .           .           .               8/imm32           # add to esp
 $next-word-or-expression:check0:
     # if (line->read >= line->write) clear out and return
-    # . eax = line->read
-    8b/copy                         1/mod/*+disp8   6/rm32/esi    .           .             .           0/r32/eax   4/disp8         .                 # copy *(esi+4) to eax
-    # . if (eax < line->write) goto next check
-    3b/compare                      0/mod/indirect  6/rm32/esi    .           .             .           0/r32/eax   .               .                 # compare eax with *esi
+    # . ecx = line->read
+    8b/copy                         1/mod/*+disp8   6/rm32/esi    .           .             .           1/r32/ecx   4/disp8         .                 # copy *(esi+4) to ecx
+    # . if (ecx < line->write) goto next check
+    3b/compare                      0/mod/indirect  6/rm32/esi    .           .             .           1/r32/ecx   .               .                 # compare ecx with *esi
     7c/jump-if-lesser  $next-word-or-expression:check-for-comment/disp8
     # . return out = {0, 0}
     c7          0/subop/copy        0/mod/direct    7/rm32/edi    .           .             .           .           .               0/imm32           # copy to *edi
@@ -1709,7 +1709,6 @@ $next-word-or-expression:check0:
     e9/jump  $next-word-or-expression:end/disp32
 $next-word-or-expression:check-for-comment:
     # out->start = &line->data[line->read]
-    8b/copy                         1/mod/*+disp8   6/rm32/esi    .           .             .           1/r32/ecx   4/disp8         .                 # copy *(esi+4) to ecx
     8d/copy-address                 1/mod/*+disp8   4/rm32/sib    6/base/esi  1/index/ecx   .           0/r32/eax   0xc/disp8       .                 # copy esi+ecx+12 to eax
     89/copy                         0/mod/indirect  7/rm32/edi    .           .             .           0/r32/eax   .               .                 # copy eax to *edi
     # if (line->data[line->read] != '#') goto next check
@@ -1835,7 +1834,7 @@ $next-word-or-expression:error1:
     # never gets here
 
 $next-word-or-expression:error2:
-    # print(stderr, "error: no space allowed after '*' in '" line "'")
+    # print(stderr, "error: *(...) expression must be all on a single line in '" line "'")
     # . write-buffered(Stderr, "error: *(...) expression must be all on a single line in '")
     # . . push args
     68/push  "error: *(...) expression must be all on a single line in '"/imm32