diff --git a/apps/calls b/apps/calls index c9568f8a..1ddfd3a3 100755 Binary files a/apps/calls and b/apps/calls differ diff --git a/apps/calls.subx b/apps/calls.subx index 9f8b2658..d3418cf0 100644 --- a/apps/calls.subx +++ b/apps/calls.subx @@ -821,6 +821,8 @@ next-word-string-or-expression-without-metadata: # line: (addr stream byte), ou # ++line->read to skip ')' # out->end = &line->data[line->read] # return + # if line->data[line->read] == '(' + # abort # if line->data[line->read] == ')' # ++line->read to skip ')' # # make sure there's nothing else of importance @@ -923,7 +925,7 @@ $next-word-string-or-expression-without-metadata:string-literal: $next-word-string-or-expression-without-metadata:check-for-expression: # if (line->data[line->read] != '*') goto next check 3d/compare-eax-and 0x2a/imm32/asterisk - 75/jump-if-!= $next-word-string-or-expression-without-metadata:check-for-end-of-call/disp8 + 75/jump-if-!= $next-word-string-or-expression-without-metadata:check-for-open-paren/disp8 # if (line->data[line->read + 1] == ' ') goto error1 8a/copy-byte *(esi+ecx+0xd) 0/r32/AL 3d/compare-eax-and 0x20/imm32/space @@ -954,6 +956,10 @@ $next-word-string-or-expression-without-metadata:paren: 89/<- *(edi+4) 0/r32/eax # return e9/jump $next-word-string-or-expression-without-metadata:end/disp32 +$next-word-string-or-expression-without-metadata:check-for-open-paren: + # if (line->data[line->read] == '(') abort + 3d/compare-eax-and 0x28/imm32/open-paren + 0f 84/jump-if-= $next-word-string-or-expression-without-metadata:error4a/disp32 $next-word-string-or-expression-without-metadata:check-for-end-of-call: # if (line->data[line->read] != ')') goto next check 3d/compare-eax-and 0x29/imm32/close-paren @@ -1192,6 +1198,44 @@ $next-word-string-or-expression-without-metadata:error3: e8/call syscall_exit/disp32 # never gets here +$next-word-string-or-expression-without-metadata:error4a: + # print(stderr, "error: unexpected '(' within call in '" line "'") + # . write-buffered(Stderr, "error: unexpected '(' within call in '") + # . . push args + 68/push "error: unexpected '(' within call in '"/imm32 + 68/push Stderr/imm32 + # . . call + e8/call write-buffered/disp32 + # . . discard args + 81 0/subop/add %esp 8/imm32 + # . write-stream-data(Stderr, line) + # . . push args + 56/push-esi + 68/push Stderr/imm32 + # . . call + e8/call write-stream-data/disp32 + # . . discard args + 81 0/subop/add %esp 8/imm32 + # . write-buffered(Stderr, "'\n") + # . . push args + 68/push "'\n"/imm32 + 68/push Stderr/imm32 + # . . call + e8/call write-buffered/disp32 + # . . discard args + 81 0/subop/add %esp 8/imm32 + # . flush(Stderr) + # . . push args + 68/push Stderr/imm32 + # . . call + e8/call flush/disp32 + # . . discard args + 81 0/subop/add %esp 4/imm32 + # . syscall(exit, 1) + bb/copy-to-ebx 1/imm32 + e8/call syscall_exit/disp32 + # never gets here + $next-word-string-or-expression-without-metadata:error4: # print(stderr, "error: unexpected text after end of call in '" line "'") # . write-buffered(Stderr, "error: unexpected text after end of call in '") diff --git a/apps/sigils.subx b/apps/sigils.subx index b076d24e..d5777f2e 100644 --- a/apps/sigils.subx +++ b/apps/sigils.subx @@ -1,5 +1,5 @@ -# Experimental syntax sugar for addressing modes that expand into /rm32 and -# other related arguments. +# Syntax sugar for addressing modes that expand into /rm32 and other related +# arguments. # # To run: # $ ./bootstrap translate init.linux 0*.subx apps/subx-params.subx apps/sigils.subx -o apps/sigils