From 610fe98a8d8137b019dd1dac51f1c80504db463d Mon Sep 17 00:00:00 2001 From: Koichi Nakamura Date: Mon, 11 Jan 2021 14:20:48 +0900 Subject: [PATCH] Changed 'quit' to take return code --- README.md | 2 +- bootstrap.fs | 10 ++- others/planck.c | 2 +- others/planck.py | 2 +- planck.xxd | 185 +++++++++++++++++++++++------------------------ 5 files changed, 101 insertions(+), 100 deletions(-) diff --git a/README.md b/README.md index 6f6b65d..fc93180 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ $ ./planck < bootstrap.fs runtests.fs | code | name | stack effect | semantics | |:----:|:----------|:----------------|:-----------------------------| -| Q | quit | ( -- ) | Exit the process | +| Q | quit | ( n -- ) | Exit the process | | C | cell | ( -- n ) | The size of Cells | | h | &here | ( -- a-addr ) | The address of 'here' cell | | l | &latest | ( -- a-addr ) | The address of 'latest' cell | diff --git a/bootstrap.fs b/bootstrap.fs index 86ce921..de75e6b 100644 --- a/bootstrap.fs +++ b/bootstrap.fs @@ -23,7 +23,7 @@ l! \ In the 1st stage, only single character words are registered \ in the dictionary. \ List of builtin words: -\ 'Q' ( -- ) Exit the process +\ 'Q' ( n -- ) Exit the process \ 'C' ( -- n ) The size of Cells \ 'h' ( -- a-addr ) The address of 'here' cell \ 'l' ( -- a-addr ) The address of 'latest' cell @@ -435,7 +435,7 @@ set-immediate \ \ Primitive operators which manipulate program counter and return stack \ can not be defined as a FORTH word. -alias-builtin bye Q +alias-builtin quit Q alias-builtin cell C alias-builtin &here h alias-builtin &latest l @@ -463,6 +463,8 @@ alias-builtin rshift ) alias-builtin arshift % alias-builtin runtime-info_ V +: bye [ ' L , k 0 k 0 - , ] quit ; + \ Rename existing FORTH words : >cfa G ; : c, B ; @@ -1994,14 +1996,14 @@ variable source-buffer-end 0 source-buffer-end ! error>message type ." : " word-buffer type cr - bye + 1 quit then error>next repeat ." Unknown error code: " word-buffer type ." (" 0 .r ." )" cr - bye + 1 quit then again ; diff --git a/others/planck.c b/others/planck.c index 1ef7ae5..9d7f35a 100644 --- a/others/planck.c +++ b/others/planck.c @@ -113,7 +113,7 @@ int main(int argc, char *argv[]) { return 0; } #else -defcode("Q", quit) { exit(0); } +defcode("Q", quit) { exit(pop()); } defcode("C", cell_) { push(CELL); next(); } defcode("h", here_) { push((cell)&here); next(); } defcode("l", latest_) { push((cell)&latest); next(); } diff --git a/others/planck.py b/others/planck.py index f5abdd8..d3e9000 100644 --- a/others/planck.py +++ b/others/planck.py @@ -182,7 +182,7 @@ def docol(ip, np): rpush(np) return next(ip + CELL) DOCOL_ID = add_operator('', docol) -add_simple_operator('Q', lambda: exit(0)) +add_simple_operator('Q', lambda: exit(pop())) add_simple_operator('C', lambda: push(CELL)) add_simple_operator('h', lambda: push(HERE_CELL)) add_simple_operator('l', lambda: push(LATEST_CELL)) diff --git a/planck.xxd b/planck.xxd index 891f5d4..7c48558 100644 --- a/planck.xxd +++ b/planck.xxd @@ -19,172 +19,171 @@ 00000088: 0000 0000 0151 0000 Q: quit 00000090: 4482 0408 0000 0000 00000094: 8880 0408 0143 0000 C: cell -0000009c: 4d82 0408 0000 0000 +0000009c: 4c82 0408 0000 0000 000000a0: 9480 0408 0168 0000 h: &here -000000a8: 5282 0408 0000 0000 +000000a8: 5182 0408 0000 0000 000000ac: a080 0408 016c 0000 l: &latest -000000b4: 5a82 0408 0000 0000 +000000b4: 5982 0408 0000 0000 000000b8: ac80 0408 016b 0000 k: key -000000c0: 6282 0408 0000 0000 +000000c0: 6182 0408 0000 0000 000000c4: b880 0408 0174 0000 t: type -000000cc: 7c82 0408 0000 0000 +000000cc: 7b82 0408 0000 0000 000000d0: c480 0408 016a 0000 j: branch -000000d8: 9282 0408 0000 0000 +000000d8: 9182 0408 0000 0000 000000dc: d080 0408 014a 0000 J: 0branch -000000e4: 9782 0408 0000 0000 +000000e4: 9682 0408 0000 0000 000000e8: dc80 0408 0166 0000 f: find -000000f0: a082 0408 0000 0000 +000000f0: 9f82 0408 0000 0000 000000f4: e880 0408 0178 0000 x: execute -000000fc: c082 0408 0000 0000 +000000fc: bf82 0408 0000 0000 00000100: f480 0408 0140 0000 @: fetch -00000108: c382 0408 0000 0000 +00000108: c282 0408 0000 0000 0000010c: 0081 0408 0121 0000 !: store -00000114: ca82 0408 0000 0000 +00000114: c982 0408 0000 0000 00000118: 0c81 0408 013f 0000 ?: cfetch -00000120: d182 0408 0000 0000 +00000120: d082 0408 0000 0000 00000124: 1881 0408 0124 0000 $: cstore -0000012c: d982 0408 0000 0000 +0000012c: d882 0408 0000 0000 00000130: 2481 0408 0164 0000 d: dfetch -00000138: e082 0408 0000 0000 +00000138: df82 0408 0000 0000 0000013c: 3081 0408 0144 0000 D: dstore -00000144: e482 0408 0000 0000 +00000144: e382 0408 0000 0000 00000148: 3c81 0408 0172 0000 r: rfetch -00000150: e882 0408 0000 0000 +00000150: e782 0408 0000 0000 00000154: 4881 0408 0152 0000 R: rstore -0000015c: ec82 0408 0000 0000 +0000015c: eb82 0408 0000 0000 00000160: 5481 0408 0169 0000 i: docol -00000168: fe82 0408 0000 0000 +00000168: fd82 0408 0000 0000 0000016c: 6081 0408 0165 0000 e: exit -00000174: 0683 0408 0000 0000 +00000174: 0583 0408 0000 0000 00000178: 6c81 0408 014c 0000 L: lit -00000180: 0f83 0408 0000 0000 +00000180: 0e83 0408 0000 0000 00000184: 7881 0408 0153 0000 S: litstring -0000018c: 1483 0408 0000 0000 +0000018c: 1383 0408 0000 0000 00000190: 8481 0408 012b 0000 +: add -00000198: 1d83 0408 0000 0000 +00000198: 1c83 0408 0000 0000 0000019c: 9081 0408 012d 0000 -: sub -000001a4: 2483 0408 0000 0000 +000001a4: 2383 0408 0000 0000 000001a8: 9c81 0408 012a 0000 *: mul -000001b0: 2b83 0408 0000 0000 +000001b0: 2a83 0408 0000 0000 000001b4: a881 0408 012f 0000 /: divmod -000001bc: 3483 0408 0000 0000 +000001bc: 3383 0408 0000 0000 000001c0: b481 0408 0126 0000 &: and -000001c8: 3f83 0408 0000 0000 +000001c8: 3e83 0408 0000 0000 000001cc: c081 0408 017c 0000 |: or -000001d4: 4683 0408 0000 0000 +000001d4: 4583 0408 0000 0000 000001d8: cc81 0408 015e 0000 ^: xor -000001e0: 4d83 0408 0000 0000 +000001e0: 4c83 0408 0000 0000 000001e4: d881 0408 013c 0000 <: less -000001ec: 5483 0408 0000 0000 +000001ec: 5383 0408 0000 0000 000001f0: e481 0408 0175 0000 u: uless (unsigned less) -000001f8: 6283 0408 0000 0000 +000001f8: 6183 0408 0000 0000 000001fc: f081 0408 013d 0000 =: equal -00000204: 7083 0408 0000 0000 +00000204: 6f83 0408 0000 0000 00000208: fc81 0408 0128 0000 (: shl -00000210: 7e83 0408 0000 0000 +00000210: 7d83 0408 0000 0000 00000214: 0882 0408 0129 0000 ): shr -0000021c: 8683 0408 0000 0000 +0000021c: 8583 0408 0000 0000 00000220: 1482 0408 0125 0000 %: sar -00000228: 8e83 0408 0000 0000 +00000228: 8d83 0408 0000 0000 0000022c: 2082 0408 0176 0000 v: argv -00000234: 9683 0408 0000 0000 +00000234: 9583 0408 0000 0000 00000238: 2c82 0408 0156 0000 V: version -00000240: a583 0408 0000 0000 +00000240: a483 0408 0000 0000 -00000244: 31db b801 0000 00cd (quit) xorl %ebx,%ebx; mov $SYS_EXIT,%eax; -0000024c: 8000 0000 0000 0000 int $0x80; +00000244: 5bb8 0100 0000 cd80 (quit) popl %ebx; mov $SYS_EXIT,%eax; inx $0x80 -0000024d: 6a04 adff 2000 0000 (cell) pushl $4; next; +0000024c: 6a04 adff 2000 0000 (cell) pushl $4; next; -00000252: 6854 8004 08ad ff20 (&here) pushl $here; next; +00000251: 6854 8004 08ad ff20 (&here) pushl $here; next; -0000025a: 6858 8004 08ad ff20 (&latest) pushl $latest; next; +00000259: 6858 8004 08ad ff20 (&latest) pushl $latest; next; -00000262: 31c0 50ba 0100 0000 (key) xorl %eax,%eax; pushl %eax; movl $1,%edx; -0000026a: 89e1 31db b803 0000 movl %esp,%ecx; xorl %ebx,%ebx (STDIN=0); -00000272: 00cd 8085 c076 cbad movl $SYS_READ,%eax; int $0x80; test %eax,%eax; -0000027a: ff20 0000 0000 0000 jbe 0x08048244(-53); next; +00000261: 31c0 50ba 0100 0000 (key) xorl %eax,%eax; pushl %eax; movl $1,%edx; +00000269: 89e1 31db b803 0000 movl %esp,%ecx; xorl %ebx,%ebx (STDIN=0); +00000271: 00cd 8085 c076 cbad movl $SYS_READ,%eax; int $0x80; test %eax,%eax; +00000279: ff20 0000 0000 0000 jbe 0x08048244(-53); next; -0000027c: ba01 0000 0089 e189 (type) movl $1,%edx; movl %esp,%ecx; -00000284: d3b8 0400 0000 cd80 movl $1,%ebx (STDOUT=1);movl $SYS_WRITE,%eax; -0000028c: 83c4 04ad ff20 0000 int $0x80; addl $4,%esp; next; +0000027b: ba01 0000 0089 e189 (type) movl $1,%edx; movl %esp,%ecx; +00000283: d3b8 0400 0000 cd80 movl $1,%ebx (STDOUT=1);movl $SYS_WRITE,%eax; +0000028b: 83c4 04ad ff20 0000 int $0x80; addl $4,%esp; next; -00000292: 0336 adff 2000 0000 (branch) addl (%esi),%esi; next; +00000291: 0336 adff 2000 0000 (branch) addl (%esi),%esi; next; -00000297: 5885 c074 f6ad adff (0branch) popl %eax; test %eax,%eax; -0000029f: 2000 0000 0000 0000 je 0x08048292(-10); lodsl; next; +00000296: 5885 c074 f6ad adff (0branch) popl %eax; test %eax,%eax; +0000029e: 2000 0000 0000 0000 je 0x08048292(-10); lodsl; next; -000002a0: 8a24 24b0 018b 0d58 (find) movb (%esp),%ah;movb $1,%al; -000002a8: 8004 088b 5904 6639 movl latest,%ecx;<1>movl 4(%ecx),%ebx; -000002b0: c374 048b 09eb f483 cmpw %ax,%bx;je 2f;movl (%ecx),%ecx -000002b8: c108 890c 24ad ff20 jmp 1b(-12);<2>addl $8,%ecx;movl %ecx,(%esp); next; +0000029f: 8a24 24b0 018b 0d58 (find) movb (%esp),%ah;movb $1,%al; +000002a7: 8004 088b 5904 6639 movl latest,%ecx;<1>movl 4(%ecx),%ebx; +000002af: c374 048b 09eb f483 cmpw %ax,%bx;je 2f;movl (%ecx),%ecx +000002b7: c108 890c 24ad ff20 jmp 1b(-12);<2>addl $8,%ecx;movl %ecx,(%esp); next; -000002c0: 58ff 2000 0000 0000 (execute) popl %eax; jmp *(%eax) +000002bf: 58ff 2000 0000 0000 (execute) popl %eax; jmp *(%eax) -000002c3: 588b 0050 adff 2000 (fetch) popl %eax; movl (%eax),%eax;push %eax; next; +000002c2: 588b 0050 adff 2000 (fetch) popl %eax; movl (%eax),%eax;push %eax; next; -000002ca: 585b 8918 adff 2000 (store) popl %eax; popl %ebx; movl %ebx,(%eax); next +000002c9: 585b 8918 adff 2000 (store) popl %eax; popl %ebx; movl %ebx,(%eax); next -000002d1: 580f be00 50ad ff20 (cfetch) popl %eax; movsbl (%eax),%eax; next; +000002d0: 580f be00 50ad ff20 (cfetch) popl %eax; movsbl (%eax),%eax; next; -000002d9: 585b 8818 adff 2000 (cstore) popl %eax; popl %ebx; movb %bl,(%eax); next; +000002d8: 585b 8818 adff 2000 (cstore) popl %eax; popl %ebx; movb %bl,(%eax); next; -000002e0: 54ad ff20 0000 0000 (dfetch) movl %esp,%eax; pushl %eax; next; +000002df: 54ad ff20 0000 0000 (dfetch) movl %esp,%eax; pushl %eax; next; -000002e4: 5cad ff20 0000 0000 (dstore) popl %eax; movl %eax,%esp; next; +000002e3: 5cad ff20 0000 0000 (dstore) popl %eax; movl %eax,%esp; next; -000002e8: 55ad ff20 0000 0000 (rfetch) pushl %ebp; next; +000002e7: 55ad ff20 0000 0000 (rfetch) pushl %ebp; next; -000002ec: 5dad ff20 0000 0000 (rstore) popl %ebp; next; +000002eb: 5dad ff20 0000 0000 (rstore) popl %ebp; next; -000002f0: 8d6d fc89 7500 83c0 rpush %esi; addl $4,%eax -000002f8: 0489 c6ad ff20 0000 movl %eax,%esi; next; +000002ef: 8d6d fc89 7500 83c0 rpush %esi; addl $4,%eax +000002f7: 0489 c6ad ff20 0000 movl %eax,%esi; next; -000002fe: 68f0 8204 08ad ff20 (docol) pushl $docol; next; +000002fd: 68ef 8204 08ad ff20 (docol) pushl $docol; next; -00000306: 8b75 008d 6d04 adff (exit) rpop %esi next; -0000030e: 2000 0000 0000 0000 +00000305: 8b75 008d 6d04 adff (exit) rpop %esi next; +0000030d: 2000 0000 0000 0000 -0000030f: ad50 adff 2000 0000 (lit) lodsl; pushl %eax; next; +0000030e: ad50 adff 2000 0000 (lit) lodsl; pushl %eax; next; -00000314: ad56 01c6 adff 2000 (litstring)lodsl; pushl %esi; addl %eax,%esi; next; +00000313: ad56 01c6 adff 2000 (litstring)lodsl; pushl %esi; addl %eax,%esi; next; -0000031d: 5801 0424 adff 2000 (add) popl %eax; addl %eax,(%esp); next; +0000031c: 5801 0424 adff 2000 (add) popl %eax; addl %eax,(%esp); next; -00000324: 5829 0424 adff 2000 (sub) popl %eax; subl %eax,(%esp); next; +00000323: 5829 0424 adff 2000 (sub) popl %eax; subl %eax,(%esp); next; -0000032b: 585b 0faf c350 adff (mul) popl %eax; popl %ebx; imul %ebx,%eax -00000333: 2000 0000 0000 0000 pushl %eax; next; +0000032a: 585b 0faf c350 adff (mul) popl %eax; popl %ebx; imul %ebx,%eax +00000332: 2000 0000 0000 0000 pushl %eax; next; -00000334: 31d2 5b58 f7fb 5250 (divmod) xorl %edx,%edx; popl %ebx; popl %eax -0000033c: adff 2000 0000 0000 idiv %ebx; pushl %edx; pushl %eax; next; +00000333: 31d2 5b58 f7fb 5250 (divmod) xorl %edx,%edx; popl %ebx; popl %eax +0000033b: adff 2000 0000 0000 idiv %ebx; pushl %edx; pushl %eax; next; -0000033f: 5821 0424 adff 2000 (and) popl %eax; andl %eax,(%esp); next; +0000033e: 5821 0424 adff 2000 (and) popl %eax; andl %eax,(%esp); next; -00000346: 5809 0424 adff 2000 (or) popl %eax; orl %eax,(%esp); next; +00000345: 5809 0424 adff 2000 (or) popl %eax; orl %eax,(%esp); next; -0000034d: 5831 0424 adff 2000 (xor) popl %eax; andl %eax,(%esp); next; +0000034c: 5831 0424 adff 2000 (xor) popl %eax; andl %eax,(%esp); next; -00000354: 585b 39c3 0f9c c00f (less) popl %eax; popl %ebx; cmpl %eax,%ebx -0000035c: b6c0 50ad ff20 0000 setl %al; movzbl %al, %eax; pushl %eax; next; +00000353: 585b 39c3 0f9c c00f (less) popl %eax; popl %ebx; cmpl %eax,%ebx +0000035b: b6c0 50ad ff20 0000 setl %al; movzbl %al, %eax; pushl %eax; next; -00000362: 585b 39c3 0f92 c00f (uless) popl %eax; popl %ebx; cmpl %eax,%ebx -0000036a: b6c0 50ad ff20 0000 setb %al; movzbl %al, %eax; pushl %eax; next; +00000361: 585b 39c3 0f92 c00f (uless) popl %eax; popl %ebx; cmpl %eax,%ebx +00000369: b6c0 50ad ff20 0000 setb %al; movzbl %al, %eax; pushl %eax; next; -00000370: 585b 39c3 0f94 c00f (equal) popl %eax; popl %ebx; cmpl %eax,%ebx -00000378: b6c0 50ad ff20 0000 setl %al; movzbl %al, %eax; pushl %eax; next; +0000036f: 585b 39c3 0f94 c00f (equal) popl %eax; popl %ebx; cmpl %eax,%ebx +00000377: b6c0 50ad ff20 0000 setl %al; movzbl %al, %eax; pushl %eax; next; -0000037e: 5958 d3e0 50ad ff20 (shl) popl %ecx; popl %eax; shll %cl,%eax;next; +0000037d: 5958 d3e0 50ad ff20 (shl) popl %ecx; popl %eax; shll %cl,%eax;next; -00000386: 5958 d3e8 50ad ff20 (shr) popl %ecx; popl %eax; shrl %cl,%eax;next; +00000385: 5958 d3e8 50ad ff20 (shr) popl %ecx; popl %eax; shrl %cl,%eax;next; -0000038e: 5958 d3f8 50ad ff20 (sar) popl %ecx; popl %eax; sarl %cl,%eax; next; +0000038d: 5958 d3f8 50ad ff20 (sar) popl %ecx; popl %eax; sarl %cl,%eax; next; -00000396: 8b05 5c80 0408 8d58 (argv) movl sp0,%eax; leal 4(%eax),%ebx -0000039e: 0453 ff30 adff 2000 pushl %ebx; pushl (%eax); next; +00000395: 8b05 5c80 0408 8d58 (argv) movl sp0,%eax; leal 4(%eax),%ebx +0000039d: 0453 ff30 adff 2000 pushl %ebx; pushl (%eax); next; -000003a5: 68b0 8304 08ad ff20 (version) pushl $version; next -000003ad: 0000 0000 0000 0000 padding +000003a4: 68b0 8304 08ad ff20 (version) pushl $version; next +000003ac: 0000 0000 0000 0000 padding 000003b0: 6933 3836 2d6c 696e i386-lin 000003b8: 7578 2068 616e 6477 ux handw