5 <title>Mu -
124next-token.subx
</title>
6 <meta name=
"Generator" content=
"Vim/8.2">
7 <meta name=
"plugin-version" content=
"vim8.1_v2">
8 <meta name=
"syntax" content=
"none">
9 <meta name=
"settings" content=
"number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
10 <meta name=
"colorscheme" content=
"minimal-light">
13 pre { font-family: monospace; color: #000000; background-color: #ffffd7; }
14 body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
16 * { font-size:12pt; font-size: 1em; }
17 .subxComment { color: #005faf; }
18 .subxS1Comment { color: #0000af; }
19 .subxS2Comment { color: #8a8a8a; }
21 .Constant { color: #008787; }
22 .subxTest { color: #5f8700; }
23 .subxFunction { color: #af5f00; text-decoration: underline; }
24 .Normal { color: #000000; background-color: #ffffd7; padding-bottom: 1px; }
31 /* function to open any folds containing a jumped-to line before jumping to it */
35 lineNum
= window
.location
.hash
;
36 lineNum
= lineNum
.substr(1); /* strip off '#' */
38 if (lineNum
.indexOf('L') == -1) {
39 lineNum
= 'L'+lineNum
;
41 var lineElem
= document
.getElementById(lineNum
);
42 /* Always jump to new location even if the line was hidden inside a fold, or
43 * we corrected the raw number to a line ID.
46 lineElem
.scrollIntoView(true);
50 if ('onhashchange' in window
) {
51 window
.onhashchange
= JumpToLine
;
57 <body onload='JumpToLine();'
>
58 <a href='https://github.com/akkartik/mu/blob/main/
124next-token.subx'
>https://github.com/akkartik/mu/blob/main/
124next-token.subx
</a>
59 <pre id='vimCodeElement'
>
60 <span id=
"L1" class=
"LineNr"> 1 </span><span class=
"subxComment"># Some tokenization primitives.
</span>
61 <span id=
"L2" class=
"LineNr"> 2 </span>
62 <span id=
"L3" class=
"LineNr"> 3 </span>== code
63 <span id=
"L4" class=
"LineNr"> 4 </span><span class=
"subxComment"># instruction effective address register displacement immediate
</span>
64 <span id=
"L5" class=
"LineNr"> 5 </span><span class=
"subxS1Comment"># . op subop mod rm32 base index scale r32
</span>
65 <span id=
"L6" class=
"LineNr"> 6 </span><span class=
"subxS1Comment"># .
1-
3 bytes
3 bits
2 bits
3 bits
3 bits
3 bits
2 bits
2 bits
0/
1/
2/
4 bytes
0/
1/
2/
4 bytes
</span>
66 <span id=
"L7" class=
"LineNr"> 7 </span>
67 <span id=
"L8" class=
"LineNr"> 8 </span><span class=
"subxComment"># extract the next run of characters that are different from a given 'delimiter' (skipping multiple delimiters if necessary)
</span>
68 <span id=
"L9" class=
"LineNr"> 9 </span><span class=
"subxComment"># on reaching end of file, return an empty interval
</span>
69 <span id=
"L10" class=
"LineNr"> 10 </span><span class=
"subxFunction">next-token-from-slice
</span>:
<span class=
"subxComment"># start: (addr byte), end: (addr byte), delimiter: byte, out: (addr slice)
</span>
70 <span id=
"L11" class=
"LineNr"> 11 </span> <span class=
"subxS1Comment"># . prologue
</span>
71 <span id=
"L12" class=
"LineNr"> 12 </span> 55/push-ebp
72 <span id=
"L13" class=
"LineNr"> 13 </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>
73 <span id=
"L14" class=
"LineNr"> 14 </span> <span class=
"subxS1Comment"># . save registers
</span>
74 <span id=
"L15" class=
"LineNr"> 15 </span> 50/push-eax
75 <span id=
"L16" class=
"LineNr"> 16 </span> 51/push-ecx
76 <span id=
"L17" class=
"LineNr"> 17 </span> 52/push-edx
77 <span id=
"L18" class=
"LineNr"> 18 </span> 57/push-edi
78 <span id=
"L19" class=
"LineNr"> 19 </span> <span class=
"subxComment"># ecx = end
</span>
79 <span id=
"L20" class=
"LineNr"> 20 </span> 8b/copy
1/mod/*+disp8
5/rm32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 1/r32/ecx
0xc/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy *(ebp+
12) to ecx
</span>
80 <span id=
"L21" class=
"LineNr"> 21 </span> <span class=
"subxComment"># edx = delimiter
</span>
81 <span id=
"L22" class=
"LineNr"> 22 </span> 8b/copy
1/mod/*+disp8
5/rm32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 2/r32/edx
0x10/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy *(ebp+
16) to edx
</span>
82 <span id=
"L23" class=
"LineNr"> 23 </span> <span class=
"subxComment"># edi = out
</span>
83 <span id=
"L24" class=
"LineNr"> 24 </span> 8b/copy
1/mod/*+disp8
5/rm32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 7/r32/edi
0x14/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy *(ebp+
20) to edi
</span>
84 <span id=
"L25" class=
"LineNr"> 25 </span> <span class=
"subxComment"># eax = skip-chars-matching-in-slice(start, end, delimiter)
</span>
85 <span id=
"L26" class=
"LineNr"> 26 </span> <span class=
"subxS2Comment"># . . push args
</span>
86 <span id=
"L27" class=
"LineNr"> 27 </span> 52/push-edx
87 <span id=
"L28" class=
"LineNr"> 28 </span> 51/push-ecx
88 <span id=
"L29" class=
"LineNr"> 29 </span> ff
6/subop/push
1/mod/*+disp8
5/rm32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 8/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># push *(ebp+
8)
</span>
89 <span id=
"L30" class=
"LineNr"> 30 </span> <span class=
"subxS2Comment"># . . call
</span>
90 <span id=
"L31" class=
"LineNr"> 31 </span> e8/call
<a href='
124next-token.subx.html#L651'
>skip-chars-matching-in-slice
</a>/disp32
91 <span id=
"L32" class=
"LineNr"> 32 </span> <span class=
"subxS2Comment"># . . discard args
</span>
92 <span id=
"L33" class=
"LineNr"> 33 </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>
93 <span id=
"L34" class=
"LineNr"> 34 </span> <span class=
"subxComment"># out-
>start = eax
</span>
94 <span id=
"L35" class=
"LineNr"> 35 </span> 89/copy
0/mod/indirect
7/rm32/edi
<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"># copy eax to *edi
</span>
95 <span id=
"L36" class=
"LineNr"> 36 </span> <span class=
"subxComment"># eax = skip-chars-not-matching-in-slice(eax, end, delimiter)
</span>
96 <span id=
"L37" class=
"LineNr"> 37 </span> <span class=
"subxS2Comment"># . . push args
</span>
97 <span id=
"L38" class=
"LineNr"> 38 </span> 52/push-edx
98 <span id=
"L39" class=
"LineNr"> 39 </span> 51/push-ecx
99 <span id=
"L40" class=
"LineNr"> 40 </span> 50/push-eax
100 <span id=
"L41" class=
"LineNr"> 41 </span> <span class=
"subxS2Comment"># . . call
</span>
101 <span id=
"L42" class=
"LineNr"> 42 </span> e8/call
<a href='
124next-token.subx.html#L820'
>skip-chars-not-matching-in-slice
</a>/disp32
102 <span id=
"L43" class=
"LineNr"> 43 </span> <span class=
"subxS2Comment"># . . discard args
</span>
103 <span id=
"L44" class=
"LineNr"> 44 </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>
104 <span id=
"L45" class=
"LineNr"> 45 </span> <span class=
"subxComment"># out-
>end = eax
</span>
105 <span id=
"L46" class=
"LineNr"> 46 </span> 89/copy
1/mod/*+disp8
7/rm32/edi
<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 eax to *(edi+
4)
</span>
106 <span id=
"L47" class=
"LineNr"> 47 </span> <span class=
"subxS1Comment"># . restore registers
</span>
107 <span id=
"L48" class=
"LineNr"> 48 </span> 5f/pop-to-edi
108 <span id=
"L49" class=
"LineNr"> 49 </span> 5a/pop-to-edx
109 <span id=
"L50" class=
"LineNr"> 50 </span> 59/pop-to-ecx
110 <span id=
"L51" class=
"LineNr"> 51 </span> 58/pop-to-eax
111 <span id=
"L52" class=
"LineNr"> 52 </span> <span class=
"subxS1Comment"># . epilogue
</span>
112 <span id=
"L53" class=
"LineNr"> 53 </span> 89/copy
3/mod/direct
4/rm32/esp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 5/r32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ebp to esp
</span>
113 <span id=
"L54" class=
"LineNr"> 54 </span> 5d/pop-to-ebp
114 <span id=
"L55" class=
"LineNr"> 55 </span> c3/return
115 <span id=
"L56" class=
"LineNr"> 56 </span>
116 <span id=
"L57" class=
"LineNr"> 57 </span><span class=
"subxTest">test-next-token-from-slice
</span>:
117 <span id=
"L58" class=
"LineNr"> 58 </span> <span class=
"subxS1Comment"># . prologue
</span>
118 <span id=
"L59" class=
"LineNr"> 59 </span> 55/push-ebp
119 <span id=
"L60" class=
"LineNr"> 60 </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>
120 <span id=
"L61" class=
"LineNr"> 61 </span> <span class=
"subxComment"># (eax..ecx) =
" ab
"</span>
121 <span id=
"L62" class=
"LineNr"> 62 </span> b8/copy-to-eax
<span class=
"Constant">" ab
"</span>/imm32
122 <span id=
"L63" class=
"LineNr"> 63 </span> 8b/copy
0/mod/indirect
0/rm32/eax
<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 *eax to ecx
</span>
123 <span id=
"L64" class=
"LineNr"> 64 </span> 8d/copy-address
1/mod/*+disp8
4/rm32/sib
0/base/eax
1/index/ecx
<span class=
"Normal"> .
</span> 1/r32/ecx
4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy eax+ecx+
4 to ecx
</span>
124 <span id=
"L65" class=
"LineNr"> 65 </span> 05/add-to-eax
4/imm32
125 <span id=
"L66" class=
"LineNr"> 66 </span> <span class=
"subxComment"># var out/edi: slice
</span>
126 <span id=
"L67" class=
"LineNr"> 67 </span> 68/push
0/imm32/end
127 <span id=
"L68" class=
"LineNr"> 68 </span> 68/push
0/imm32/start
128 <span id=
"L69" class=
"LineNr"> 69 </span> 89/copy
3/mod/direct
7/rm32/edi
<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 edi
</span>
129 <span id=
"L70" class=
"LineNr"> 70 </span> <span class=
"subxComment"># next-token-from-slice(eax, ecx,
0x20/space, out)
</span>
130 <span id=
"L71" class=
"LineNr"> 71 </span> <span class=
"subxS2Comment"># . . push args
</span>
131 <span id=
"L72" class=
"LineNr"> 72 </span> 57/push-edi
132 <span id=
"L73" class=
"LineNr"> 73 </span> 68/push
0x20/imm32
133 <span id=
"L74" class=
"LineNr"> 74 </span> 51/push-ecx
134 <span id=
"L75" class=
"LineNr"> 75 </span> 50/push-eax
135 <span id=
"L76" class=
"LineNr"> 76 </span> <span class=
"subxS2Comment"># . . call
</span>
136 <span id=
"L77" class=
"LineNr"> 77 </span> e8/call
<a href='
124next-token.subx.html#L10'
>next-token-from-slice
</a>/disp32
137 <span id=
"L78" class=
"LineNr"> 78 </span> <span class=
"subxS2Comment"># . . discard args
</span>
138 <span id=
"L79" class=
"LineNr"> 79 </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> 0x10/imm32
<span class=
"subxComment"># add to esp
</span>
139 <span id=
"L80" class=
"LineNr"> 80 </span> <span class=
"subxComment"># out-
>start should be at the 'a'
</span>
140 <span id=
"L81" class=
"LineNr"> 81 </span> <span class=
"subxS1Comment"># . check-ints-equal(out-
>start - in-
>start,
2, msg)
</span>
141 <span id=
"L82" class=
"LineNr"> 82 </span> <span class=
"subxS2Comment"># . . push args
</span>
142 <span id=
"L83" class=
"LineNr"> 83 </span> 68/push
<span class=
"Constant">"F -
<a href='
124next-token.subx.html#L57'
>test-next-token-from-slice
</a>: start
"</span>/imm32
143 <span id=
"L84" class=
"LineNr"> 84 </span> 68/push
2/imm32
144 <span id=
"L85" class=
"LineNr"> 85 </span> <span class=
"subxS2Comment"># . . push out-
>start - in-
>start
</span>
145 <span id=
"L86" class=
"LineNr"> 86 </span> 8b/copy
0/mod/indirect
7/rm32/edi
<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 *edi to ecx
</span>
146 <span id=
"L87" class=
"LineNr"> 87 </span> 2b/subtract
3/mod/direct
0/rm32/eax
<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"># subtract eax from ecx
</span>
147 <span id=
"L88" class=
"LineNr"> 88 </span> 51/push-ecx
148 <span id=
"L89" class=
"LineNr"> 89 </span> <span class=
"subxS2Comment"># . . call
</span>
149 <span id=
"L90" class=
"LineNr"> 90 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
150 <span id=
"L91" class=
"LineNr"> 91 </span> <span class=
"subxS2Comment"># . . discard args
</span>
151 <span id=
"L92" class=
"LineNr"> 92 </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>
152 <span id=
"L93" class=
"LineNr"> 93 </span> <span class=
"subxComment"># out-
>end should be after the 'b'
</span>
153 <span id=
"L94" class=
"LineNr"> 94 </span> <span class=
"subxComment"># check-ints-equal(out-
>end - in-
>start,
4, msg)
</span>
154 <span id=
"L95" class=
"LineNr"> 95 </span> <span class=
"subxS2Comment"># . . push args
</span>
155 <span id=
"L96" class=
"LineNr"> 96 </span> 68/push
<span class=
"Constant">"F -
<a href='
124next-token.subx.html#L57'
>test-next-token-from-slice
</a>: end
"</span>/imm32
156 <span id=
"L97" class=
"LineNr"> 97 </span> 68/push
4/imm32
157 <span id=
"L98" class=
"LineNr"> 98 </span> <span class=
"subxS2Comment"># . . push out-
>end - in-
>start
</span>
158 <span id=
"L99" class=
"LineNr"> 99 </span> 8b/copy
1/mod/*+disp8
7/rm32/edi
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 1/r32/ecx
4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy *(edi+
4) to ecx
</span>
159 <span id=
"L100" class=
"LineNr"> 100 </span> 2b/subtract
3/mod/direct
0/rm32/eax
<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"># subtract eax from ecx
</span>
160 <span id=
"L101" class=
"LineNr"> 101 </span> 51/push-ecx
161 <span id=
"L102" class=
"LineNr"> 102 </span> <span class=
"subxS2Comment"># . . call
</span>
162 <span id=
"L103" class=
"LineNr"> 103 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
163 <span id=
"L104" class=
"LineNr"> 104 </span> <span class=
"subxS2Comment"># . . discard args
</span>
164 <span id=
"L105" class=
"LineNr"> 105 </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>
165 <span id=
"L106" class=
"LineNr"> 106 </span> <span class=
"subxS1Comment"># . epilogue
</span>
166 <span id=
"L107" class=
"LineNr"> 107 </span> 89/copy
3/mod/direct
4/rm32/esp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 5/r32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ebp to esp
</span>
167 <span id=
"L108" class=
"LineNr"> 108 </span> 5d/pop-to-ebp
168 <span id=
"L109" class=
"LineNr"> 109 </span> c3/return
169 <span id=
"L110" class=
"LineNr"> 110 </span>
170 <span id=
"L111" class=
"LineNr"> 111 </span><span class=
"subxTest">test-next-token-from-slice-Eof
</span>:
171 <span id=
"L112" class=
"LineNr"> 112 </span> <span class=
"subxS1Comment"># . prologue
</span>
172 <span id=
"L113" class=
"LineNr"> 113 </span> 55/push-ebp
173 <span id=
"L114" class=
"LineNr"> 114 </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>
174 <span id=
"L115" class=
"LineNr"> 115 </span> <span class=
"subxComment"># var out/edi: slice
</span>
175 <span id=
"L116" class=
"LineNr"> 116 </span> 68/push
0/imm32/end
176 <span id=
"L117" class=
"LineNr"> 117 </span> 68/push
0/imm32/start
177 <span id=
"L118" class=
"LineNr"> 118 </span> 89/copy
3/mod/direct
7/rm32/edi
<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 edi
</span>
178 <span id=
"L119" class=
"LineNr"> 119 </span> <span class=
"subxComment"># next-token-from-slice(
0,
0,
0x20/space, out)
</span>
179 <span id=
"L120" class=
"LineNr"> 120 </span> <span class=
"subxS2Comment"># . . push args
</span>
180 <span id=
"L121" class=
"LineNr"> 121 </span> 57/push-edi
181 <span id=
"L122" class=
"LineNr"> 122 </span> 68/push
0x20/imm32
182 <span id=
"L123" class=
"LineNr"> 123 </span> 68/push
0/imm32
183 <span id=
"L124" class=
"LineNr"> 124 </span> 68/push
0/imm32
184 <span id=
"L125" class=
"LineNr"> 125 </span> <span class=
"subxS2Comment"># . . call
</span>
185 <span id=
"L126" class=
"LineNr"> 126 </span> e8/call
<a href='
124next-token.subx.html#L10'
>next-token-from-slice
</a>/disp32
186 <span id=
"L127" class=
"LineNr"> 127 </span> <span class=
"subxS2Comment"># . . discard args
</span>
187 <span id=
"L128" class=
"LineNr"> 128 </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> 0x10/imm32
<span class=
"subxComment"># add to esp
</span>
188 <span id=
"L129" class=
"LineNr"> 129 </span> <span class=
"subxComment"># out should be empty
</span>
189 <span id=
"L130" class=
"LineNr"> 130 </span> <span class=
"subxS1Comment"># . check-ints-equal(out-
>end - out-
>start,
0, msg)
</span>
190 <span id=
"L131" class=
"LineNr"> 131 </span> <span class=
"subxS2Comment"># . . push args
</span>
191 <span id=
"L132" class=
"LineNr"> 132 </span> 68/push
<span class=
"Constant">"F - test-next-token-from-slice-Eof
"</span>/imm32
192 <span id=
"L133" class=
"LineNr"> 133 </span> 68/push
0/imm32
193 <span id=
"L134" class=
"LineNr"> 134 </span> <span class=
"subxS2Comment"># . . push out-
>start - in-
>start
</span>
194 <span id=
"L135" class=
"LineNr"> 135 </span> 8b/copy
1/mod/*+disp8
7/rm32/edi
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 1/r32/ecx
4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy *(edi+
4) to ecx
</span>
195 <span id=
"L136" class=
"LineNr"> 136 </span> 2b/subtract
0/mod/indirect
7/rm32/edi
<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"># subtract *edi from ecx
</span>
196 <span id=
"L137" class=
"LineNr"> 137 </span> 51/push-ecx
197 <span id=
"L138" class=
"LineNr"> 138 </span> <span class=
"subxS2Comment"># . . call
</span>
198 <span id=
"L139" class=
"LineNr"> 139 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
199 <span id=
"L140" class=
"LineNr"> 140 </span> <span class=
"subxS2Comment"># . . discard args
</span>
200 <span id=
"L141" class=
"LineNr"> 141 </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>
201 <span id=
"L142" class=
"LineNr"> 142 </span> <span class=
"subxS1Comment"># . epilogue
</span>
202 <span id=
"L143" class=
"LineNr"> 143 </span> 89/copy
3/mod/direct
4/rm32/esp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 5/r32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ebp to esp
</span>
203 <span id=
"L144" class=
"LineNr"> 144 </span> 5d/pop-to-ebp
204 <span id=
"L145" class=
"LineNr"> 145 </span> c3/return
205 <span id=
"L146" class=
"LineNr"> 146 </span>
206 <span id=
"L147" class=
"LineNr"> 147 </span><span class=
"subxTest">test-next-token-from-slice-nothing
</span>:
207 <span id=
"L148" class=
"LineNr"> 148 </span> <span class=
"subxS1Comment"># . prologue
</span>
208 <span id=
"L149" class=
"LineNr"> 149 </span> 55/push-ebp
209 <span id=
"L150" class=
"LineNr"> 150 </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>
210 <span id=
"L151" class=
"LineNr"> 151 </span> <span class=
"subxComment"># (eax..ecx) =
" "</span>
211 <span id=
"L152" class=
"LineNr"> 152 </span> b8/copy-to-eax
<span class=
"Constant">" "</span>/imm32
212 <span id=
"L153" class=
"LineNr"> 153 </span> 8b/copy
0/mod/indirect
0/rm32/eax
<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 *eax to ecx
</span>
213 <span id=
"L154" class=
"LineNr"> 154 </span> 8d/copy-address
1/mod/*+disp8
4/rm32/sib
0/base/eax
1/index/ecx
<span class=
"Normal"> .
</span> 1/r32/ecx
4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy eax+ecx+
4 to ecx
</span>
214 <span id=
"L155" class=
"LineNr"> 155 </span> 05/add-to-eax
4/imm32
215 <span id=
"L156" class=
"LineNr"> 156 </span> <span class=
"subxComment"># var out/edi: slice
</span>
216 <span id=
"L157" class=
"LineNr"> 157 </span> 68/push
0/imm32/end
217 <span id=
"L158" class=
"LineNr"> 158 </span> 68/push
0/imm32/start
218 <span id=
"L159" class=
"LineNr"> 159 </span> 89/copy
3/mod/direct
7/rm32/edi
<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 edi
</span>
219 <span id=
"L160" class=
"LineNr"> 160 </span> <span class=
"subxComment"># next-token-from-slice(in,
0x20/space, out)
</span>
220 <span id=
"L161" class=
"LineNr"> 161 </span> <span class=
"subxS2Comment"># . . push args
</span>
221 <span id=
"L162" class=
"LineNr"> 162 </span> 57/push-edi
222 <span id=
"L163" class=
"LineNr"> 163 </span> 68/push
0x20/imm32
223 <span id=
"L164" class=
"LineNr"> 164 </span> 51/push-ecx
224 <span id=
"L165" class=
"LineNr"> 165 </span> 50/push-eax
225 <span id=
"L166" class=
"LineNr"> 166 </span> <span class=
"subxS2Comment"># . . call
</span>
226 <span id=
"L167" class=
"LineNr"> 167 </span> e8/call
<a href='
124next-token.subx.html#L10'
>next-token-from-slice
</a>/disp32
227 <span id=
"L168" class=
"LineNr"> 168 </span> <span class=
"subxS2Comment"># . . discard args
</span>
228 <span id=
"L169" class=
"LineNr"> 169 </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> 0x10/imm32
<span class=
"subxComment"># add to esp
</span>
229 <span id=
"L170" class=
"LineNr"> 170 </span> <span class=
"subxComment"># out should be empty
</span>
230 <span id=
"L171" class=
"LineNr"> 171 </span> <span class=
"subxS1Comment"># . check-ints-equal(out-
>end - out-
>start,
0, msg)
</span>
231 <span id=
"L172" class=
"LineNr"> 172 </span> <span class=
"subxS2Comment"># . . push args
</span>
232 <span id=
"L173" class=
"LineNr"> 173 </span> 68/push
<span class=
"Constant">"F - test-next-token-from-slice-Eof
"</span>/imm32
233 <span id=
"L174" class=
"LineNr"> 174 </span> 68/push
0/imm32
234 <span id=
"L175" class=
"LineNr"> 175 </span> <span class=
"subxS2Comment"># . . push out-
>start - in-
>start
</span>
235 <span id=
"L176" class=
"LineNr"> 176 </span> 8b/copy
1/mod/*+disp8
7/rm32/edi
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 1/r32/ecx
4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy *(edi+
4) to ecx
</span>
236 <span id=
"L177" class=
"LineNr"> 177 </span> 2b/subtract
0/mod/indirect
7/rm32/edi
<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"># subtract *edi from ecx
</span>
237 <span id=
"L178" class=
"LineNr"> 178 </span> 51/push-ecx
238 <span id=
"L179" class=
"LineNr"> 179 </span> <span class=
"subxS2Comment"># . . call
</span>
239 <span id=
"L180" class=
"LineNr"> 180 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
240 <span id=
"L181" class=
"LineNr"> 181 </span> <span class=
"subxS2Comment"># . . discard args
</span>
241 <span id=
"L182" class=
"LineNr"> 182 </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>
242 <span id=
"L183" class=
"LineNr"> 183 </span> <span class=
"subxS1Comment"># . epilogue
</span>
243 <span id=
"L184" class=
"LineNr"> 184 </span> 89/copy
3/mod/direct
4/rm32/esp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 5/r32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ebp to esp
</span>
244 <span id=
"L185" class=
"LineNr"> 185 </span> 5d/pop-to-ebp
245 <span id=
"L186" class=
"LineNr"> 186 </span> c3/return
246 <span id=
"L187" class=
"LineNr"> 187 </span>
247 <span id=
"L188" class=
"LineNr"> 188 </span><span class=
"subxFunction">skip-chars-matching
</span>:
<span class=
"subxComment"># in: (addr stream byte), delimiter: byte
</span>
248 <span id=
"L189" class=
"LineNr"> 189 </span> <span class=
"subxS1Comment"># . prologue
</span>
249 <span id=
"L190" class=
"LineNr"> 190 </span> 55/push-ebp
250 <span id=
"L191" class=
"LineNr"> 191 </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>
251 <span id=
"L192" class=
"LineNr"> 192 </span> <span class=
"subxS1Comment"># . save registers
</span>
252 <span id=
"L193" class=
"LineNr"> 193 </span> 50/push-eax
253 <span id=
"L194" class=
"LineNr"> 194 </span> 51/push-ecx
254 <span id=
"L195" class=
"LineNr"> 195 </span> 52/push-edx
255 <span id=
"L196" class=
"LineNr"> 196 </span> 53/push-ebx
256 <span id=
"L197" class=
"LineNr"> 197 </span> 56/push-esi
257 <span id=
"L198" class=
"LineNr"> 198 </span> <span class=
"subxComment"># esi = in
</span>
258 <span id=
"L199" class=
"LineNr"> 199 </span> 8b/copy
1/mod/*+disp8
5/rm32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 6/r32/esi
8/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy *(ebp+
8) to esi
</span>
259 <span id=
"L200" class=
"LineNr"> 200 </span> <span class=
"subxComment"># ecx = in-
>read
</span>
260 <span id=
"L201" class=
"LineNr"> 201 </span> 8b/copy
1/mod/*+disp8
6/rm32/esi
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 1/r32/ecx
4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy *(esi+
4) to ecx
</span>
261 <span id=
"L202" class=
"LineNr"> 202 </span> <span class=
"subxComment"># ebx = in-
>write
</span>
262 <span id=
"L203" class=
"LineNr"> 203 </span> 8b/copy
0/mod/indirect
6/rm32/esi
<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 *esi to ebx
</span>
263 <span id=
"L204" class=
"LineNr"> 204 </span> <span class=
"subxComment"># edx = delimiter
</span>
264 <span id=
"L205" class=
"LineNr"> 205 </span> 8b/copy
1/mod/*+disp8
5/rm32/ebp
<span class=
"Normal"> .
</span> <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>
265 <span id=
"L206" class=
"LineNr"> 206 </span><span class=
"Constant">$skip-chars-matching:loop
</span>:
266 <span id=
"L207" class=
"LineNr"> 207 </span> <span class=
"subxComment"># if (in-
>read
>= in-
>write) break
</span>
267 <span id=
"L208" class=
"LineNr"> 208 </span> 39/compare
3/mod/direct
1/rm32/ecx
<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"># compare ecx with ebx
</span>
268 <span id=
"L209" class=
"LineNr"> 209 </span> 7d/jump-if-
>= $skip-chars-matching:end/disp8
269 <span id=
"L210" class=
"LineNr"> 210 </span> <span class=
"subxComment"># eax = in-
>data[in-
>read]
</span>
270 <span id=
"L211" class=
"LineNr"> 211 </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>
271 <span id=
"L212" class=
"LineNr"> 212 </span> 8a/copy-byte
1/mod/*+disp8
4/rm32/sib
6/base/esi
1/index/ecx
<span class=
"Normal"> .
</span> 0/r32/AL
0xc/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy byte at *(esi+ecx+
12) to AL
</span>
272 <span id=
"L213" class=
"LineNr"> 213 </span> <span class=
"subxComment"># if (eax != delimiter) break
</span>
273 <span id=
"L214" class=
"LineNr"> 214 </span> 39/compare
3/mod/direct
0/rm32/eax
<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 eax and edx
</span>
274 <span id=
"L215" class=
"LineNr"> 215 </span> 75/jump-if-!= $skip-chars-matching:end/disp8
275 <span id=
"L216" class=
"LineNr"> 216 </span> <span class=
"subxComment"># ++in-
>read
</span>
276 <span id=
"L217" class=
"LineNr"> 217 </span> 41/increment-ecx
277 <span id=
"L218" class=
"LineNr"> 218 </span> eb/jump $skip-chars-matching:
<span class=
"Constant">loop
</span>/disp8
278 <span id=
"L219" class=
"LineNr"> 219 </span><span class=
"Constant">$skip-chars-matching:end
</span>:
279 <span id=
"L220" class=
"LineNr"> 220 </span> <span class=
"subxComment"># persist in-
>read
</span>
280 <span id=
"L221" class=
"LineNr"> 221 </span> 89/copy
1/mod/*+disp8
6/rm32/esi
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 1/r32/ecx
4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ecx to *(esi+
4)
</span>
281 <span id=
"L222" class=
"LineNr"> 222 </span> <span class=
"subxS1Comment"># . restore registers
</span>
282 <span id=
"L223" class=
"LineNr"> 223 </span> 5e/pop-to-esi
283 <span id=
"L224" class=
"LineNr"> 224 </span> 5b/pop-to-ebx
284 <span id=
"L225" class=
"LineNr"> 225 </span> 5a/pop-to-edx
285 <span id=
"L226" class=
"LineNr"> 226 </span> 59/pop-to-ecx
286 <span id=
"L227" class=
"LineNr"> 227 </span> 58/pop-to-eax
287 <span id=
"L228" class=
"LineNr"> 228 </span> <span class=
"subxS1Comment"># . epilogue
</span>
288 <span id=
"L229" class=
"LineNr"> 229 </span> 89/copy
3/mod/direct
4/rm32/esp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 5/r32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ebp to esp
</span>
289 <span id=
"L230" class=
"LineNr"> 230 </span> 5d/pop-to-ebp
290 <span id=
"L231" class=
"LineNr"> 231 </span> c3/return
291 <span id=
"L232" class=
"LineNr"> 232 </span>
292 <span id=
"L233" class=
"LineNr"> 233 </span><span class=
"subxTest">test-skip-chars-matching
</span>:
293 <span id=
"L234" class=
"LineNr"> 234 </span> <span class=
"subxComment"># setup
</span>
294 <span id=
"L235" class=
"LineNr"> 235 </span> <span class=
"subxS1Comment"># . clear-stream(_test-stream)
</span>
295 <span id=
"L236" class=
"LineNr"> 236 </span> <span class=
"subxS2Comment"># . . push args
</span>
296 <span id=
"L237" class=
"LineNr"> 237 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
297 <span id=
"L238" class=
"LineNr"> 238 </span> <span class=
"subxS2Comment"># . . call
</span>
298 <span id=
"L239" class=
"LineNr"> 239 </span> e8/call
<a href='
106stream.subx.html#L20'
>clear-stream
</a>/disp32
299 <span id=
"L240" class=
"LineNr"> 240 </span> <span class=
"subxS2Comment"># . . discard args
</span>
300 <span id=
"L241" class=
"LineNr"> 241 </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>
301 <span id=
"L242" class=
"LineNr"> 242 </span> <span class=
"subxComment"># write(_test-stream,
" ab
")
</span>
302 <span id=
"L243" class=
"LineNr"> 243 </span> <span class=
"subxS2Comment"># . . push args
</span>
303 <span id=
"L244" class=
"LineNr"> 244 </span> 68/push
<span class=
"Constant">" ab
"</span>/imm32
304 <span id=
"L245" class=
"LineNr"> 245 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
305 <span id=
"L246" class=
"LineNr"> 246 </span> <span class=
"subxS2Comment"># . . call
</span>
306 <span id=
"L247" class=
"LineNr"> 247 </span> e8/call
<a href='
108write.subx.html#L11'
>write
</a>/disp32
307 <span id=
"L248" class=
"LineNr"> 248 </span> <span class=
"subxS2Comment"># . . discard args
</span>
308 <span id=
"L249" class=
"LineNr"> 249 </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>
309 <span id=
"L250" class=
"LineNr"> 250 </span> <span class=
"subxComment"># skip-chars-matching(_test-stream,
0x20/space)
</span>
310 <span id=
"L251" class=
"LineNr"> 251 </span> <span class=
"subxS2Comment"># . . push args
</span>
311 <span id=
"L252" class=
"LineNr"> 252 </span> 68/push
0x20/imm32
312 <span id=
"L253" class=
"LineNr"> 253 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
313 <span id=
"L254" class=
"LineNr"> 254 </span> <span class=
"subxS2Comment"># . . call
</span>
314 <span id=
"L255" class=
"LineNr"> 255 </span> e8/call
<a href='
124next-token.subx.html#L188'
>skip-chars-matching
</a>/disp32
315 <span id=
"L256" class=
"LineNr"> 256 </span> <span class=
"subxS2Comment"># . . discard args
</span>
316 <span id=
"L257" class=
"LineNr"> 257 </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>
317 <span id=
"L258" class=
"LineNr"> 258 </span> <span class=
"subxComment"># check-ints-equal(_test-stream-
>read,
2, msg)
</span>
318 <span id=
"L259" class=
"LineNr"> 259 </span> <span class=
"subxS2Comment"># . . push args
</span>
319 <span id=
"L260" class=
"LineNr"> 260 </span> 68/push
<span class=
"Constant">"F - test-skip-chars-matching
"</span>/imm32
320 <span id=
"L261" class=
"LineNr"> 261 </span> 68/push
2/imm32
321 <span id=
"L262" class=
"LineNr"> 262 </span> <span class=
"subxS2Comment"># . . push *_test-stream-
>read
</span>
322 <span id=
"L263" class=
"LineNr"> 263 </span> b8/copy-to-eax
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
323 <span id=
"L264" class=
"LineNr"> 264 </span> ff
6/subop/push
1/mod/*+disp8
0/rm32/eax
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># push *(eax+
4)
</span>
324 <span id=
"L265" class=
"LineNr"> 265 </span> <span class=
"subxS2Comment"># . . call
</span>
325 <span id=
"L266" class=
"LineNr"> 266 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
326 <span id=
"L267" class=
"LineNr"> 267 </span> <span class=
"subxS2Comment"># . . discard args
</span>
327 <span id=
"L268" class=
"LineNr"> 268 </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>
328 <span id=
"L269" class=
"LineNr"> 269 </span> <span class=
"subxComment"># end
</span>
329 <span id=
"L270" class=
"LineNr"> 270 </span> c3/return
330 <span id=
"L271" class=
"LineNr"> 271 </span>
331 <span id=
"L272" class=
"LineNr"> 272 </span><span class=
"subxTest">test-skip-chars-matching-none
</span>:
332 <span id=
"L273" class=
"LineNr"> 273 </span> <span class=
"subxComment"># setup
</span>
333 <span id=
"L274" class=
"LineNr"> 274 </span> <span class=
"subxS1Comment"># . clear-stream(_test-stream)
</span>
334 <span id=
"L275" class=
"LineNr"> 275 </span> <span class=
"subxS2Comment"># . . push args
</span>
335 <span id=
"L276" class=
"LineNr"> 276 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
336 <span id=
"L277" class=
"LineNr"> 277 </span> <span class=
"subxS2Comment"># . . call
</span>
337 <span id=
"L278" class=
"LineNr"> 278 </span> e8/call
<a href='
106stream.subx.html#L20'
>clear-stream
</a>/disp32
338 <span id=
"L279" class=
"LineNr"> 279 </span> <span class=
"subxS2Comment"># . . discard args
</span>
339 <span id=
"L280" class=
"LineNr"> 280 </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>
340 <span id=
"L281" class=
"LineNr"> 281 </span> <span class=
"subxComment"># write(_test-stream,
"ab
")
</span>
341 <span id=
"L282" class=
"LineNr"> 282 </span> <span class=
"subxS2Comment"># . . push args
</span>
342 <span id=
"L283" class=
"LineNr"> 283 </span> 68/push
<span class=
"Constant">"ab
"</span>/imm32
343 <span id=
"L284" class=
"LineNr"> 284 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
344 <span id=
"L285" class=
"LineNr"> 285 </span> <span class=
"subxS2Comment"># . . call
</span>
345 <span id=
"L286" class=
"LineNr"> 286 </span> e8/call
<a href='
108write.subx.html#L11'
>write
</a>/disp32
346 <span id=
"L287" class=
"LineNr"> 287 </span> <span class=
"subxS2Comment"># . . discard args
</span>
347 <span id=
"L288" class=
"LineNr"> 288 </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>
348 <span id=
"L289" class=
"LineNr"> 289 </span> <span class=
"subxComment"># skip-chars-matching(_test-stream,
0x20/space)
</span>
349 <span id=
"L290" class=
"LineNr"> 290 </span> <span class=
"subxS2Comment"># . . push args
</span>
350 <span id=
"L291" class=
"LineNr"> 291 </span> 68/push
0x20/imm32
351 <span id=
"L292" class=
"LineNr"> 292 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
352 <span id=
"L293" class=
"LineNr"> 293 </span> <span class=
"subxS2Comment"># . . call
</span>
353 <span id=
"L294" class=
"LineNr"> 294 </span> e8/call
<a href='
124next-token.subx.html#L188'
>skip-chars-matching
</a>/disp32
354 <span id=
"L295" class=
"LineNr"> 295 </span> <span class=
"subxS2Comment"># . . discard args
</span>
355 <span id=
"L296" class=
"LineNr"> 296 </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>
356 <span id=
"L297" class=
"LineNr"> 297 </span> <span class=
"subxComment"># check-ints-equal(_test-stream-
>read,
0, msg)
</span>
357 <span id=
"L298" class=
"LineNr"> 298 </span> <span class=
"subxS2Comment"># . . push args
</span>
358 <span id=
"L299" class=
"LineNr"> 299 </span> 68/push
<span class=
"Constant">"F - test-skip-chars-matching-none
"</span>/imm32
359 <span id=
"L300" class=
"LineNr"> 300 </span> 68/push
0/imm32
360 <span id=
"L301" class=
"LineNr"> 301 </span> <span class=
"subxS2Comment"># . . push *_test-stream-
>read
</span>
361 <span id=
"L302" class=
"LineNr"> 302 </span> b8/copy-to-eax
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
362 <span id=
"L303" class=
"LineNr"> 303 </span> ff
6/subop/push
1/mod/*+disp8
0/rm32/eax
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># push *(eax+
4)
</span>
363 <span id=
"L304" class=
"LineNr"> 304 </span> <span class=
"subxS2Comment"># . . call
</span>
364 <span id=
"L305" class=
"LineNr"> 305 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
365 <span id=
"L306" class=
"LineNr"> 306 </span> <span class=
"subxS2Comment"># . . discard args
</span>
366 <span id=
"L307" class=
"LineNr"> 307 </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>
367 <span id=
"L308" class=
"LineNr"> 308 </span> <span class=
"subxComment"># end
</span>
368 <span id=
"L309" class=
"LineNr"> 309 </span> c3/return
369 <span id=
"L310" class=
"LineNr"> 310 </span>
370 <span id=
"L311" class=
"LineNr"> 311 </span><span class=
"subxFunction">skip-chars-matching-whitespace
</span>:
<span class=
"subxComment"># in: (addr stream byte)
</span>
371 <span id=
"L312" class=
"LineNr"> 312 </span> <span class=
"subxS1Comment"># . prologue
</span>
372 <span id=
"L313" class=
"LineNr"> 313 </span> 55/push-ebp
373 <span id=
"L314" class=
"LineNr"> 314 </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>
374 <span id=
"L315" class=
"LineNr"> 315 </span> <span class=
"subxS1Comment"># . save registers
</span>
375 <span id=
"L316" class=
"LineNr"> 316 </span> 50/push-eax
376 <span id=
"L317" class=
"LineNr"> 317 </span> 51/push-ecx
377 <span id=
"L318" class=
"LineNr"> 318 </span> 53/push-ebx
378 <span id=
"L319" class=
"LineNr"> 319 </span> 56/push-esi
379 <span id=
"L320" class=
"LineNr"> 320 </span> <span class=
"subxComment"># esi = in
</span>
380 <span id=
"L321" class=
"LineNr"> 321 </span> 8b/copy
1/mod/*+disp8
5/rm32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 6/r32/esi
8/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy *(ebp+
8) to esi
</span>
381 <span id=
"L322" class=
"LineNr"> 322 </span> <span class=
"subxComment"># ecx = in-
>read
</span>
382 <span id=
"L323" class=
"LineNr"> 323 </span> 8b/copy
1/mod/*+disp8
6/rm32/esi
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 1/r32/ecx
4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy *(esi+
4) to ecx
</span>
383 <span id=
"L324" class=
"LineNr"> 324 </span> <span class=
"subxComment"># ebx = in-
>write
</span>
384 <span id=
"L325" class=
"LineNr"> 325 </span> 8b/copy
0/mod/indirect
6/rm32/esi
<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 *esi to ebx
</span>
385 <span id=
"L326" class=
"LineNr"> 326 </span><span class=
"Constant">$skip-chars-matching-whitespace:loop
</span>:
386 <span id=
"L327" class=
"LineNr"> 327 </span> <span class=
"subxComment"># if (in-
>read
>= in-
>write) break
</span>
387 <span id=
"L328" class=
"LineNr"> 328 </span> 39/compare
3/mod/direct
1/rm32/ecx
<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"># compare ecx with ebx
</span>
388 <span id=
"L329" class=
"LineNr"> 329 </span> 7d/jump-if-
>= $skip-chars-matching-whitespace:end/disp8
389 <span id=
"L330" class=
"LineNr"> 330 </span> <span class=
"subxComment"># eax = in-
>data[in-
>read]
</span>
390 <span id=
"L331" class=
"LineNr"> 331 </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>
391 <span id=
"L332" class=
"LineNr"> 332 </span> 8a/copy-byte
1/mod/*+disp8
4/rm32/sib
6/base/esi
1/index/ecx
<span class=
"Normal"> .
</span> 0/r32/AL
0xc/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy byte at *(esi+ecx+
12) to AL
</span>
392 <span id=
"L333" class=
"LineNr"> 333 </span> <span class=
"subxComment"># if (eax == ' ') goto body
</span>
393 <span id=
"L334" class=
"LineNr"> 334 </span> 3d/compare-eax-and
0x20/imm32/space
394 <span id=
"L335" class=
"LineNr"> 335 </span> 74/jump-if-= $skip-chars-matching-whitespace:body/disp8
395 <span id=
"L336" class=
"LineNr"> 336 </span> <span class=
"subxComment"># if (eax == '\n') goto body
</span>
396 <span id=
"L337" class=
"LineNr"> 337 </span> 3d/compare-eax-and
0x0a/imm32/newline
397 <span id=
"L338" class=
"LineNr"> 338 </span> 74/jump-if-= $skip-chars-matching-whitespace:body/disp8
398 <span id=
"L339" class=
"LineNr"> 339 </span> <span class=
"subxComment"># if (eax == '\t') goto body
</span>
399 <span id=
"L340" class=
"LineNr"> 340 </span> 3d/compare-eax-and
0x09/imm32/tab
400 <span id=
"L341" class=
"LineNr"> 341 </span> 74/jump-if-= $skip-chars-matching-whitespace:body/disp8
401 <span id=
"L342" class=
"LineNr"> 342 </span> <span class=
"subxComment"># if (eax != '\r') break
</span>
402 <span id=
"L343" class=
"LineNr"> 343 </span> 3d/compare-eax-and
0x0d/imm32/cr
403 <span id=
"L344" class=
"LineNr"> 344 </span> 75/jump-if-!= $skip-chars-matching-whitespace:end/disp8
404 <span id=
"L345" class=
"LineNr"> 345 </span><span class=
"Constant">$skip-chars-matching-whitespace:body
</span>:
405 <span id=
"L346" class=
"LineNr"> 346 </span> <span class=
"subxComment"># ++in-
>read
</span>
406 <span id=
"L347" class=
"LineNr"> 347 </span> 41/increment-ecx
407 <span id=
"L348" class=
"LineNr"> 348 </span> eb/jump $skip-chars-matching-whitespace:
<span class=
"Constant">loop
</span>/disp8
408 <span id=
"L349" class=
"LineNr"> 349 </span><span class=
"Constant">$skip-chars-matching-whitespace:end
</span>:
409 <span id=
"L350" class=
"LineNr"> 350 </span> <span class=
"subxComment"># persist in-
>read
</span>
410 <span id=
"L351" class=
"LineNr"> 351 </span> 89/copy
1/mod/*+disp8
6/rm32/esi
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 1/r32/ecx
4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ecx to *(esi+
4)
</span>
411 <span id=
"L352" class=
"LineNr"> 352 </span> <span class=
"subxS1Comment"># . restore registers
</span>
412 <span id=
"L353" class=
"LineNr"> 353 </span> 5e/pop-to-esi
413 <span id=
"L354" class=
"LineNr"> 354 </span> 5b/pop-to-ebx
414 <span id=
"L355" class=
"LineNr"> 355 </span> 59/pop-to-ecx
415 <span id=
"L356" class=
"LineNr"> 356 </span> 58/pop-to-eax
416 <span id=
"L357" class=
"LineNr"> 357 </span> <span class=
"subxS1Comment"># . epilogue
</span>
417 <span id=
"L358" class=
"LineNr"> 358 </span> 89/copy
3/mod/direct
4/rm32/esp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 5/r32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ebp to esp
</span>
418 <span id=
"L359" class=
"LineNr"> 359 </span> 5d/pop-to-ebp
419 <span id=
"L360" class=
"LineNr"> 360 </span> c3/return
420 <span id=
"L361" class=
"LineNr"> 361 </span>
421 <span id=
"L362" class=
"LineNr"> 362 </span><span class=
"subxTest">test-skip-chars-matching-whitespace
</span>:
422 <span id=
"L363" class=
"LineNr"> 363 </span> <span class=
"subxComment"># setup
</span>
423 <span id=
"L364" class=
"LineNr"> 364 </span> <span class=
"subxS1Comment"># . clear-stream(_test-stream)
</span>
424 <span id=
"L365" class=
"LineNr"> 365 </span> <span class=
"subxS2Comment"># . . push args
</span>
425 <span id=
"L366" class=
"LineNr"> 366 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
426 <span id=
"L367" class=
"LineNr"> 367 </span> <span class=
"subxS2Comment"># . . call
</span>
427 <span id=
"L368" class=
"LineNr"> 368 </span> e8/call
<a href='
106stream.subx.html#L20'
>clear-stream
</a>/disp32
428 <span id=
"L369" class=
"LineNr"> 369 </span> <span class=
"subxS2Comment"># . . discard args
</span>
429 <span id=
"L370" class=
"LineNr"> 370 </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>
430 <span id=
"L371" class=
"LineNr"> 371 </span> <span class=
"subxComment"># write(_test-stream,
" \nab
")
</span>
431 <span id=
"L372" class=
"LineNr"> 372 </span> <span class=
"subxS2Comment"># . . push args
</span>
432 <span id=
"L373" class=
"LineNr"> 373 </span> 68/push
<span class=
"Constant">" \nab
"</span>/imm32
433 <span id=
"L374" class=
"LineNr"> 374 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
434 <span id=
"L375" class=
"LineNr"> 375 </span> <span class=
"subxS2Comment"># . . call
</span>
435 <span id=
"L376" class=
"LineNr"> 376 </span> e8/call
<a href='
108write.subx.html#L11'
>write
</a>/disp32
436 <span id=
"L377" class=
"LineNr"> 377 </span> <span class=
"subxS2Comment"># . . discard args
</span>
437 <span id=
"L378" class=
"LineNr"> 378 </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>
438 <span id=
"L379" class=
"LineNr"> 379 </span> <span class=
"subxComment"># skip-chars-matching-whitespace(_test-stream)
</span>
439 <span id=
"L380" class=
"LineNr"> 380 </span> <span class=
"subxS2Comment"># . . push args
</span>
440 <span id=
"L381" class=
"LineNr"> 381 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
441 <span id=
"L382" class=
"LineNr"> 382 </span> <span class=
"subxS2Comment"># . . call
</span>
442 <span id=
"L383" class=
"LineNr"> 383 </span> e8/call
<a href='
124next-token.subx.html#L311'
>skip-chars-matching-whitespace
</a>/disp32
443 <span id=
"L384" class=
"LineNr"> 384 </span> <span class=
"subxS2Comment"># . . discard args
</span>
444 <span id=
"L385" class=
"LineNr"> 385 </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>
445 <span id=
"L386" class=
"LineNr"> 386 </span> <span class=
"subxComment"># check-ints-equal(_test-stream-
>read,
2, msg)
</span>
446 <span id=
"L387" class=
"LineNr"> 387 </span> <span class=
"subxS2Comment"># . . push args
</span>
447 <span id=
"L388" class=
"LineNr"> 388 </span> 68/push
<span class=
"Constant">"F - test-skip-chars-matching-whitespace
"</span>/imm32
448 <span id=
"L389" class=
"LineNr"> 389 </span> 68/push
2/imm32
449 <span id=
"L390" class=
"LineNr"> 390 </span> <span class=
"subxS2Comment"># . . push *_test-stream-
>read
</span>
450 <span id=
"L391" class=
"LineNr"> 391 </span> b8/copy-to-eax
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
451 <span id=
"L392" class=
"LineNr"> 392 </span> ff
6/subop/push
1/mod/*+disp8
0/rm32/eax
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># push *(eax+
4)
</span>
452 <span id=
"L393" class=
"LineNr"> 393 </span> <span class=
"subxS2Comment"># . . call
</span>
453 <span id=
"L394" class=
"LineNr"> 394 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
454 <span id=
"L395" class=
"LineNr"> 395 </span> <span class=
"subxS2Comment"># . . discard args
</span>
455 <span id=
"L396" class=
"LineNr"> 396 </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>
456 <span id=
"L397" class=
"LineNr"> 397 </span> <span class=
"subxComment"># end
</span>
457 <span id=
"L398" class=
"LineNr"> 398 </span> c3/return
458 <span id=
"L399" class=
"LineNr"> 399 </span>
459 <span id=
"L400" class=
"LineNr"> 400 </span><span class=
"subxComment"># minor fork of 'skip-chars-matching'
</span>
460 <span id=
"L401" class=
"LineNr"> 401 </span><span class=
"subxFunction">skip-chars-not-matching
</span>:
<span class=
"subxComment"># in: (addr stream byte), delimiter: byte
</span>
461 <span id=
"L402" class=
"LineNr"> 402 </span> <span class=
"subxS1Comment"># . prologue
</span>
462 <span id=
"L403" class=
"LineNr"> 403 </span> 55/push-ebp
463 <span id=
"L404" class=
"LineNr"> 404 </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>
464 <span id=
"L405" class=
"LineNr"> 405 </span> <span class=
"subxS1Comment"># . save registers
</span>
465 <span id=
"L406" class=
"LineNr"> 406 </span> 50/push-eax
466 <span id=
"L407" class=
"LineNr"> 407 </span> 51/push-ecx
467 <span id=
"L408" class=
"LineNr"> 408 </span> 52/push-edx
468 <span id=
"L409" class=
"LineNr"> 409 </span> 53/push-ebx
469 <span id=
"L410" class=
"LineNr"> 410 </span> 56/push-esi
470 <span id=
"L411" class=
"LineNr"> 411 </span> <span class=
"subxComment"># esi = in
</span>
471 <span id=
"L412" class=
"LineNr"> 412 </span> 8b/copy
1/mod/*+disp8
5/rm32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 6/r32/esi
8/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy *(ebp+
8) to esi
</span>
472 <span id=
"L413" class=
"LineNr"> 413 </span> <span class=
"subxComment"># ecx = in-
>read
</span>
473 <span id=
"L414" class=
"LineNr"> 414 </span> 8b/copy
1/mod/*+disp8
6/rm32/esi
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 1/r32/ecx
4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy *(esi+
4) to ecx
</span>
474 <span id=
"L415" class=
"LineNr"> 415 </span> <span class=
"subxComment"># ebx = in-
>write
</span>
475 <span id=
"L416" class=
"LineNr"> 416 </span> 8b/copy
0/mod/indirect
6/rm32/esi
<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 *esi to ebx
</span>
476 <span id=
"L417" class=
"LineNr"> 417 </span> <span class=
"subxComment"># edx = delimiter
</span>
477 <span id=
"L418" class=
"LineNr"> 418 </span> 8b/copy
1/mod/*+disp8
5/rm32/ebp
<span class=
"Normal"> .
</span> <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>
478 <span id=
"L419" class=
"LineNr"> 419 </span><span class=
"Constant">$skip-chars-not-matching:loop
</span>:
479 <span id=
"L420" class=
"LineNr"> 420 </span> <span class=
"subxComment"># if (in-
>read
>= in-
>write) break
</span>
480 <span id=
"L421" class=
"LineNr"> 421 </span> 39/compare
3/mod/direct
1/rm32/ecx
<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"># compare ecx with ebx
</span>
481 <span id=
"L422" class=
"LineNr"> 422 </span> 7d/jump-if-
>= $skip-chars-not-matching:end/disp8
482 <span id=
"L423" class=
"LineNr"> 423 </span> <span class=
"subxComment"># eax = in-
>data[in-
>read]
</span>
483 <span id=
"L424" class=
"LineNr"> 424 </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>
484 <span id=
"L425" class=
"LineNr"> 425 </span> 8a/copy-byte
1/mod/*+disp8
4/rm32/sib
6/base/esi
1/index/ecx
<span class=
"Normal"> .
</span> 0/r32/AL
0xc/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy byte at *(esi+ecx+
12) to AL
</span>
485 <span id=
"L426" class=
"LineNr"> 426 </span> <span class=
"subxComment"># if (eax == delimiter) break
</span>
486 <span id=
"L427" class=
"LineNr"> 427 </span> 39/compare
3/mod/direct
0/rm32/eax
<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 eax and edx
</span>
487 <span id=
"L428" class=
"LineNr"> 428 </span> 74/jump-if-= $skip-chars-not-matching:end/disp8
488 <span id=
"L429" class=
"LineNr"> 429 </span> <span class=
"subxComment"># ++in-
>read
</span>
489 <span id=
"L430" class=
"LineNr"> 430 </span> 41/increment-ecx
490 <span id=
"L431" class=
"LineNr"> 431 </span> eb/jump $skip-chars-not-matching:
<span class=
"Constant">loop
</span>/disp8
491 <span id=
"L432" class=
"LineNr"> 432 </span><span class=
"Constant">$skip-chars-not-matching:end
</span>:
492 <span id=
"L433" class=
"LineNr"> 433 </span> <span class=
"subxComment"># persist in-
>read
</span>
493 <span id=
"L434" class=
"LineNr"> 434 </span> 89/copy
1/mod/*+disp8
6/rm32/esi
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 1/r32/ecx
4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ecx to *(esi+
4)
</span>
494 <span id=
"L435" class=
"LineNr"> 435 </span> <span class=
"subxS1Comment"># . restore registers
</span>
495 <span id=
"L436" class=
"LineNr"> 436 </span> 5e/pop-to-esi
496 <span id=
"L437" class=
"LineNr"> 437 </span> 5b/pop-to-ebx
497 <span id=
"L438" class=
"LineNr"> 438 </span> 5a/pop-to-edx
498 <span id=
"L439" class=
"LineNr"> 439 </span> 59/pop-to-ecx
499 <span id=
"L440" class=
"LineNr"> 440 </span> 58/pop-to-eax
500 <span id=
"L441" class=
"LineNr"> 441 </span> <span class=
"subxS1Comment"># . epilogue
</span>
501 <span id=
"L442" class=
"LineNr"> 442 </span> 89/copy
3/mod/direct
4/rm32/esp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 5/r32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ebp to esp
</span>
502 <span id=
"L443" class=
"LineNr"> 443 </span> 5d/pop-to-ebp
503 <span id=
"L444" class=
"LineNr"> 444 </span> c3/return
504 <span id=
"L445" class=
"LineNr"> 445 </span>
505 <span id=
"L446" class=
"LineNr"> 446 </span><span class=
"subxTest">test-skip-chars-not-matching
</span>:
506 <span id=
"L447" class=
"LineNr"> 447 </span> <span class=
"subxComment"># setup
</span>
507 <span id=
"L448" class=
"LineNr"> 448 </span> <span class=
"subxS1Comment"># . clear-stream(_test-stream)
</span>
508 <span id=
"L449" class=
"LineNr"> 449 </span> <span class=
"subxS2Comment"># . . push args
</span>
509 <span id=
"L450" class=
"LineNr"> 450 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
510 <span id=
"L451" class=
"LineNr"> 451 </span> <span class=
"subxS2Comment"># . . call
</span>
511 <span id=
"L452" class=
"LineNr"> 452 </span> e8/call
<a href='
106stream.subx.html#L20'
>clear-stream
</a>/disp32
512 <span id=
"L453" class=
"LineNr"> 453 </span> <span class=
"subxS2Comment"># . . discard args
</span>
513 <span id=
"L454" class=
"LineNr"> 454 </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>
514 <span id=
"L455" class=
"LineNr"> 455 </span> <span class=
"subxComment"># write(_test-stream,
"ab
")
</span>
515 <span id=
"L456" class=
"LineNr"> 456 </span> <span class=
"subxS2Comment"># . . push args
</span>
516 <span id=
"L457" class=
"LineNr"> 457 </span> 68/push
<span class=
"Constant">"ab
"</span>/imm32
517 <span id=
"L458" class=
"LineNr"> 458 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
518 <span id=
"L459" class=
"LineNr"> 459 </span> <span class=
"subxS2Comment"># . . call
</span>
519 <span id=
"L460" class=
"LineNr"> 460 </span> e8/call
<a href='
108write.subx.html#L11'
>write
</a>/disp32
520 <span id=
"L461" class=
"LineNr"> 461 </span> <span class=
"subxS2Comment"># . . discard args
</span>
521 <span id=
"L462" class=
"LineNr"> 462 </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>
522 <span id=
"L463" class=
"LineNr"> 463 </span> <span class=
"subxComment"># skip-chars-not-matching(_test-stream,
0x20/space)
</span>
523 <span id=
"L464" class=
"LineNr"> 464 </span> <span class=
"subxS2Comment"># . . push args
</span>
524 <span id=
"L465" class=
"LineNr"> 465 </span> 68/push
0x20/imm32
525 <span id=
"L466" class=
"LineNr"> 466 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
526 <span id=
"L467" class=
"LineNr"> 467 </span> <span class=
"subxS2Comment"># . . call
</span>
527 <span id=
"L468" class=
"LineNr"> 468 </span> e8/call
<a href='
124next-token.subx.html#L401'
>skip-chars-not-matching
</a>/disp32
528 <span id=
"L469" class=
"LineNr"> 469 </span> <span class=
"subxS2Comment"># . . discard args
</span>
529 <span id=
"L470" class=
"LineNr"> 470 </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>
530 <span id=
"L471" class=
"LineNr"> 471 </span> <span class=
"subxComment"># check-ints-equal(_test-stream-
>read,
2, msg)
</span>
531 <span id=
"L472" class=
"LineNr"> 472 </span> <span class=
"subxS2Comment"># . . push args
</span>
532 <span id=
"L473" class=
"LineNr"> 473 </span> 68/push
<span class=
"Constant">"F - test-skip-chars-not-matching
"</span>/imm32
533 <span id=
"L474" class=
"LineNr"> 474 </span> 68/push
2/imm32
534 <span id=
"L475" class=
"LineNr"> 475 </span> <span class=
"subxS2Comment"># . . push *_test-stream-
>read
</span>
535 <span id=
"L476" class=
"LineNr"> 476 </span> b8/copy-to-eax
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
536 <span id=
"L477" class=
"LineNr"> 477 </span> ff
6/subop/push
1/mod/*+disp8
0/rm32/eax
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># push *(eax+
4)
</span>
537 <span id=
"L478" class=
"LineNr"> 478 </span> <span class=
"subxS2Comment"># . . call
</span>
538 <span id=
"L479" class=
"LineNr"> 479 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
539 <span id=
"L480" class=
"LineNr"> 480 </span> <span class=
"subxS2Comment"># . . discard args
</span>
540 <span id=
"L481" class=
"LineNr"> 481 </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>
541 <span id=
"L482" class=
"LineNr"> 482 </span> <span class=
"subxComment"># end
</span>
542 <span id=
"L483" class=
"LineNr"> 483 </span> c3/return
543 <span id=
"L484" class=
"LineNr"> 484 </span>
544 <span id=
"L485" class=
"LineNr"> 485 </span><span class=
"subxTest">test-skip-chars-not-matching-none
</span>:
545 <span id=
"L486" class=
"LineNr"> 486 </span> <span class=
"subxComment"># setup
</span>
546 <span id=
"L487" class=
"LineNr"> 487 </span> <span class=
"subxS1Comment"># . clear-stream(_test-stream)
</span>
547 <span id=
"L488" class=
"LineNr"> 488 </span> <span class=
"subxS2Comment"># . . push args
</span>
548 <span id=
"L489" class=
"LineNr"> 489 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
549 <span id=
"L490" class=
"LineNr"> 490 </span> <span class=
"subxS2Comment"># . . call
</span>
550 <span id=
"L491" class=
"LineNr"> 491 </span> e8/call
<a href='
106stream.subx.html#L20'
>clear-stream
</a>/disp32
551 <span id=
"L492" class=
"LineNr"> 492 </span> <span class=
"subxS2Comment"># . . discard args
</span>
552 <span id=
"L493" class=
"LineNr"> 493 </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>
553 <span id=
"L494" class=
"LineNr"> 494 </span> <span class=
"subxComment"># write(_test-stream,
" ab
")
</span>
554 <span id=
"L495" class=
"LineNr"> 495 </span> <span class=
"subxS2Comment"># . . push args
</span>
555 <span id=
"L496" class=
"LineNr"> 496 </span> 68/push
<span class=
"Constant">" ab
"</span>/imm32
556 <span id=
"L497" class=
"LineNr"> 497 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
557 <span id=
"L498" class=
"LineNr"> 498 </span> <span class=
"subxS2Comment"># . . call
</span>
558 <span id=
"L499" class=
"LineNr"> 499 </span> e8/call
<a href='
108write.subx.html#L11'
>write
</a>/disp32
559 <span id=
"L500" class=
"LineNr"> 500 </span> <span class=
"subxS2Comment"># . . discard args
</span>
560 <span id=
"L501" class=
"LineNr"> 501 </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>
561 <span id=
"L502" class=
"LineNr"> 502 </span> <span class=
"subxComment"># skip-chars-not-matching(_test-stream,
0x20/space)
</span>
562 <span id=
"L503" class=
"LineNr"> 503 </span> <span class=
"subxS2Comment"># . . push args
</span>
563 <span id=
"L504" class=
"LineNr"> 504 </span> 68/push
0x20/imm32
564 <span id=
"L505" class=
"LineNr"> 505 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
565 <span id=
"L506" class=
"LineNr"> 506 </span> <span class=
"subxS2Comment"># . . call
</span>
566 <span id=
"L507" class=
"LineNr"> 507 </span> e8/call
<a href='
124next-token.subx.html#L401'
>skip-chars-not-matching
</a>/disp32
567 <span id=
"L508" class=
"LineNr"> 508 </span> <span class=
"subxS2Comment"># . . discard args
</span>
568 <span id=
"L509" class=
"LineNr"> 509 </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>
569 <span id=
"L510" class=
"LineNr"> 510 </span> <span class=
"subxComment"># check-ints-equal(_test-stream-
>read,
0, msg)
</span>
570 <span id=
"L511" class=
"LineNr"> 511 </span> <span class=
"subxS2Comment"># . . push args
</span>
571 <span id=
"L512" class=
"LineNr"> 512 </span> 68/push
<span class=
"Constant">"F - test-skip-chars-not-matching-none
"</span>/imm32
572 <span id=
"L513" class=
"LineNr"> 513 </span> 68/push
0/imm32
573 <span id=
"L514" class=
"LineNr"> 514 </span> <span class=
"subxS2Comment"># . . push *_test-stream-
>read
</span>
574 <span id=
"L515" class=
"LineNr"> 515 </span> b8/copy-to-eax
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
575 <span id=
"L516" class=
"LineNr"> 516 </span> ff
6/subop/push
1/mod/*+disp8
0/rm32/eax
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># push *(eax+
4)
</span>
576 <span id=
"L517" class=
"LineNr"> 517 </span> <span class=
"subxS2Comment"># . . call
</span>
577 <span id=
"L518" class=
"LineNr"> 518 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
578 <span id=
"L519" class=
"LineNr"> 519 </span> <span class=
"subxS2Comment"># . . discard args
</span>
579 <span id=
"L520" class=
"LineNr"> 520 </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>
580 <span id=
"L521" class=
"LineNr"> 521 </span> <span class=
"subxComment"># end
</span>
581 <span id=
"L522" class=
"LineNr"> 522 </span> c3/return
582 <span id=
"L523" class=
"LineNr"> 523 </span>
583 <span id=
"L524" class=
"LineNr"> 524 </span><span class=
"subxTest">test-skip-chars-not-matching-all
</span>:
584 <span id=
"L525" class=
"LineNr"> 525 </span> <span class=
"subxComment"># setup
</span>
585 <span id=
"L526" class=
"LineNr"> 526 </span> <span class=
"subxS1Comment"># . clear-stream(_test-stream)
</span>
586 <span id=
"L527" class=
"LineNr"> 527 </span> <span class=
"subxS2Comment"># . . push args
</span>
587 <span id=
"L528" class=
"LineNr"> 528 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
588 <span id=
"L529" class=
"LineNr"> 529 </span> <span class=
"subxS2Comment"># . . call
</span>
589 <span id=
"L530" class=
"LineNr"> 530 </span> e8/call
<a href='
106stream.subx.html#L20'
>clear-stream
</a>/disp32
590 <span id=
"L531" class=
"LineNr"> 531 </span> <span class=
"subxS2Comment"># . . discard args
</span>
591 <span id=
"L532" class=
"LineNr"> 532 </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>
592 <span id=
"L533" class=
"LineNr"> 533 </span> <span class=
"subxComment"># write(_test-stream,
"ab
")
</span>
593 <span id=
"L534" class=
"LineNr"> 534 </span> <span class=
"subxS2Comment"># . . push args
</span>
594 <span id=
"L535" class=
"LineNr"> 535 </span> 68/push
<span class=
"Constant">"ab
"</span>/imm32
595 <span id=
"L536" class=
"LineNr"> 536 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
596 <span id=
"L537" class=
"LineNr"> 537 </span> <span class=
"subxS2Comment"># . . call
</span>
597 <span id=
"L538" class=
"LineNr"> 538 </span> e8/call
<a href='
108write.subx.html#L11'
>write
</a>/disp32
598 <span id=
"L539" class=
"LineNr"> 539 </span> <span class=
"subxS2Comment"># . . discard args
</span>
599 <span id=
"L540" class=
"LineNr"> 540 </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>
600 <span id=
"L541" class=
"LineNr"> 541 </span> <span class=
"subxComment"># skip-chars-not-matching(_test-stream,
0x20/space)
</span>
601 <span id=
"L542" class=
"LineNr"> 542 </span> <span class=
"subxS2Comment"># . . push args
</span>
602 <span id=
"L543" class=
"LineNr"> 543 </span> 68/push
0x20/imm32
603 <span id=
"L544" class=
"LineNr"> 544 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
604 <span id=
"L545" class=
"LineNr"> 545 </span> <span class=
"subxS2Comment"># . . call
</span>
605 <span id=
"L546" class=
"LineNr"> 546 </span> e8/call
<a href='
124next-token.subx.html#L401'
>skip-chars-not-matching
</a>/disp32
606 <span id=
"L547" class=
"LineNr"> 547 </span> <span class=
"subxS2Comment"># . . discard args
</span>
607 <span id=
"L548" class=
"LineNr"> 548 </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>
608 <span id=
"L549" class=
"LineNr"> 549 </span> <span class=
"subxComment"># check-ints-equal(_test-stream-
>read,
2, msg)
</span>
609 <span id=
"L550" class=
"LineNr"> 550 </span> <span class=
"subxS2Comment"># . . push args
</span>
610 <span id=
"L551" class=
"LineNr"> 551 </span> 68/push
<span class=
"Constant">"F - test-skip-chars-not-matching-all
"</span>/imm32
611 <span id=
"L552" class=
"LineNr"> 552 </span> 68/push
2/imm32
612 <span id=
"L553" class=
"LineNr"> 553 </span> <span class=
"subxS2Comment"># . . push *_test-stream-
>read
</span>
613 <span id=
"L554" class=
"LineNr"> 554 </span> b8/copy-to-eax
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
614 <span id=
"L555" class=
"LineNr"> 555 </span> ff
6/subop/push
1/mod/*+disp8
0/rm32/eax
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># push *(eax+
4)
</span>
615 <span id=
"L556" class=
"LineNr"> 556 </span> <span class=
"subxS2Comment"># . . call
</span>
616 <span id=
"L557" class=
"LineNr"> 557 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
617 <span id=
"L558" class=
"LineNr"> 558 </span> <span class=
"subxS2Comment"># . . discard args
</span>
618 <span id=
"L559" class=
"LineNr"> 559 </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>
619 <span id=
"L560" class=
"LineNr"> 560 </span> <span class=
"subxComment"># end
</span>
620 <span id=
"L561" class=
"LineNr"> 561 </span> c3/return
621 <span id=
"L562" class=
"LineNr"> 562 </span>
622 <span id=
"L563" class=
"LineNr"> 563 </span><span class=
"subxFunction">skip-chars-not-matching-whitespace
</span>:
<span class=
"subxComment"># in: (addr stream byte)
</span>
623 <span id=
"L564" class=
"LineNr"> 564 </span> <span class=
"subxS1Comment"># . prologue
</span>
624 <span id=
"L565" class=
"LineNr"> 565 </span> 55/push-ebp
625 <span id=
"L566" class=
"LineNr"> 566 </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>
626 <span id=
"L567" class=
"LineNr"> 567 </span> <span class=
"subxS1Comment"># . save registers
</span>
627 <span id=
"L568" class=
"LineNr"> 568 </span> 50/push-eax
628 <span id=
"L569" class=
"LineNr"> 569 </span> 51/push-ecx
629 <span id=
"L570" class=
"LineNr"> 570 </span> 53/push-ebx
630 <span id=
"L571" class=
"LineNr"> 571 </span> 56/push-esi
631 <span id=
"L572" class=
"LineNr"> 572 </span> <span class=
"subxComment"># esi = in
</span>
632 <span id=
"L573" class=
"LineNr"> 573 </span> 8b/copy
1/mod/*+disp8
5/rm32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 6/r32/esi
8/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy *(ebp+
8) to esi
</span>
633 <span id=
"L574" class=
"LineNr"> 574 </span> <span class=
"subxComment"># ecx = in-
>read
</span>
634 <span id=
"L575" class=
"LineNr"> 575 </span> 8b/copy
1/mod/*+disp8
6/rm32/esi
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 1/r32/ecx
4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy *(esi+
4) to ecx
</span>
635 <span id=
"L576" class=
"LineNr"> 576 </span> <span class=
"subxComment"># ebx = in-
>write
</span>
636 <span id=
"L577" class=
"LineNr"> 577 </span> 8b/copy
0/mod/indirect
6/rm32/esi
<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 *esi to ebx
</span>
637 <span id=
"L578" class=
"LineNr"> 578 </span><span class=
"Constant">$skip-chars-not-matching-whitespace:loop
</span>:
638 <span id=
"L579" class=
"LineNr"> 579 </span> <span class=
"subxComment"># if (in-
>read
>= in-
>write) break
</span>
639 <span id=
"L580" class=
"LineNr"> 580 </span> 39/compare
3/mod/direct
1/rm32/ecx
<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"># compare ecx with ebx
</span>
640 <span id=
"L581" class=
"LineNr"> 581 </span> 7d/jump-if-
>= $skip-chars-not-matching-whitespace:end/disp8
641 <span id=
"L582" class=
"LineNr"> 582 </span> <span class=
"subxComment"># eax = in-
>data[in-
>read]
</span>
642 <span id=
"L583" class=
"LineNr"> 583 </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>
643 <span id=
"L584" class=
"LineNr"> 584 </span> 8a/copy-byte
1/mod/*+disp8
4/rm32/sib
6/base/esi
1/index/ecx
<span class=
"Normal"> .
</span> 0/r32/AL
0xc/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy byte at *(esi+ecx+
12) to AL
</span>
644 <span id=
"L585" class=
"LineNr"> 585 </span> <span class=
"subxComment"># if (eax == ' ') break
</span>
645 <span id=
"L586" class=
"LineNr"> 586 </span> 3d/compare-eax-and
0x20/imm32/space
646 <span id=
"L587" class=
"LineNr"> 587 </span> 74/jump-if-= $skip-chars-not-matching-whitespace:end/disp8
647 <span id=
"L588" class=
"LineNr"> 588 </span> <span class=
"subxComment"># if (eax == '\n') break
</span>
648 <span id=
"L589" class=
"LineNr"> 589 </span> 3d/compare-eax-and
0x0a/imm32/newline
649 <span id=
"L590" class=
"LineNr"> 590 </span> 74/jump-if-= $skip-chars-not-matching-whitespace:end/disp8
650 <span id=
"L591" class=
"LineNr"> 591 </span> <span class=
"subxComment"># if (eax == '\t') break
</span>
651 <span id=
"L592" class=
"LineNr"> 592 </span> 3d/compare-eax-and
0x09/imm32/tab
652 <span id=
"L593" class=
"LineNr"> 593 </span> 74/jump-if-= $skip-chars-not-matching-whitespace:end/disp8
653 <span id=
"L594" class=
"LineNr"> 594 </span> <span class=
"subxComment"># if (eax == '\r') break
</span>
654 <span id=
"L595" class=
"LineNr"> 595 </span> 3d/compare-eax-and
0x0d/imm32/cr
655 <span id=
"L596" class=
"LineNr"> 596 </span> 74/jump-if-= $skip-chars-not-matching-whitespace:end/disp8
656 <span id=
"L597" class=
"LineNr"> 597 </span> <span class=
"subxComment"># ++in-
>read
</span>
657 <span id=
"L598" class=
"LineNr"> 598 </span> 41/increment-ecx
658 <span id=
"L599" class=
"LineNr"> 599 </span> eb/jump $skip-chars-not-matching-whitespace:
<span class=
"Constant">loop
</span>/disp8
659 <span id=
"L600" class=
"LineNr"> 600 </span><span class=
"Constant">$skip-chars-not-matching-whitespace:end
</span>:
660 <span id=
"L601" class=
"LineNr"> 601 </span> <span class=
"subxComment"># persist in-
>read
</span>
661 <span id=
"L602" class=
"LineNr"> 602 </span> 89/copy
1/mod/*+disp8
6/rm32/esi
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 1/r32/ecx
4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ecx to *(esi+
4)
</span>
662 <span id=
"L603" class=
"LineNr"> 603 </span> <span class=
"subxS1Comment"># . restore registers
</span>
663 <span id=
"L604" class=
"LineNr"> 604 </span> 5e/pop-to-esi
664 <span id=
"L605" class=
"LineNr"> 605 </span> 5b/pop-to-ebx
665 <span id=
"L606" class=
"LineNr"> 606 </span> 59/pop-to-ecx
666 <span id=
"L607" class=
"LineNr"> 607 </span> 58/pop-to-eax
667 <span id=
"L608" class=
"LineNr"> 608 </span> <span class=
"subxS1Comment"># . epilogue
</span>
668 <span id=
"L609" class=
"LineNr"> 609 </span> 89/copy
3/mod/direct
4/rm32/esp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 5/r32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ebp to esp
</span>
669 <span id=
"L610" class=
"LineNr"> 610 </span> 5d/pop-to-ebp
670 <span id=
"L611" class=
"LineNr"> 611 </span> c3/return
671 <span id=
"L612" class=
"LineNr"> 612 </span>
672 <span id=
"L613" class=
"LineNr"> 613 </span><span class=
"subxTest">test-skip-chars-not-matching-whitespace
</span>:
673 <span id=
"L614" class=
"LineNr"> 614 </span> <span class=
"subxComment"># setup
</span>
674 <span id=
"L615" class=
"LineNr"> 615 </span> <span class=
"subxS1Comment"># . clear-stream(_test-stream)
</span>
675 <span id=
"L616" class=
"LineNr"> 616 </span> <span class=
"subxS2Comment"># . . push args
</span>
676 <span id=
"L617" class=
"LineNr"> 617 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
677 <span id=
"L618" class=
"LineNr"> 618 </span> <span class=
"subxS2Comment"># . . call
</span>
678 <span id=
"L619" class=
"LineNr"> 619 </span> e8/call
<a href='
106stream.subx.html#L20'
>clear-stream
</a>/disp32
679 <span id=
"L620" class=
"LineNr"> 620 </span> <span class=
"subxS2Comment"># . . discard args
</span>
680 <span id=
"L621" class=
"LineNr"> 621 </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>
681 <span id=
"L622" class=
"LineNr"> 622 </span> <span class=
"subxComment"># write(_test-stream,
"ab\n
")
</span>
682 <span id=
"L623" class=
"LineNr"> 623 </span> <span class=
"subxS2Comment"># . . push args
</span>
683 <span id=
"L624" class=
"LineNr"> 624 </span> 68/push
<span class=
"Constant">"ab\n
"</span>/imm32
684 <span id=
"L625" class=
"LineNr"> 625 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
685 <span id=
"L626" class=
"LineNr"> 626 </span> <span class=
"subxS2Comment"># . . call
</span>
686 <span id=
"L627" class=
"LineNr"> 627 </span> e8/call
<a href='
108write.subx.html#L11'
>write
</a>/disp32
687 <span id=
"L628" class=
"LineNr"> 628 </span> <span class=
"subxS2Comment"># . . discard args
</span>
688 <span id=
"L629" class=
"LineNr"> 629 </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>
689 <span id=
"L630" class=
"LineNr"> 630 </span> <span class=
"subxComment"># skip-chars-not-matching-whitespace(_test-stream)
</span>
690 <span id=
"L631" class=
"LineNr"> 631 </span> <span class=
"subxS2Comment"># . . push args
</span>
691 <span id=
"L632" class=
"LineNr"> 632 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
692 <span id=
"L633" class=
"LineNr"> 633 </span> <span class=
"subxS2Comment"># . . call
</span>
693 <span id=
"L634" class=
"LineNr"> 634 </span> e8/call
<a href='
124next-token.subx.html#L563'
>skip-chars-not-matching-whitespace
</a>/disp32
694 <span id=
"L635" class=
"LineNr"> 635 </span> <span class=
"subxS2Comment"># . . discard args
</span>
695 <span id=
"L636" class=
"LineNr"> 636 </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>
696 <span id=
"L637" class=
"LineNr"> 637 </span> <span class=
"subxComment"># check-ints-equal(_test-stream-
>read,
2, msg)
</span>
697 <span id=
"L638" class=
"LineNr"> 638 </span> <span class=
"subxS2Comment"># . . push args
</span>
698 <span id=
"L639" class=
"LineNr"> 639 </span> 68/push
<span class=
"Constant">"F - test-skip-chars-not-matching-whitespace
"</span>/imm32
699 <span id=
"L640" class=
"LineNr"> 640 </span> 68/push
2/imm32
700 <span id=
"L641" class=
"LineNr"> 641 </span> <span class=
"subxS2Comment"># . . push *_test-stream-
>read
</span>
701 <span id=
"L642" class=
"LineNr"> 642 </span> b8/copy-to-eax
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
702 <span id=
"L643" class=
"LineNr"> 643 </span> ff
6/subop/push
1/mod/*+disp8
0/rm32/eax
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># push *(eax+
4)
</span>
703 <span id=
"L644" class=
"LineNr"> 644 </span> <span class=
"subxS2Comment"># . . call
</span>
704 <span id=
"L645" class=
"LineNr"> 645 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
705 <span id=
"L646" class=
"LineNr"> 646 </span> <span class=
"subxS2Comment"># . . discard args
</span>
706 <span id=
"L647" class=
"LineNr"> 647 </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>
707 <span id=
"L648" class=
"LineNr"> 648 </span> <span class=
"subxComment"># end
</span>
708 <span id=
"L649" class=
"LineNr"> 649 </span> c3/return
709 <span id=
"L650" class=
"LineNr"> 650 </span>
710 <span id=
"L651" class=
"LineNr"> 651 </span><span class=
"subxFunction">skip-chars-matching-in-slice
</span>:
<span class=
"subxComment"># curr: (addr byte), end: (addr byte), delimiter: byte -
> curr/eax: (addr byte)
</span>
711 <span id=
"L652" class=
"LineNr"> 652 </span> <span class=
"subxS1Comment"># . prologue
</span>
712 <span id=
"L653" class=
"LineNr"> 653 </span> 55/push-ebp
713 <span id=
"L654" class=
"LineNr"> 654 </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>
714 <span id=
"L655" class=
"LineNr"> 655 </span> <span class=
"subxS1Comment"># . save registers
</span>
715 <span id=
"L656" class=
"LineNr"> 656 </span> 51/push-ecx
716 <span id=
"L657" class=
"LineNr"> 657 </span> 52/push-edx
717 <span id=
"L658" class=
"LineNr"> 658 </span> 53/push-ebx
718 <span id=
"L659" class=
"LineNr"> 659 </span> <span class=
"subxComment"># eax = curr
</span>
719 <span id=
"L660" class=
"LineNr"> 660 </span> 8b/copy
1/mod/*+disp8
5/rm32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 0/r32/eax
8/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy *(ebp+
8) to eax
</span>
720 <span id=
"L661" class=
"LineNr"> 661 </span> <span class=
"subxComment"># ecx = end
</span>
721 <span id=
"L662" class=
"LineNr"> 662 </span> 8b/copy
1/mod/*+disp8
5/rm32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 1/r32/ecx
0xc/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy *(ebp+
12) to ecx
</span>
722 <span id=
"L663" class=
"LineNr"> 663 </span> <span class=
"subxComment"># edx = delimiter
</span>
723 <span id=
"L664" class=
"LineNr"> 664 </span> 8b/copy
1/mod/*+disp8
5/rm32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 2/r32/edx
0x10/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy *(ebp+
16) to edx
</span>
724 <span id=
"L665" class=
"LineNr"> 665 </span> <span class=
"subxComment"># var c/ebx: byte =
0</span>
725 <span id=
"L666" class=
"LineNr"> 666 </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>
726 <span id=
"L667" class=
"LineNr"> 667 </span><span class=
"Constant">$skip-chars-matching-in-slice:loop
</span>:
727 <span id=
"L668" class=
"LineNr"> 668 </span> <span class=
"subxComment"># if (curr
>= end) break
</span>
728 <span id=
"L669" class=
"LineNr"> 669 </span> 39/compare
3/mod/direct
0/rm32/eax
<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"># compare eax with ecx
</span>
729 <span id=
"L670" class=
"LineNr"> 670 </span> 73/jump-if-addr
>= $skip-chars-matching-in-slice:end/disp8
730 <span id=
"L671" class=
"LineNr"> 671 </span> <span class=
"subxComment"># c = *curr
</span>
731 <span id=
"L672" class=
"LineNr"> 672 </span> 8a/copy-byte
0/mod/indirect
0/rm32/eax
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 3/r32/BL
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy byte at *eax to BL
</span>
732 <span id=
"L673" class=
"LineNr"> 673 </span> <span class=
"subxComment"># if (c != delimiter) break
</span>
733 <span id=
"L674" class=
"LineNr"> 674 </span> 39/compare
3/mod/direct
3/rm32/ebx
<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 ebx and edx
</span>
734 <span id=
"L675" class=
"LineNr"> 675 </span> 75/jump-if-!= $skip-chars-matching-in-slice:end/disp8
735 <span id=
"L676" class=
"LineNr"> 676 </span> <span class=
"subxComment"># ++curr
</span>
736 <span id=
"L677" class=
"LineNr"> 677 </span> 40/increment-eax
737 <span id=
"L678" class=
"LineNr"> 678 </span> eb/jump $skip-chars-matching-in-slice:
<span class=
"Constant">loop
</span>/disp8
738 <span id=
"L679" class=
"LineNr"> 679 </span><span class=
"Constant">$skip-chars-matching-in-slice:end
</span>:
739 <span id=
"L680" class=
"LineNr"> 680 </span> <span class=
"subxS1Comment"># . restore registers
</span>
740 <span id=
"L681" class=
"LineNr"> 681 </span> 5b/pop-to-ebx
741 <span id=
"L682" class=
"LineNr"> 682 </span> 5a/pop-to-edx
742 <span id=
"L683" class=
"LineNr"> 683 </span> 59/pop-to-ecx
743 <span id=
"L684" class=
"LineNr"> 684 </span> <span class=
"subxS1Comment"># . epilogue
</span>
744 <span id=
"L685" class=
"LineNr"> 685 </span> 89/copy
3/mod/direct
4/rm32/esp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 5/r32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ebp to esp
</span>
745 <span id=
"L686" class=
"LineNr"> 686 </span> 5d/pop-to-ebp
746 <span id=
"L687" class=
"LineNr"> 687 </span> c3/return
747 <span id=
"L688" class=
"LineNr"> 688 </span>
748 <span id=
"L689" class=
"LineNr"> 689 </span><span class=
"subxTest">test-skip-chars-matching-in-slice
</span>:
749 <span id=
"L690" class=
"LineNr"> 690 </span> <span class=
"subxComment"># (eax..ecx) =
" ab
"</span>
750 <span id=
"L691" class=
"LineNr"> 691 </span> b8/copy-to-eax
<span class=
"Constant">" ab
"</span>/imm32
751 <span id=
"L692" class=
"LineNr"> 692 </span> 8b/copy
0/mod/indirect
0/rm32/eax
<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 *eax to ecx
</span>
752 <span id=
"L693" class=
"LineNr"> 693 </span> 8d/copy-address
1/mod/*+disp8
4/rm32/sib
0/base/eax
1/index/ecx
<span class=
"Normal"> .
</span> 1/r32/ecx
4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy eax+ecx+
4 to ecx
</span>
753 <span id=
"L694" class=
"LineNr"> 694 </span> 05/add-to-eax
4/imm32
754 <span id=
"L695" class=
"LineNr"> 695 </span> <span class=
"subxComment"># eax = skip-chars-matching-in-slice(eax, ecx,
0x20/space)
</span>
755 <span id=
"L696" class=
"LineNr"> 696 </span> <span class=
"subxS2Comment"># . . push args
</span>
756 <span id=
"L697" class=
"LineNr"> 697 </span> 68/push
0x20/imm32/space
757 <span id=
"L698" class=
"LineNr"> 698 </span> 51/push-ecx
758 <span id=
"L699" class=
"LineNr"> 699 </span> 50/push-eax
759 <span id=
"L700" class=
"LineNr"> 700 </span> <span class=
"subxS2Comment"># . . call
</span>
760 <span id=
"L701" class=
"LineNr"> 701 </span> e8/call
<a href='
124next-token.subx.html#L651'
>skip-chars-matching-in-slice
</a>/disp32
761 <span id=
"L702" class=
"LineNr"> 702 </span> <span class=
"subxS2Comment"># . . discard args
</span>
762 <span id=
"L703" class=
"LineNr"> 703 </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>
763 <span id=
"L704" class=
"LineNr"> 704 </span> <span class=
"subxComment"># check-ints-equal(ecx-eax,
2, msg)
</span>
764 <span id=
"L705" class=
"LineNr"> 705 </span> <span class=
"subxS2Comment"># . . push args
</span>
765 <span id=
"L706" class=
"LineNr"> 706 </span> 68/push
<span class=
"Constant">"F - test-skip-chars-matching-in-slice
"</span>/imm32
766 <span id=
"L707" class=
"LineNr"> 707 </span> 68/push
2/imm32
767 <span id=
"L708" class=
"LineNr"> 708 </span> <span class=
"subxS2Comment"># . . push ecx-eax
</span>
768 <span id=
"L709" class=
"LineNr"> 709 </span> 29/subtract
3/mod/direct
1/rm32/ecx
<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"># subtract eax from ecx
</span>
769 <span id=
"L710" class=
"LineNr"> 710 </span> 51/push-ecx
770 <span id=
"L711" class=
"LineNr"> 711 </span> <span class=
"subxS2Comment"># . . call
</span>
771 <span id=
"L712" class=
"LineNr"> 712 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
772 <span id=
"L713" class=
"LineNr"> 713 </span> <span class=
"subxS2Comment"># . . discard args
</span>
773 <span id=
"L714" class=
"LineNr"> 714 </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>
774 <span id=
"L715" class=
"LineNr"> 715 </span> <span class=
"subxComment"># end
</span>
775 <span id=
"L716" class=
"LineNr"> 716 </span> c3/return
776 <span id=
"L717" class=
"LineNr"> 717 </span>
777 <span id=
"L718" class=
"LineNr"> 718 </span><span class=
"subxTest">test-skip-chars-matching-in-slice-none
</span>:
778 <span id=
"L719" class=
"LineNr"> 719 </span> <span class=
"subxComment"># (eax..ecx) =
"ab
"</span>
779 <span id=
"L720" class=
"LineNr"> 720 </span> b8/copy-to-eax
<span class=
"Constant">"ab
"</span>/imm32
780 <span id=
"L721" class=
"LineNr"> 721 </span> 8b/copy
0/mod/indirect
0/rm32/eax
<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 *eax to ecx
</span>
781 <span id=
"L722" class=
"LineNr"> 722 </span> 8d/copy-address
1/mod/*+disp8
4/rm32/sib
0/base/eax
1/index/ecx
<span class=
"Normal"> .
</span> 1/r32/ecx
4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy eax+ecx+
4 to ecx
</span>
782 <span id=
"L723" class=
"LineNr"> 723 </span> 05/add-to-eax
4/imm32
783 <span id=
"L724" class=
"LineNr"> 724 </span> <span class=
"subxComment"># eax = skip-chars-matching-in-slice(eax, ecx,
0x20/space)
</span>
784 <span id=
"L725" class=
"LineNr"> 725 </span> <span class=
"subxS2Comment"># . . push args
</span>
785 <span id=
"L726" class=
"LineNr"> 726 </span> 68/push
0x20/imm32/space
786 <span id=
"L727" class=
"LineNr"> 727 </span> 51/push-ecx
787 <span id=
"L728" class=
"LineNr"> 728 </span> 50/push-eax
788 <span id=
"L729" class=
"LineNr"> 729 </span> <span class=
"subxS2Comment"># . . call
</span>
789 <span id=
"L730" class=
"LineNr"> 730 </span> e8/call
<a href='
124next-token.subx.html#L651'
>skip-chars-matching-in-slice
</a>/disp32
790 <span id=
"L731" class=
"LineNr"> 731 </span> <span class=
"subxS2Comment"># . . discard args
</span>
791 <span id=
"L732" class=
"LineNr"> 732 </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>
792 <span id=
"L733" class=
"LineNr"> 733 </span> <span class=
"subxComment"># check-ints-equal(ecx-eax,
2, msg)
</span>
793 <span id=
"L734" class=
"LineNr"> 734 </span> <span class=
"subxS2Comment"># . . push args
</span>
794 <span id=
"L735" class=
"LineNr"> 735 </span> 68/push
<span class=
"Constant">"F - test-skip-chars-matching-in-slice-none
"</span>/imm32
795 <span id=
"L736" class=
"LineNr"> 736 </span> 68/push
2/imm32
796 <span id=
"L737" class=
"LineNr"> 737 </span> <span class=
"subxS2Comment"># . . push ecx-eax
</span>
797 <span id=
"L738" class=
"LineNr"> 738 </span> 29/subtract
3/mod/direct
1/rm32/ecx
<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"># subtract eax from ecx
</span>
798 <span id=
"L739" class=
"LineNr"> 739 </span> 51/push-ecx
799 <span id=
"L740" class=
"LineNr"> 740 </span> <span class=
"subxS2Comment"># . . call
</span>
800 <span id=
"L741" class=
"LineNr"> 741 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
801 <span id=
"L742" class=
"LineNr"> 742 </span> <span class=
"subxS2Comment"># . . discard args
</span>
802 <span id=
"L743" class=
"LineNr"> 743 </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>
803 <span id=
"L744" class=
"LineNr"> 744 </span> <span class=
"subxComment"># end
</span>
804 <span id=
"L745" class=
"LineNr"> 745 </span> c3/return
805 <span id=
"L746" class=
"LineNr"> 746 </span>
806 <span id=
"L747" class=
"LineNr"> 747 </span><span class=
"subxFunction">skip-chars-matching-whitespace-in-slice
</span>:
<span class=
"subxComment"># curr: (addr byte), end: (addr byte) -
> curr/eax: (addr byte)
</span>
807 <span id=
"L748" class=
"LineNr"> 748 </span> <span class=
"subxS1Comment"># . prologue
</span>
808 <span id=
"L749" class=
"LineNr"> 749 </span> 55/push-ebp
809 <span id=
"L750" class=
"LineNr"> 750 </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>
810 <span id=
"L751" class=
"LineNr"> 751 </span> <span class=
"subxS1Comment"># . save registers
</span>
811 <span id=
"L752" class=
"LineNr"> 752 </span> 51/push-ecx
812 <span id=
"L753" class=
"LineNr"> 753 </span> 53/push-ebx
813 <span id=
"L754" class=
"LineNr"> 754 </span> <span class=
"subxComment"># eax = curr
</span>
814 <span id=
"L755" class=
"LineNr"> 755 </span> 8b/copy
1/mod/*+disp8
5/rm32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 0/r32/eax
8/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy *(ebp+
8) to eax
</span>
815 <span id=
"L756" class=
"LineNr"> 756 </span> <span class=
"subxComment"># ecx = end
</span>
816 <span id=
"L757" class=
"LineNr"> 757 </span> 8b/copy
1/mod/*+disp8
5/rm32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 1/r32/ecx
0xc/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy *(ebp+
12) to ecx
</span>
817 <span id=
"L758" class=
"LineNr"> 758 </span> <span class=
"subxComment"># var c/ebx: byte =
0</span>
818 <span id=
"L759" class=
"LineNr"> 759 </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>
819 <span id=
"L760" class=
"LineNr"> 760 </span><span class=
"Constant">$skip-chars-matching-whitespace-in-slice:loop
</span>:
820 <span id=
"L761" class=
"LineNr"> 761 </span> <span class=
"subxComment"># if (curr
>= end) break
</span>
821 <span id=
"L762" class=
"LineNr"> 762 </span> 39/compare
3/mod/direct
0/rm32/eax
<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"># compare eax with ecx
</span>
822 <span id=
"L763" class=
"LineNr"> 763 </span> 0f
83/jump-if-addr
>= $skip-chars-matching-in-slice:end/disp32
823 <span id=
"L764" class=
"LineNr"> 764 </span> <span class=
"subxComment"># c = *curr
</span>
824 <span id=
"L765" class=
"LineNr"> 765 </span> 8a/copy-byte
0/mod/indirect
0/rm32/eax
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 3/r32/BL
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy byte at *eax to BL
</span>
825 <span id=
"L766" class=
"LineNr"> 766 </span> <span class=
"subxComment"># if (c == ' ') goto body
</span>
826 <span id=
"L767" class=
"LineNr"> 767 </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> 0x20/imm32/space
<span class=
"subxComment"># compare ebx
</span>
827 <span id=
"L768" class=
"LineNr"> 768 </span> 74/jump-if-= $skip-chars-matching-whitespace-in-slice:body/disp8
828 <span id=
"L769" class=
"LineNr"> 769 </span> <span class=
"subxComment"># if (c == '\n') goto body
</span>
829 <span id=
"L770" class=
"LineNr"> 770 </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> 0x0a/imm32/newline
<span class=
"subxComment"># compare ebx
</span>
830 <span id=
"L771" class=
"LineNr"> 771 </span> 74/jump-if-= $skip-chars-matching-whitespace-in-slice:body/disp8
831 <span id=
"L772" class=
"LineNr"> 772 </span> <span class=
"subxComment"># if (c == '\t') goto body
</span>
832 <span id=
"L773" class=
"LineNr"> 773 </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> 0x09/imm32/tab
<span class=
"subxComment"># compare ebx
</span>
833 <span id=
"L774" class=
"LineNr"> 774 </span> 74/jump-if-= $skip-chars-matching-whitespace-in-slice:body/disp8
834 <span id=
"L775" class=
"LineNr"> 775 </span> <span class=
"subxComment"># if (c != '\r') break
</span>
835 <span id=
"L776" class=
"LineNr"> 776 </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> 0x0d/imm32/cr
<span class=
"subxComment"># compare ebx
</span>
836 <span id=
"L777" class=
"LineNr"> 777 </span> 75/jump-if-!= $skip-chars-matching-whitespace-in-slice:end/disp8
837 <span id=
"L778" class=
"LineNr"> 778 </span><span class=
"Constant">$skip-chars-matching-whitespace-in-slice:body
</span>:
838 <span id=
"L779" class=
"LineNr"> 779 </span> <span class=
"subxComment"># ++curr
</span>
839 <span id=
"L780" class=
"LineNr"> 780 </span> 40/increment-eax
840 <span id=
"L781" class=
"LineNr"> 781 </span> eb/jump $skip-chars-matching-whitespace-in-slice:
<span class=
"Constant">loop
</span>/disp8
841 <span id=
"L782" class=
"LineNr"> 782 </span><span class=
"Constant">$skip-chars-matching-whitespace-in-slice:end
</span>:
842 <span id=
"L783" class=
"LineNr"> 783 </span> <span class=
"subxS1Comment"># . restore registers
</span>
843 <span id=
"L784" class=
"LineNr"> 784 </span> 5b/pop-to-ebx
844 <span id=
"L785" class=
"LineNr"> 785 </span> 59/pop-to-ecx
845 <span id=
"L786" class=
"LineNr"> 786 </span> <span class=
"subxS1Comment"># . epilogue
</span>
846 <span id=
"L787" class=
"LineNr"> 787 </span> 89/copy
3/mod/direct
4/rm32/esp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 5/r32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ebp to esp
</span>
847 <span id=
"L788" class=
"LineNr"> 788 </span> 5d/pop-to-ebp
848 <span id=
"L789" class=
"LineNr"> 789 </span> c3/return
849 <span id=
"L790" class=
"LineNr"> 790 </span>
850 <span id=
"L791" class=
"LineNr"> 791 </span><span class=
"subxTest">test-skip-chars-matching-whitespace-in-slice
</span>:
851 <span id=
"L792" class=
"LineNr"> 792 </span> <span class=
"subxComment"># (eax..ecx) =
" \nab
"</span>
852 <span id=
"L793" class=
"LineNr"> 793 </span> b8/copy-to-eax
<span class=
"Constant">" \nab
"</span>/imm32
853 <span id=
"L794" class=
"LineNr"> 794 </span> 8b/copy
0/mod/indirect
0/rm32/eax
<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 *eax to ecx
</span>
854 <span id=
"L795" class=
"LineNr"> 795 </span> 8d/copy-address
1/mod/*+disp8
4/rm32/sib
0/base/eax
1/index/ecx
<span class=
"Normal"> .
</span> 1/r32/ecx
4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy eax+ecx+
4 to ecx
</span>
855 <span id=
"L796" class=
"LineNr"> 796 </span> 05/add-to-eax
4/imm32
856 <span id=
"L797" class=
"LineNr"> 797 </span> <span class=
"subxComment"># eax = skip-chars-matching-whitespace-in-slice(eax, ecx)
</span>
857 <span id=
"L798" class=
"LineNr"> 798 </span> <span class=
"subxS2Comment"># . . push args
</span>
858 <span id=
"L799" class=
"LineNr"> 799 </span> 51/push-ecx
859 <span id=
"L800" class=
"LineNr"> 800 </span> 50/push-eax
860 <span id=
"L801" class=
"LineNr"> 801 </span> <span class=
"subxS2Comment"># . . call
</span>
861 <span id=
"L802" class=
"LineNr"> 802 </span> e8/call
<a href='
124next-token.subx.html#L747'
>skip-chars-matching-whitespace-in-slice
</a>/disp32
862 <span id=
"L803" class=
"LineNr"> 803 </span> <span class=
"subxS2Comment"># . . discard args
</span>
863 <span id=
"L804" class=
"LineNr"> 804 </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>
864 <span id=
"L805" class=
"LineNr"> 805 </span> <span class=
"subxComment"># check-ints-equal(ecx-eax,
2, msg)
</span>
865 <span id=
"L806" class=
"LineNr"> 806 </span> <span class=
"subxS2Comment"># . . push args
</span>
866 <span id=
"L807" class=
"LineNr"> 807 </span> 68/push
<span class=
"Constant">"F - test-skip-chars-matching-whitespace-in-slice
"</span>/imm32
867 <span id=
"L808" class=
"LineNr"> 808 </span> 68/push
2/imm32
868 <span id=
"L809" class=
"LineNr"> 809 </span> <span class=
"subxS2Comment"># . . push ecx-eax
</span>
869 <span id=
"L810" class=
"LineNr"> 810 </span> 29/subtract
3/mod/direct
1/rm32/ecx
<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"># subtract eax from ecx
</span>
870 <span id=
"L811" class=
"LineNr"> 811 </span> 51/push-ecx
871 <span id=
"L812" class=
"LineNr"> 812 </span> <span class=
"subxS2Comment"># . . call
</span>
872 <span id=
"L813" class=
"LineNr"> 813 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
873 <span id=
"L814" class=
"LineNr"> 814 </span> <span class=
"subxS2Comment"># . . discard args
</span>
874 <span id=
"L815" class=
"LineNr"> 815 </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>
875 <span id=
"L816" class=
"LineNr"> 816 </span> <span class=
"subxComment"># end
</span>
876 <span id=
"L817" class=
"LineNr"> 817 </span> c3/return
877 <span id=
"L818" class=
"LineNr"> 818 </span>
878 <span id=
"L819" class=
"LineNr"> 819 </span><span class=
"subxComment"># minor fork of 'skip-chars-matching-in-slice'
</span>
879 <span id=
"L820" class=
"LineNr"> 820 </span><span class=
"subxFunction">skip-chars-not-matching-in-slice
</span>:
<span class=
"subxComment"># curr: (addr byte), end: (addr byte), delimiter: byte -
> curr/eax: (addr byte)
</span>
880 <span id=
"L821" class=
"LineNr"> 821 </span> <span class=
"subxS1Comment"># . prologue
</span>
881 <span id=
"L822" class=
"LineNr"> 822 </span> 55/push-ebp
882 <span id=
"L823" class=
"LineNr"> 823 </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>
883 <span id=
"L824" class=
"LineNr"> 824 </span> <span class=
"subxS1Comment"># . save registers
</span>
884 <span id=
"L825" class=
"LineNr"> 825 </span> 51/push-ecx
885 <span id=
"L826" class=
"LineNr"> 826 </span> 52/push-edx
886 <span id=
"L827" class=
"LineNr"> 827 </span> 53/push-ebx
887 <span id=
"L828" class=
"LineNr"> 828 </span> <span class=
"subxComment"># eax = curr
</span>
888 <span id=
"L829" class=
"LineNr"> 829 </span> 8b/copy
1/mod/*+disp8
5/rm32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 0/r32/eax
8/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy *(ebp+
8) to eax
</span>
889 <span id=
"L830" class=
"LineNr"> 830 </span> <span class=
"subxComment"># ecx = end
</span>
890 <span id=
"L831" class=
"LineNr"> 831 </span> 8b/copy
1/mod/*+disp8
5/rm32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 1/r32/ecx
0xc/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy *(ebp+
12) to ecx
</span>
891 <span id=
"L832" class=
"LineNr"> 832 </span> <span class=
"subxComment"># edx = delimiter
</span>
892 <span id=
"L833" class=
"LineNr"> 833 </span> 8b/copy
1/mod/*+disp8
5/rm32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 2/r32/edx
0x10/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy *(ebp+
16) to edx
</span>
893 <span id=
"L834" class=
"LineNr"> 834 </span> <span class=
"subxComment"># var c/ebx: byte =
0</span>
894 <span id=
"L835" class=
"LineNr"> 835 </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>
895 <span id=
"L836" class=
"LineNr"> 836 </span><span class=
"Constant">$skip-chars-not-matching-in-slice:loop
</span>:
896 <span id=
"L837" class=
"LineNr"> 837 </span> <span class=
"subxComment"># if (curr
>= end) break
</span>
897 <span id=
"L838" class=
"LineNr"> 838 </span> 39/compare
3/mod/direct
0/rm32/eax
<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"># compare eax with ecx
</span>
898 <span id=
"L839" class=
"LineNr"> 839 </span> 73/jump-if-addr
>= $skip-chars-not-matching-in-slice:end/disp8
899 <span id=
"L840" class=
"LineNr"> 840 </span> <span class=
"subxComment"># c = *curr
</span>
900 <span id=
"L841" class=
"LineNr"> 841 </span> 8a/copy-byte
0/mod/indirect
0/rm32/eax
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 3/r32/BL
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy byte at *eax to BL
</span>
901 <span id=
"L842" class=
"LineNr"> 842 </span> <span class=
"subxComment"># if (c == delimiter) break
</span>
902 <span id=
"L843" class=
"LineNr"> 843 </span> 39/compare
3/mod/direct
3/rm32/ebx
<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 ebx and edx
</span>
903 <span id=
"L844" class=
"LineNr"> 844 </span> 74/jump-if-= $skip-chars-not-matching-in-slice:end/disp8
904 <span id=
"L845" class=
"LineNr"> 845 </span> <span class=
"subxComment"># ++curr
</span>
905 <span id=
"L846" class=
"LineNr"> 846 </span> 40/increment-eax
906 <span id=
"L847" class=
"LineNr"> 847 </span> eb/jump $skip-chars-not-matching-in-slice:
<span class=
"Constant">loop
</span>/disp8
907 <span id=
"L848" class=
"LineNr"> 848 </span><span class=
"Constant">$skip-chars-not-matching-in-slice:end
</span>:
908 <span id=
"L849" class=
"LineNr"> 849 </span> <span class=
"subxS1Comment"># . restore registers
</span>
909 <span id=
"L850" class=
"LineNr"> 850 </span> 5b/pop-to-ebx
910 <span id=
"L851" class=
"LineNr"> 851 </span> 5a/pop-to-edx
911 <span id=
"L852" class=
"LineNr"> 852 </span> 59/pop-to-ecx
912 <span id=
"L853" class=
"LineNr"> 853 </span> <span class=
"subxS1Comment"># . epilogue
</span>
913 <span id=
"L854" class=
"LineNr"> 854 </span> 89/copy
3/mod/direct
4/rm32/esp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 5/r32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ebp to esp
</span>
914 <span id=
"L855" class=
"LineNr"> 855 </span> 5d/pop-to-ebp
915 <span id=
"L856" class=
"LineNr"> 856 </span> c3/return
916 <span id=
"L857" class=
"LineNr"> 857 </span>
917 <span id=
"L858" class=
"LineNr"> 858 </span><span class=
"subxTest">test-skip-chars-not-matching-in-slice
</span>:
918 <span id=
"L859" class=
"LineNr"> 859 </span> <span class=
"subxComment"># (eax..ecx) =
"ab
"</span>
919 <span id=
"L860" class=
"LineNr"> 860 </span> b8/copy-to-eax
<span class=
"Constant">"ab
"</span>/imm32
920 <span id=
"L861" class=
"LineNr"> 861 </span> 8b/copy
0/mod/indirect
0/rm32/eax
<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 *eax to ecx
</span>
921 <span id=
"L862" class=
"LineNr"> 862 </span> 8d/copy-address
1/mod/*+disp8
4/rm32/sib
0/base/eax
1/index/ecx
<span class=
"Normal"> .
</span> 1/r32/ecx
4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy eax+ecx+
4 to ecx
</span>
922 <span id=
"L863" class=
"LineNr"> 863 </span> 05/add-to-eax
4/imm32
923 <span id=
"L864" class=
"LineNr"> 864 </span> <span class=
"subxComment"># eax = skip-chars-not-matching-in-slice(eax, ecx,
0x20/space)
</span>
924 <span id=
"L865" class=
"LineNr"> 865 </span> <span class=
"subxS2Comment"># . . push args
</span>
925 <span id=
"L866" class=
"LineNr"> 866 </span> 68/push
0x20/imm32/space
926 <span id=
"L867" class=
"LineNr"> 867 </span> 51/push-ecx
927 <span id=
"L868" class=
"LineNr"> 868 </span> 50/push-eax
928 <span id=
"L869" class=
"LineNr"> 869 </span> <span class=
"subxS2Comment"># . . call
</span>
929 <span id=
"L870" class=
"LineNr"> 870 </span> e8/call
<a href='
124next-token.subx.html#L820'
>skip-chars-not-matching-in-slice
</a>/disp32
930 <span id=
"L871" class=
"LineNr"> 871 </span> <span class=
"subxS2Comment"># . . discard args
</span>
931 <span id=
"L872" class=
"LineNr"> 872 </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>
932 <span id=
"L873" class=
"LineNr"> 873 </span> <span class=
"subxComment"># check-ints-equal(ecx-eax,
1, msg)
</span>
933 <span id=
"L874" class=
"LineNr"> 874 </span> <span class=
"subxS2Comment"># . . push args
</span>
934 <span id=
"L875" class=
"LineNr"> 875 </span> 68/push
<span class=
"Constant">"F - test-skip-chars-not-matching-in-slice
"</span>/imm32
935 <span id=
"L876" class=
"LineNr"> 876 </span> 68/push
1/imm32
936 <span id=
"L877" class=
"LineNr"> 877 </span> <span class=
"subxS2Comment"># . . push ecx-eax
</span>
937 <span id=
"L878" class=
"LineNr"> 878 </span> 29/subtract
3/mod/direct
1/rm32/ecx
<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"># subtract eax from ecx
</span>
938 <span id=
"L879" class=
"LineNr"> 879 </span> 51/push-ecx
939 <span id=
"L880" class=
"LineNr"> 880 </span> <span class=
"subxS2Comment"># . . call
</span>
940 <span id=
"L881" class=
"LineNr"> 881 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
941 <span id=
"L882" class=
"LineNr"> 882 </span> <span class=
"subxS2Comment"># . . discard args
</span>
942 <span id=
"L883" class=
"LineNr"> 883 </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>
943 <span id=
"L884" class=
"LineNr"> 884 </span> <span class=
"subxComment"># end
</span>
944 <span id=
"L885" class=
"LineNr"> 885 </span> c3/return
945 <span id=
"L886" class=
"LineNr"> 886 </span>
946 <span id=
"L887" class=
"LineNr"> 887 </span><span class=
"subxTest">test-skip-chars-not-matching-in-slice-none
</span>:
947 <span id=
"L888" class=
"LineNr"> 888 </span> <span class=
"subxComment"># (eax..ecx) =
" ab
"</span>
948 <span id=
"L889" class=
"LineNr"> 889 </span> b8/copy-to-eax
<span class=
"Constant">" ab
"</span>/imm32
949 <span id=
"L890" class=
"LineNr"> 890 </span> 8b/copy
0/mod/indirect
0/rm32/eax
<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 *eax to ecx
</span>
950 <span id=
"L891" class=
"LineNr"> 891 </span> 8d/copy-address
1/mod/*+disp8
4/rm32/sib
0/base/eax
1/index/ecx
<span class=
"Normal"> .
</span> 1/r32/ecx
4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy eax+ecx+
4 to ecx
</span>
951 <span id=
"L892" class=
"LineNr"> 892 </span> 05/add-to-eax
4/imm32
952 <span id=
"L893" class=
"LineNr"> 893 </span> <span class=
"subxComment"># eax = skip-chars-not-matching-in-slice(eax, ecx,
0x20/space)
</span>
953 <span id=
"L894" class=
"LineNr"> 894 </span> <span class=
"subxS2Comment"># . . push args
</span>
954 <span id=
"L895" class=
"LineNr"> 895 </span> 68/push
0x20/imm32/space
955 <span id=
"L896" class=
"LineNr"> 896 </span> 51/push-ecx
956 <span id=
"L897" class=
"LineNr"> 897 </span> 50/push-eax
957 <span id=
"L898" class=
"LineNr"> 898 </span> <span class=
"subxS2Comment"># . . call
</span>
958 <span id=
"L899" class=
"LineNr"> 899 </span> e8/call
<a href='
124next-token.subx.html#L820'
>skip-chars-not-matching-in-slice
</a>/disp32
959 <span id=
"L900" class=
"LineNr"> 900 </span> <span class=
"subxS2Comment"># . . discard args
</span>
960 <span id=
"L901" class=
"LineNr"> 901 </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>
961 <span id=
"L902" class=
"LineNr"> 902 </span> <span class=
"subxComment"># check-ints-equal(ecx-eax,
3, msg)
</span>
962 <span id=
"L903" class=
"LineNr"> 903 </span> <span class=
"subxS2Comment"># . . push args
</span>
963 <span id=
"L904" class=
"LineNr"> 904 </span> 68/push
<span class=
"Constant">"F - test-skip-chars-not-matching-in-slice-none
"</span>/imm32
964 <span id=
"L905" class=
"LineNr"> 905 </span> 68/push
3/imm32
965 <span id=
"L906" class=
"LineNr"> 906 </span> <span class=
"subxS2Comment"># . . push ecx-eax
</span>
966 <span id=
"L907" class=
"LineNr"> 907 </span> 29/subtract
3/mod/direct
1/rm32/ecx
<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"># subtract eax from ecx
</span>
967 <span id=
"L908" class=
"LineNr"> 908 </span> 51/push-ecx
968 <span id=
"L909" class=
"LineNr"> 909 </span> <span class=
"subxS2Comment"># . . call
</span>
969 <span id=
"L910" class=
"LineNr"> 910 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
970 <span id=
"L911" class=
"LineNr"> 911 </span> <span class=
"subxS2Comment"># . . discard args
</span>
971 <span id=
"L912" class=
"LineNr"> 912 </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>
972 <span id=
"L913" class=
"LineNr"> 913 </span> <span class=
"subxComment"># end
</span>
973 <span id=
"L914" class=
"LineNr"> 914 </span> c3/return
974 <span id=
"L915" class=
"LineNr"> 915 </span>
975 <span id=
"L916" class=
"LineNr"> 916 </span><span class=
"subxTest">test-skip-chars-not-matching-in-slice-all
</span>:
976 <span id=
"L917" class=
"LineNr"> 917 </span> <span class=
"subxComment"># (eax..ecx) =
"ab
"</span>
977 <span id=
"L918" class=
"LineNr"> 918 </span> b8/copy-to-eax
<span class=
"Constant">"ab
"</span>/imm32
978 <span id=
"L919" class=
"LineNr"> 919 </span> 8b/copy
0/mod/indirect
0/rm32/eax
<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 *eax to ecx
</span>
979 <span id=
"L920" class=
"LineNr"> 920 </span> 8d/copy-address
1/mod/*+disp8
4/rm32/sib
0/base/eax
1/index/ecx
<span class=
"Normal"> .
</span> 1/r32/ecx
4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy eax+ecx+
4 to ecx
</span>
980 <span id=
"L921" class=
"LineNr"> 921 </span> 05/add-to-eax
4/imm32
981 <span id=
"L922" class=
"LineNr"> 922 </span> <span class=
"subxComment"># eax = skip-chars-not-matching-in-slice(eax, ecx,
0x20/space)
</span>
982 <span id=
"L923" class=
"LineNr"> 923 </span> <span class=
"subxS2Comment"># . . push args
</span>
983 <span id=
"L924" class=
"LineNr"> 924 </span> 68/push
0x20/imm32/space
984 <span id=
"L925" class=
"LineNr"> 925 </span> 51/push-ecx
985 <span id=
"L926" class=
"LineNr"> 926 </span> 50/push-eax
986 <span id=
"L927" class=
"LineNr"> 927 </span> <span class=
"subxS2Comment"># . . call
</span>
987 <span id=
"L928" class=
"LineNr"> 928 </span> e8/call
<a href='
124next-token.subx.html#L820'
>skip-chars-not-matching-in-slice
</a>/disp32
988 <span id=
"L929" class=
"LineNr"> 929 </span> <span class=
"subxS2Comment"># . . discard args
</span>
989 <span id=
"L930" class=
"LineNr"> 930 </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>
990 <span id=
"L931" class=
"LineNr"> 931 </span> <span class=
"subxComment"># check-ints-equal(ecx-eax,
0, msg)
</span>
991 <span id=
"L932" class=
"LineNr"> 932 </span> <span class=
"subxS2Comment"># . . push args
</span>
992 <span id=
"L933" class=
"LineNr"> 933 </span> 68/push
<span class=
"Constant">"F - test-skip-chars-not-matching-in-slice-all
"</span>/imm32
993 <span id=
"L934" class=
"LineNr"> 934 </span> 68/push
0/imm32
994 <span id=
"L935" class=
"LineNr"> 935 </span> <span class=
"subxS2Comment"># . . push ecx-eax
</span>
995 <span id=
"L936" class=
"LineNr"> 936 </span> 29/subtract
3/mod/direct
1/rm32/ecx
<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"># subtract eax from ecx
</span>
996 <span id=
"L937" class=
"LineNr"> 937 </span> 51/push-ecx
997 <span id=
"L938" class=
"LineNr"> 938 </span> <span class=
"subxS2Comment"># . . call
</span>
998 <span id=
"L939" class=
"LineNr"> 939 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
999 <span id=
"L940" class=
"LineNr"> 940 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1000 <span id=
"L941" class=
"LineNr"> 941 </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>
1001 <span id=
"L942" class=
"LineNr"> 942 </span> <span class=
"subxComment"># end
</span>
1002 <span id=
"L943" class=
"LineNr"> 943 </span> c3/return
1003 <span id=
"L944" class=
"LineNr"> 944 </span>
1004 <span id=
"L945" class=
"LineNr"> 945 </span><span class=
"subxFunction">skip-chars-not-matching-whitespace-in-slice
</span>:
<span class=
"subxComment"># curr: (addr byte), end: (addr byte) -
> curr/eax: (addr byte)
</span>
1005 <span id=
"L946" class=
"LineNr"> 946 </span> <span class=
"subxS1Comment"># . prologue
</span>
1006 <span id=
"L947" class=
"LineNr"> 947 </span> 55/push-ebp
1007 <span id=
"L948" class=
"LineNr"> 948 </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>
1008 <span id=
"L949" class=
"LineNr"> 949 </span> <span class=
"subxS1Comment"># . save registers
</span>
1009 <span id=
"L950" class=
"LineNr"> 950 </span> 51/push-ecx
1010 <span id=
"L951" class=
"LineNr"> 951 </span> 53/push-ebx
1011 <span id=
"L952" class=
"LineNr"> 952 </span> <span class=
"subxComment"># eax = curr
</span>
1012 <span id=
"L953" class=
"LineNr"> 953 </span> 8b/copy
1/mod/*+disp8
5/rm32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 0/r32/eax
8/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy *(ebp+
8) to eax
</span>
1013 <span id=
"L954" class=
"LineNr"> 954 </span> <span class=
"subxComment"># ecx = end
</span>
1014 <span id=
"L955" class=
"LineNr"> 955 </span> 8b/copy
1/mod/*+disp8
5/rm32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 1/r32/ecx
0xc/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy *(ebp+
12) to ecx
</span>
1015 <span id=
"L956" class=
"LineNr"> 956 </span> <span class=
"subxComment"># var c/ebx: byte =
0</span>
1016 <span id=
"L957" class=
"LineNr"> 957 </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>
1017 <span id=
"L958" class=
"LineNr"> 958 </span><span class=
"Constant">$skip-chars-not-matching-whitespace-in-slice:loop
</span>:
1018 <span id=
"L959" class=
"LineNr"> 959 </span> <span class=
"subxComment"># if (curr
>= end) break
</span>
1019 <span id=
"L960" class=
"LineNr"> 960 </span> 39/compare
3/mod/direct
0/rm32/eax
<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"># compare eax with ecx
</span>
1020 <span id=
"L961" class=
"LineNr"> 961 </span> 0f
83/jump-if-addr
>= $skip-chars-not-matching-in-slice:end/disp32
1021 <span id=
"L962" class=
"LineNr"> 962 </span> <span class=
"subxComment"># c = *curr
</span>
1022 <span id=
"L963" class=
"LineNr"> 963 </span> 8a/copy-byte
0/mod/indirect
0/rm32/eax
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 3/r32/BL
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy byte at *eax to BL
</span>
1023 <span id=
"L964" class=
"LineNr"> 964 </span> <span class=
"subxComment"># if (c == ' ') break
</span>
1024 <span id=
"L965" class=
"LineNr"> 965 </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> 0x20/imm32/space
<span class=
"subxComment"># compare ebx
</span>
1025 <span id=
"L966" class=
"LineNr"> 966 </span> 74/jump-if-= $skip-chars-not-matching-whitespace-in-slice:end/disp8
1026 <span id=
"L967" class=
"LineNr"> 967 </span> <span class=
"subxComment"># if (c == '\n') break
</span>
1027 <span id=
"L968" class=
"LineNr"> 968 </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> 0x0a/imm32/newline
<span class=
"subxComment"># compare ebx
</span>
1028 <span id=
"L969" class=
"LineNr"> 969 </span> 74/jump-if-= $skip-chars-not-matching-whitespace-in-slice:end/disp8
1029 <span id=
"L970" class=
"LineNr"> 970 </span> <span class=
"subxComment"># if (c == '\t') break
</span>
1030 <span id=
"L971" class=
"LineNr"> 971 </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> 0x09/imm32/tab
<span class=
"subxComment"># compare ebx
</span>
1031 <span id=
"L972" class=
"LineNr"> 972 </span> 74/jump-if-= $skip-chars-not-matching-whitespace-in-slice:end/disp8
1032 <span id=
"L973" class=
"LineNr"> 973 </span> <span class=
"subxComment"># if (c == '\r') break
</span>
1033 <span id=
"L974" class=
"LineNr"> 974 </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> 0x0d/imm32/cr
<span class=
"subxComment"># compare ebx
</span>
1034 <span id=
"L975" class=
"LineNr"> 975 </span> 74/jump-if-= $skip-chars-not-matching-whitespace-in-slice:end/disp8
1035 <span id=
"L976" class=
"LineNr"> 976 </span> <span class=
"subxComment"># ++curr
</span>
1036 <span id=
"L977" class=
"LineNr"> 977 </span> 40/increment-eax
1037 <span id=
"L978" class=
"LineNr"> 978 </span> eb/jump $skip-chars-not-matching-whitespace-in-slice:
<span class=
"Constant">loop
</span>/disp8
1038 <span id=
"L979" class=
"LineNr"> 979 </span><span class=
"Constant">$skip-chars-not-matching-whitespace-in-slice:end
</span>:
1039 <span id=
"L980" class=
"LineNr"> 980 </span> <span class=
"subxS1Comment"># . restore registers
</span>
1040 <span id=
"L981" class=
"LineNr"> 981 </span> 5b/pop-to-ebx
1041 <span id=
"L982" class=
"LineNr"> 982 </span> 59/pop-to-ecx
1042 <span id=
"L983" class=
"LineNr"> 983 </span> <span class=
"subxS1Comment"># . epilogue
</span>
1043 <span id=
"L984" class=
"LineNr"> 984 </span> 89/copy
3/mod/direct
4/rm32/esp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 5/r32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ebp to esp
</span>
1044 <span id=
"L985" class=
"LineNr"> 985 </span> 5d/pop-to-ebp
1045 <span id=
"L986" class=
"LineNr"> 986 </span> c3/return
1046 <span id=
"L987" class=
"LineNr"> 987 </span>
1047 <span id=
"L988" class=
"LineNr"> 988 </span><span class=
"subxTest">test-skip-chars-not-matching-whitespace-in-slice
</span>:
1048 <span id=
"L989" class=
"LineNr"> 989 </span> <span class=
"subxComment"># (eax..ecx) =
"ab\n
"</span>
1049 <span id=
"L990" class=
"LineNr"> 990 </span> b8/copy-to-eax
<span class=
"Constant">"ab\n
"</span>/imm32
1050 <span id=
"L991" class=
"LineNr"> 991 </span> 8b/copy
0/mod/indirect
0/rm32/eax
<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 *eax to ecx
</span>
1051 <span id=
"L992" class=
"LineNr"> 992 </span> 8d/copy-address
1/mod/*+disp8
4/rm32/sib
0/base/eax
1/index/ecx
<span class=
"Normal"> .
</span> 1/r32/ecx
4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy eax+ecx+
4 to ecx
</span>
1052 <span id=
"L993" class=
"LineNr"> 993 </span> 05/add-to-eax
4/imm32
1053 <span id=
"L994" class=
"LineNr"> 994 </span> <span class=
"subxComment"># eax = skip-chars-not-matching-whitespace-in-slice(eax, ecx)
</span>
1054 <span id=
"L995" class=
"LineNr"> 995 </span> <span class=
"subxS2Comment"># . . push args
</span>
1055 <span id=
"L996" class=
"LineNr"> 996 </span> 51/push-ecx
1056 <span id=
"L997" class=
"LineNr"> 997 </span> 50/push-eax
1057 <span id=
"L998" class=
"LineNr"> 998 </span> <span class=
"subxS2Comment"># . . call
</span>
1058 <span id=
"L999" class=
"LineNr"> 999 </span> e8/call
<a href='
124next-token.subx.html#L945'
>skip-chars-not-matching-whitespace-in-slice
</a>/disp32
1059 <span id=
"L1000" class=
"LineNr">1000 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1060 <span id=
"L1001" class=
"LineNr">1001 </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>
1061 <span id=
"L1002" class=
"LineNr">1002 </span> <span class=
"subxComment"># check-ints-equal(ecx-eax,
1, msg)
</span>
1062 <span id=
"L1003" class=
"LineNr">1003 </span> <span class=
"subxS2Comment"># . . push args
</span>
1063 <span id=
"L1004" class=
"LineNr">1004 </span> 68/push
<span class=
"Constant">"F - test-skip-chars-not-matching-whitespace-in-slice
"</span>/imm32
1064 <span id=
"L1005" class=
"LineNr">1005 </span> 68/push
1/imm32
1065 <span id=
"L1006" class=
"LineNr">1006 </span> <span class=
"subxS2Comment"># . . push ecx-eax
</span>
1066 <span id=
"L1007" class=
"LineNr">1007 </span> 29/subtract
3/mod/direct
1/rm32/ecx
<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"># subtract eax from ecx
</span>
1067 <span id=
"L1008" class=
"LineNr">1008 </span> 51/push-ecx
1068 <span id=
"L1009" class=
"LineNr">1009 </span> <span class=
"subxS2Comment"># . . call
</span>
1069 <span id=
"L1010" class=
"LineNr">1010 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
1070 <span id=
"L1011" class=
"LineNr">1011 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1071 <span id=
"L1012" class=
"LineNr">1012 </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>
1072 <span id=
"L1013" class=
"LineNr">1013 </span> <span class=
"subxComment"># end
</span>
1073 <span id=
"L1014" class=
"LineNr">1014 </span> c3/return
1074 <span id=
"L1015" class=
"LineNr">1015 </span>
1075 <span id=
"L1016" class=
"LineNr">1016 </span><span class=
"subxComment"># update line-
>read to end of string literal surrounded by double quotes
</span>
1076 <span id=
"L1017" class=
"LineNr">1017 </span><span class=
"subxComment"># line-
>read must start out at a double-quote
</span>
1077 <span id=
"L1018" class=
"LineNr">1018 </span><span class=
"subxFunction">skip-string
</span>:
<span class=
"subxComment"># line: (addr stream byte)
</span>
1078 <span id=
"L1019" class=
"LineNr">1019 </span> <span class=
"subxS1Comment"># . prologue
</span>
1079 <span id=
"L1020" class=
"LineNr">1020 </span> 55/push-ebp
1080 <span id=
"L1021" class=
"LineNr">1021 </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>
1081 <span id=
"L1022" class=
"LineNr">1022 </span> <span class=
"subxS1Comment"># . save registers
</span>
1082 <span id=
"L1023" class=
"LineNr">1023 </span> 50/push-eax
1083 <span id=
"L1024" class=
"LineNr">1024 </span> 51/push-ecx
1084 <span id=
"L1025" class=
"LineNr">1025 </span> 52/push-edx
1085 <span id=
"L1026" class=
"LineNr">1026 </span> <span class=
"subxComment"># ecx = line
</span>
1086 <span id=
"L1027" class=
"LineNr">1027 </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>
1087 <span id=
"L1028" class=
"LineNr">1028 </span> <span class=
"subxComment"># eax = skip-string-in-slice(
&line-
>data[line-
>read],
&line-
>data[line-
>write])
</span>
1088 <span id=
"L1029" class=
"LineNr">1029 </span> <span class=
"subxS2Comment"># . . push
&line-
>data[line-
>write]
</span>
1089 <span id=
"L1030" class=
"LineNr">1030 </span> 8b/copy
1/mod/*+disp8
1/rm32/ecx
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 2/r32/edx
8/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy *(ecx+
8) to edx
</span>
1090 <span id=
"L1031" class=
"LineNr">1031 </span> 8d/copy-address
1/mod/*+disp8
4/rm32/sib
1/base/ecx
2/index/edx
<span class=
"Normal"> .
</span> 2/r32/edx
0xc/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ecx+edx+
12 to edx
</span>
1091 <span id=
"L1032" class=
"LineNr">1032 </span> 52/push-edx
1092 <span id=
"L1033" class=
"LineNr">1033 </span> <span class=
"subxS2Comment"># . . push
&line-
>data[line-
>read]
</span>
1093 <span id=
"L1034" class=
"LineNr">1034 </span> 8b/copy
1/mod/*+disp8
1/rm32/ecx
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 2/r32/edx
4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy *(ecx+
4) to edx
</span>
1094 <span id=
"L1035" class=
"LineNr">1035 </span> 8d/copy-address
1/mod/*+disp8
4/rm32/sib
1/base/ecx
2/index/edx
<span class=
"Normal"> .
</span> 2/r32/edx
0xc/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ecx+edx+
12 to edx
</span>
1095 <span id=
"L1036" class=
"LineNr">1036 </span> 52/push-edx
1096 <span id=
"L1037" class=
"LineNr">1037 </span> <span class=
"subxS2Comment"># . . call
</span>
1097 <span id=
"L1038" class=
"LineNr">1038 </span> e8/call
<a href='
124next-token.subx.html#L1260'
>skip-string-in-slice
</a>/disp32
1098 <span id=
"L1039" class=
"LineNr">1039 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1099 <span id=
"L1040" class=
"LineNr">1040 </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>
1100 <span id=
"L1041" class=
"LineNr">1041 </span> <span class=
"subxComment"># line-
>read = eax - line-
>data
</span>
1101 <span id=
"L1042" class=
"LineNr">1042 </span> 29/subtract
3/mod/direct
0/rm32/eax
<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"># subtract ecx from eax
</span>
1102 <span id=
"L1043" class=
"LineNr">1043 </span> 2d/subtract-from-eax
0xc/imm32
1103 <span id=
"L1044" class=
"LineNr">1044 </span> 89/copy
1/mod/*+disp8
1/rm32/ecx
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 0/r32/eax
4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy eax to *(ecx+
4)
</span>
1104 <span id=
"L1045" class=
"LineNr">1045 </span><span class=
"Constant">$skip-string:end
</span>:
1105 <span id=
"L1046" class=
"LineNr">1046 </span> <span class=
"subxS1Comment"># . restore registers
</span>
1106 <span id=
"L1047" class=
"LineNr">1047 </span> 5a/pop-to-edx
1107 <span id=
"L1048" class=
"LineNr">1048 </span> 59/pop-to-ecx
1108 <span id=
"L1049" class=
"LineNr">1049 </span> 58/pop-to-eax
1109 <span id=
"L1050" class=
"LineNr">1050 </span> <span class=
"subxS1Comment"># . epilogue
</span>
1110 <span id=
"L1051" class=
"LineNr">1051 </span> 89/copy
3/mod/direct
4/rm32/esp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 5/r32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ebp to esp
</span>
1111 <span id=
"L1052" class=
"LineNr">1052 </span> 5d/pop-to-ebp
1112 <span id=
"L1053" class=
"LineNr">1053 </span> c3/return
1113 <span id=
"L1054" class=
"LineNr">1054 </span>
1114 <span id=
"L1055" class=
"LineNr">1055 </span><span class=
"subxTest">test-skip-string
</span>:
1115 <span id=
"L1056" class=
"LineNr">1056 </span> <span class=
"subxS1Comment"># . prologue
</span>
1116 <span id=
"L1057" class=
"LineNr">1057 </span> 55/push-ebp
1117 <span id=
"L1058" class=
"LineNr">1058 </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>
1118 <span id=
"L1059" class=
"LineNr">1059 </span> <span class=
"subxComment"># setup
</span>
1119 <span id=
"L1060" class=
"LineNr">1060 </span> <span class=
"subxS1Comment"># . clear-stream(_test-stream)
</span>
1120 <span id=
"L1061" class=
"LineNr">1061 </span> <span class=
"subxS2Comment"># . . push args
</span>
1121 <span id=
"L1062" class=
"LineNr">1062 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1122 <span id=
"L1063" class=
"LineNr">1063 </span> <span class=
"subxS2Comment"># . . call
</span>
1123 <span id=
"L1064" class=
"LineNr">1064 </span> e8/call
<a href='
106stream.subx.html#L20'
>clear-stream
</a>/disp32
1124 <span id=
"L1065" class=
"LineNr">1065 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1125 <span id=
"L1066" class=
"LineNr">1066 </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>
1126 <span id=
"L1067" class=
"LineNr">1067 </span> <span class=
"subxS1Comment"># . write(_test-stream,
"\
"abc\
" def
")
</span>
1127 <span id=
"L1068" class=
"LineNr">1068 </span> <span class=
"subxS1Comment"># . indices:
0123 45</span>
1128 <span id=
"L1069" class=
"LineNr">1069 </span> <span class=
"subxS2Comment"># . . push args
</span>
1129 <span id=
"L1070" class=
"LineNr">1070 </span> 68/push
<span class=
"Constant">"\
"</span>abc\
<span class=
"Constant">" def
"</span>/imm32
1130 <span id=
"L1071" class=
"LineNr">1071 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1131 <span id=
"L1072" class=
"LineNr">1072 </span> <span class=
"subxS2Comment"># . . call
</span>
1132 <span id=
"L1073" class=
"LineNr">1073 </span> e8/call
<a href='
108write.subx.html#L11'
>write
</a>/disp32
1133 <span id=
"L1074" class=
"LineNr">1074 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1134 <span id=
"L1075" class=
"LineNr">1075 </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>
1135 <span id=
"L1076" class=
"LineNr">1076 </span> <span class=
"subxComment"># precondition: line-
>read ==
0</span>
1136 <span id=
"L1077" class=
"LineNr">1077 </span> <span class=
"subxS2Comment"># . . push args
</span>
1137 <span id=
"L1078" class=
"LineNr">1078 </span> 68/push
<span class=
"Constant">"F -
<a href='
124next-token.subx.html#L1055'
>test-skip-string
</a>/precondition
"</span>/imm32
1138 <span id=
"L1079" class=
"LineNr">1079 </span> 68/push
0/imm32
1139 <span id=
"L1080" class=
"LineNr">1080 </span> b8/copy-to-eax
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1140 <span id=
"L1081" class=
"LineNr">1081 </span> ff
6/subop/push
1/mod/*+disp8
0/rm32/eax
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># push *(eax+
4)
</span>
1141 <span id=
"L1082" class=
"LineNr">1082 </span> <span class=
"subxS2Comment"># . . call
</span>
1142 <span id=
"L1083" class=
"LineNr">1083 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
1143 <span id=
"L1084" class=
"LineNr">1084 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1144 <span id=
"L1085" class=
"LineNr">1085 </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>
1145 <span id=
"L1086" class=
"LineNr">1086 </span> <span class=
"subxComment"># skip-string(_test-stream)
</span>
1146 <span id=
"L1087" class=
"LineNr">1087 </span> <span class=
"subxS2Comment"># . . push args
</span>
1147 <span id=
"L1088" class=
"LineNr">1088 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1148 <span id=
"L1089" class=
"LineNr">1089 </span> <span class=
"subxS2Comment"># . . call
</span>
1149 <span id=
"L1090" class=
"LineNr">1090 </span> e8/call
<a href='
124next-token.subx.html#L1018'
>skip-string
</a>/disp32
1150 <span id=
"L1091" class=
"LineNr">1091 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1151 <span id=
"L1092" class=
"LineNr">1092 </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>
1152 <span id=
"L1093" class=
"LineNr">1093 </span> <span class=
"subxComment"># check-ints-equal(line-
>read,
5, msg)
</span>
1153 <span id=
"L1094" class=
"LineNr">1094 </span> <span class=
"subxS2Comment"># . . push args
</span>
1154 <span id=
"L1095" class=
"LineNr">1095 </span> 68/push
<span class=
"Constant">"F - test-skip-string
"</span>/imm32
1155 <span id=
"L1096" class=
"LineNr">1096 </span> 68/push
5/imm32
1156 <span id=
"L1097" class=
"LineNr">1097 </span> b8/copy-to-eax
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1157 <span id=
"L1098" class=
"LineNr">1098 </span> ff
6/subop/push
1/mod/*+disp8
0/rm32/eax
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># push *(eax+
4)
</span>
1158 <span id=
"L1099" class=
"LineNr">1099 </span> <span class=
"subxS2Comment"># . . call
</span>
1159 <span id=
"L1100" class=
"LineNr">1100 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
1160 <span id=
"L1101" class=
"LineNr">1101 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1161 <span id=
"L1102" class=
"LineNr">1102 </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>
1162 <span id=
"L1103" class=
"LineNr">1103 </span> <span class=
"subxS1Comment"># . epilogue
</span>
1163 <span id=
"L1104" class=
"LineNr">1104 </span> 89/copy
3/mod/direct
4/rm32/esp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 5/r32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ebp to esp
</span>
1164 <span id=
"L1105" class=
"LineNr">1105 </span> 5d/pop-to-ebp
1165 <span id=
"L1106" class=
"LineNr">1106 </span> c3/return
1166 <span id=
"L1107" class=
"LineNr">1107 </span>
1167 <span id=
"L1108" class=
"LineNr">1108 </span><span class=
"subxTest">test-skip-string-ignores-spaces
</span>:
1168 <span id=
"L1109" class=
"LineNr">1109 </span> <span class=
"subxS1Comment"># . prologue
</span>
1169 <span id=
"L1110" class=
"LineNr">1110 </span> 55/push-ebp
1170 <span id=
"L1111" class=
"LineNr">1111 </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>
1171 <span id=
"L1112" class=
"LineNr">1112 </span> <span class=
"subxComment"># setup
</span>
1172 <span id=
"L1113" class=
"LineNr">1113 </span> <span class=
"subxS1Comment"># . clear-stream(_test-stream)
</span>
1173 <span id=
"L1114" class=
"LineNr">1114 </span> <span class=
"subxS2Comment"># . . push args
</span>
1174 <span id=
"L1115" class=
"LineNr">1115 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1175 <span id=
"L1116" class=
"LineNr">1116 </span> <span class=
"subxS2Comment"># . . call
</span>
1176 <span id=
"L1117" class=
"LineNr">1117 </span> e8/call
<a href='
106stream.subx.html#L20'
>clear-stream
</a>/disp32
1177 <span id=
"L1118" class=
"LineNr">1118 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1178 <span id=
"L1119" class=
"LineNr">1119 </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>
1179 <span id=
"L1120" class=
"LineNr">1120 </span> <span class=
"subxS1Comment"># . write(_test-stream,
"\
"a b\
"/yz
")
</span>
1180 <span id=
"L1121" class=
"LineNr">1121 </span> <span class=
"subxS1Comment"># . indices:
0123 45</span>
1181 <span id=
"L1122" class=
"LineNr">1122 </span> <span class=
"subxS2Comment"># . . push args
</span>
1182 <span id=
"L1123" class=
"LineNr">1123 </span> 68/push
<span class=
"Constant">"\
"</span>a b\
<span class=
"Constant">"/yz
"</span>/imm32
1183 <span id=
"L1124" class=
"LineNr">1124 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1184 <span id=
"L1125" class=
"LineNr">1125 </span> <span class=
"subxS2Comment"># . . call
</span>
1185 <span id=
"L1126" class=
"LineNr">1126 </span> e8/call
<a href='
108write.subx.html#L11'
>write
</a>/disp32
1186 <span id=
"L1127" class=
"LineNr">1127 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1187 <span id=
"L1128" class=
"LineNr">1128 </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>
1188 <span id=
"L1129" class=
"LineNr">1129 </span> <span class=
"subxComment"># precondition: line-
>read ==
0</span>
1189 <span id=
"L1130" class=
"LineNr">1130 </span> <span class=
"subxS2Comment"># . . push args
</span>
1190 <span id=
"L1131" class=
"LineNr">1131 </span> 68/push
<span class=
"Constant">"F -
<a href='
124next-token.subx.html#L1108'
>test-skip-string-ignores-spaces
</a>/precondition
"</span>/imm32
1191 <span id=
"L1132" class=
"LineNr">1132 </span> 68/push
0/imm32
1192 <span id=
"L1133" class=
"LineNr">1133 </span> b8/copy-to-eax
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1193 <span id=
"L1134" class=
"LineNr">1134 </span> ff
6/subop/push
1/mod/*+disp8
0/rm32/eax
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># push *(eax+
4)
</span>
1194 <span id=
"L1135" class=
"LineNr">1135 </span> <span class=
"subxS2Comment"># . . call
</span>
1195 <span id=
"L1136" class=
"LineNr">1136 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
1196 <span id=
"L1137" class=
"LineNr">1137 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1197 <span id=
"L1138" class=
"LineNr">1138 </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>
1198 <span id=
"L1139" class=
"LineNr">1139 </span> <span class=
"subxComment"># skip-string(_test-stream)
</span>
1199 <span id=
"L1140" class=
"LineNr">1140 </span> <span class=
"subxS2Comment"># . . push args
</span>
1200 <span id=
"L1141" class=
"LineNr">1141 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1201 <span id=
"L1142" class=
"LineNr">1142 </span> <span class=
"subxS2Comment"># . . call
</span>
1202 <span id=
"L1143" class=
"LineNr">1143 </span> e8/call
<a href='
124next-token.subx.html#L1018'
>skip-string
</a>/disp32
1203 <span id=
"L1144" class=
"LineNr">1144 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1204 <span id=
"L1145" class=
"LineNr">1145 </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>
1205 <span id=
"L1146" class=
"LineNr">1146 </span> <span class=
"subxComment"># check-ints-equal(line-
>read,
5, msg)
</span>
1206 <span id=
"L1147" class=
"LineNr">1147 </span> <span class=
"subxS2Comment"># . . push args
</span>
1207 <span id=
"L1148" class=
"LineNr">1148 </span> 68/push
<span class=
"Constant">"F - test-skip-string-ignores-spaces
"</span>/imm32
1208 <span id=
"L1149" class=
"LineNr">1149 </span> 68/push
5/imm32
1209 <span id=
"L1150" class=
"LineNr">1150 </span> b8/copy-to-eax
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1210 <span id=
"L1151" class=
"LineNr">1151 </span> ff
6/subop/push
1/mod/*+disp8
0/rm32/eax
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># push *(eax+
4)
</span>
1211 <span id=
"L1152" class=
"LineNr">1152 </span> <span class=
"subxS2Comment"># . . call
</span>
1212 <span id=
"L1153" class=
"LineNr">1153 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
1213 <span id=
"L1154" class=
"LineNr">1154 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1214 <span id=
"L1155" class=
"LineNr">1155 </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>
1215 <span id=
"L1156" class=
"LineNr">1156 </span> <span class=
"subxS1Comment"># . epilogue
</span>
1216 <span id=
"L1157" class=
"LineNr">1157 </span> 89/copy
3/mod/direct
4/rm32/esp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 5/r32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ebp to esp
</span>
1217 <span id=
"L1158" class=
"LineNr">1158 </span> 5d/pop-to-ebp
1218 <span id=
"L1159" class=
"LineNr">1159 </span> c3/return
1219 <span id=
"L1160" class=
"LineNr">1160 </span>
1220 <span id=
"L1161" class=
"LineNr">1161 </span><span class=
"subxTest">test-skip-string-ignores-escapes
</span>:
1221 <span id=
"L1162" class=
"LineNr">1162 </span> <span class=
"subxS1Comment"># . prologue
</span>
1222 <span id=
"L1163" class=
"LineNr">1163 </span> 55/push-ebp
1223 <span id=
"L1164" class=
"LineNr">1164 </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>
1224 <span id=
"L1165" class=
"LineNr">1165 </span> <span class=
"subxComment"># setup
</span>
1225 <span id=
"L1166" class=
"LineNr">1166 </span> <span class=
"subxS1Comment"># . clear-stream(_test-stream)
</span>
1226 <span id=
"L1167" class=
"LineNr">1167 </span> <span class=
"subxS2Comment"># . . push args
</span>
1227 <span id=
"L1168" class=
"LineNr">1168 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1228 <span id=
"L1169" class=
"LineNr">1169 </span> <span class=
"subxS2Comment"># . . call
</span>
1229 <span id=
"L1170" class=
"LineNr">1170 </span> e8/call
<a href='
106stream.subx.html#L20'
>clear-stream
</a>/disp32
1230 <span id=
"L1171" class=
"LineNr">1171 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1231 <span id=
"L1172" class=
"LineNr">1172 </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>
1232 <span id=
"L1173" class=
"LineNr">1173 </span> <span class=
"subxS1Comment"># . write(_test-stream,
"\
"a\\\
"b\
"/yz
")
</span>
1233 <span id=
"L1174" class=
"LineNr">1174 </span> <span class=
"subxS1Comment"># . indices:
01 2 34 56</span>
1234 <span id=
"L1175" class=
"LineNr">1175 </span> <span class=
"subxS2Comment"># . . push args
</span>
1235 <span id=
"L1176" class=
"LineNr">1176 </span> 68/push
<span class=
"Constant">"\
"</span>a\\\
<span class=
"Constant">"b\
"</span>/yz
"/imm32
1236 <span id=
"L1177" class=
"LineNr">1177 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1237 <span id=
"L1178" class=
"LineNr">1178 </span> <span class=
"subxS2Comment"># . . call
</span>
1238 <span id=
"L1179" class=
"LineNr">1179 </span> e8/call
<a href='
108write.subx.html#L11'
>write
</a>/disp32
1239 <span id=
"L1180" class=
"LineNr">1180 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1240 <span id=
"L1181" class=
"LineNr">1181 </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>
1241 <span id=
"L1182" class=
"LineNr">1182 </span> <span class=
"subxComment"># precondition: line-
>read ==
0</span>
1242 <span id=
"L1183" class=
"LineNr">1183 </span> <span class=
"subxS2Comment"># . . push args
</span>
1243 <span id=
"L1184" class=
"LineNr">1184 </span> 68/push
<span class=
"Constant">"F -
<a href='
124next-token.subx.html#L1161'
>test-skip-string-ignores-escapes
</a>/precondition
"</span>/imm32
1244 <span id=
"L1185" class=
"LineNr">1185 </span> 68/push
0/imm32
1245 <span id=
"L1186" class=
"LineNr">1186 </span> b8/copy-to-eax
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1246 <span id=
"L1187" class=
"LineNr">1187 </span> ff
6/subop/push
1/mod/*+disp8
0/rm32/eax
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># push *(eax+
4)
</span>
1247 <span id=
"L1188" class=
"LineNr">1188 </span> <span class=
"subxS2Comment"># . . call
</span>
1248 <span id=
"L1189" class=
"LineNr">1189 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
1249 <span id=
"L1190" class=
"LineNr">1190 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1250 <span id=
"L1191" class=
"LineNr">1191 </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>
1251 <span id=
"L1192" class=
"LineNr">1192 </span> <span class=
"subxComment"># skip-string(_test-stream)
</span>
1252 <span id=
"L1193" class=
"LineNr">1193 </span> <span class=
"subxS2Comment"># . . push args
</span>
1253 <span id=
"L1194" class=
"LineNr">1194 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1254 <span id=
"L1195" class=
"LineNr">1195 </span> <span class=
"subxS2Comment"># . . call
</span>
1255 <span id=
"L1196" class=
"LineNr">1196 </span> e8/call
<a href='
124next-token.subx.html#L1018'
>skip-string
</a>/disp32
1256 <span id=
"L1197" class=
"LineNr">1197 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1257 <span id=
"L1198" class=
"LineNr">1198 </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>
1258 <span id=
"L1199" class=
"LineNr">1199 </span> <span class=
"subxComment"># check-ints-equal(line-
>read,
6, msg)
</span>
1259 <span id=
"L1200" class=
"LineNr">1200 </span> <span class=
"subxS2Comment"># . . push args
</span>
1260 <span id=
"L1201" class=
"LineNr">1201 </span> 68/push
<span class=
"Constant">"F - test-skip-string-ignores-escapes
"</span>/imm32
1261 <span id=
"L1202" class=
"LineNr">1202 </span> 68/push
6/imm32
1262 <span id=
"L1203" class=
"LineNr">1203 </span> b8/copy-to-eax
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1263 <span id=
"L1204" class=
"LineNr">1204 </span> ff
6/subop/push
1/mod/*+disp8
0/rm32/eax
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># push *(eax+
4)
</span>
1264 <span id=
"L1205" class=
"LineNr">1205 </span> <span class=
"subxS2Comment"># . . call
</span>
1265 <span id=
"L1206" class=
"LineNr">1206 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
1266 <span id=
"L1207" class=
"LineNr">1207 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1267 <span id=
"L1208" class=
"LineNr">1208 </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>
1268 <span id=
"L1209" class=
"LineNr">1209 </span> <span class=
"subxS1Comment"># . epilogue
</span>
1269 <span id=
"L1210" class=
"LineNr">1210 </span> 89/copy
3/mod/direct
4/rm32/esp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 5/r32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ebp to esp
</span>
1270 <span id=
"L1211" class=
"LineNr">1211 </span> 5d/pop-to-ebp
1271 <span id=
"L1212" class=
"LineNr">1212 </span> c3/return
1272 <span id=
"L1213" class=
"LineNr">1213 </span>
1273 <span id=
"L1214" class=
"LineNr">1214 </span><span class=
"subxTest">test-skip-string-works-from-mid-stream
</span>:
1274 <span id=
"L1215" class=
"LineNr">1215 </span> <span class=
"subxS1Comment"># . prologue
</span>
1275 <span id=
"L1216" class=
"LineNr">1216 </span> 55/push-ebp
1276 <span id=
"L1217" class=
"LineNr">1217 </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>
1277 <span id=
"L1218" class=
"LineNr">1218 </span> <span class=
"subxComment"># setup
</span>
1278 <span id=
"L1219" class=
"LineNr">1219 </span> <span class=
"subxS1Comment"># . clear-stream(_test-stream)
</span>
1279 <span id=
"L1220" class=
"LineNr">1220 </span> <span class=
"subxS2Comment"># . . push args
</span>
1280 <span id=
"L1221" class=
"LineNr">1221 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1281 <span id=
"L1222" class=
"LineNr">1222 </span> <span class=
"subxS2Comment"># . . call
</span>
1282 <span id=
"L1223" class=
"LineNr">1223 </span> e8/call
<a href='
106stream.subx.html#L20'
>clear-stream
</a>/disp32
1283 <span id=
"L1224" class=
"LineNr">1224 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1284 <span id=
"L1225" class=
"LineNr">1225 </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>
1285 <span id=
"L1226" class=
"LineNr">1226 </span> <span class=
"subxS1Comment"># . write(_test-stream,
"0 \
"a\\\
"b\
"/yz
")
</span>
1286 <span id=
"L1227" class=
"LineNr">1227 </span> <span class=
"subxS1Comment"># . indices:
01 2 34 56</span>
1287 <span id=
"L1228" class=
"LineNr">1228 </span> <span class=
"subxS2Comment"># . . push args
</span>
1288 <span id=
"L1229" class=
"LineNr">1229 </span> 68/push
<span class=
"Constant">"0 \
"</span>a\\\
<span class=
"Constant">"b\
"</span>/yz
"/imm32
1289 <span id=
"L1230" class=
"LineNr">1230 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1290 <span id=
"L1231" class=
"LineNr">1231 </span> <span class=
"subxS2Comment"># . . call
</span>
1291 <span id=
"L1232" class=
"LineNr">1232 </span> e8/call
<a href='
108write.subx.html#L11'
>write
</a>/disp32
1292 <span id=
"L1233" class=
"LineNr">1233 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1293 <span id=
"L1234" class=
"LineNr">1234 </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>
1294 <span id=
"L1235" class=
"LineNr">1235 </span> <span class=
"subxComment"># precondition: line-
>read ==
2</span>
1295 <span id=
"L1236" class=
"LineNr">1236 </span> b8/copy-to-eax
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1296 <span id=
"L1237" class=
"LineNr">1237 </span> c7
0/subop/copy
1/mod/*+disp8
0/rm32/eax
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 4/disp8
2/imm32
<span class=
"subxComment"># copy to *(eax+
4)
</span>
1297 <span id=
"L1238" class=
"LineNr">1238 </span> <span class=
"subxComment"># skip-string(_test-stream)
</span>
1298 <span id=
"L1239" class=
"LineNr">1239 </span> <span class=
"subxS2Comment"># . . push args
</span>
1299 <span id=
"L1240" class=
"LineNr">1240 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1300 <span id=
"L1241" class=
"LineNr">1241 </span> <span class=
"subxS2Comment"># . . call
</span>
1301 <span id=
"L1242" class=
"LineNr">1242 </span> e8/call
<a href='
124next-token.subx.html#L1018'
>skip-string
</a>/disp32
1302 <span id=
"L1243" class=
"LineNr">1243 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1303 <span id=
"L1244" class=
"LineNr">1244 </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>
1304 <span id=
"L1245" class=
"LineNr">1245 </span> <span class=
"subxComment"># check-ints-equal(line-
>read,
8, msg)
</span>
1305 <span id=
"L1246" class=
"LineNr">1246 </span> <span class=
"subxS2Comment"># . . push args
</span>
1306 <span id=
"L1247" class=
"LineNr">1247 </span> 68/push
<span class=
"Constant">"F - test-skip-string-works-from-mid-stream
"</span>/imm32
1307 <span id=
"L1248" class=
"LineNr">1248 </span> 68/push
8/imm32
1308 <span id=
"L1249" class=
"LineNr">1249 </span> b8/copy-to-eax
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1309 <span id=
"L1250" class=
"LineNr">1250 </span> ff
6/subop/push
1/mod/*+disp8
0/rm32/eax
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># push *(eax+
4)
</span>
1310 <span id=
"L1251" class=
"LineNr">1251 </span> <span class=
"subxS2Comment"># . . call
</span>
1311 <span id=
"L1252" class=
"LineNr">1252 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
1312 <span id=
"L1253" class=
"LineNr">1253 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1313 <span id=
"L1254" class=
"LineNr">1254 </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>
1314 <span id=
"L1255" class=
"LineNr">1255 </span> <span class=
"subxS1Comment"># . epilogue
</span>
1315 <span id=
"L1256" class=
"LineNr">1256 </span> 89/copy
3/mod/direct
4/rm32/esp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 5/r32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ebp to esp
</span>
1316 <span id=
"L1257" class=
"LineNr">1257 </span> 5d/pop-to-ebp
1317 <span id=
"L1258" class=
"LineNr">1258 </span> c3/return
1318 <span id=
"L1259" class=
"LineNr">1259 </span>
1319 <span id=
"L1260" class=
"LineNr">1260 </span><span class=
"subxFunction">skip-string-in-slice
</span>:
<span class=
"subxComment"># curr: (addr byte), end: (addr byte) -
> curr/eax: (addr byte)
</span>
1320 <span id=
"L1261" class=
"LineNr">1261 </span> <span class=
"subxS1Comment"># . prologue
</span>
1321 <span id=
"L1262" class=
"LineNr">1262 </span> 55/push-ebp
1322 <span id=
"L1263" class=
"LineNr">1263 </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>
1323 <span id=
"L1264" class=
"LineNr">1264 </span> <span class=
"subxS1Comment"># . save registers
</span>
1324 <span id=
"L1265" class=
"LineNr">1265 </span> 51/push-ecx
1325 <span id=
"L1266" class=
"LineNr">1266 </span> 52/push-edx
1326 <span id=
"L1267" class=
"LineNr">1267 </span> 53/push-ebx
1327 <span id=
"L1268" class=
"LineNr">1268 </span> <span class=
"subxComment"># ecx = curr
</span>
1328 <span id=
"L1269" class=
"LineNr">1269 </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>
1329 <span id=
"L1270" class=
"LineNr">1270 </span> <span class=
"subxComment"># edx = end
</span>
1330 <span id=
"L1271" class=
"LineNr">1271 </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>
1331 <span id=
"L1272" class=
"LineNr">1272 </span> <span class=
"subxComment"># var c/eax: byte =
0</span>
1332 <span id=
"L1273" class=
"LineNr">1273 </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>
1333 <span id=
"L1274" class=
"LineNr">1274 </span> <span class=
"subxComment"># skip initial dquote
</span>
1334 <span id=
"L1275" class=
"LineNr">1275 </span> 41/increment-ecx
1335 <span id=
"L1276" class=
"LineNr">1276 </span><span class=
"Constant">$skip-string-in-slice:loop
</span>:
1336 <span id=
"L1277" class=
"LineNr">1277 </span> <span class=
"subxComment"># if (curr
>= end) return curr
</span>
1337 <span id=
"L1278" class=
"LineNr">1278 </span> 39/compare
3/mod/direct
1/rm32/ecx
<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 ecx with edx
</span>
1338 <span id=
"L1279" class=
"LineNr">1279 </span> 73/jump-if-addr
>= $skip-string-in-slice:return-curr/disp8
1339 <span id=
"L1280" class=
"LineNr">1280 </span> <span class=
"subxComment"># c = *curr
</span>
1340 <span id=
"L1281" class=
"LineNr">1281 </span> 8a/copy-byte
0/mod/indirect
1/rm32/ecx
<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 *ecx to AL
</span>
1341 <span id=
"L1282" class=
"LineNr">1282 </span><span class=
"Constant">$skip-string-in-slice:dquote
</span>:
1342 <span id=
"L1283" class=
"LineNr">1283 </span> <span class=
"subxComment"># if (c == '
"') break
</span>
1343 <span id=
"L1284" class=
"LineNr">1284 </span> 3d/compare-eax-and
0x22/imm32/double-quote
1344 <span id=
"L1285" class=
"LineNr">1285 </span> 74/jump-if-= $skip-string-in-slice:
<span class=
"Constant">break
</span>/disp8
1345 <span id=
"L1286" class=
"LineNr">1286 </span><span class=
"Constant">$skip-string-in-slice:check-for-escape
</span>:
1346 <span id=
"L1287" class=
"LineNr">1287 </span> <span class=
"subxComment"># if (c == '\') escape next char
</span>
1347 <span id=
"L1288" class=
"LineNr">1288 </span> 3d/compare-eax-and
0x5c/imm32/backslash
1348 <span id=
"L1289" class=
"LineNr">1289 </span> 75/jump-if-!= $skip-string-in-slice:continue/disp8
1349 <span id=
"L1290" class=
"LineNr">1290 </span><span class=
"Constant">$skip-string-in-slice:escape
</span>:
1350 <span id=
"L1291" class=
"LineNr">1291 </span> 41/increment-ecx
1351 <span id=
"L1292" class=
"LineNr">1292 </span><span class=
"Constant">$skip-string-in-slice:continue
</span>:
1352 <span id=
"L1293" class=
"LineNr">1293 </span> <span class=
"subxComment"># ++curr
</span>
1353 <span id=
"L1294" class=
"LineNr">1294 </span> 41/increment-ecx
1354 <span id=
"L1295" class=
"LineNr">1295 </span> eb/jump $skip-string-in-slice:
<span class=
"Constant">loop
</span>/disp8
1355 <span id=
"L1296" class=
"LineNr">1296 </span><span class=
"Constant">$skip-string-in-slice:break
</span>:
1356 <span id=
"L1297" class=
"LineNr">1297 </span> <span class=
"subxComment"># skip final dquote
</span>
1357 <span id=
"L1298" class=
"LineNr">1298 </span> 41/increment-ecx
1358 <span id=
"L1299" class=
"LineNr">1299 </span><span class=
"Constant">$skip-string-in-slice:return-curr
</span>:
1359 <span id=
"L1300" class=
"LineNr">1300 </span> <span class=
"subxComment"># return curr
</span>
1360 <span id=
"L1301" class=
"LineNr">1301 </span> 89/copy
3/mod/direct
0/rm32/eax
<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 ecx to eax
</span>
1361 <span id=
"L1302" class=
"LineNr">1302 </span><span class=
"Constant">$skip-string-in-slice:end
</span>:
1362 <span id=
"L1303" class=
"LineNr">1303 </span> <span class=
"subxS1Comment"># . restore registers
</span>
1363 <span id=
"L1304" class=
"LineNr">1304 </span> 5b/pop-to-ebx
1364 <span id=
"L1305" class=
"LineNr">1305 </span> 5a/pop-to-edx
1365 <span id=
"L1306" class=
"LineNr">1306 </span> 59/pop-to-ecx
1366 <span id=
"L1307" class=
"LineNr">1307 </span> <span class=
"subxS1Comment"># . epilogue
</span>
1367 <span id=
"L1308" class=
"LineNr">1308 </span> 89/copy
3/mod/direct
4/rm32/esp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 5/r32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ebp to esp
</span>
1368 <span id=
"L1309" class=
"LineNr">1309 </span> 5d/pop-to-ebp
1369 <span id=
"L1310" class=
"LineNr">1310 </span> c3/return
1370 <span id=
"L1311" class=
"LineNr">1311 </span>
1371 <span id=
"L1312" class=
"LineNr">1312 </span><span class=
"subxTest">test-skip-string-in-slice
</span>:
1372 <span id=
"L1313" class=
"LineNr">1313 </span> <span class=
"subxS1Comment"># . prologue
</span>
1373 <span id=
"L1314" class=
"LineNr">1314 </span> 55/push-ebp
1374 <span id=
"L1315" class=
"LineNr">1315 </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>
1375 <span id=
"L1316" class=
"LineNr">1316 </span> <span class=
"subxComment"># setup: (eax..ecx) =
"\
"abc\
" def
"</span>
1376 <span id=
"L1317" class=
"LineNr">1317 </span> b8/copy-to-eax
<span class=
"Constant">"\
"</span>abc\
<span class=
"Constant">" def
"</span>/imm32
1377 <span id=
"L1318" class=
"LineNr">1318 </span> 8b/copy
0/mod/indirect
0/rm32/eax
<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 *eax to ecx
</span>
1378 <span id=
"L1319" class=
"LineNr">1319 </span> 8d/copy-address
1/mod/*+disp8
4/rm32/sib
0/base/eax
1/index/ecx
<span class=
"Normal"> .
</span> 1/r32/ecx
4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy eax+ecx+
4 to ecx
</span>
1379 <span id=
"L1320" class=
"LineNr">1320 </span> 05/add-to-eax
4/imm32
1380 <span id=
"L1321" class=
"LineNr">1321 </span> <span class=
"subxComment"># eax = skip-string-in-slice(eax, ecx)
</span>
1381 <span id=
"L1322" class=
"LineNr">1322 </span> <span class=
"subxS2Comment"># . . push args
</span>
1382 <span id=
"L1323" class=
"LineNr">1323 </span> 51/push-ecx
1383 <span id=
"L1324" class=
"LineNr">1324 </span> 50/push-eax
1384 <span id=
"L1325" class=
"LineNr">1325 </span> <span class=
"subxS2Comment"># . . call
</span>
1385 <span id=
"L1326" class=
"LineNr">1326 </span> e8/call
<a href='
124next-token.subx.html#L1260'
>skip-string-in-slice
</a>/disp32
1386 <span id=
"L1327" class=
"LineNr">1327 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1387 <span id=
"L1328" class=
"LineNr">1328 </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>
1388 <span id=
"L1329" class=
"LineNr">1329 </span> <span class=
"subxComment"># check-ints-equal(ecx-eax,
4, msg) # number of chars remaining after the string literal
</span>
1389 <span id=
"L1330" class=
"LineNr">1330 </span> <span class=
"subxS2Comment"># . . push args
</span>
1390 <span id=
"L1331" class=
"LineNr">1331 </span> 68/push
<span class=
"Constant">"F - test-skip-string-in-slice
"</span>/imm32
1391 <span id=
"L1332" class=
"LineNr">1332 </span> 68/push
4/imm32
1392 <span id=
"L1333" class=
"LineNr">1333 </span> <span class=
"subxS2Comment"># . . push ecx-eax
</span>
1393 <span id=
"L1334" class=
"LineNr">1334 </span> 29/subtract
3/mod/direct
1/rm32/ecx
<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"># subtract eax from ecx
</span>
1394 <span id=
"L1335" class=
"LineNr">1335 </span> 51/push-ecx
1395 <span id=
"L1336" class=
"LineNr">1336 </span> <span class=
"subxS2Comment"># . . call
</span>
1396 <span id=
"L1337" class=
"LineNr">1337 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
1397 <span id=
"L1338" class=
"LineNr">1338 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1398 <span id=
"L1339" class=
"LineNr">1339 </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>
1399 <span id=
"L1340" class=
"LineNr">1340 </span> <span class=
"subxS1Comment"># . epilogue
</span>
1400 <span id=
"L1341" class=
"LineNr">1341 </span> 89/copy
3/mod/direct
4/rm32/esp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 5/r32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ebp to esp
</span>
1401 <span id=
"L1342" class=
"LineNr">1342 </span> 5d/pop-to-ebp
1402 <span id=
"L1343" class=
"LineNr">1343 </span> c3/return
1403 <span id=
"L1344" class=
"LineNr">1344 </span>
1404 <span id=
"L1345" class=
"LineNr">1345 </span><span class=
"subxTest">test-skip-string-in-slice-ignores-spaces
</span>:
1405 <span id=
"L1346" class=
"LineNr">1346 </span> <span class=
"subxS1Comment"># . prologue
</span>
1406 <span id=
"L1347" class=
"LineNr">1347 </span> 55/push-ebp
1407 <span id=
"L1348" class=
"LineNr">1348 </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>
1408 <span id=
"L1349" class=
"LineNr">1349 </span> <span class=
"subxComment"># setup: (eax..ecx) =
"\
"a b\
"/yz
"</span>
1409 <span id=
"L1350" class=
"LineNr">1350 </span> b8/copy-to-eax
<span class=
"Constant">"\
"</span>a b\
<span class=
"Constant">"/yz
"</span>/imm32
1410 <span id=
"L1351" class=
"LineNr">1351 </span> 8b/copy
0/mod/indirect
0/rm32/eax
<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 *eax to ecx
</span>
1411 <span id=
"L1352" class=
"LineNr">1352 </span> 8d/copy-address
1/mod/*+disp8
4/rm32/sib
0/base/eax
1/index/ecx
<span class=
"Normal"> .
</span> 1/r32/ecx
4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy eax+ecx+
4 to ecx
</span>
1412 <span id=
"L1353" class=
"LineNr">1353 </span> 05/add-to-eax
4/imm32
1413 <span id=
"L1354" class=
"LineNr">1354 </span> <span class=
"subxComment"># eax = skip-string-in-slice(eax, ecx)
</span>
1414 <span id=
"L1355" class=
"LineNr">1355 </span> <span class=
"subxS2Comment"># . . push args
</span>
1415 <span id=
"L1356" class=
"LineNr">1356 </span> 51/push-ecx
1416 <span id=
"L1357" class=
"LineNr">1357 </span> 50/push-eax
1417 <span id=
"L1358" class=
"LineNr">1358 </span> <span class=
"subxS2Comment"># . . call
</span>
1418 <span id=
"L1359" class=
"LineNr">1359 </span> e8/call
<a href='
124next-token.subx.html#L1260'
>skip-string-in-slice
</a>/disp32
1419 <span id=
"L1360" class=
"LineNr">1360 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1420 <span id=
"L1361" class=
"LineNr">1361 </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>
1421 <span id=
"L1362" class=
"LineNr">1362 </span> <span class=
"subxComment"># check-ints-equal(ecx-eax,
3, msg) # number of chars remaining after the string literal
</span>
1422 <span id=
"L1363" class=
"LineNr">1363 </span> <span class=
"subxS2Comment"># . . push args
</span>
1423 <span id=
"L1364" class=
"LineNr">1364 </span> 68/push
<span class=
"Constant">"F - test-skip-string-in-slice-ignores-spaces
"</span>/imm32
1424 <span id=
"L1365" class=
"LineNr">1365 </span> 68/push
3/imm32
1425 <span id=
"L1366" class=
"LineNr">1366 </span> <span class=
"subxS2Comment"># . . push ecx-eax
</span>
1426 <span id=
"L1367" class=
"LineNr">1367 </span> 29/subtract
3/mod/direct
1/rm32/ecx
<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"># subtract eax from ecx
</span>
1427 <span id=
"L1368" class=
"LineNr">1368 </span> 51/push-ecx
1428 <span id=
"L1369" class=
"LineNr">1369 </span> <span class=
"subxS2Comment"># . . call
</span>
1429 <span id=
"L1370" class=
"LineNr">1370 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
1430 <span id=
"L1371" class=
"LineNr">1371 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1431 <span id=
"L1372" class=
"LineNr">1372 </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>
1432 <span id=
"L1373" class=
"LineNr">1373 </span> <span class=
"subxS1Comment"># . epilogue
</span>
1433 <span id=
"L1374" class=
"LineNr">1374 </span> 89/copy
3/mod/direct
4/rm32/esp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 5/r32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ebp to esp
</span>
1434 <span id=
"L1375" class=
"LineNr">1375 </span> 5d/pop-to-ebp
1435 <span id=
"L1376" class=
"LineNr">1376 </span> c3/return
1436 <span id=
"L1377" class=
"LineNr">1377 </span>
1437 <span id=
"L1378" class=
"LineNr">1378 </span><span class=
"subxTest">test-skip-string-in-slice-ignores-escapes
</span>:
1438 <span id=
"L1379" class=
"LineNr">1379 </span> <span class=
"subxS1Comment"># . prologue
</span>
1439 <span id=
"L1380" class=
"LineNr">1380 </span> 55/push-ebp
1440 <span id=
"L1381" class=
"LineNr">1381 </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>
1441 <span id=
"L1382" class=
"LineNr">1382 </span> <span class=
"subxComment"># setup: (eax..ecx) =
"\
"a\\\
"b\
"/yz
"</span>
1442 <span id=
"L1383" class=
"LineNr">1383 </span> b8/copy-to-eax
<span class=
"Constant">"\
"</span>a\\\
<span class=
"Constant">"b\
"</span>/yz
"/imm32
1443 <span id=
"L1384" class=
"LineNr">1384 </span> 8b/copy
0/mod/indirect
0/rm32/eax
<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 *eax to ecx
</span>
1444 <span id=
"L1385" class=
"LineNr">1385 </span> 8d/copy-address
1/mod/*+disp8
4/rm32/sib
0/base/eax
1/index/ecx
<span class=
"Normal"> .
</span> 1/r32/ecx
4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy eax+ecx+
4 to ecx
</span>
1445 <span id=
"L1386" class=
"LineNr">1386 </span> 05/add-to-eax
4/imm32
1446 <span id=
"L1387" class=
"LineNr">1387 </span> <span class=
"subxComment"># eax = skip-string-in-slice(eax, ecx)
</span>
1447 <span id=
"L1388" class=
"LineNr">1388 </span> <span class=
"subxS2Comment"># . . push args
</span>
1448 <span id=
"L1389" class=
"LineNr">1389 </span> 51/push-ecx
1449 <span id=
"L1390" class=
"LineNr">1390 </span> 50/push-eax
1450 <span id=
"L1391" class=
"LineNr">1391 </span> <span class=
"subxS2Comment"># . . call
</span>
1451 <span id=
"L1392" class=
"LineNr">1392 </span> e8/call
<a href='
124next-token.subx.html#L1260'
>skip-string-in-slice
</a>/disp32
1452 <span id=
"L1393" class=
"LineNr">1393 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1453 <span id=
"L1394" class=
"LineNr">1394 </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>
1454 <span id=
"L1395" class=
"LineNr">1395 </span> <span class=
"subxComment"># check-ints-equal(ecx-eax,
3, msg) # number of chars remaining after the string literal
</span>
1455 <span id=
"L1396" class=
"LineNr">1396 </span> <span class=
"subxS2Comment"># . . push args
</span>
1456 <span id=
"L1397" class=
"LineNr">1397 </span> 68/push
<span class=
"Constant">"F - test-skip-string-in-slice-ignores-escapes
"</span>/imm32
1457 <span id=
"L1398" class=
"LineNr">1398 </span> 68/push
3/imm32
1458 <span id=
"L1399" class=
"LineNr">1399 </span> <span class=
"subxS2Comment"># . . push ecx-eax
</span>
1459 <span id=
"L1400" class=
"LineNr">1400 </span> 29/subtract
3/mod/direct
1/rm32/ecx
<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"># subtract eax from ecx
</span>
1460 <span id=
"L1401" class=
"LineNr">1401 </span> 51/push-ecx
1461 <span id=
"L1402" class=
"LineNr">1402 </span> <span class=
"subxS2Comment"># . . call
</span>
1462 <span id=
"L1403" class=
"LineNr">1403 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
1463 <span id=
"L1404" class=
"LineNr">1404 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1464 <span id=
"L1405" class=
"LineNr">1405 </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>
1465 <span id=
"L1406" class=
"LineNr">1406 </span> <span class=
"subxS1Comment"># . epilogue
</span>
1466 <span id=
"L1407" class=
"LineNr">1407 </span> 89/copy
3/mod/direct
4/rm32/esp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 5/r32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ebp to esp
</span>
1467 <span id=
"L1408" class=
"LineNr">1408 </span> 5d/pop-to-ebp
1468 <span id=
"L1409" class=
"LineNr">1409 </span> c3/return
1469 <span id=
"L1410" class=
"LineNr">1410 </span>
1470 <span id=
"L1411" class=
"LineNr">1411 </span><span class=
"subxTest">test-skip-string-in-slice-stops-at-end
</span>:
1471 <span id=
"L1412" class=
"LineNr">1412 </span> <span class=
"subxS1Comment"># . prologue
</span>
1472 <span id=
"L1413" class=
"LineNr">1413 </span> 55/push-ebp
1473 <span id=
"L1414" class=
"LineNr">1414 </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>
1474 <span id=
"L1415" class=
"LineNr">1415 </span> <span class=
"subxComment"># setup: (eax..ecx) =
"\
"abc
" # unbalanced dquote
</span>
1475 <span id=
"L1416" class=
"LineNr">1416 </span> b8/copy-to-eax
<span class=
"Constant">"\
"</span>abc
"/imm32
1476 <span id=
"L1417" class=
"LineNr">1417 </span> 8b/copy
0/mod/indirect
0/rm32/eax
<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 *eax to ecx
</span>
1477 <span id=
"L1418" class=
"LineNr">1418 </span> 8d/copy-address
1/mod/*+disp8
4/rm32/sib
0/base/eax
1/index/ecx
<span class=
"Normal"> .
</span> 1/r32/ecx
4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy eax+ecx+
4 to ecx
</span>
1478 <span id=
"L1419" class=
"LineNr">1419 </span> 05/add-to-eax
4/imm32
1479 <span id=
"L1420" class=
"LineNr">1420 </span> <span class=
"subxComment"># eax = skip-string-in-slice(eax, ecx)
</span>
1480 <span id=
"L1421" class=
"LineNr">1421 </span> <span class=
"subxS2Comment"># . . push args
</span>
1481 <span id=
"L1422" class=
"LineNr">1422 </span> 51/push-ecx
1482 <span id=
"L1423" class=
"LineNr">1423 </span> 50/push-eax
1483 <span id=
"L1424" class=
"LineNr">1424 </span> <span class=
"subxS2Comment"># . . call
</span>
1484 <span id=
"L1425" class=
"LineNr">1425 </span> e8/call
<a href='
124next-token.subx.html#L1260'
>skip-string-in-slice
</a>/disp32
1485 <span id=
"L1426" class=
"LineNr">1426 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1486 <span id=
"L1427" class=
"LineNr">1427 </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>
1487 <span id=
"L1428" class=
"LineNr">1428 </span> <span class=
"subxComment"># check-ints-equal(ecx-eax,
0, msg) # skipped to end of slice
</span>
1488 <span id=
"L1429" class=
"LineNr">1429 </span> <span class=
"subxS2Comment"># . . push args
</span>
1489 <span id=
"L1430" class=
"LineNr">1430 </span> 68/push
<span class=
"Constant">"F - test-skip-string-in-slice-stops-at-end
"</span>/imm32
1490 <span id=
"L1431" class=
"LineNr">1431 </span> 68/push
0/imm32
1491 <span id=
"L1432" class=
"LineNr">1432 </span> <span class=
"subxS2Comment"># . . push ecx-eax
</span>
1492 <span id=
"L1433" class=
"LineNr">1433 </span> 29/subtract
3/mod/direct
1/rm32/ecx
<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"># subtract eax from ecx
</span>
1493 <span id=
"L1434" class=
"LineNr">1434 </span> 51/push-ecx
1494 <span id=
"L1435" class=
"LineNr">1435 </span> <span class=
"subxS2Comment"># . . call
</span>
1495 <span id=
"L1436" class=
"LineNr">1436 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
1496 <span id=
"L1437" class=
"LineNr">1437 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1497 <span id=
"L1438" class=
"LineNr">1438 </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>
1498 <span id=
"L1439" class=
"LineNr">1439 </span> <span class=
"subxS1Comment"># . epilogue
</span>
1499 <span id=
"L1440" class=
"LineNr">1440 </span> 89/copy
3/mod/direct
4/rm32/esp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 5/r32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ebp to esp
</span>
1500 <span id=
"L1441" class=
"LineNr">1441 </span> 5d/pop-to-ebp
1501 <span id=
"L1442" class=
"LineNr">1442 </span> c3/return
1502 <span id=
"L1443" class=
"LineNr">1443 </span>
1503 <span id=
"L1444" class=
"LineNr">1444 </span><span class=
"subxComment"># update line-
>read to ')'
</span>
1504 <span id=
"L1445" class=
"LineNr">1445 </span><span class=
"subxComment"># line-
>read ends at ')'
</span>
1505 <span id=
"L1446" class=
"LineNr">1446 </span><span class=
"subxFunction">skip-until-close-paren
</span>:
<span class=
"subxComment"># line: (addr stream byte)
</span>
1506 <span id=
"L1447" class=
"LineNr">1447 </span> <span class=
"subxS1Comment"># . prologue
</span>
1507 <span id=
"L1448" class=
"LineNr">1448 </span> 55/push-ebp
1508 <span id=
"L1449" class=
"LineNr">1449 </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>
1509 <span id=
"L1450" class=
"LineNr">1450 </span> <span class=
"subxS1Comment"># . save registers
</span>
1510 <span id=
"L1451" class=
"LineNr">1451 </span> 50/push-eax
1511 <span id=
"L1452" class=
"LineNr">1452 </span> 51/push-ecx
1512 <span id=
"L1453" class=
"LineNr">1453 </span> 52/push-edx
1513 <span id=
"L1454" class=
"LineNr">1454 </span> <span class=
"subxComment"># ecx = line
</span>
1514 <span id=
"L1455" class=
"LineNr">1455 </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>
1515 <span id=
"L1456" class=
"LineNr">1456 </span> <span class=
"subxComment"># eax = skip-until-close-paren-in-slice(
&line-
>data[line-
>read],
&line-
>data[line-
>write])
</span>
1516 <span id=
"L1457" class=
"LineNr">1457 </span> <span class=
"subxS2Comment"># . . push
&line-
>data[line-
>write]
</span>
1517 <span id=
"L1458" class=
"LineNr">1458 </span> 8b/copy
1/mod/*+disp8
1/rm32/ecx
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 2/r32/edx
8/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy *(ecx+
8) to edx
</span>
1518 <span id=
"L1459" class=
"LineNr">1459 </span> 8d/copy-address
1/mod/*+disp8
4/rm32/sib
1/base/ecx
2/index/edx
<span class=
"Normal"> .
</span> 2/r32/edx
0xc/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ecx+edx+
12 to edx
</span>
1519 <span id=
"L1460" class=
"LineNr">1460 </span> 52/push-edx
1520 <span id=
"L1461" class=
"LineNr">1461 </span> <span class=
"subxS2Comment"># . . push
&line-
>data[line-
>read]
</span>
1521 <span id=
"L1462" class=
"LineNr">1462 </span> 8b/copy
1/mod/*+disp8
1/rm32/ecx
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 2/r32/edx
4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy *(ecx+
4) to edx
</span>
1522 <span id=
"L1463" class=
"LineNr">1463 </span> 8d/copy-address
1/mod/*+disp8
4/rm32/sib
1/base/ecx
2/index/edx
<span class=
"Normal"> .
</span> 2/r32/edx
0xc/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ecx+edx+
12 to edx
</span>
1523 <span id=
"L1464" class=
"LineNr">1464 </span> 52/push-edx
1524 <span id=
"L1465" class=
"LineNr">1465 </span> <span class=
"subxS2Comment"># . . call
</span>
1525 <span id=
"L1466" class=
"LineNr">1466 </span> e8/call
<a href='
124next-token.subx.html#L1633'
>skip-until-close-paren-in-slice
</a>/disp32
1526 <span id=
"L1467" class=
"LineNr">1467 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1527 <span id=
"L1468" class=
"LineNr">1468 </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>
1528 <span id=
"L1469" class=
"LineNr">1469 </span> <span class=
"subxComment"># line-
>read = eax - line-
>data
</span>
1529 <span id=
"L1470" class=
"LineNr">1470 </span> 29/subtract
3/mod/direct
0/rm32/eax
<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"># subtract ecx from eax
</span>
1530 <span id=
"L1471" class=
"LineNr">1471 </span> 2d/subtract-from-eax
0xc/imm32
1531 <span id=
"L1472" class=
"LineNr">1472 </span> 89/copy
1/mod/*+disp8
1/rm32/ecx
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 0/r32/eax
4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy eax to *(ecx+
4)
</span>
1532 <span id=
"L1473" class=
"LineNr">1473 </span><span class=
"Constant">$skip-until-close-paren:end
</span>:
1533 <span id=
"L1474" class=
"LineNr">1474 </span> <span class=
"subxS1Comment"># . restore registers
</span>
1534 <span id=
"L1475" class=
"LineNr">1475 </span> 5a/pop-to-edx
1535 <span id=
"L1476" class=
"LineNr">1476 </span> 59/pop-to-ecx
1536 <span id=
"L1477" class=
"LineNr">1477 </span> 58/pop-to-eax
1537 <span id=
"L1478" class=
"LineNr">1478 </span> <span class=
"subxS1Comment"># . epilogue
</span>
1538 <span id=
"L1479" class=
"LineNr">1479 </span> 89/copy
3/mod/direct
4/rm32/esp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 5/r32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ebp to esp
</span>
1539 <span id=
"L1480" class=
"LineNr">1480 </span> 5d/pop-to-ebp
1540 <span id=
"L1481" class=
"LineNr">1481 </span> c3/return
1541 <span id=
"L1482" class=
"LineNr">1482 </span>
1542 <span id=
"L1483" class=
"LineNr">1483 </span><span class=
"subxTest">test-skip-until-close-paren
</span>:
1543 <span id=
"L1484" class=
"LineNr">1484 </span> <span class=
"subxS1Comment"># . prologue
</span>
1544 <span id=
"L1485" class=
"LineNr">1485 </span> 55/push-ebp
1545 <span id=
"L1486" class=
"LineNr">1486 </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>
1546 <span id=
"L1487" class=
"LineNr">1487 </span> <span class=
"subxComment"># setup
</span>
1547 <span id=
"L1488" class=
"LineNr">1488 </span> <span class=
"subxS1Comment"># . clear-stream(_test-stream)
</span>
1548 <span id=
"L1489" class=
"LineNr">1489 </span> <span class=
"subxS2Comment"># . . push args
</span>
1549 <span id=
"L1490" class=
"LineNr">1490 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1550 <span id=
"L1491" class=
"LineNr">1491 </span> <span class=
"subxS2Comment"># . . call
</span>
1551 <span id=
"L1492" class=
"LineNr">1492 </span> e8/call
<a href='
106stream.subx.html#L20'
>clear-stream
</a>/disp32
1552 <span id=
"L1493" class=
"LineNr">1493 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1553 <span id=
"L1494" class=
"LineNr">1494 </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>
1554 <span id=
"L1495" class=
"LineNr">1495 </span> <span class=
"subxS1Comment"># . write(_test-stream,
"*(abc) def
")
</span>
1555 <span id=
"L1496" class=
"LineNr">1496 </span> <span class=
"subxS1Comment"># . indices:
0123 45</span>
1556 <span id=
"L1497" class=
"LineNr">1497 </span> <span class=
"subxS2Comment"># . . push args
</span>
1557 <span id=
"L1498" class=
"LineNr">1498 </span> 68/push
<span class=
"Constant">"*(abc) def
"</span>/imm32
1558 <span id=
"L1499" class=
"LineNr">1499 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1559 <span id=
"L1500" class=
"LineNr">1500 </span> <span class=
"subxS2Comment"># . . call
</span>
1560 <span id=
"L1501" class=
"LineNr">1501 </span> e8/call
<a href='
108write.subx.html#L11'
>write
</a>/disp32
1561 <span id=
"L1502" class=
"LineNr">1502 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1562 <span id=
"L1503" class=
"LineNr">1503 </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>
1563 <span id=
"L1504" class=
"LineNr">1504 </span> <span class=
"subxComment"># precondition: line-
>read ==
0</span>
1564 <span id=
"L1505" class=
"LineNr">1505 </span> <span class=
"subxS2Comment"># . . push args
</span>
1565 <span id=
"L1506" class=
"LineNr">1506 </span> 68/push
<span class=
"Constant">"F -
<a href='
124next-token.subx.html#L1483'
>test-skip-until-close-paren
</a>/precondition
"</span>/imm32
1566 <span id=
"L1507" class=
"LineNr">1507 </span> 68/push
0/imm32
1567 <span id=
"L1508" class=
"LineNr">1508 </span> b8/copy-to-eax
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1568 <span id=
"L1509" class=
"LineNr">1509 </span> ff
6/subop/push
1/mod/*+disp8
0/rm32/eax
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># push *(eax+
4)
</span>
1569 <span id=
"L1510" class=
"LineNr">1510 </span> <span class=
"subxS2Comment"># . . call
</span>
1570 <span id=
"L1511" class=
"LineNr">1511 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
1571 <span id=
"L1512" class=
"LineNr">1512 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1572 <span id=
"L1513" class=
"LineNr">1513 </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>
1573 <span id=
"L1514" class=
"LineNr">1514 </span> <span class=
"subxComment"># skip-until-close-paren(_test-stream)
</span>
1574 <span id=
"L1515" class=
"LineNr">1515 </span> <span class=
"subxS2Comment"># . . push args
</span>
1575 <span id=
"L1516" class=
"LineNr">1516 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1576 <span id=
"L1517" class=
"LineNr">1517 </span> <span class=
"subxS2Comment"># . . call
</span>
1577 <span id=
"L1518" class=
"LineNr">1518 </span> e8/call
<a href='
124next-token.subx.html#L1446'
>skip-until-close-paren
</a>/disp32
1578 <span id=
"L1519" class=
"LineNr">1519 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1579 <span id=
"L1520" class=
"LineNr">1520 </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>
1580 <span id=
"L1521" class=
"LineNr">1521 </span> <span class=
"subxComment"># check-ints-equal(line-
>read,
5, msg)
</span>
1581 <span id=
"L1522" class=
"LineNr">1522 </span> <span class=
"subxS2Comment"># . . push args
</span>
1582 <span id=
"L1523" class=
"LineNr">1523 </span> 68/push
<span class=
"Constant">"F - test-skip-until-close-paren
"</span>/imm32
1583 <span id=
"L1524" class=
"LineNr">1524 </span> 68/push
5/imm32
1584 <span id=
"L1525" class=
"LineNr">1525 </span> b8/copy-to-eax
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1585 <span id=
"L1526" class=
"LineNr">1526 </span> ff
6/subop/push
1/mod/*+disp8
0/rm32/eax
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># push *(eax+
4)
</span>
1586 <span id=
"L1527" class=
"LineNr">1527 </span> <span class=
"subxS2Comment"># . . call
</span>
1587 <span id=
"L1528" class=
"LineNr">1528 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
1588 <span id=
"L1529" class=
"LineNr">1529 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1589 <span id=
"L1530" class=
"LineNr">1530 </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>
1590 <span id=
"L1531" class=
"LineNr">1531 </span> <span class=
"subxS1Comment"># . epilogue
</span>
1591 <span id=
"L1532" class=
"LineNr">1532 </span> 89/copy
3/mod/direct
4/rm32/esp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 5/r32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ebp to esp
</span>
1592 <span id=
"L1533" class=
"LineNr">1533 </span> 5d/pop-to-ebp
1593 <span id=
"L1534" class=
"LineNr">1534 </span> c3/return
1594 <span id=
"L1535" class=
"LineNr">1535 </span>
1595 <span id=
"L1536" class=
"LineNr">1536 </span><span class=
"subxTest">test-skip-until-close-paren-ignores-spaces
</span>:
1596 <span id=
"L1537" class=
"LineNr">1537 </span> <span class=
"subxS1Comment"># . prologue
</span>
1597 <span id=
"L1538" class=
"LineNr">1538 </span> 55/push-ebp
1598 <span id=
"L1539" class=
"LineNr">1539 </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>
1599 <span id=
"L1540" class=
"LineNr">1540 </span> <span class=
"subxComment"># setup
</span>
1600 <span id=
"L1541" class=
"LineNr">1541 </span> <span class=
"subxS1Comment"># . clear-stream(_test-stream)
</span>
1601 <span id=
"L1542" class=
"LineNr">1542 </span> <span class=
"subxS2Comment"># . . push args
</span>
1602 <span id=
"L1543" class=
"LineNr">1543 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1603 <span id=
"L1544" class=
"LineNr">1544 </span> <span class=
"subxS2Comment"># . . call
</span>
1604 <span id=
"L1545" class=
"LineNr">1545 </span> e8/call
<a href='
106stream.subx.html#L20'
>clear-stream
</a>/disp32
1605 <span id=
"L1546" class=
"LineNr">1546 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1606 <span id=
"L1547" class=
"LineNr">1547 </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>
1607 <span id=
"L1548" class=
"LineNr">1548 </span> <span class=
"subxS1Comment"># . write(_test-stream,
"*(a b)/yz
")
</span>
1608 <span id=
"L1549" class=
"LineNr">1549 </span> <span class=
"subxS2Comment"># . . push args
</span>
1609 <span id=
"L1550" class=
"LineNr">1550 </span> 68/push
<span class=
"Constant">"*(a b)/yz
"</span>/imm32
1610 <span id=
"L1551" class=
"LineNr">1551 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1611 <span id=
"L1552" class=
"LineNr">1552 </span> <span class=
"subxS2Comment"># . . call
</span>
1612 <span id=
"L1553" class=
"LineNr">1553 </span> e8/call
<a href='
108write.subx.html#L11'
>write
</a>/disp32
1613 <span id=
"L1554" class=
"LineNr">1554 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1614 <span id=
"L1555" class=
"LineNr">1555 </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>
1615 <span id=
"L1556" class=
"LineNr">1556 </span> <span class=
"subxComment"># precondition: line-
>read ==
0</span>
1616 <span id=
"L1557" class=
"LineNr">1557 </span> <span class=
"subxS2Comment"># . . push args
</span>
1617 <span id=
"L1558" class=
"LineNr">1558 </span> 68/push
<span class=
"Constant">"F -
<a href='
124next-token.subx.html#L1536'
>test-skip-until-close-paren-ignores-spaces
</a>/precondition
"</span>/imm32
1618 <span id=
"L1559" class=
"LineNr">1559 </span> 68/push
0/imm32
1619 <span id=
"L1560" class=
"LineNr">1560 </span> b8/copy-to-eax
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1620 <span id=
"L1561" class=
"LineNr">1561 </span> ff
6/subop/push
1/mod/*+disp8
0/rm32/eax
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># push *(eax+
4)
</span>
1621 <span id=
"L1562" class=
"LineNr">1562 </span> <span class=
"subxS2Comment"># . . call
</span>
1622 <span id=
"L1563" class=
"LineNr">1563 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
1623 <span id=
"L1564" class=
"LineNr">1564 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1624 <span id=
"L1565" class=
"LineNr">1565 </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>
1625 <span id=
"L1566" class=
"LineNr">1566 </span> <span class=
"subxComment"># skip-until-close-paren(_test-stream)
</span>
1626 <span id=
"L1567" class=
"LineNr">1567 </span> <span class=
"subxS2Comment"># . . push args
</span>
1627 <span id=
"L1568" class=
"LineNr">1568 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1628 <span id=
"L1569" class=
"LineNr">1569 </span> <span class=
"subxS2Comment"># . . call
</span>
1629 <span id=
"L1570" class=
"LineNr">1570 </span> e8/call
<a href='
124next-token.subx.html#L1446'
>skip-until-close-paren
</a>/disp32
1630 <span id=
"L1571" class=
"LineNr">1571 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1631 <span id=
"L1572" class=
"LineNr">1572 </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>
1632 <span id=
"L1573" class=
"LineNr">1573 </span> <span class=
"subxComment"># check-ints-equal(line-
>read,
5, msg)
</span>
1633 <span id=
"L1574" class=
"LineNr">1574 </span> <span class=
"subxS2Comment"># . . push args
</span>
1634 <span id=
"L1575" class=
"LineNr">1575 </span> 68/push
<span class=
"Constant">"F - test-skip-until-close-paren-ignores-spaces
"</span>/imm32
1635 <span id=
"L1576" class=
"LineNr">1576 </span> 68/push
5/imm32
1636 <span id=
"L1577" class=
"LineNr">1577 </span> b8/copy-to-eax
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1637 <span id=
"L1578" class=
"LineNr">1578 </span> ff
6/subop/push
1/mod/*+disp8
0/rm32/eax
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># push *(eax+
4)
</span>
1638 <span id=
"L1579" class=
"LineNr">1579 </span> <span class=
"subxS2Comment"># . . call
</span>
1639 <span id=
"L1580" class=
"LineNr">1580 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
1640 <span id=
"L1581" class=
"LineNr">1581 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1641 <span id=
"L1582" class=
"LineNr">1582 </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>
1642 <span id=
"L1583" class=
"LineNr">1583 </span> <span class=
"subxS1Comment"># . epilogue
</span>
1643 <span id=
"L1584" class=
"LineNr">1584 </span> 89/copy
3/mod/direct
4/rm32/esp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 5/r32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ebp to esp
</span>
1644 <span id=
"L1585" class=
"LineNr">1585 </span> 5d/pop-to-ebp
1645 <span id=
"L1586" class=
"LineNr">1586 </span> c3/return
1646 <span id=
"L1587" class=
"LineNr">1587 </span>
1647 <span id=
"L1588" class=
"LineNr">1588 </span><span class=
"subxTest">test-skip-until-close-paren-works-from-mid-stream
</span>:
1648 <span id=
"L1589" class=
"LineNr">1589 </span> <span class=
"subxS1Comment"># . prologue
</span>
1649 <span id=
"L1590" class=
"LineNr">1590 </span> 55/push-ebp
1650 <span id=
"L1591" class=
"LineNr">1591 </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>
1651 <span id=
"L1592" class=
"LineNr">1592 </span> <span class=
"subxComment"># setup
</span>
1652 <span id=
"L1593" class=
"LineNr">1593 </span> <span class=
"subxS1Comment"># . clear-stream(_test-stream)
</span>
1653 <span id=
"L1594" class=
"LineNr">1594 </span> <span class=
"subxS2Comment"># . . push args
</span>
1654 <span id=
"L1595" class=
"LineNr">1595 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1655 <span id=
"L1596" class=
"LineNr">1596 </span> <span class=
"subxS2Comment"># . . call
</span>
1656 <span id=
"L1597" class=
"LineNr">1597 </span> e8/call
<a href='
106stream.subx.html#L20'
>clear-stream
</a>/disp32
1657 <span id=
"L1598" class=
"LineNr">1598 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1658 <span id=
"L1599" class=
"LineNr">1599 </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>
1659 <span id=
"L1600" class=
"LineNr">1600 </span> <span class=
"subxS1Comment"># . write(_test-stream,
"0 *(a b)/yz
")
</span>
1660 <span id=
"L1601" class=
"LineNr">1601 </span> <span class=
"subxS2Comment"># . . push args
</span>
1661 <span id=
"L1602" class=
"LineNr">1602 </span> 68/push
<span class=
"Constant">"0 *(a b)/yz
"</span>/imm32
1662 <span id=
"L1603" class=
"LineNr">1603 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1663 <span id=
"L1604" class=
"LineNr">1604 </span> <span class=
"subxS2Comment"># . . call
</span>
1664 <span id=
"L1605" class=
"LineNr">1605 </span> e8/call
<a href='
108write.subx.html#L11'
>write
</a>/disp32
1665 <span id=
"L1606" class=
"LineNr">1606 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1666 <span id=
"L1607" class=
"LineNr">1607 </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>
1667 <span id=
"L1608" class=
"LineNr">1608 </span> <span class=
"subxComment"># precondition: _test-stream-
>read ==
2</span>
1668 <span id=
"L1609" class=
"LineNr">1609 </span> b8/copy-to-eax
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1669 <span id=
"L1610" class=
"LineNr">1610 </span> c7
0/subop/copy
1/mod/*+disp8
0/rm32/eax
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 4/disp8
2/imm32
<span class=
"subxComment"># copy to *(eax+
4)
</span>
1670 <span id=
"L1611" class=
"LineNr">1611 </span> <span class=
"subxComment"># skip-until-close-paren(_test-stream)
</span>
1671 <span id=
"L1612" class=
"LineNr">1612 </span> <span class=
"subxS2Comment"># . . push args
</span>
1672 <span id=
"L1613" class=
"LineNr">1613 </span> 68/push
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1673 <span id=
"L1614" class=
"LineNr">1614 </span> <span class=
"subxS2Comment"># . . call
</span>
1674 <span id=
"L1615" class=
"LineNr">1615 </span> e8/call
<a href='
124next-token.subx.html#L1446'
>skip-until-close-paren
</a>/disp32
1675 <span id=
"L1616" class=
"LineNr">1616 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1676 <span id=
"L1617" class=
"LineNr">1617 </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>
1677 <span id=
"L1618" class=
"LineNr">1618 </span> <span class=
"subxComment"># check-ints-equal(_test-stream-
>read,
7, msg)
</span>
1678 <span id=
"L1619" class=
"LineNr">1619 </span> <span class=
"subxS2Comment"># . . push args
</span>
1679 <span id=
"L1620" class=
"LineNr">1620 </span> 68/push
<span class=
"Constant">"F - test-skip-until-close-paren-works-from-mid-stream
"</span>/imm32
1680 <span id=
"L1621" class=
"LineNr">1621 </span> 68/push
7/imm32
1681 <span id=
"L1622" class=
"LineNr">1622 </span> b8/copy-to-eax
<a href='
108write.subx.html#L125'
>_test-stream
</a>/imm32
1682 <span id=
"L1623" class=
"LineNr">1623 </span> ff
6/subop/push
1/mod/*+disp8
0/rm32/eax
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># push *(eax+
4)
</span>
1683 <span id=
"L1624" class=
"LineNr">1624 </span> <span class=
"subxS2Comment"># . . call
</span>
1684 <span id=
"L1625" class=
"LineNr">1625 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
1685 <span id=
"L1626" class=
"LineNr">1626 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1686 <span id=
"L1627" class=
"LineNr">1627 </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>
1687 <span id=
"L1628" class=
"LineNr">1628 </span> <span class=
"subxS1Comment"># . epilogue
</span>
1688 <span id=
"L1629" class=
"LineNr">1629 </span> 89/copy
3/mod/direct
4/rm32/esp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 5/r32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ebp to esp
</span>
1689 <span id=
"L1630" class=
"LineNr">1630 </span> 5d/pop-to-ebp
1690 <span id=
"L1631" class=
"LineNr">1631 </span> c3/return
1691 <span id=
"L1632" class=
"LineNr">1632 </span>
1692 <span id=
"L1633" class=
"LineNr">1633 </span><span class=
"subxFunction">skip-until-close-paren-in-slice
</span>:
<span class=
"subxComment"># curr: (addr byte), end: (addr byte) -
> curr/eax: (addr byte)
</span>
1693 <span id=
"L1634" class=
"LineNr">1634 </span> <span class=
"subxS1Comment"># . prologue
</span>
1694 <span id=
"L1635" class=
"LineNr">1635 </span> 55/push-ebp
1695 <span id=
"L1636" class=
"LineNr">1636 </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>
1696 <span id=
"L1637" class=
"LineNr">1637 </span> <span class=
"subxS1Comment"># . save registers
</span>
1697 <span id=
"L1638" class=
"LineNr">1638 </span> 51/push-ecx
1698 <span id=
"L1639" class=
"LineNr">1639 </span> 52/push-edx
1699 <span id=
"L1640" class=
"LineNr">1640 </span> <span class=
"subxComment"># ecx = curr
</span>
1700 <span id=
"L1641" class=
"LineNr">1641 </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>
1701 <span id=
"L1642" class=
"LineNr">1642 </span> <span class=
"subxComment"># edx = end
</span>
1702 <span id=
"L1643" class=
"LineNr">1643 </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>
1703 <span id=
"L1644" class=
"LineNr">1644 </span> <span class=
"subxComment"># var c/eax: byte =
0</span>
1704 <span id=
"L1645" class=
"LineNr">1645 </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>
1705 <span id=
"L1646" class=
"LineNr">1646 </span> <span class=
"subxComment"># skip initial dquote
</span>
1706 <span id=
"L1647" class=
"LineNr">1647 </span> 41/increment-ecx
1707 <span id=
"L1648" class=
"LineNr">1648 </span><span class=
"Constant">$skip-until-close-paren-in-slice:loop
</span>:
1708 <span id=
"L1649" class=
"LineNr">1649 </span> <span class=
"subxComment"># if (curr
>= end) break
</span>
1709 <span id=
"L1650" class=
"LineNr">1650 </span> 39/compare
3/mod/direct
1/rm32/ecx
<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 ecx with edx
</span>
1710 <span id=
"L1651" class=
"LineNr">1651 </span> 73/jump-if-addr
>= $skip-until-close-paren-in-slice:
<span class=
"Constant">break
</span>/disp8
1711 <span id=
"L1652" class=
"LineNr">1652 </span> <span class=
"subxComment"># c = *curr
</span>
1712 <span id=
"L1653" class=
"LineNr">1653 </span> 8a/copy-byte
0/mod/indirect
1/rm32/ecx
<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 *ecx to AL
</span>
1713 <span id=
"L1654" class=
"LineNr">1654 </span><span class=
"Constant">$skip-until-close-paren-in-slice:check-close
</span>:
1714 <span id=
"L1655" class=
"LineNr">1655 </span> <span class=
"subxComment"># if (c == ')') break
</span>
1715 <span id=
"L1656" class=
"LineNr">1656 </span> 3d/compare-eax-and
0x29/imm32/close-paren
1716 <span id=
"L1657" class=
"LineNr">1657 </span> 74/jump-if-= $skip-until-close-paren-in-slice:
<span class=
"Constant">break
</span>/disp8
1717 <span id=
"L1658" class=
"LineNr">1658 </span> <span class=
"subxComment"># ++curr
</span>
1718 <span id=
"L1659" class=
"LineNr">1659 </span> 41/increment-ecx
1719 <span id=
"L1660" class=
"LineNr">1660 </span> eb/jump $skip-until-close-paren-in-slice:
<span class=
"Constant">loop
</span>/disp8
1720 <span id=
"L1661" class=
"LineNr">1661 </span><span class=
"Constant">$skip-until-close-paren-in-slice:break
</span>:
1721 <span id=
"L1662" class=
"LineNr">1662 </span> <span class=
"subxComment"># return curr
</span>
1722 <span id=
"L1663" class=
"LineNr">1663 </span> 89/copy
3/mod/direct
0/rm32/eax
<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 ecx to eax
</span>
1723 <span id=
"L1664" class=
"LineNr">1664 </span><span class=
"Constant">$skip-until-close-paren-in-slice:end
</span>:
1724 <span id=
"L1665" class=
"LineNr">1665 </span> <span class=
"subxS1Comment"># . restore registers
</span>
1725 <span id=
"L1666" class=
"LineNr">1666 </span> 5a/pop-to-edx
1726 <span id=
"L1667" class=
"LineNr">1667 </span> 59/pop-to-ecx
1727 <span id=
"L1668" class=
"LineNr">1668 </span> <span class=
"subxS1Comment"># . epilogue
</span>
1728 <span id=
"L1669" class=
"LineNr">1669 </span> 89/copy
3/mod/direct
4/rm32/esp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 5/r32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ebp to esp
</span>
1729 <span id=
"L1670" class=
"LineNr">1670 </span> 5d/pop-to-ebp
1730 <span id=
"L1671" class=
"LineNr">1671 </span> c3/return
1731 <span id=
"L1672" class=
"LineNr">1672 </span>
1732 <span id=
"L1673" class=
"LineNr">1673 </span><span class=
"subxTest">test-skip-until-close-paren-in-slice
</span>:
1733 <span id=
"L1674" class=
"LineNr">1674 </span> <span class=
"subxS1Comment"># . prologue
</span>
1734 <span id=
"L1675" class=
"LineNr">1675 </span> 55/push-ebp
1735 <span id=
"L1676" class=
"LineNr">1676 </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>
1736 <span id=
"L1677" class=
"LineNr">1677 </span> <span class=
"subxComment"># setup: (eax..ecx) =
"*(abc) def
"</span>
1737 <span id=
"L1678" class=
"LineNr">1678 </span> b8/copy-to-eax
<span class=
"Constant">"*(abc) def
"</span>/imm32
1738 <span id=
"L1679" class=
"LineNr">1679 </span> 8b/copy
0/mod/indirect
0/rm32/eax
<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 *eax to ecx
</span>
1739 <span id=
"L1680" class=
"LineNr">1680 </span> 8d/copy-address
1/mod/*+disp8
4/rm32/sib
0/base/eax
1/index/ecx
<span class=
"Normal"> .
</span> 1/r32/ecx
4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy eax+ecx+
4 to ecx
</span>
1740 <span id=
"L1681" class=
"LineNr">1681 </span> 05/add-to-eax
4/imm32
1741 <span id=
"L1682" class=
"LineNr">1682 </span> <span class=
"subxComment"># eax = skip-until-close-paren-in-slice(eax, ecx)
</span>
1742 <span id=
"L1683" class=
"LineNr">1683 </span> <span class=
"subxS2Comment"># . . push args
</span>
1743 <span id=
"L1684" class=
"LineNr">1684 </span> 51/push-ecx
1744 <span id=
"L1685" class=
"LineNr">1685 </span> 50/push-eax
1745 <span id=
"L1686" class=
"LineNr">1686 </span> <span class=
"subxS2Comment"># . . call
</span>
1746 <span id=
"L1687" class=
"LineNr">1687 </span> e8/call
<a href='
124next-token.subx.html#L1633'
>skip-until-close-paren-in-slice
</a>/disp32
1747 <span id=
"L1688" class=
"LineNr">1688 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1748 <span id=
"L1689" class=
"LineNr">1689 </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>
1749 <span id=
"L1690" class=
"LineNr">1690 </span> <span class=
"subxComment"># check-ints-equal(ecx-eax,
5, msg) # eax is at the ')'
</span>
1750 <span id=
"L1691" class=
"LineNr">1691 </span> <span class=
"subxS2Comment"># . . push args
</span>
1751 <span id=
"L1692" class=
"LineNr">1692 </span> 68/push
<span class=
"Constant">"F - test-skip-until-close-paren-in-slice
"</span>/imm32
1752 <span id=
"L1693" class=
"LineNr">1693 </span> 68/push
5/imm32
1753 <span id=
"L1694" class=
"LineNr">1694 </span> <span class=
"subxS2Comment"># . . push ecx-eax
</span>
1754 <span id=
"L1695" class=
"LineNr">1695 </span> 29/subtract
3/mod/direct
1/rm32/ecx
<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"># subtract eax from ecx
</span>
1755 <span id=
"L1696" class=
"LineNr">1696 </span> 51/push-ecx
1756 <span id=
"L1697" class=
"LineNr">1697 </span> <span class=
"subxS2Comment"># . . call
</span>
1757 <span id=
"L1698" class=
"LineNr">1698 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
1758 <span id=
"L1699" class=
"LineNr">1699 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1759 <span id=
"L1700" class=
"LineNr">1700 </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>
1760 <span id=
"L1701" class=
"LineNr">1701 </span> <span class=
"subxS1Comment"># . epilogue
</span>
1761 <span id=
"L1702" class=
"LineNr">1702 </span> 89/copy
3/mod/direct
4/rm32/esp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 5/r32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ebp to esp
</span>
1762 <span id=
"L1703" class=
"LineNr">1703 </span> 5d/pop-to-ebp
1763 <span id=
"L1704" class=
"LineNr">1704 </span> c3/return
1764 <span id=
"L1705" class=
"LineNr">1705 </span>
1765 <span id=
"L1706" class=
"LineNr">1706 </span><span class=
"subxTest">test-skip-until-close-paren-in-slice-ignores-spaces
</span>:
1766 <span id=
"L1707" class=
"LineNr">1707 </span> <span class=
"subxS1Comment"># . prologue
</span>
1767 <span id=
"L1708" class=
"LineNr">1708 </span> 55/push-ebp
1768 <span id=
"L1709" class=
"LineNr">1709 </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>
1769 <span id=
"L1710" class=
"LineNr">1710 </span> <span class=
"subxComment"># setup: (eax..ecx) =
"*(a b)/yz
"</span>
1770 <span id=
"L1711" class=
"LineNr">1711 </span> b8/copy-to-eax
<span class=
"Constant">"*(a b)/yz
"</span>/imm32
1771 <span id=
"L1712" class=
"LineNr">1712 </span> 8b/copy
0/mod/indirect
0/rm32/eax
<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 *eax to ecx
</span>
1772 <span id=
"L1713" class=
"LineNr">1713 </span> 8d/copy-address
1/mod/*+disp8
4/rm32/sib
0/base/eax
1/index/ecx
<span class=
"Normal"> .
</span> 1/r32/ecx
4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy eax+ecx+
4 to ecx
</span>
1773 <span id=
"L1714" class=
"LineNr">1714 </span> 05/add-to-eax
4/imm32
1774 <span id=
"L1715" class=
"LineNr">1715 </span> <span class=
"subxComment"># eax = skip-until-close-paren-in-slice(eax, ecx)
</span>
1775 <span id=
"L1716" class=
"LineNr">1716 </span> <span class=
"subxS2Comment"># . . push args
</span>
1776 <span id=
"L1717" class=
"LineNr">1717 </span> 51/push-ecx
1777 <span id=
"L1718" class=
"LineNr">1718 </span> 50/push-eax
1778 <span id=
"L1719" class=
"LineNr">1719 </span> <span class=
"subxS2Comment"># . . call
</span>
1779 <span id=
"L1720" class=
"LineNr">1720 </span> e8/call
<a href='
124next-token.subx.html#L1633'
>skip-until-close-paren-in-slice
</a>/disp32
1780 <span id=
"L1721" class=
"LineNr">1721 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1781 <span id=
"L1722" class=
"LineNr">1722 </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>
1782 <span id=
"L1723" class=
"LineNr">1723 </span> <span class=
"subxComment"># check-ints-equal(ecx-eax,
4, msg) # eax is at the ')'
</span>
1783 <span id=
"L1724" class=
"LineNr">1724 </span> <span class=
"subxS2Comment"># . . push args
</span>
1784 <span id=
"L1725" class=
"LineNr">1725 </span> 68/push
<span class=
"Constant">"F - test-skip-until-close-paren-in-slice-ignores-spaces
"</span>/imm32
1785 <span id=
"L1726" class=
"LineNr">1726 </span> 68/push
4/imm32
1786 <span id=
"L1727" class=
"LineNr">1727 </span> <span class=
"subxS2Comment"># . . push ecx-eax
</span>
1787 <span id=
"L1728" class=
"LineNr">1728 </span> 29/subtract
3/mod/direct
1/rm32/ecx
<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"># subtract eax from ecx
</span>
1788 <span id=
"L1729" class=
"LineNr">1729 </span> 51/push-ecx
1789 <span id=
"L1730" class=
"LineNr">1730 </span> <span class=
"subxS2Comment"># . . call
</span>
1790 <span id=
"L1731" class=
"LineNr">1731 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
1791 <span id=
"L1732" class=
"LineNr">1732 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1792 <span id=
"L1733" class=
"LineNr">1733 </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>
1793 <span id=
"L1734" class=
"LineNr">1734 </span> <span class=
"subxS1Comment"># . epilogue
</span>
1794 <span id=
"L1735" class=
"LineNr">1735 </span> 89/copy
3/mod/direct
4/rm32/esp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 5/r32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ebp to esp
</span>
1795 <span id=
"L1736" class=
"LineNr">1736 </span> 5d/pop-to-ebp
1796 <span id=
"L1737" class=
"LineNr">1737 </span> c3/return
1797 <span id=
"L1738" class=
"LineNr">1738 </span>
1798 <span id=
"L1739" class=
"LineNr">1739 </span><span class=
"subxTest">test-skip-until-close-paren-in-slice-stops-at-end
</span>:
1799 <span id=
"L1740" class=
"LineNr">1740 </span> <span class=
"subxS1Comment"># . prologue
</span>
1800 <span id=
"L1741" class=
"LineNr">1741 </span> 55/push-ebp
1801 <span id=
"L1742" class=
"LineNr">1742 </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>
1802 <span id=
"L1743" class=
"LineNr">1743 </span> <span class=
"subxComment"># setup: (eax..ecx) =
"*(abc
" # unbalanced dquote
</span>
1803 <span id=
"L1744" class=
"LineNr">1744 </span> b8/copy-to-eax
<span class=
"Constant">"*(abc
"</span>/imm32
1804 <span id=
"L1745" class=
"LineNr">1745 </span> 8b/copy
0/mod/indirect
0/rm32/eax
<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 *eax to ecx
</span>
1805 <span id=
"L1746" class=
"LineNr">1746 </span> 8d/copy-address
1/mod/*+disp8
4/rm32/sib
0/base/eax
1/index/ecx
<span class=
"Normal"> .
</span> 1/r32/ecx
4/disp8
<span class=
"Normal"> .
</span> <span class=
"subxComment"># copy eax+ecx+
4 to ecx
</span>
1806 <span id=
"L1747" class=
"LineNr">1747 </span> 05/add-to-eax
4/imm32
1807 <span id=
"L1748" class=
"LineNr">1748 </span> <span class=
"subxComment"># eax = skip-until-close-paren-in-slice(eax, ecx)
</span>
1808 <span id=
"L1749" class=
"LineNr">1749 </span> <span class=
"subxS2Comment"># . . push args
</span>
1809 <span id=
"L1750" class=
"LineNr">1750 </span> 51/push-ecx
1810 <span id=
"L1751" class=
"LineNr">1751 </span> 50/push-eax
1811 <span id=
"L1752" class=
"LineNr">1752 </span> <span class=
"subxS2Comment"># . . call
</span>
1812 <span id=
"L1753" class=
"LineNr">1753 </span> e8/call
<a href='
124next-token.subx.html#L1633'
>skip-until-close-paren-in-slice
</a>/disp32
1813 <span id=
"L1754" class=
"LineNr">1754 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1814 <span id=
"L1755" class=
"LineNr">1755 </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>
1815 <span id=
"L1756" class=
"LineNr">1756 </span> <span class=
"subxComment"># check-ints-equal(ecx-eax,
0, msg) # skipped to end of slice
</span>
1816 <span id=
"L1757" class=
"LineNr">1757 </span> <span class=
"subxS2Comment"># . . push args
</span>
1817 <span id=
"L1758" class=
"LineNr">1758 </span> 68/push
<span class=
"Constant">"F - test-skip-until-close-paren-in-slice-stops-at-end
"</span>/imm32
1818 <span id=
"L1759" class=
"LineNr">1759 </span> 68/push
0/imm32
1819 <span id=
"L1760" class=
"LineNr">1760 </span> <span class=
"subxS2Comment"># . . push ecx-eax
</span>
1820 <span id=
"L1761" class=
"LineNr">1761 </span> 29/subtract
3/mod/direct
1/rm32/ecx
<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"># subtract eax from ecx
</span>
1821 <span id=
"L1762" class=
"LineNr">1762 </span> 51/push-ecx
1822 <span id=
"L1763" class=
"LineNr">1763 </span> <span class=
"subxS2Comment"># . . call
</span>
1823 <span id=
"L1764" class=
"LineNr">1764 </span> e8/call
<a href='
502test.mu.html#L2'
>check-ints-equal
</a>/disp32
1824 <span id=
"L1765" class=
"LineNr">1765 </span> <span class=
"subxS2Comment"># . . discard args
</span>
1825 <span id=
"L1766" class=
"LineNr">1766 </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>
1826 <span id=
"L1767" class=
"LineNr">1767 </span> <span class=
"subxS1Comment"># . epilogue
</span>
1827 <span id=
"L1768" class=
"LineNr">1768 </span> 89/copy
3/mod/direct
4/rm32/esp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> 5/r32/ebp
<span class=
"Normal"> .
</span> <span class=
"Normal"> .
</span> <span class=
"subxComment"># copy ebp to esp
</span>
1828 <span id=
"L1769" class=
"LineNr">1769 </span> 5d/pop-to-ebp
1829 <span id=
"L1770" class=
"LineNr">1770 </span> c3/return
1830 <span id=
"L1771" class=
"LineNr">1771 </span>
1831 <span id=
"L1772" class=
"LineNr">1772 </span><span class=
"subxS2Comment"># . . vim
:nowrap:textwidth=
0</span>
1835 <!-- vim: set foldmethod=manual : -->