diff options
author | Kartik Agaram <vc@akkartik.com> | 2020-01-27 00:39:46 -0800 |
---|---|---|
committer | Kartik Agaram <vc@akkartik.com> | 2020-01-27 00:39:46 -0800 |
commit | 2104d1a75b76dbffc0b15a96c98d94e7a16594e8 (patch) | |
tree | 2a839b86e76431a9bbe4bf155f7411171a26d7f8 /html/apps/*.subx.html | |
parent | 71eb22a5bf94f5fa0a3c95212450e3c6a1a6a990 (diff) | |
download | mu-2104d1a75b76dbffc0b15a96c98d94e7a16594e8.tar.gz |
5925
Diffstat (limited to 'html/apps/*.subx.html')
-rw-r--r-- | html/apps/assort.subx.html | 36 | ||||
-rw-r--r-- | html/apps/braces.subx.html | 18 | ||||
-rw-r--r-- | html/apps/calls.subx.html | 50 | ||||
-rw-r--r-- | html/apps/crenshaw2-1.subx.html | 18 | ||||
-rw-r--r-- | html/apps/crenshaw2-1b.subx.html | 22 | ||||
-rw-r--r-- | html/apps/dquotes.subx.html | 52 |
6 files changed, 98 insertions, 98 deletions
diff --git a/html/apps/assort.subx.html b/html/apps/assort.subx.html index 662db279..6f2c21bd 100644 --- a/html/apps/assort.subx.html +++ b/html/apps/assort.subx.html @@ -122,7 +122,7 @@ if ('onhashchange' in window) { <span id="L60" class="LineNr"> 60 </span> eb/jump $subx-assort-main:end/disp8 <span id="L61" class="LineNr"> 61 </span><span class="Constant">$subx-assort-main:interactive</span>: <span id="L62" class="LineNr"> 62 </span> <span class="subxH1Comment"># - otherwise convert stdin</span> -<span id="L63" class="LineNr"> 63 </span> <span class="subxComment"># var ed/eax : exit-descriptor</span> +<span id="L63" class="LineNr"> 63 </span> <span class="subxComment"># var ed/eax: exit-descriptor</span> <span id="L64" class="LineNr"> 64 </span> 81 5/subop/subtract 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># subtract from esp</span> <span id="L65" class="LineNr"> 65 </span> 89/copy 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to eax</span> <span id="L66" class="LineNr"> 66 </span> <span class="subxComment"># configure ed to really exit()</span> @@ -148,9 +148,9 @@ if ('onhashchange' in window) { <span id="L86" class="LineNr"> 86 </span><span class="subxComment"># table: (addr stream {string, (addr stream byte)}) (8 bytes per row)</span> <span id="L87" class="LineNr"> 87 </span><span class="subxComment"># inefficient; uses sequential search for looking up segments by name</span> <span id="L88" class="LineNr"> 88 </span> -<span id="L89" class="LineNr"> 89 </span><span class="subxFunction">subx-assort</span>: <span class="subxComment"># in : (addr buffered-file), out : (addr buffered-file)</span> +<span id="L89" class="LineNr"> 89 </span><span class="subxFunction">subx-assort</span>: <span class="subxComment"># in: (addr buffered-file), out: (addr buffered-file)</span> <span id="L90" class="LineNr"> 90 </span> <span class="subxComment"># pseudocode:</span> -<span id="L91" class="LineNr"> 91 </span> <span class="subxComment"># var table : (addr stream {string, (addr stream byte)} 10/rows)</span> +<span id="L91" class="LineNr"> 91 </span> <span class="subxComment"># var table: (addr stream {string, (addr stream byte)} 10/rows)</span> <span id="L92" class="LineNr"> 92 </span> <span class="subxComment"># read-segments(in, table)</span> <span id="L93" class="LineNr"> 93 </span> <span class="subxComment"># write-segments(out, table)</span> <span id="L94" class="LineNr"> 94 </span> <span class="subxComment">#</span> @@ -159,7 +159,7 @@ if ('onhashchange' in window) { <span id="L97" class="LineNr"> 97 </span> 89/copy 3/mod/direct 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ebp</span> <span id="L98" class="LineNr"> 98 </span> <span class="subxS1Comment"># . save registers</span> <span id="L99" class="LineNr"> 99 </span> 51/push-ecx -<span id="L100" class="LineNr">100 </span> <span class="subxComment"># var table/ecx : (stream {string, (addr stream byte)} 80) # 10 rows * 8 bytes/row</span> +<span id="L100" class="LineNr">100 </span> <span class="subxComment"># var table/ecx: (stream {string, (addr stream byte)} 80) # 10 rows * 8 bytes/row</span> <span id="L101" class="LineNr">101 </span> 81 5/subop/subtract 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x50/imm32 <span class="subxComment"># subtract from esp</span> <span id="L102" class="LineNr">102 </span> 68/push 0x50/imm32/length <span id="L103" class="LineNr">103 </span> 68/push 0/imm32/read @@ -467,10 +467,10 @@ if ('onhashchange' in window) { <span id="L453" class="LineNr">453 </span><span class="subxComment"># type string_key = (addr array byte)</span> <span id="L454" class="LineNr">454 </span> <span id="L455" class="LineNr">455 </span><span class="subxComment"># beware: leaks memory (one name per segment read)</span> -<span id="L456" class="LineNr">456 </span><span class="subxFunction">read-segments</span>: <span class="subxComment"># in : (addr buffered-file), table : (addr stream {string_key, (handle stream byte)})</span> +<span id="L456" class="LineNr">456 </span><span class="subxFunction">read-segments</span>: <span class="subxComment"># in: (addr buffered-file), table: (addr stream {string_key, (handle stream byte)})</span> <span id="L457" class="LineNr">457 </span> <span class="subxComment"># pseudocode:</span> -<span id="L458" class="LineNr">458 </span> <span class="subxComment"># var curr-segment : (handle stream byte) = 0</span> -<span id="L459" class="LineNr">459 </span> <span class="subxComment"># var line : (stream byte 512)</span> +<span id="L458" class="LineNr">458 </span> <span class="subxComment"># var curr-segment: (handle stream byte) = 0</span> +<span id="L459" class="LineNr">459 </span> <span class="subxComment"># var line: (stream byte 512)</span> <span id="L460" class="LineNr">460 </span> <span class="subxComment"># while true</span> <span id="L461" class="LineNr">461 </span> <span class="subxComment"># clear-stream(line)</span> <span id="L462" class="LineNr">462 </span> <span class="subxComment"># read-line-buffered(in, line)</span> @@ -510,13 +510,13 @@ if ('onhashchange' in window) { <span id="L496" class="LineNr">496 </span> 52/push-edx <span id="L497" class="LineNr">497 </span> 53/push-ebx <span id="L498" class="LineNr">498 </span> 56/push-esi -<span id="L499" class="LineNr">499 </span> <span class="subxComment"># var line/ecx : (stream byte 512)</span> +<span id="L499" class="LineNr">499 </span> <span class="subxComment"># var line/ecx: (stream byte 512)</span> <span id="L500" class="LineNr">500 </span> 81 5/subop/subtract 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x200/imm32 <span class="subxComment"># subtract from esp</span> <span id="L501" class="LineNr">501 </span> 68/push 0x200/imm32/length <span id="L502" class="LineNr">502 </span> 68/push 0/imm32/read <span id="L503" class="LineNr">503 </span> 68/push 0/imm32/write <span id="L504" class="LineNr">504 </span> 89/copy 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ecx</span> -<span id="L505" class="LineNr">505 </span> <span class="subxComment"># var word-slice/edx : slice</span> +<span id="L505" class="LineNr">505 </span> <span class="subxComment"># var word-slice/edx: slice</span> <span id="L506" class="LineNr">506 </span> 68/push 0/imm32/end <span id="L507" class="LineNr">507 </span> 68/push 0/imm32/start <span id="L508" class="LineNr">508 </span> 89/copy 3/mod/direct 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to edx</span> @@ -565,9 +565,9 @@ if ('onhashchange' in window) { <span id="L591" class="LineNr">591 </span><span class="Constant">$read-segments:check-for-comment</span>: <span id="L592" class="Folded">592 </span><span class="Folded">+-- 9 lines: #? # print("check for comment\n") ----------------------------------------------------------------------------------------------------------</span> <span id="L601" class="LineNr">601 </span> <span class="subxComment"># if (slice-starts-with?(word-slice, "#")) continue</span> -<span id="L602" class="LineNr">602 </span> <span class="subxS1Comment"># . var start/esi : (addr byte) = word-slice->start</span> +<span id="L602" class="LineNr">602 </span> <span class="subxS1Comment"># . var start/esi: (addr byte) = word-slice->start</span> <span id="L603" class="LineNr">603 </span> 8b/copy 0/mod/indirect 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 6/r32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *ecx to esi</span> -<span id="L604" class="LineNr">604 </span> <span class="subxS1Comment"># . var c/eax : byte = *start</span> +<span id="L604" class="LineNr">604 </span> <span class="subxS1Comment"># . var c/eax: byte = *start</span> <span id="L605" class="LineNr">605 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span> <span id="L606" class="LineNr">606 </span> 8a/copy-byte 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *esi to AL</span> <span id="L607" class="LineNr">607 </span> <span class="subxS1Comment"># . if (c == '#') continue</span> @@ -597,7 +597,7 @@ if ('onhashchange' in window) { <span id="L678" class="LineNr">678 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L679" class="LineNr">679 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L680" class="Folded">680 </span><span class="Folded">+-- 40 lines: #? # dump segment name ---------------------------------------------------------------------------------------------------------------------</span> -<span id="L720" class="LineNr">720 </span> <span class="subxComment"># var segment-slot/eax : (addr handle stream byte) = leaky-get-or-insert-slice(table, segment-name, row-size=8)</span> +<span id="L720" class="LineNr">720 </span> <span class="subxComment"># var segment-slot/eax: (addr handle stream byte) = leaky-get-or-insert-slice(table, segment-name, row-size=8)</span> <span id="L721" class="LineNr">721 </span> <span class="subxS2Comment"># . . push args</span> <span id="L722" class="LineNr">722 </span> 68/push 8/imm32/row-size <span id="L723" class="LineNr">723 </span> 52/push-edx @@ -606,7 +606,7 @@ if ('onhashchange' in window) { <span id="L726" class="LineNr">726 </span> e8/call <a href='../081table.subx.html#L655'>leaky-get-or-insert-slice</a>/disp32 <span id="L727" class="LineNr">727 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L728" class="LineNr">728 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/imm32 <span class="subxComment"># add to esp</span> -<span id="L729" class="LineNr">729 </span> <span class="subxComment"># var curr-segment/ebx : (handle stream byte) = *segment-slot</span> +<span id="L729" class="LineNr">729 </span> <span class="subxComment"># var curr-segment/ebx: (handle stream byte) = *segment-slot</span> <span id="L730" class="LineNr">730 </span> 8b/copy 0/mod/indirect 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *eax to ebx</span> <span id="L731" class="LineNr">731 </span> <span class="subxComment"># if (curr-segment != 0) continue</span> <span id="L732" class="LineNr">732 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare ebx</span> @@ -667,7 +667,7 @@ if ('onhashchange' in window) { <span id="L843" class="LineNr">843 </span> 5d/pop-to-ebp <span id="L844" class="LineNr">844 </span> c3/return <span id="L845" class="LineNr">845 </span> -<span id="L846" class="LineNr">846 </span><span class="subxFunction">write-segments</span>: <span class="subxComment"># out : (addr buffered-file), table : (addr stream {string_key, (handle stream byte)})</span> +<span id="L846" class="LineNr">846 </span><span class="subxFunction">write-segments</span>: <span class="subxComment"># out: (addr buffered-file), table: (addr stream {string_key, (handle stream byte)})</span> <span id="L847" class="LineNr">847 </span> <span class="subxComment"># pseudocode:</span> <span id="L848" class="LineNr">848 </span> <span class="subxComment"># var curr = table->data</span> <span id="L849" class="LineNr">849 </span> <span class="subxComment"># var max = &table->data[table->write]</span> @@ -686,17 +686,17 @@ if ('onhashchange' in window) { <span id="L862" class="LineNr">862 </span> 56/push-esi <span id="L863" class="LineNr">863 </span> <span class="subxComment"># esi = table</span> <span id="L864" class="LineNr">864 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 6/r32/esi 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+12) to esi</span> -<span id="L865" class="LineNr">865 </span> <span class="subxComment"># var write/edx : int = table->write</span> +<span id="L865" class="LineNr">865 </span> <span class="subxComment"># var write/edx: int = table->write</span> <span id="L866" class="LineNr">866 </span> 8b/copy 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *esi to edx</span> -<span id="L867" class="LineNr">867 </span> <span class="subxComment"># var curr/esi : (addr byte) = table->data</span> +<span id="L867" class="LineNr">867 </span> <span class="subxComment"># var curr/esi: (addr byte) = table->data</span> <span id="L868" class="LineNr">868 </span> 81 0/subop/add 3/mod/direct 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/imm32 <span class="subxComment"># add to eax</span> -<span id="L869" class="LineNr">869 </span> <span class="subxComment"># var max/edx : (addr byte) = curr + write</span> +<span id="L869" class="LineNr">869 </span> <span class="subxComment"># var max/edx: (addr byte) = curr + write</span> <span id="L870" class="LineNr">870 </span> 01/add 3/mod/direct 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 6/r32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># add esi to edx</span> <span id="L871" class="LineNr">871 </span><span class="Constant">$write-segments:loop</span>: <span id="L872" class="LineNr">872 </span> <span class="subxComment"># if (curr >= max) break</span> <span id="L873" class="LineNr">873 </span> 39/compare 3/mod/direct 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare esi with edx</span> <span id="L874" class="LineNr">874 </span> 73/jump-if-addr>= $write-segments:<span class="Constant">break</span>/disp8 -<span id="L875" class="LineNr">875 </span> <span class="subxComment"># var stream/eax : (addr stream byte) = table[i].stream</span> +<span id="L875" class="LineNr">875 </span> <span class="subxComment"># var stream/eax: (addr stream byte) = table[i].stream</span> <span id="L876" class="LineNr">876 </span> 8b/copy 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(esi+4) to eax</span> <span id="L877" class="LineNr">877 </span> <span class="subxComment"># write-stream-data(out, stream)</span> <span id="L878" class="LineNr">878 </span> <span class="subxS2Comment"># . . push args</span> diff --git a/html/apps/braces.subx.html b/html/apps/braces.subx.html index bc8eb925..28d0515e 100644 --- a/html/apps/braces.subx.html +++ b/html/apps/braces.subx.html @@ -134,11 +134,11 @@ if ('onhashchange' in window) { <span id="L75" class="LineNr"> 75 </span> b8/copy-to-eax 1/imm32/exit <span id="L76" class="LineNr"> 76 </span> cd/syscall 0x80/imm8 <span id="L77" class="LineNr"> 77 </span> -<span id="L78" class="LineNr"> 78 </span><span class="subxFunction">subx-braces</span>: <span class="subxComment"># in : (addr buffered-file), out : (addr buffered-file)</span> +<span id="L78" class="LineNr"> 78 </span><span class="subxFunction">subx-braces</span>: <span class="subxComment"># in: (addr buffered-file), out: (addr buffered-file)</span> <span id="L79" class="LineNr"> 79 </span> <span class="subxComment"># pseudocode:</span> -<span id="L80" class="LineNr"> 80 </span> <span class="subxComment"># var line : (stream byte 512)</span> -<span id="L81" class="LineNr"> 81 </span> <span class="subxComment"># var label-stack : (stack int 32) # at most 32 levels of nesting</span> -<span id="L82" class="LineNr"> 82 </span> <span class="subxComment"># var next-label-id : int = 1</span> +<span id="L80" class="LineNr"> 80 </span> <span class="subxComment"># var line: (stream byte 512)</span> +<span id="L81" class="LineNr"> 81 </span> <span class="subxComment"># var label-stack: (stack int 32) # at most 32 levels of nesting</span> +<span id="L82" class="LineNr"> 82 </span> <span class="subxComment"># var next-label-id: int = 1</span> <span id="L83" class="LineNr"> 83 </span> <span class="subxComment"># while true</span> <span id="L84" class="LineNr"> 84 </span> <span class="subxComment"># clear-stream(line)</span> <span id="L85" class="LineNr"> 85 </span> <span class="subxComment"># read-line-buffered(in, line)</span> @@ -154,7 +154,7 @@ if ('onhashchange' in window) { <span id="L95" class="LineNr"> 95 </span> <span class="subxComment"># print(out, "_break" top ":\n")</span> <span id="L96" class="LineNr"> 96 </span> <span class="subxComment"># continue</span> <span id="L97" class="LineNr"> 97 </span> <span class="subxComment"># while true</span> -<span id="L98" class="LineNr"> 98 </span> <span class="subxComment"># var word-slice : (addr slice) = next-word-or-string(line)</span> +<span id="L98" class="LineNr"> 98 </span> <span class="subxComment"># var word-slice: (addr slice) = next-word-or-string(line)</span> <span id="L99" class="LineNr"> 99 </span> <span class="subxComment"># if slice-empty?(word-slice) # end of line</span> <span id="L100" class="LineNr">100 </span> <span class="subxComment"># break</span> <span id="L101" class="LineNr">101 </span> <span class="subxComment"># if slice-starts-with?(word-slice, "#") # comment</span> @@ -182,20 +182,20 @@ if ('onhashchange' in window) { <span id="L123" class="LineNr">123 </span> 57/push-edi <span id="L124" class="LineNr">124 </span> <span class="subxComment"># esi = in</span> <span id="L125" class="LineNr">125 </span> 8b/-> *(ebp+8) 6/r32/esi -<span id="L126" class="LineNr">126 </span> <span class="subxComment"># var line/ecx : (stream byte 512)</span> +<span id="L126" class="LineNr">126 </span> <span class="subxComment"># var line/ecx: (stream byte 512)</span> <span id="L127" class="LineNr">127 </span> 81 5/subop/subtract %esp 0x200/imm32 <span id="L128" class="LineNr">128 </span> 68/push 0x200/imm32/length <span id="L129" class="LineNr">129 </span> 68/push 0/imm32/read <span id="L130" class="LineNr">130 </span> 68/push 0/imm32/write <span id="L131" class="LineNr">131 </span> 89/<- %ecx 4/r32/esp -<span id="L132" class="LineNr">132 </span> <span class="subxComment"># var label-stack/edx : (stack int 32)</span> +<span id="L132" class="LineNr">132 </span> <span class="subxComment"># var label-stack/edx: (stack int 32)</span> <span id="L133" class="LineNr">133 </span> 81 5/subop/subtract %esp 0x80/imm32 <span id="L134" class="LineNr">134 </span> 68/push 0x80/imm32/length <span id="L135" class="LineNr">135 </span> 68/push 0/imm32/top <span id="L136" class="LineNr">136 </span> 89/<- %edx 4/r32/esp -<span id="L137" class="LineNr">137 </span> <span class="subxComment"># var next-label-id/ebx : int = 1</span> +<span id="L137" class="LineNr">137 </span> <span class="subxComment"># var next-label-id/ebx: int = 1</span> <span id="L138" class="LineNr">138 </span> c7 0/subop/copy %ebx 1/imm32 -<span id="L139" class="LineNr">139 </span> <span class="subxComment"># var word-slice/edi : slice</span> +<span id="L139" class="LineNr">139 </span> <span class="subxComment"># var word-slice/edi: slice</span> <span id="L140" class="LineNr">140 </span> 68/push 0/imm32/end <span id="L141" class="LineNr">141 </span> 68/push 0/imm32/start <span id="L142" class="LineNr">142 </span> 89/<- %edi 4/r32/esp diff --git a/html/apps/calls.subx.html b/html/apps/calls.subx.html index 149ef8c7..e23c2d8b 100644 --- a/html/apps/calls.subx.html +++ b/html/apps/calls.subx.html @@ -136,10 +136,10 @@ if ('onhashchange' in window) { <span id="L75" class="LineNr"> 75 </span> b8/copy-to-eax 1/imm32/exit <span id="L76" class="LineNr"> 76 </span> cd/syscall 0x80/imm8 <span id="L77" class="LineNr"> 77 </span> -<span id="L78" class="LineNr"> 78 </span><span class="subxFunction">subx-calls</span>: <span class="subxComment"># in : (addr buffered-file), out : (addr buffered-file)</span> +<span id="L78" class="LineNr"> 78 </span><span class="subxFunction">subx-calls</span>: <span class="subxComment"># in: (addr buffered-file), out: (addr buffered-file)</span> <span id="L79" class="LineNr"> 79 </span> <span class="subxComment"># pseudocode:</span> -<span id="L80" class="LineNr"> 80 </span> <span class="subxComment"># var line : (stream byte 512)</span> -<span id="L81" class="LineNr"> 81 </span> <span class="subxComment"># var words : (stream slice 16) # at most function name and 15 args</span> +<span id="L80" class="LineNr"> 80 </span> <span class="subxComment"># var line: (stream byte 512)</span> +<span id="L81" class="LineNr"> 81 </span> <span class="subxComment"># var words: (stream slice 16) # at most function name and 15 args</span> <span id="L82" class="LineNr"> 82 </span> <span class="subxComment"># while true</span> <span id="L83" class="LineNr"> 83 </span> <span class="subxComment"># clear-stream(line)</span> <span id="L84" class="LineNr"> 84 </span> <span class="subxComment"># read-line-buffered(in, line)</span> @@ -166,13 +166,13 @@ if ('onhashchange' in window) { <span id="L105" class="LineNr"> 105 </span> 51/push-ecx <span id="L106" class="LineNr"> 106 </span> 52/push-edx <span id="L107" class="LineNr"> 107 </span> 56/push-esi -<span id="L108" class="LineNr"> 108 </span> <span class="subxComment"># var line/esi : (stream byte 512)</span> +<span id="L108" class="LineNr"> 108 </span> <span class="subxComment"># var line/esi: (stream byte 512)</span> <span id="L109" class="LineNr"> 109 </span> 81 5/subop/subtract %esp 0x200/imm32 <span id="L110" class="LineNr"> 110 </span> 68/push 0x200/imm32/length <span id="L111" class="LineNr"> 111 </span> 68/push 0/imm32/read <span id="L112" class="LineNr"> 112 </span> 68/push 0/imm32/write <span id="L113" class="LineNr"> 113 </span> 89/<- %esi 4/r32/esp -<span id="L114" class="LineNr"> 114 </span> <span class="subxComment"># var words/edx : (stream slice 128) # 16 rows * 8 bytes/row</span> +<span id="L114" class="LineNr"> 114 </span> <span class="subxComment"># var words/edx: (stream slice 128) # 16 rows * 8 bytes/row</span> <span id="L115" class="LineNr"> 115 </span> 81 5/subop/subtract %esp 0x80/imm32 <span id="L116" class="LineNr"> 116 </span> 68/push 0x80/imm32/length <span id="L117" class="LineNr"> 117 </span> 68/push 0/imm32/read @@ -293,9 +293,9 @@ if ('onhashchange' in window) { <span id="L232" class="LineNr"> 232 </span> 5d/pop-to-ebp <span id="L233" class="LineNr"> 233 </span> c3/return <span id="L234" class="LineNr"> 234 </span> -<span id="L235" class="LineNr"> 235 </span><span class="subxFunction">parse-line</span>: <span class="subxComment"># line : (addr stream byte), words : (addr stream slice)</span> +<span id="L235" class="LineNr"> 235 </span><span class="subxFunction">parse-line</span>: <span class="subxComment"># line: (addr stream byte), words: (addr stream slice)</span> <span id="L236" class="LineNr"> 236 </span> <span class="subxComment"># pseudocode:</span> -<span id="L237" class="LineNr"> 237 </span> <span class="subxComment"># var word-slice : slice</span> +<span id="L237" class="LineNr"> 237 </span> <span class="subxComment"># var word-slice: slice</span> <span id="L238" class="LineNr"> 238 </span> <span class="subxComment"># while true</span> <span id="L239" class="LineNr"> 239 </span> <span class="subxComment"># word-slice = next-word-string-or-expression-without-metadata(line)</span> <span id="L240" class="LineNr"> 240 </span> <span class="subxComment"># if slice-empty?(word-slice)</span> @@ -308,7 +308,7 @@ if ('onhashchange' in window) { <span id="L247" class="LineNr"> 247 </span> 89/<- %ebp 4/r32/esp <span id="L248" class="LineNr"> 248 </span> <span class="subxS1Comment"># . save registers</span> <span id="L249" class="LineNr"> 249 </span> 51/push-ecx -<span id="L250" class="LineNr"> 250 </span> <span class="subxComment"># var word-slice/ecx : slice</span> +<span id="L250" class="LineNr"> 250 </span> <span class="subxComment"># var word-slice/ecx: slice</span> <span id="L251" class="LineNr"> 251 </span> 68/push 0/imm32/end <span id="L252" class="LineNr"> 252 </span> 68/push 0/imm32/start <span id="L253" class="LineNr"> 253 </span> 89/<- %ecx 4/r32/esp @@ -363,7 +363,7 @@ if ('onhashchange' in window) { <span id="L341" class="LineNr"> 341 </span> 5d/pop-to-ebp <span id="L342" class="LineNr"> 342 </span> c3/return <span id="L343" class="LineNr"> 343 </span> -<span id="L344" class="LineNr"> 344 </span><span class="subxFunction">emit-call</span>: <span class="subxComment"># out : (addr buffered-file), words : (addr stream slice)</span> +<span id="L344" class="LineNr"> 344 </span><span class="subxFunction">emit-call</span>: <span class="subxComment"># out: (addr buffered-file), words: (addr stream slice)</span> <span id="L345" class="LineNr"> 345 </span> <span class="subxComment"># pseudocode:</span> <span id="L346" class="LineNr"> 346 </span> <span class="subxComment"># if (words->write < 8) abort</span> <span id="L347" class="LineNr"> 347 </span> <span class="subxComment"># curr = &words->data[words->write-8]</span> @@ -404,9 +404,9 @@ if ('onhashchange' in window) { <span id="L382" class="LineNr"> 382 </span> 8b/-> *esi 1/r32/ecx <span id="L383" class="LineNr"> 383 </span> 81 5/subop/subtract %ecx 8/imm32 <span id="L384" class="LineNr"> 384 </span> 0f 8c/jump-if-< $emit-call:error1/disp32 -<span id="L385" class="LineNr"> 385 </span> <span class="subxComment"># var curr/ecx : (addr slice) = &words->data[words->write-8]</span> +<span id="L385" class="LineNr"> 385 </span> <span class="subxComment"># var curr/ecx: (addr slice) = &words->data[words->write-8]</span> <span id="L386" class="LineNr"> 386 </span> 8d/copy-address *(esi+ecx+0xc) 1/r32/ecx -<span id="L387" class="LineNr"> 387 </span> <span class="subxComment"># var min/edx : (addr byte) = words->data</span> +<span id="L387" class="LineNr"> 387 </span> <span class="subxComment"># var min/edx: (addr byte) = words->data</span> <span id="L388" class="LineNr"> 388 </span> 8d/copy-address *(esi+0xc) 2/r32/edx <span id="L389" class="LineNr"> 389 </span> <span class="subxH1Comment"># - emit pushes</span> <span id="L390" class="LineNr"> 390 </span><span class="Constant">$emit-call:push-loop</span>: @@ -414,9 +414,9 @@ if ('onhashchange' in window) { <span id="L392" class="LineNr"> 392 </span> 39/compare %ecx 2/r32/edx <span id="L393" class="LineNr"> 393 </span> 0f 8e/jump-if-<= $emit-call:call-instruction/disp32 <span id="L394" class="LineNr"> 394 </span> <span class="subxComment"># if (*curr->start in '%' '*') goto push-rm32</span> -<span id="L395" class="LineNr"> 395 </span> <span class="subxS1Comment"># . var start/eax : (addr byte) = curr->start</span> +<span id="L395" class="LineNr"> 395 </span> <span class="subxS1Comment"># . var start/eax: (addr byte) = curr->start</span> <span id="L396" class="LineNr"> 396 </span> 8b/-> *ecx 0/r32/eax -<span id="L397" class="LineNr"> 397 </span> <span class="subxS1Comment"># . var c/eax : byte = *eax</span> +<span id="L397" class="LineNr"> 397 </span> <span class="subxS1Comment"># . var c/eax: byte = *eax</span> <span id="L398" class="LineNr"> 398 </span> 8b/-> *eax 0/r32/eax <span id="L399" class="LineNr"> 399 </span> 81 4/subop/and %eax 0xff/imm32 <span id="L400" class="LineNr"> 400 </span> <span class="subxS1Comment"># . if (c == '%') goto push-rm32</span> @@ -732,7 +732,7 @@ if ('onhashchange' in window) { <span id="L742" class="LineNr"> 742 </span> 5d/pop-to-ebp <span id="L743" class="LineNr"> 743 </span> c3/return <span id="L744" class="LineNr"> 744 </span> -<span id="L745" class="LineNr"> 745 </span><span class="subxFunction">next-word-string-or-expression-without-metadata</span>: <span class="subxComment"># line : (addr stream byte), out : (addr slice)</span> +<span id="L745" class="LineNr"> 745 </span><span class="subxFunction">next-word-string-or-expression-without-metadata</span>: <span class="subxComment"># line: (addr stream byte), out: (addr slice)</span> <span id="L746" class="LineNr"> 746 </span> <span class="subxComment"># pseudocode:</span> <span id="L747" class="LineNr"> 747 </span> <span class="subxComment"># skip-chars-matching(line, ' ')</span> <span id="L748" class="LineNr"> 748 </span> <span class="subxComment"># if line->read >= line->write # end of line</span> @@ -821,7 +821,7 @@ if ('onhashchange' in window) { <span id="L831" class="LineNr"> 831 </span> 8d/copy-address *(esi+ecx+0xc) 0/r32/eax <span id="L832" class="LineNr"> 832 </span> 89/<- *edi 0/r32/eax <span id="L833" class="LineNr"> 833 </span> <span class="subxComment"># if (line->data[line->read] != '#') goto next check</span> -<span id="L834" class="LineNr"> 834 </span> <span class="subxS1Comment"># . var eax : byte = line->data[line->read]</span> +<span id="L834" class="LineNr"> 834 </span> <span class="subxS1Comment"># . var eax: byte = line->data[line->read]</span> <span id="L835" class="LineNr"> 835 </span> 31/xor %eax 0/r32/eax <span id="L836" class="LineNr"> 836 </span> 8a/copy-byte *(esi+ecx+0xc) 0/r32/AL <span id="L837" class="LineNr"> 837 </span> <span class="subxS1Comment"># . if (eax != '#') goto next check</span> @@ -1182,7 +1182,7 @@ if ('onhashchange' in window) { <span id="L1192" class="LineNr">1192 </span> e8/call <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32 <span id="L1193" class="LineNr">1193 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L1194" class="LineNr">1194 </span> 81 0/subop/add %esp 4/imm32 -<span id="L1195" class="LineNr">1195 </span> <span class="subxComment"># var slice/ecx : slice</span> +<span id="L1195" class="LineNr">1195 </span> <span class="subxComment"># var slice/ecx: slice</span> <span id="L1196" class="LineNr">1196 </span> 68/push 0/imm32/end <span id="L1197" class="LineNr">1197 </span> 68/push 0/imm32/start <span id="L1198" class="LineNr">1198 </span> 89/<- %ecx 4/r32/esp @@ -1255,7 +1255,7 @@ if ('onhashchange' in window) { <span id="L1265" class="LineNr">1265 </span> e8/call <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32 <span id="L1266" class="LineNr">1266 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L1267" class="LineNr">1267 </span> 81 0/subop/add %esp 4/imm32 -<span id="L1268" class="LineNr">1268 </span> <span class="subxComment"># var slice/ecx : slice</span> +<span id="L1268" class="LineNr">1268 </span> <span class="subxComment"># var slice/ecx: slice</span> <span id="L1269" class="LineNr">1269 </span> 68/push 0/imm32/end <span id="L1270" class="LineNr">1270 </span> 68/push 0/imm32/start <span id="L1271" class="LineNr">1271 </span> 89/<- %ecx 4/r32/esp @@ -1328,7 +1328,7 @@ if ('onhashchange' in window) { <span id="L1338" class="LineNr">1338 </span> e8/call <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32 <span id="L1339" class="LineNr">1339 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L1340" class="LineNr">1340 </span> 81 0/subop/add %esp 4/imm32 -<span id="L1341" class="LineNr">1341 </span> <span class="subxComment"># var slice/ecx : slice</span> +<span id="L1341" class="LineNr">1341 </span> <span class="subxComment"># var slice/ecx: slice</span> <span id="L1342" class="LineNr">1342 </span> 68/push 0/imm32/end <span id="L1343" class="LineNr">1343 </span> 68/push 0/imm32/start <span id="L1344" class="LineNr">1344 </span> 89/<- %ecx 4/r32/esp @@ -1370,7 +1370,7 @@ if ('onhashchange' in window) { <span id="L1380" class="LineNr">1380 </span> e8/call <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32 <span id="L1381" class="LineNr">1381 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L1382" class="LineNr">1382 </span> 81 0/subop/add %esp 4/imm32 -<span id="L1383" class="LineNr">1383 </span> <span class="subxComment"># var slice/ecx : slice</span> +<span id="L1383" class="LineNr">1383 </span> <span class="subxComment"># var slice/ecx: slice</span> <span id="L1384" class="LineNr">1384 </span> 68/push 0/imm32/end <span id="L1385" class="LineNr">1385 </span> 68/push 0/imm32/start <span id="L1386" class="LineNr">1386 </span> 89/<- %ecx 4/r32/esp @@ -1433,7 +1433,7 @@ if ('onhashchange' in window) { <span id="L1443" class="LineNr">1443 </span> e8/call <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32 <span id="L1444" class="LineNr">1444 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L1445" class="LineNr">1445 </span> 81 0/subop/add %esp 4/imm32 -<span id="L1446" class="LineNr">1446 </span> <span class="subxComment"># var slice/ecx : slice</span> +<span id="L1446" class="LineNr">1446 </span> <span class="subxComment"># var slice/ecx: slice</span> <span id="L1447" class="LineNr">1447 </span> 68/push 0/imm32/end <span id="L1448" class="LineNr">1448 </span> 68/push 0/imm32/start <span id="L1449" class="LineNr">1449 </span> 89/<- %ecx 4/r32/esp @@ -1496,7 +1496,7 @@ if ('onhashchange' in window) { <span id="L1506" class="LineNr">1506 </span> e8/call <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32 <span id="L1507" class="LineNr">1507 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L1508" class="LineNr">1508 </span> 81 0/subop/add %esp 4/imm32 -<span id="L1509" class="LineNr">1509 </span> <span class="subxComment"># var slice/ecx : slice</span> +<span id="L1509" class="LineNr">1509 </span> <span class="subxComment"># var slice/ecx: slice</span> <span id="L1510" class="LineNr">1510 </span> 68/push 0/imm32/end <span id="L1511" class="LineNr">1511 </span> 68/push 0/imm32/start <span id="L1512" class="LineNr">1512 </span> 89/<- %ecx 4/r32/esp @@ -1559,7 +1559,7 @@ if ('onhashchange' in window) { <span id="L1569" class="LineNr">1569 </span> e8/call <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32 <span id="L1570" class="LineNr">1570 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L1571" class="LineNr">1571 </span> 81 0/subop/add %esp 4/imm32 -<span id="L1572" class="LineNr">1572 </span> <span class="subxComment"># var slice/ecx : slice</span> +<span id="L1572" class="LineNr">1572 </span> <span class="subxComment"># var slice/ecx: slice</span> <span id="L1573" class="LineNr">1573 </span> 68/push 0/imm32/end <span id="L1574" class="LineNr">1574 </span> 68/push 0/imm32/start <span id="L1575" class="LineNr">1575 </span> 89/<- %ecx 4/r32/esp @@ -1614,7 +1614,7 @@ if ('onhashchange' in window) { <span id="L1624" class="LineNr">1624 </span> e8/call <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32 <span id="L1625" class="LineNr">1625 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L1626" class="LineNr">1626 </span> 81 0/subop/add %esp 4/imm32 -<span id="L1627" class="LineNr">1627 </span> <span class="subxComment"># var slice/ecx : slice</span> +<span id="L1627" class="LineNr">1627 </span> <span class="subxComment"># var slice/ecx: slice</span> <span id="L1628" class="LineNr">1628 </span> 68/push 0/imm32/end <span id="L1629" class="LineNr">1629 </span> 68/push 0/imm32/start <span id="L1630" class="LineNr">1630 </span> 89/<- %ecx 4/r32/esp @@ -1669,7 +1669,7 @@ if ('onhashchange' in window) { <span id="L1679" class="LineNr">1679 </span> e8/call <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32 <span id="L1680" class="LineNr">1680 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L1681" class="LineNr">1681 </span> 81 0/subop/add %esp 4/imm32 -<span id="L1682" class="LineNr">1682 </span> <span class="subxComment"># var slice/ecx : slice</span> +<span id="L1682" class="LineNr">1682 </span> <span class="subxComment"># var slice/ecx: slice</span> <span id="L1683" class="LineNr">1683 </span> 68/push 0/imm32/end <span id="L1684" class="LineNr">1684 </span> 68/push 0/imm32/start <span id="L1685" class="LineNr">1685 </span> 89/<- %ecx 4/r32/esp @@ -1724,7 +1724,7 @@ if ('onhashchange' in window) { <span id="L1734" class="LineNr">1734 </span> e8/call <a href='../055stream.subx.html#L17'>clear-stream</a>/disp32 <span id="L1735" class="LineNr">1735 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L1736" class="LineNr">1736 </span> 81 0/subop/add %esp 4/imm32 -<span id="L1737" class="LineNr">1737 </span> <span class="subxComment"># var slice/ecx : slice</span> +<span id="L1737" class="LineNr">1737 </span> <span class="subxComment"># var slice/ecx: slice</span> <span id="L1738" class="LineNr">1738 </span> 68/push 0/imm32/end <span id="L1739" class="LineNr">1739 </span> 68/push 0/imm32/start <span id="L1740" class="LineNr">1740 </span> 89/<- %ecx 4/r32/esp diff --git a/html/apps/crenshaw2-1.subx.html b/html/apps/crenshaw2-1.subx.html index e42c901c..3f26523a 100644 --- a/html/apps/crenshaw2-1.subx.html +++ b/html/apps/crenshaw2-1.subx.html @@ -128,7 +128,7 @@ if ('onhashchange' in window) { <span id="L67" class="LineNr"> 67 </span> eb/jump $main:end/disp8 <span id="L68" class="LineNr"> 68 </span><span class="Constant">$run-main</span>: <span id="L69" class="LineNr"> 69 </span> <span class="subxH1Comment"># - otherwise read a program from stdin and emit its translation to stdout</span> -<span id="L70" class="LineNr"> 70 </span> <span class="subxComment"># var ed/eax : exit-descriptor</span> +<span id="L70" class="LineNr"> 70 </span> <span class="subxComment"># var ed/eax: exit-descriptor</span> <span id="L71" class="LineNr"> 71 </span> 81 5/subop/subtract 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># subtract from esp</span> <span id="L72" class="LineNr"> 72 </span> 89/copy 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to eax</span> <span id="L73" class="LineNr"> 73 </span> <span class="subxComment"># configure ed to really exit()</span> @@ -151,7 +151,7 @@ if ('onhashchange' in window) { <span id="L90" class="LineNr"> 90 </span> cd/syscall 0x80/imm8 <span id="L91" class="LineNr"> 91 </span> <span id="L92" class="LineNr"> 92 </span><span class="subxComment"># the main entry point</span> -<span id="L93" class="LineNr"> 93 </span><span class="subxFunction">compile</span>: <span class="subxComment"># in : (addr buffered-file), out : fd or (addr stream byte), err : fd or (addr stream byte), ed : (addr exit-descriptor)</span> +<span id="L93" class="LineNr"> 93 </span><span class="subxFunction">compile</span>: <span class="subxComment"># in: (addr buffered-file), out: fd or (addr stream byte), err: fd or (addr stream byte), ed: (addr exit-descriptor)</span> <span id="L94" class="LineNr"> 94 </span> <span class="subxS1Comment"># . prologue</span> <span id="L95" class="LineNr"> 95 </span> 55/push-ebp <span id="L96" class="LineNr"> 96 </span> 89/copy 3/mod/direct 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ebp</span> @@ -166,7 +166,7 @@ if ('onhashchange' in window) { <span id="L105" class="LineNr">105 </span> e8/call <a href='crenshaw2-1.subx.html#L515'>get-char</a>/disp32 <span id="L106" class="LineNr">106 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L107" class="LineNr">107 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> -<span id="L108" class="LineNr">108 </span> <span class="subxComment"># var num/ecx : (stream byte 7)</span> +<span id="L108" class="LineNr">108 </span> <span class="subxComment"># var num/ecx: (stream byte 7)</span> <span id="L109" class="LineNr">109 </span> <span class="subxComment"># Numbers can be 32 bits or 8 hex bytes long. One of them will be in 'Look', so we need space for 7 bytes.</span> <span id="L110" class="LineNr">110 </span> <span class="subxComment"># Sizing the stream just right buys us overflow-handling for free inside 'get-num'.</span> <span id="L111" class="LineNr">111 </span> <span class="subxComment"># Add 12 bytes for 'read', 'write' and 'length' fields, for a total of 19 bytes, or 0x13 in hex.</span> @@ -252,7 +252,7 @@ if ('onhashchange' in window) { <span id="L191" class="LineNr">191 </span><span class="subxComment"># space in 'out'.</span> <span id="L192" class="LineNr">192 </span><span class="subxComment"># Input comes from the global variable 'Look' (first byte) and the argument</span> <span id="L193" class="LineNr">193 </span><span class="subxComment"># 'in' (rest). We leave the next byte from 'in' into 'Look' on exit.</span> -<span id="L194" class="LineNr">194 </span><span class="subxFunction">get-num</span>: <span class="subxComment"># in : (addr buffered-file), out : (addr stream byte), err : fd or (addr stream byte), ed : (addr exit-descriptor)</span> +<span id="L194" class="LineNr">194 </span><span class="subxFunction">get-num</span>: <span class="subxComment"># in: (addr buffered-file), out: (addr stream byte), err: fd or (addr stream byte), ed: (addr exit-descriptor)</span> <span id="L195" class="LineNr">195 </span> <span class="subxComment"># pseudocode:</span> <span id="L196" class="LineNr">196 </span> <span class="subxComment"># if (!is-digit?(Look)) expected(ed, err, "integer")</span> <span id="L197" class="LineNr">197 </span> <span class="subxComment"># if out->write >= out->length</span> @@ -400,7 +400,7 @@ if ('onhashchange' in window) { <span id="L339" class="LineNr">339 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L340" class="LineNr">340 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L341" class="LineNr">341 </span> <span class="subxComment"># initialize exit-descriptor 'ed' for the call to 'get-num' below</span> -<span id="L342" class="LineNr">342 </span> <span class="subxS1Comment"># . var ed/eax : exit-descriptor</span> +<span id="L342" class="LineNr">342 </span> <span class="subxS1Comment"># . var ed/eax: exit-descriptor</span> <span id="L343" class="LineNr">343 </span> 81 5/subop/subtract 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># subtract from esp</span> <span id="L344" class="LineNr">344 </span> 89/copy 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to eax</span> <span id="L345" class="LineNr">345 </span> <span class="subxS1Comment"># . tailor-exit-descriptor(ed, 16)</span> @@ -489,7 +489,7 @@ if ('onhashchange' in window) { <span id="L428" class="LineNr">428 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L429" class="LineNr">429 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L430" class="LineNr">430 </span> <span class="subxComment"># initialize exit-descriptor 'ed' for the call to 'get-num' below</span> -<span id="L431" class="LineNr">431 </span> <span class="subxS1Comment"># . var ed/eax : exit-descriptor</span> +<span id="L431" class="LineNr">431 </span> <span class="subxS1Comment"># . var ed/eax: exit-descriptor</span> <span id="L432" class="LineNr">432 </span> 81 5/subop/subtract 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># subtract from esp</span> <span id="L433" class="LineNr">433 </span> 89/copy 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to eax</span> <span id="L434" class="LineNr">434 </span> <span class="subxS1Comment"># . tailor-exit-descriptor(ed, 16)</span> @@ -531,7 +531,7 @@ if ('onhashchange' in window) { <span id="L470" class="LineNr">470 </span><span class="subxComment">## helpers</span> <span id="L471" class="LineNr">471 </span> <span id="L472" class="LineNr">472 </span><span class="subxComment"># write(f, "Error: "+s+" expected\n") then stop(ed, 1)</span> -<span id="L473" class="LineNr">473 </span><span class="subxFunction">expected</span>: <span class="subxComment"># ed : (addr exit-descriptor), f : fd or (addr stream byte), s : (addr array byte)</span> +<span id="L473" class="LineNr">473 </span><span class="subxFunction">expected</span>: <span class="subxComment"># ed: (addr exit-descriptor), f: fd or (addr stream byte), s: (addr array byte)</span> <span id="L474" class="LineNr">474 </span> <span class="subxS1Comment"># . prologue</span> <span id="L475" class="LineNr">475 </span> 55/push-ebp <span id="L476" class="LineNr">476 </span> 89/copy 3/mod/direct 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ebp</span> @@ -573,7 +573,7 @@ if ('onhashchange' in window) { <span id="L512" class="LineNr">512 </span> c3/return <span id="L513" class="LineNr">513 </span> <span id="L514" class="LineNr">514 </span><span class="subxComment"># read a byte from 'f', and save it in 'Look'</span> -<span id="L515" class="LineNr">515 </span><span class="subxFunction">get-char</span>: <span class="subxComment"># f : (addr buffered-file)</span> +<span id="L515" class="LineNr">515 </span><span class="subxFunction">get-char</span>: <span class="subxComment"># f: (addr buffered-file)</span> <span id="L516" class="LineNr">516 </span> <span class="subxS1Comment"># . prologue</span> <span id="L517" class="LineNr">517 </span> 55/push-ebp <span id="L518" class="LineNr">518 </span> 89/copy 3/mod/direct 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ebp</span> @@ -596,7 +596,7 @@ if ('onhashchange' in window) { <span id="L535" class="LineNr">535 </span> 5d/pop-to-ebp <span id="L536" class="LineNr">536 </span> c3/return <span id="L537" class="LineNr">537 </span> -<span id="L538" class="LineNr">538 </span><span class="subxFunction">is-digit?</span>: <span class="subxComment"># c : int -> eax : boolean</span> +<span id="L538" class="LineNr">538 </span><span class="subxFunction">is-digit?</span>: <span class="subxComment"># c: int -> eax: boolean</span> <span id="L539" class="LineNr">539 </span> <span class="subxS1Comment"># . prologue</span> <span id="L540" class="LineNr">540 </span> 55/push-ebp <span id="L541" class="LineNr">541 </span> 89/copy 3/mod/direct 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ebp</span> diff --git a/html/apps/crenshaw2-1b.subx.html b/html/apps/crenshaw2-1b.subx.html index ae74e982..c4022fd8 100644 --- a/html/apps/crenshaw2-1b.subx.html +++ b/html/apps/crenshaw2-1b.subx.html @@ -128,7 +128,7 @@ if ('onhashchange' in window) { <span id="L67" class="LineNr"> 67 </span> eb/jump $main:end/disp8 <span id="L68" class="LineNr"> 68 </span><span class="Constant">$run-main</span>: <span id="L69" class="LineNr"> 69 </span> <span class="subxH1Comment"># - otherwise read a program from stdin and emit its translation to stdout</span> -<span id="L70" class="LineNr"> 70 </span> <span class="subxComment"># var ed/eax : exit-descriptor</span> +<span id="L70" class="LineNr"> 70 </span> <span class="subxComment"># var ed/eax: exit-descriptor</span> <span id="L71" class="LineNr"> 71 </span> 81 5/subop/subtract 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># subtract from esp</span> <span id="L72" class="LineNr"> 72 </span> 89/copy 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to eax</span> <span id="L73" class="LineNr"> 73 </span> <span class="subxComment"># configure ed to really exit()</span> @@ -151,7 +151,7 @@ if ('onhashchange' in window) { <span id="L90" class="LineNr"> 90 </span> cd/syscall 0x80/imm8 <span id="L91" class="LineNr"> 91 </span> <span id="L92" class="LineNr"> 92 </span><span class="subxComment"># the main entry point</span> -<span id="L93" class="LineNr"> 93 </span><span class="subxFunction">compile</span>: <span class="subxComment"># in : (addr buffered-file), out : fd or (addr stream byte), err : fd or (addr stream byte), ed : (addr exit-descriptor)</span> +<span id="L93" class="LineNr"> 93 </span><span class="subxFunction">compile</span>: <span class="subxComment"># in: (addr buffered-file), out: fd or (addr stream byte), err: fd or (addr stream byte), ed: (addr exit-descriptor)</span> <span id="L94" class="LineNr"> 94 </span> <span class="subxS1Comment"># . prologue</span> <span id="L95" class="LineNr"> 95 </span> 55/push-ebp <span id="L96" class="LineNr"> 96 </span> 89/copy 3/mod/direct 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ebp</span> @@ -166,7 +166,7 @@ if ('onhashchange' in window) { <span id="L105" class="LineNr">105 </span> e8/call <a href='crenshaw2-1b.subx.html#L709'>get-char</a>/disp32 <span id="L106" class="LineNr">106 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L107" class="LineNr">107 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span> -<span id="L108" class="LineNr">108 </span> <span class="subxComment"># var num/ecx : (stream byte 7)</span> +<span id="L108" class="LineNr">108 </span> <span class="subxComment"># var num/ecx: (stream byte 7)</span> <span id="L109" class="LineNr">109 </span> <span class="subxComment"># Numbers can be 32 bits or 8 hex bytes long. One of them will be in 'Look', so we need space for 7 bytes.</span> <span id="L110" class="LineNr">110 </span> <span class="subxComment"># Sizing the stream just right buys us overflow-handling for free inside 'get-num'.</span> <span id="L111" class="LineNr">111 </span> <span class="subxComment"># Add 12 bytes for 'read', 'write' and 'length' fields, for a total of 19 bytes, or 0x13 in hex.</span> @@ -252,7 +252,7 @@ if ('onhashchange' in window) { <span id="L191" class="LineNr">191 </span><span class="subxComment"># no space in 'out'.</span> <span id="L192" class="LineNr">192 </span><span class="subxComment"># Input comes from the global variable 'Look' (first byte) and the argument</span> <span id="L193" class="LineNr">193 </span><span class="subxComment"># 'in' (rest). We leave the next byte from 'in' into 'Look' on exit.</span> -<span id="L194" class="LineNr">194 </span><span class="subxFunction">get-num</span>: <span class="subxComment"># in : (addr buffered-file), out : (addr stream byte), err : fd or (addr stream byte), ed : (addr exit-descriptor)</span> +<span id="L194" class="LineNr">194 </span><span class="subxFunction">get-num</span>: <span class="subxComment"># in: (addr buffered-file), out: (addr stream byte), err: fd or (addr stream byte), ed: (addr exit-descriptor)</span> <span id="L195" class="LineNr">195 </span> <span class="subxComment"># pseudocode:</span> <span id="L196" class="LineNr">196 </span> <span class="subxComment"># if (!is-digit?(Look)) expected(ed, err, "integer")</span> <span id="L197" class="LineNr">197 </span> <span class="subxComment"># do</span> @@ -416,7 +416,7 @@ if ('onhashchange' in window) { <span id="L355" class="LineNr">355 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L356" class="LineNr">356 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L357" class="LineNr">357 </span> <span class="subxComment"># initialize exit-descriptor 'ed' for the call to 'get-num' below</span> -<span id="L358" class="LineNr">358 </span> <span class="subxS1Comment"># . var ed/eax : exit-descriptor</span> +<span id="L358" class="LineNr">358 </span> <span class="subxS1Comment"># . var ed/eax: exit-descriptor</span> <span id="L359" class="LineNr">359 </span> 81 5/subop/subtract 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># subtract from esp</span> <span id="L360" class="LineNr">360 </span> 89/copy 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to eax</span> <span id="L361" class="LineNr">361 </span> <span class="subxS1Comment"># . tailor-exit-descriptor(ed, 16)</span> @@ -505,7 +505,7 @@ if ('onhashchange' in window) { <span id="L444" class="LineNr">444 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L445" class="LineNr">445 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L446" class="LineNr">446 </span> <span class="subxComment"># initialize exit-descriptor 'ed' for the call to 'get-num' below</span> -<span id="L447" class="LineNr">447 </span> <span class="subxS1Comment"># . var ed/eax : exit-descriptor</span> +<span id="L447" class="LineNr">447 </span> <span class="subxS1Comment"># . var ed/eax: exit-descriptor</span> <span id="L448" class="LineNr">448 </span> 81 5/subop/subtract 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># subtract from esp</span> <span id="L449" class="LineNr">449 </span> 89/copy 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to eax</span> <span id="L450" class="LineNr">450 </span> <span class="subxS1Comment"># . tailor-exit-descriptor(ed, 16)</span> @@ -588,7 +588,7 @@ if ('onhashchange' in window) { <span id="L527" class="LineNr">527 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L528" class="LineNr">528 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L529" class="LineNr">529 </span> <span class="subxComment"># initialize exit-descriptor 'ed' for the call to 'get-num' below</span> -<span id="L530" class="LineNr">530 </span> <span class="subxS1Comment"># . var ed/eax : exit-descriptor</span> +<span id="L530" class="LineNr">530 </span> <span class="subxS1Comment"># . var ed/eax: exit-descriptor</span> <span id="L531" class="LineNr">531 </span> 81 5/subop/subtract 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># subtract from esp</span> <span id="L532" class="LineNr">532 </span> 89/copy 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to eax</span> <span id="L533" class="LineNr">533 </span> <span class="subxS1Comment"># . tailor-exit-descriptor(ed, 16)</span> @@ -677,7 +677,7 @@ if ('onhashchange' in window) { <span id="L616" class="LineNr">616 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L617" class="LineNr">617 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L618" class="LineNr">618 </span> <span class="subxComment"># initialize exit-descriptor 'ed' for the call to 'get-num' below</span> -<span id="L619" class="LineNr">619 </span> <span class="subxS1Comment"># . var ed/eax : exit-descriptor</span> +<span id="L619" class="LineNr">619 </span> <span class="subxS1Comment"># . var ed/eax: exit-descriptor</span> <span id="L620" class="LineNr">620 </span> 81 5/subop/subtract 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># subtract from esp</span> <span id="L621" class="LineNr">621 </span> 89/copy 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to eax</span> <span id="L622" class="LineNr">622 </span> <span class="subxS1Comment"># . tailor-exit-descriptor(ed, 16)</span> @@ -725,7 +725,7 @@ if ('onhashchange' in window) { <span id="L664" class="LineNr">664 </span><span class="subxComment">## helpers</span> <span id="L665" class="LineNr">665 </span> <span id="L666" class="LineNr">666 </span><span class="subxComment"># write(f, "Error: "+s+" expected\n") then stop(ed, 1)</span> -<span id="L667" class="LineNr">667 </span><span class="subxFunction">expected</span>: <span class="subxComment"># ed : (addr exit-descriptor), f : fd or (addr stream byte), s : (addr array byte)</span> +<span id="L667" class="LineNr">667 </span><span class="subxFunction">expected</span>: <span class="subxComment"># ed: (addr exit-descriptor), f: fd or (addr stream byte), s: (addr array byte)</span> <span id="L668" class="LineNr">668 </span> <span class="subxS1Comment"># . prologue</span> <span id="L669" class="LineNr">669 </span> 55/push-ebp <span id="L670" class="LineNr">670 </span> 89/copy 3/mod/direct 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ebp</span> @@ -767,7 +767,7 @@ if ('onhashchange' in window) { <span id="L706" class="LineNr">706 </span> c3/return <span id="L707" class="LineNr">707 </span> <span id="L708" class="LineNr">708 </span><span class="subxComment"># read a byte from 'f', and save it in 'Look'</span> -<span id="L709" class="LineNr">709 </span><span class="subxFunction">get-char</span>: <span class="subxComment"># f : (addr buffered-file)</span> +<span id="L709" class="LineNr">709 </span><span class="subxFunction">get-char</span>: <span class="subxComment"># f: (addr buffered-file)</span> <span id="L710" class="LineNr">710 </span> <span class="subxS1Comment"># . prologue</span> <span id="L711" class="LineNr">711 </span> 55/push-ebp <span id="L712" class="LineNr">712 </span> 89/copy 3/mod/direct 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ebp</span> @@ -790,7 +790,7 @@ if ('onhashchange' in window) { <span id="L729" class="LineNr">729 </span> 5d/pop-to-ebp <span id="L730" class="LineNr">730 </span> c3/return <span id="L731" class="LineNr">731 </span> -<span id="L732" class="LineNr">732 </span><span class="subxFunction">is-digit?</span>: <span class="subxComment"># c : int -> eax : boolean</span> +<span id="L732" class="LineNr">732 </span><span class="subxFunction">is-digit?</span>: <span class="subxComment"># c: int -> eax: boolean</span> <span id="L733" class="LineNr">733 </span> <span class="subxS1Comment"># . prologue</span> <span id="L734" class="LineNr">734 </span> 55/push-ebp <span id="L735" class="LineNr">735 </span> 89/copy 3/mod/direct 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ebp</span> diff --git a/html/apps/dquotes.subx.html b/html/apps/dquotes.subx.html index 71ed40a3..aeefeaf7 100644 --- a/html/apps/dquotes.subx.html +++ b/html/apps/dquotes.subx.html @@ -119,7 +119,7 @@ if ('onhashchange' in window) { <span id="L56" class="LineNr"> 56 </span> eb/jump $subx-dquotes-main:end/disp8 <span id="L57" class="LineNr"> 57 </span><span class="Constant">$subx-dquotes-main:interactive</span>: <span id="L58" class="LineNr"> 58 </span> <span class="subxH1Comment"># - otherwise convert stdin</span> -<span id="L59" class="LineNr"> 59 </span> <span class="subxComment"># var ed/eax : exit-descriptor</span> +<span id="L59" class="LineNr"> 59 </span> <span class="subxComment"># var ed/eax: exit-descriptor</span> <span id="L60" class="LineNr"> 60 </span> 81 5/subop/subtract 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># subtract from esp</span> <span id="L61" class="LineNr"> 61 </span> 89/copy 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to eax</span> <span id="L62" class="LineNr"> 62 </span> <span class="subxComment"># configure ed to really exit()</span> @@ -145,10 +145,10 @@ if ('onhashchange' in window) { <span id="L82" class="LineNr"> 82 </span><span class="subxComment"># line = words separated by ' ', maybe followed by comment starting with '#'</span> <span id="L83" class="LineNr"> 83 </span><span class="subxComment"># word = datum until '/', then 0 or more metadata separated by '/'</span> <span id="L84" class="LineNr"> 84 </span> -<span id="L85" class="LineNr"> 85 </span><span class="subxFunction">subx-dquotes</span>: <span class="subxComment"># in : (addr buffered-file), out : (addr buffered-file)</span> +<span id="L85" class="LineNr"> 85 </span><span class="subxFunction">subx-dquotes</span>: <span class="subxComment"># in: (addr buffered-file), out: (addr buffered-file)</span> <span id="L86" class="LineNr"> 86 </span> <span class="subxComment"># pseudocode:</span> -<span id="L87" class="LineNr"> 87 </span> <span class="subxComment"># var line : (stream byte 512)</span> -<span id="L88" class="LineNr"> 88 </span> <span class="subxComment"># var new-data-segment : (handle stream byte) = new-stream(Heap, Segment-size, 1)</span> +<span id="L87" class="LineNr"> 87 </span> <span class="subxComment"># var line: (stream byte 512)</span> +<span id="L88" class="LineNr"> 88 </span> <span class="subxComment"># var new-data-segment: (handle stream byte) = new-stream(Heap, Segment-size, 1)</span> <span id="L89" class="LineNr"> 89 </span> <span class="subxComment">#</span> <span id="L90" class="LineNr"> 90 </span> <span class="subxComment"># write(new-data-segment, "== data\n")</span> <span id="L91" class="LineNr"> 91 </span> <span class="subxComment"># # TODO: When it was originally written dquotes ran before assort, so</span> @@ -188,13 +188,13 @@ if ('onhashchange' in window) { <span id="L125" class="LineNr"> 125 </span> 53/push-ebx <span id="L126" class="LineNr"> 126 </span> 56/push-esi <span id="L127" class="LineNr"> 127 </span> 57/push-edi -<span id="L128" class="LineNr"> 128 </span> <span class="subxComment"># var line/ecx : (stream byte 512)</span> +<span id="L128" class="LineNr"> 128 </span> <span class="subxComment"># var line/ecx: (stream byte 512)</span> <span id="L129" class="LineNr"> 129 </span> 81 5/subop/subtract 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x200/imm32 <span class="subxComment"># subtract from esp</span> <span id="L130" class="LineNr"> 130 </span> 68/push 0x200/imm32/length <span id="L131" class="LineNr"> 131 </span> 68/push 0/imm32/read <span id="L132" class="LineNr"> 132 </span> 68/push 0/imm32/write <span id="L133" class="LineNr"> 133 </span> 89/copy 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ecx</span> -<span id="L134" class="LineNr"> 134 </span> <span class="subxComment"># var word-slice/edx : slice</span> +<span id="L134" class="LineNr"> 134 </span> <span class="subxComment"># var word-slice/edx: slice</span> <span id="L135" class="LineNr"> 135 </span> 68/push 0/imm32/end <span id="L136" class="LineNr"> 136 </span> 68/push 0/imm32/start <span id="L137" class="LineNr"> 137 </span> 89/copy 3/mod/direct 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to edx</span> @@ -261,9 +261,9 @@ if ('onhashchange' in window) { <span id="L198" class="LineNr"> 198 </span> 0f 85/jump-if-!= $subx-dquotes:next-line/disp32 <span id="L199" class="LineNr"> 199 </span><span class="Constant">$subx-dquotes:check-for-comment</span>: <span id="L200" class="LineNr"> 200 </span> <span class="subxComment"># if (slice-starts-with?(word-slice, "#")) continue</span> -<span id="L201" class="LineNr"> 201 </span> <span class="subxS1Comment"># . var start/esi : (addr byte) = word-slice->start</span> +<span id="L201" class="LineNr"> 201 </span> <span class="subxS1Comment"># . var start/esi: (addr byte) = word-slice->start</span> <span id="L202" class="LineNr"> 202 </span> 8b/copy 0/mod/indirect 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 6/r32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *edx to esi</span> -<span id="L203" class="LineNr"> 203 </span> <span class="subxS1Comment"># . var c/eax : byte = *start</span> +<span id="L203" class="LineNr"> 203 </span> <span class="subxS1Comment"># . var c/eax: byte = *start</span> <span id="L204" class="LineNr"> 204 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span> <span id="L205" class="LineNr"> 205 </span> 8a/copy-byte 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *esi to AL</span> <span id="L206" class="LineNr"> 206 </span> <span class="subxS1Comment"># . if (c == '#') continue</span> @@ -350,7 +350,7 @@ if ('onhashchange' in window) { <span id="L287" class="LineNr"> 287 </span> <span id="L288" class="LineNr"> 288 </span><span class="subxComment"># Write out 'string-literal' in a new format to 'out-segment', assign it a new</span> <span id="L289" class="LineNr"> 289 </span><span class="subxComment"># label, and write the new label out to 'out'.</span> -<span id="L290" class="LineNr"> 290 </span><span class="subxFunction">process-string-literal</span>: <span class="subxComment"># string-literal : (addr slice), out : (addr buffered-file), out-segment : (addr stream byte)</span> +<span id="L290" class="LineNr"> 290 </span><span class="subxFunction">process-string-literal</span>: <span class="subxComment"># string-literal: (addr slice), out: (addr buffered-file), out-segment: (addr stream byte)</span> <span id="L291" class="LineNr"> 291 </span> <span class="subxComment"># pseudocode:</span> <span id="L292" class="LineNr"> 292 </span> <span class="subxComment"># print(out-segment, "_string#{Next-string-literal}:\n")</span> <span id="L293" class="LineNr"> 293 </span> <span class="subxComment"># emit-string-literal-data(out-segment, string-literal)</span> @@ -363,7 +363,7 @@ if ('onhashchange' in window) { <span id="L300" class="LineNr"> 300 </span> 89/copy 3/mod/direct 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ebp</span> <span id="L301" class="LineNr"> 301 </span> <span class="subxS1Comment"># . save registers</span> <span id="L302" class="LineNr"> 302 </span> 51/push-ecx -<span id="L303" class="LineNr"> 303 </span> <span class="subxComment"># var int32-stream/ecx : (stream byte 10) # number of decimal digits a 32-bit number can have</span> +<span id="L303" class="LineNr"> 303 </span> <span class="subxComment"># var int32-stream/ecx: (stream byte 10) # number of decimal digits a 32-bit number can have</span> <span id="L304" class="LineNr"> 304 </span> 81 5/subop/subtract 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xa/imm32 <span class="subxComment"># subtract from esp</span> <span id="L305" class="LineNr"> 305 </span> 68/push 0xa/imm32/decimal-digits-in-32bit-number <span id="L306" class="LineNr"> 306 </span> 68/push 0/imm32/read @@ -852,7 +852,7 @@ if ('onhashchange' in window) { <span id="L846" class="LineNr"> 846 </span> c3/return <span id="L847" class="LineNr"> 847 </span> <span id="L848" class="LineNr"> 848 </span><span class="subxComment"># generate the data segment contents byte by byte for a given slice</span> -<span id="L849" class="LineNr"> 849 </span><span class="subxFunction">emit-string-literal-data</span>: <span class="subxComment"># out : (addr stream byte), word : (addr slice)</span> +<span id="L849" class="LineNr"> 849 </span><span class="subxFunction">emit-string-literal-data</span>: <span class="subxComment"># out: (addr stream byte), word: (addr slice)</span> <span id="L850" class="LineNr"> 850 </span> <span class="subxComment"># pseudocode</span> <span id="L851" class="LineNr"> 851 </span> <span class="subxComment"># len = string-length-at-start-of-slice(word->start, word->end)</span> <span id="L852" class="LineNr"> 852 </span> <span class="subxComment"># print(out, "#{len}/imm32 ")</span> @@ -891,14 +891,14 @@ if ('onhashchange' in window) { <span id="L885" class="LineNr"> 885 </span> 56/push-esi <span id="L886" class="LineNr"> 886 </span> <span class="subxComment"># esi = word</span> <span id="L887" class="LineNr"> 887 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 6/r32/esi 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+12) to esi</span> -<span id="L888" class="LineNr"> 888 </span> <span class="subxComment"># var idx/ebx : int = 0</span> +<span id="L888" class="LineNr"> 888 </span> <span class="subxComment"># var idx/ebx: int = 0</span> <span id="L889" class="LineNr"> 889 </span> 31/xor 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear ebx</span> -<span id="L890" class="LineNr"> 890 </span> <span class="subxComment"># var curr/edx : (addr byte) = word->start</span> +<span id="L890" class="LineNr"> 890 </span> <span class="subxComment"># var curr/edx: (addr byte) = word->start</span> <span id="L891" class="LineNr"> 891 </span> 8b/copy 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *esi to edx</span> -<span id="L892" class="LineNr"> 892 </span> <span class="subxComment"># var max/esi : (addr byte) = word->end</span> +<span id="L892" class="LineNr"> 892 </span> <span class="subxComment"># var max/esi: (addr byte) = word->end</span> <span id="L893" class="LineNr"> 893 </span> 8b/copy 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 6/r32/esi 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(esi+4) to esi</span> <span id="L894" class="LineNr"> 894 </span><span class="Constant">$emit-string-literal-data:emit-length</span>: -<span id="L895" class="LineNr"> 895 </span> <span class="subxComment"># var len/eax : int = string-length-at-start-of-slice(word->start, word->end)</span> +<span id="L895" class="LineNr"> 895 </span> <span class="subxComment"># var len/eax: int = string-length-at-start-of-slice(word->start, word->end)</span> <span id="L896" class="LineNr"> 896 </span> <span class="subxS2Comment"># . . push args</span> <span id="L897" class="LineNr"> 897 </span> 56/push-esi <span id="L898" class="LineNr"> 898 </span> 52/push-edx @@ -926,7 +926,7 @@ if ('onhashchange' in window) { <span id="L920" class="LineNr"> 920 </span><span class="Constant">$emit-string-literal-data:loop-init</span>: <span id="L921" class="LineNr"> 921 </span> <span class="subxComment"># ++curr # skip initial '"'</span> <span id="L922" class="LineNr"> 922 </span> 42/increment-edx -<span id="L923" class="LineNr"> 923 </span> <span class="subxComment"># var c/ecx : byte = 0</span> +<span id="L923" class="LineNr"> 923 </span> <span class="subxComment"># var c/ecx: byte = 0</span> <span id="L924" class="LineNr"> 924 </span> 31/xor 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear ecx</span> <span id="L925" class="LineNr"> 925 </span><span class="Constant">$emit-string-literal-data:loop</span>: <span id="L926" class="LineNr"> 926 </span> <span class="subxComment"># if (curr >= max) break</span> @@ -961,7 +961,7 @@ if ('onhashchange' in window) { <span id="L955" class="LineNr"> 955 </span> <span class="subxS2Comment"># . . discard args</span> <span id="L956" class="LineNr"> 956 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span> <span id="L957" class="LineNr"> 957 </span> <span class="subxComment"># if (is-alphanumeric?(*curr)) print(out, "/#{*curr}")</span> -<span id="L958" class="LineNr"> 958 </span> <span class="subxS1Comment"># . var eax : boolean = is-alphanumeric?(CL)</span> +<span id="L958" class="LineNr"> 958 </span> <span class="subxS1Comment"># . var eax: boolean = is-alphanumeric?(CL)</span> <span id="L959" class="LineNr"> 959 </span> <span class="subxS2Comment"># . . push args</span> <span id="L960" class="LineNr"> 960 </span> 51/push-ecx <span id="L961" class="LineNr"> 961 </span> <span class="subxS2Comment"># . . call</span> @@ -1027,7 +1027,7 @@ if ('onhashchange' in window) { <span id="L1021" class="LineNr">1021 </span> 5d/pop-to-ebp <span id="L1022" class="LineNr">1022 </span> c3/return <span id="L1023" class="LineNr">1023 </span> -<span id="L1024" class="LineNr">1024 </span><span class="subxFunction">is-alphanumeric?</span>: <span class="subxComment"># c : int -> eax : boolean</span> +<span id="L1024" class="LineNr">1024 </span><span class="subxFunction">is-alphanumeric?</span>: <span class="subxComment"># c: int -> eax: boolean</span> <span id="L1025" class="LineNr">1025 </span> <span class="subxS1Comment"># . prologue</span> <span id="L1026" class="LineNr">1026 </span> 55/push-ebp <span id="L1027" class="LineNr">1027 </span> 89/copy 3/mod/direct 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ebp</span> @@ -1260,9 +1260,9 @@ if ('onhashchange' in window) { <span id="L1379" class="LineNr">1379 </span> c3/return <span id="L1380" class="LineNr">1380 </span> <span id="L1381" class="LineNr">1381 </span><span class="subxComment"># emit everything from a word except the initial datum</span> -<span id="L1382" class="LineNr">1382 </span><span class="subxFunction">emit-metadata</span>: <span class="subxComment"># out : (addr buffered-file), word : (addr slice)</span> +<span id="L1382" class="LineNr">1382 </span><span class="subxFunction">emit-metadata</span>: <span class="subxComment"># out: (addr buffered-file), word: (addr slice)</span> <span id="L1383" class="LineNr">1383 </span> <span class="subxComment"># pseudocode</span> -<span id="L1384" class="LineNr">1384 </span> <span class="subxComment"># var slice : slice = {0, word->end}</span> +<span id="L1384" class="LineNr">1384 </span> <span class="subxComment"># var slice: slice = {0, word->end}</span> <span id="L1385" class="LineNr">1385 </span> <span class="subxComment"># curr = word->start</span> <span id="L1386" class="LineNr">1386 </span> <span class="subxComment"># if *curr == '"'</span> <span id="L1387" class="LineNr">1387 </span> <span class="subxComment"># curr = skip-string-in-slice(curr, word->end)</span> @@ -1287,11 +1287,11 @@ if ('onhashchange' in window) { <span id="L1406" class="LineNr">1406 </span> 56/push-esi <span id="L1407" class="LineNr">1407 </span> <span class="subxComment"># esi = word</span> <span id="L1408" class="LineNr">1408 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 6/r32/esi 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+12) to esi</span> -<span id="L1409" class="LineNr">1409 </span> <span class="subxComment"># var curr/ecx : (addr byte) = word->start</span> +<span id="L1409" class="LineNr">1409 </span> <span class="subxComment"># var curr/ecx: (addr byte) = word->start</span> <span id="L1410" class="LineNr">1410 </span> 8b/copy 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *esi to ecx</span> -<span id="L1411" class="LineNr">1411 </span> <span class="subxComment"># var end/edx : (addr byte) = word->end</span> +<span id="L1411" class="LineNr">1411 </span> <span class="subxComment"># var end/edx: (addr byte) = word->end</span> <span id="L1412" class="LineNr">1412 </span> 8b/copy 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(esi+4) to edx</span> -<span id="L1413" class="LineNr">1413 </span> <span class="subxComment"># var slice/ebx : slice = {0, end}</span> +<span id="L1413" class="LineNr">1413 </span> <span class="subxComment"># var slice/ebx: slice = {0, end}</span> <span id="L1414" class="LineNr">1414 </span> 52/push-edx <span id="L1415" class="LineNr">1415 </span> 68/push 0/imm32 <span id="L1416" class="LineNr">1416 </span> 89/copy 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ebx</span> @@ -1634,7 +1634,7 @@ if ('onhashchange' in window) { <span id="L1778" class="LineNr">1778 </span> 5d/pop-to-ebp <span id="L1779" class="LineNr">1779 </span> c3/return <span id="L1780" class="LineNr">1780 </span> -<span id="L1781" class="LineNr">1781 </span><span class="subxFunction">string-length-at-start-of-slice</span>: <span class="subxComment"># curr : (addr byte), end : (addr byte) -> length/eax</span> +<span id="L1781" class="LineNr">1781 </span><span class="subxFunction">string-length-at-start-of-slice</span>: <span class="subxComment"># curr: (addr byte), end: (addr byte) -> length/eax</span> <span id="L1782" class="LineNr">1782 </span> <span class="subxS1Comment"># . prologue</span> <span id="L1783" class="LineNr">1783 </span> 55/push-ebp <span id="L1784" class="LineNr">1784 </span> 89/copy 3/mod/direct 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ebp</span> @@ -1646,9 +1646,9 @@ if ('onhashchange' in window) { <span id="L1790" class="LineNr">1790 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+8) to ecx</span> <span id="L1791" class="LineNr">1791 </span> <span class="subxComment"># edx = end</span> <span id="L1792" class="LineNr">1792 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+12) to edx</span> -<span id="L1793" class="LineNr">1793 </span> <span class="subxComment"># var length/eax : int = 0</span> +<span id="L1793" class="LineNr">1793 </span> <span class="subxComment"># var length/eax: int = 0</span> <span id="L1794" class="LineNr">1794 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span> -<span id="L1795" class="LineNr">1795 </span> <span class="subxComment"># var c/ebx : byte = 0</span> +<span id="L1795" class="LineNr">1795 </span> <span class="subxComment"># var c/ebx: byte = 0</span> <span id="L1796" class="LineNr">1796 </span> 31/xor 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear ebx</span> <span id="L1797" class="LineNr">1797 </span> <span class="subxComment"># skip initial dquote</span> <span id="L1798" class="LineNr">1798 </span> 41/increment-ecx |