https://github.com/akkartik/mu/blob/master/073next-token.subx
1
2
3 == code
4
5
6
7
8
9
10 next-token:
11
12 55/push-ebp
13 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
14
15 50/push-eax
16 51/push-ecx
17 56/push-esi
18 57/push-edi
19
20 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 6/r32/esi 8/disp8 .
21
22 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 7/r32/edi 0x10/disp8 .
23
24
25 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 .
26 56/push-esi
27
28 e8/call skip-chars-matching/disp32
29
30 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
31
32 8b/copy 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 .
33 8d/copy-address 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/eax 0xc/disp8 .
34 89/copy 0/mod/indirect 7/rm32/edi . . . 0/r32/eax . .
35
36
37 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 .
38 56/push-esi
39
40 e8/call skip-chars-not-matching/disp32
41
42 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
43
44 8b/copy 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 .
45 8d/copy-address 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/eax 0xc/disp8 .
46 89/copy 1/mod/*+disp8 7/rm32/edi . . . 0/r32/eax 4/disp8 .
47
48 5f/pop-to-edi
49 5e/pop-to-esi
50 59/pop-to-ecx
51 58/pop-to-eax
52
53 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
54 5d/pop-to-ebp
55 c3/return
56
57 test-next-token:
58
59 55/push-ebp
60 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
61
62
63
64 68/push _test-stream/imm32
65
66 e8/call clear-stream/disp32
67
68 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
69
70 68/push 0/imm32/end
71 68/push 0/imm32/start
72 89/copy 3/mod/direct 1/rm32/ecx . . . 4/r32/esp . .
73
74
75 68/push " ab"/imm32
76 68/push _test-stream/imm32
77
78 e8/call write/disp32
79
80 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
81
82
83 51/push-ecx
84 68/push 0x20/imm32
85 68/push _test-stream/imm32
86
87 e8/call next-token/disp32
88
89 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
90
91
92
93 68/push "F - test-next-token: start"/imm32
94 68/push 0xe/imm32
95
96 8b/copy 0/mod/indirect 1/rm32/ecx . . . 0/r32/eax . .
97 81 5/subop/subtract 3/mod/direct 0/rm32/eax . . . . . _test-stream/imm32
98 50/push-eax
99
100 e8/call check-ints-equal/disp32
101
102 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
103
104
105
106 68/push "F - test-next-token: end"/imm32
107 68/push 0x10/imm32
108
109 8b/copy 1/mod/*+disp8 1/rm32/ecx . . . 0/r32/eax 4/disp8 .
110 81 5/subop/subtract 3/mod/direct 0/rm32/eax . . . . . _test-stream/imm32
111 50/push-eax
112
113 e8/call check-ints-equal/disp32
114
115 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
116
117 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
118 5d/pop-to-ebp
119 c3/return
120
121 test-next-token-Eof:
122
123 55/push-ebp
124 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
125
126
127
128 68/push _test-stream/imm32
129
130 e8/call clear-stream/disp32
131
132 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
133
134 68/push 0/imm32/end
135 68/push 0/imm32/start
136 89/copy 3/mod/direct 1/rm32/ecx . . . 4/r32/esp . .
137
138
139
140 51/push-ecx
141 68/push 0x20/imm32
142 68/push _test-stream/imm32
143
144 e8/call next-token/disp32
145
146 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
147
148
149 68/push "F - test-next-token-Eof"/imm32
150 ff 6/subop/push 1/mod/*+disp8 1/rm32/ecx . . . . 4/disp8 .
151 ff 6/subop/push 0/mod/indirect 1/rm32/ecx . . . . . .
152
153 e8/call check-ints-equal/disp32
154
155 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
156
157 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
158 5d/pop-to-ebp
159 c3/return
160
161
162
163 next-token-from-slice:
164
165 55/push-ebp
166 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
167
168 50/push-eax
169 51/push-ecx
170 52/push-edx
171 57/push-edi
172
173 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 1/r32/ecx 0xc/disp8 .
174
175 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 2/r32/edx 0x10/disp8 .
176
177 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 7/r32/edi 0x14/disp8 .
178
179
180 52/push-edx
181 51/push-ecx
182 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 .
183
184 e8/call skip-chars-matching-in-slice/disp32
185
186 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
187
188 89/copy 0/mod/indirect 7/rm32/edi . . . 0/r32/eax . .
189
190
191 52/push-edx
192 51/push-ecx
193 50/push-eax
194
195 e8/call skip-chars-not-matching-in-slice/disp32
196
197 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
198
199 89/copy 1/mod/*+disp8 7/rm32/edi . . . 0/r32/eax 4/disp8 .
200
201 5f/pop-to-edi
202 5a/pop-to-edx
203 59/pop-to-ecx
204 58/pop-to-eax
205
206 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
207 5d/pop-to-ebp
208 c3/return
209
210 test-next-token-from-slice:
211
212 55/push-ebp
213 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
214
215 b8/copy-to-eax " ab"/imm32
216 8b/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . .
217 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/eax 1/index/ecx . 1/r32/ecx 4/disp8 .
218 05/add-to-eax 4/imm32
219
220 68/push 0/imm32/end
221 68/push 0/imm32/start
222 89/copy 3/mod/direct 7/rm32/edi . . . 4/r32/esp . .
223
224
225 57/push-edi
226 68/push 0x20/imm32
227 51/push-ecx
228 50/push-eax
229
230 e8/call next-token-from-slice/disp32
231
232 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0x10/imm32
233
234
235
236 68/push "F - test-next-token-from-slice: start"/imm32
237 68/push 2/imm32
238
239 8b/copy 0/mod/indirect 7/rm32/edi . . . 1/r32/ecx . .
240 2b/subtract 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . .
241 51/push-ecx
242
243 e8/call check-ints-equal/disp32
244
245 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
246
247
248
249 68/push "F - test-next-token-from-slice: end"/imm32
250 68/push 4/imm32
251
252 8b/copy 1/mod/*+disp8 7/rm32/edi . . . 1/r32/ecx 4/disp8 .
253 2b/subtract 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . .
254 51/push-ecx
255
256 e8/call check-ints-equal/disp32
257
258 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
259
260 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
261 5d/pop-to-ebp
262 c3/return
263
264 test-next-token-from-slice-Eof:
265
266 55/push-ebp
267 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
268
269 68/push 0/imm32/end
270 68/push 0/imm32/start
271 89/copy 3/mod/direct 7/rm32/edi . . . 4/r32/esp . .
272
273
274 57/push-edi
275 68/push 0x20/imm32
276 68/push 0/imm32
277 68/push 0/imm32
278
279 e8/call next-token-from-slice/disp32
280
281 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0x10/imm32
282
283
284
285 68/push "F - test-next-token-from-slice-Eof"/imm32
286 68/push 0/imm32
287
288 8b/copy 1/mod/*+disp8 7/rm32/edi . . . 1/r32/ecx 4/disp8 .
289 2b/subtract 0/mod/indirect 7/rm32/edi . . . 1/r32/ecx . .
290 51/push-ecx
291
292 e8/call check-ints-equal/disp32
293
294 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
295
296 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
297 5d/pop-to-ebp
298 c3/return
299
300 test-next-token-from-slice-nothing:
301
302 55/push-ebp
303 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
304
305 b8/copy-to-eax " "/imm32
306 8b/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . .
307 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/eax 1/index/ecx . 1/r32/ecx 4/disp8 .
308 05/add-to-eax 4/imm32
309
310 68/push 0/imm32/end
311 68/push 0/imm32/start
312 89/copy 3/mod/direct 7/rm32/edi . . . 4/r32/esp . .
313
314
315 57/push-edi
316 68/push 0x20/imm32
317 51/push-ecx
318 50/push-eax
319
320 e8/call next-token-from-slice/disp32
321
322 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0x10/imm32
323
324
325
326 68/push "F - test-next-token-from-slice-Eof"/imm32
327 68/push 0/imm32
328
329 8b/copy 1/mod/*+disp8 7/rm32/edi . . . 1/r32/ecx 4/disp8 .
330 2b/subtract 0/mod/indirect 7/rm32/edi . . . 1/r32/ecx . .
331 51/push-ecx
332
333 e8/call check-ints-equal/disp32
334
335 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
336
337 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
338 5d/pop-to-ebp
339 c3/return
340
341 skip-chars-matching:
342
343 55/push-ebp
344 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
345
346 50/push-eax
347 51/push-ecx
348 52/push-edx
349 53/push-ebx
350 56/push-esi
351
352 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 6/r32/esi 8/disp8 .
353
354 8b/copy 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 .
355
356 8b/copy 0/mod/indirect 6/rm32/esi . . . 3/r32/ebx . .
357
358 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 2/r32/edx 0xc/disp8 .
359 $skip-chars-matching:loop:
360
361 39/compare 3/mod/direct 1/rm32/ecx . . . 3/r32/ebx . .
362 7d/jump-if-greater-or-equal $skip-chars-matching:end/disp8
363
364 31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . .
365 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/AL 0xc/disp8 .
366
367 39/compare 3/mod/direct 0/rm32/eax . . . 2/r32/edx . .
368 75/jump-if-not-equal $skip-chars-matching:end/disp8
369
370 41/increment-ecx
371 eb/jump $skip-chars-matching:loop/disp8
372 $skip-chars-matching:end:
373
374 89/copy 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 .
375
376 5e/pop-to-esi
377 5b/pop-to-ebx
378 5a/pop-to-edx
379 59/pop-to-ecx
380 58/pop-to-eax
381
382 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
383 5d/pop-to-ebp
384 c3/return
385
386 test-skip-chars-matching:
387
388
389
390 68/push _test-stream/imm32
391
392 e8/call clear-stream/disp32
393
394 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
395
396
397 68/push " ab"/imm32
398 68/push _test-stream/imm32
399
400 e8/call write/disp32
401
402 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
403
404
405 68/push 0x20/imm32
406 68/push _test-stream/imm32
407
408 e8/call skip-chars-matching/disp32
409
410 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
411
412
413 68/push "F - test-skip-chars-matching"/imm32
414 68/push 2/imm32
415
416 b8/copy-to-eax _test-stream/imm32
417 ff 6/subop/push 1/mod/*+disp8 0/rm32/eax . . . . 4/disp8 .
418
419 e8/call check-ints-equal/disp32
420
421 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
422
423 c3/return
424
425 test-skip-chars-matching-none:
426
427
428
429 68/push _test-stream/imm32
430
431 e8/call clear-stream/disp32
432
433 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
434
435
436 68/push "ab"/imm32
437 68/push _test-stream/imm32
438
439 e8/call write/disp32
440
441 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
442
443
444 68/push 0x20/imm32
445 68/push _test-stream/imm32
446
447 e8/call skip-chars-matching/disp32
448
449 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
450
451
452 68/push "F - test-skip-chars-matching-none"/imm32
453 68/push 0/imm32
454
455 b8/copy-to-eax _test-stream/imm32
456 ff 6/subop/push 1/mod/*+disp8 0/rm32/eax . . . . 4/disp8 .
457
458 e8/call check-ints-equal/disp32
459
460 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
461
462 c3/return
463
464 skip-chars-matching-whitespace:
465
466 55/push-ebp
467 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
468
469 50/push-eax
470 51/push-ecx
471 53/push-ebx
472 56/push-esi
473
474 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 6/r32/esi 8/disp8 .
475
476 8b/copy 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 .
477
478 8b/copy 0/mod/indirect 6/rm32/esi . . . 3/r32/ebx . .
479 $skip-chars-matching-whitespace:loop:
480
481 39/compare 3/mod/direct 1/rm32/ecx . . . 3/r32/ebx . .
482 7d/jump-if-greater-or-equal $skip-chars-matching-whitespace:end/disp8
483
484 31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . .
485 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/AL 0xc/disp8 .
486
487 3d/compare-eax-and 0x20/imm32/space
488 74/jump-if-equal $skip-chars-matching-whitespace:body/disp8
489
490 3d/compare-eax-and 0x0a/imm32/newline
491 74/jump-if-equal $skip-chars-matching-whitespace:body/disp8
492
493 3d/compare-eax-and 0x09/imm32/tab
494 74/jump-if-equal $skip-chars-matching-whitespace:body/disp8
495
496 3d/compare-eax-and 0x0d/imm32/cr
497 75/jump-if-not-equal $skip-chars-matching-whitespace:end/disp8
498 $skip-chars-matching-whitespace:body:
499
500 41/increment-ecx
501 eb/jump $skip-chars-matching-whitespace:loop/disp8
502 $skip-chars-matching-whitespace:end:
503
504 89/copy 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 .
505
506 5e/pop-to-esi
507 5b/pop-to-ebx
508 59/pop-to-ecx
509 58/pop-to-eax
510
511 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
512 5d/pop-to-ebp
513 c3/return
514
515 test-skip-chars-matching-whitespace:
516
517
518
519 68/push _test-stream/imm32
520
521 e8/call clear-stream/disp32
522
523 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
524
525
526 68/push " \nab"/imm32
527 68/push _test-stream/imm32
528
529 e8/call write/disp32
530
531 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
532
533
534 68/push _test-stream/imm32
535
536 e8/call skip-chars-matching-whitespace/disp32
537
538 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
539
540
541 68/push "F - test-skip-chars-matching-whitespace"/imm32
542 68/push 2/imm32
543
544 b8/copy-to-eax _test-stream/imm32
545 ff 6/subop/push 1/mod/*+disp8 0/rm32/eax . . . . 4/disp8 .
546
547 e8/call check-ints-equal/disp32
548
549 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
550
551 c3/return
552
553
554 skip-chars-not-matching:
555
556 55/push-ebp
557 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
558
559 50/push-eax
560 51/push-ecx
561 52/push-edx
562 53/push-ebx
563 56/push-esi
564
565 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 6/r32/esi 8/disp8 .
566
567 8b/copy 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 .
568
569 8b/copy 0/mod/indirect 6/rm32/esi . . . 3/r32/ebx . .
570
571 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 2/r32/edx 0xc/disp8 .
572 $skip-chars-not-matching:loop:
573
574 39/compare 3/mod/direct 1/rm32/ecx . . . 3/r32/ebx . .
575 7d/jump-if-greater-or-equal $skip-chars-not-matching:end/disp8
576
577 31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . .
578 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/AL 0xc/disp8 .
579
580 39/compare 3/mod/direct 0/rm32/eax . . . 2/r32/edx . .
581 74/jump-if-equal $skip-chars-not-matching:end/disp8
582
583 41/increment-ecx
584 eb/jump $skip-chars-not-matching:loop/disp8
585 $skip-chars-not-matching:end:
586
587 89/copy 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 .
588
589 5e/pop-to-esi
590 5b/pop-to-ebx
591 5a/pop-to-edx
592 59/pop-to-ecx
593 58/pop-to-eax
594
595 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
596 5d/pop-to-ebp
597 c3/return
598
599 test-skip-chars-not-matching:
600
601
602
603 68/push _test-stream/imm32
604
605 e8/call clear-stream/disp32
606
607 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
608
609
610 68/push "ab "/imm32
611 68/push _test-stream/imm32
612
613 e8/call write/disp32
614
615 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
616
617
618 68/push 0x20/imm32
619 68/push _test-stream/imm32
620
621 e8/call skip-chars-not-matching/disp32
622
623 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
624
625
626 68/push "F - test-skip-chars-not-matching"/imm32
627 68/push 2/imm32
628
629 b8/copy-to-eax _test-stream/imm32
630 ff 6/subop/push 1/mod/*+disp8 0/rm32/eax . . . . 4/disp8 .
631
632 e8/call check-ints-equal/disp32
633
634 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
635
636 c3/return
637
638 test-skip-chars-not-matching-none:
639
640
641
642 68/push _test-stream/imm32
643
644 e8/call clear-stream/disp32
645
646 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
647
648
649 68/push " ab"/imm32
650 68/push _test-stream/imm32
651
652 e8/call write/disp32
653
654 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
655
656
657 68/push 0x20/imm32
658 68/push _test-stream/imm32
659
660 e8/call skip-chars-not-matching/disp32
661
662 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
663
664
665 68/push "F - test-skip-chars-not-matching-none"/imm32
666 68/push 0/imm32
667
668 b8/copy-to-eax _test-stream/imm32
669 ff 6/subop/push 1/mod/*+disp8 0/rm32/eax . . . . 4/disp8 .
670
671 e8/call check-ints-equal/disp32
672
673 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
674
675 c3/return
676
677 test-skip-chars-not-matching-all:
678
679
680
681 68/push _test-stream/imm32
682
683 e8/call clear-stream/disp32
684
685 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
686
687
688 68/push "ab"/imm32
689 68/push _test-stream/imm32
690
691 e8/call write/disp32
692
693 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
694
695
696 68/push 0x20/imm32
697 68/push _test-stream/imm32
698
699 e8/call skip-chars-not-matching/disp32
700
701 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
702
703
704 68/push "F - test-skip-chars-not-matching-all"/imm32
705 68/push 2/imm32
706
707 b8/copy-to-eax _test-stream/imm32
708 ff 6/subop/push 1/mod/*+disp8 0/rm32/eax . . . . 4/disp8 .
709
710 e8/call check-ints-equal/disp32
711
712 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
713
714 c3/return
715
716 skip-chars-not-matching-whitespace:
717
718 55/push-ebp
719 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
720
721 50/push-eax
722 51/push-ecx
723 53/push-ebx
724 56/push-esi
725
726 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 6/r32/esi 8/disp8 .
727
728 8b/copy 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 .
729
730 8b/copy 0/mod/indirect 6/rm32/esi . . . 3/r32/ebx . .
731 $skip-chars-not-matching-whitespace:loop:
732
733 39/compare 3/mod/direct 1/rm32/ecx . . . 3/r32/ebx . .
734 7d/jump-if-greater-or-equal $skip-chars-not-matching-whitespace:end/disp8
735
736 31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . .
737 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/AL 0xc/disp8 .
738
739 3d/compare-eax-and 0x20/imm32/space
740 74/jump-if-equal $skip-chars-not-matching-whitespace:end/disp8
741
742 3d/compare-eax-and 0x0a/imm32/newline
743 74/jump-if-equal $skip-chars-not-matching-whitespace:end/disp8
744
745 3d/compare-eax-and 0x09/imm32/tab
746 74/jump-if-equal $skip-chars-not-matching-whitespace:end/disp8
747
748 3d/compare-eax-and 0x0d/imm32/cr
749 74/jump-if-equal $skip-chars-not-matching-whitespace:end/disp8
750
751 41/increment-ecx
752 eb/jump $skip-chars-not-matching-whitespace:loop/disp8
753 $skip-chars-not-matching-whitespace:end:
754
755 89/copy 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 .
756
757 5e/pop-to-esi
758 5b/pop-to-ebx
759 59/pop-to-ecx
760 58/pop-to-eax
761
762 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
763 5d/pop-to-ebp
764 c3/return
765
766 test-skip-chars-not-matching-whitespace:
767
768
769
770 68/push _test-stream/imm32
771
772 e8/call clear-stream/disp32
773
774 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
775
776
777 68/push "ab\n"/imm32
778 68/push _test-stream/imm32
779
780 e8/call write/disp32
781
782 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
783
784
785 68/push _test-stream/imm32
786
787 e8/call skip-chars-not-matching-whitespace/disp32
788
789 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
790
791
792 68/push "F - test-skip-chars-not-matching-whitespace"/imm32
793 68/push 2/imm32
794
795 b8/copy-to-eax _test-stream/imm32
796 ff 6/subop/push 1/mod/*+disp8 0/rm32/eax . . . . 4/disp8 .
797
798 e8/call check-ints-equal/disp32
799
800 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
801
802 c3/return
803
804 skip-chars-matching-in-slice:
805
806 55/push-ebp
807 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
808
809 51/push-ecx
810 52/push-edx
811 53/push-ebx
812
813 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 0/r32/eax 8/disp8 .
814
815 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 1/r32/ecx 0xc/disp8 .
816
817 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 2/r32/edx 0x10/disp8 .
818
819 31/xor 3/mod/direct 3/rm32/ebx . . . 3/r32/ebx . .
820 $skip-chars-matching-in-slice:loop:
821
822 39/compare 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . .
823 73/jump-if-greater-or-equal-unsigned $skip-chars-matching-in-slice:end/disp8
824
825 8a/copy-byte 0/mod/indirect 0/rm32/eax . . . 3/r32/BL . .
826 39/compare 3/mod/direct 3/rm32/ebx . . . 2/r32/edx . .
827 75/jump-if-not-equal $skip-chars-matching-in-slice:end/disp8
828
829 40/increment-eax
830 eb/jump $skip-chars-matching-in-slice:loop/disp8
831 $skip-chars-matching-in-slice:end:
832
833 5b/pop-to-ebx
834 5a/pop-to-edx
835 59/pop-to-ecx
836
837 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
838 5d/pop-to-ebp
839 c3/return
840
841 test-skip-chars-matching-in-slice:
842
843 b8/copy-to-eax " ab"/imm32
844 8b/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . .
845 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/eax 1/index/ecx . 1/r32/ecx 4/disp8 .
846 05/add-to-eax 4/imm32
847
848
849 68/push 0x20/imm32/space
850 51/push-ecx
851 50/push-eax
852
853 e8/call skip-chars-matching-in-slice/disp32
854
855 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
856
857
858 68/push "F - test-skip-chars-matching-in-slice"/imm32
859 68/push 2/imm32
860
861 29/subtract 3/mod/direct 1/rm32/ecx . . . 0/r32/eax . .
862 51/push-ecx
863
864 e8/call check-ints-equal/disp32
865
866 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
867
868 c3/return
869
870 test-skip-chars-matching-in-slice-none:
871
872 b8/copy-to-eax "ab"/imm32
873 8b/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . .
874 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/eax 1/index/ecx . 1/r32/ecx 4/disp8 .
875 05/add-to-eax 4/imm32
876
877
878 68/push 0x20/imm32/space
879 51/push-ecx
880 50/push-eax
881
882 e8/call skip-chars-matching-in-slice/disp32
883
884 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
885
886
887 68/push "F - test-skip-chars-matching-in-slice-none"/imm32
888 68/push 2/imm32
889
890 29/subtract 3/mod/direct 1/rm32/ecx . . . 0/r32/eax . .
891 51/push-ecx
892
893 e8/call check-ints-equal/disp32
894
895 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
896
897 c3/return
898
899 skip-chars-matching-whitespace-in-slice:
900
901 55/push-ebp
902 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
903
904 51/push-ecx
905 53/push-ebx
906
907 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 0/r32/eax 8/disp8 .
908
909 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 1/r32/ecx 0xc/disp8 .
910
911 31/xor 3/mod/direct 3/rm32/ebx . . . 3/r32/ebx . .
912 $skip-chars-matching-whitespace-in-slice:loop:
913
914 39/compare 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . .
915 0f 83/jump-if-greater-or-equal-unsigned $skip-chars-matching-in-slice:end/disp32
916
917 8a/copy-byte 0/mod/indirect 0/rm32/eax . . . 3/r32/BL . .
918
919 81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x20/imm32/space
920 74/jump-if-equal $skip-chars-matching-whitespace-in-slice:body/disp8
921
922 81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x0a/imm32/newline
923 74/jump-if-equal $skip-chars-matching-whitespace-in-slice:body/disp8
924
925 81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x09/imm32/tab
926 74/jump-if-equal $skip-chars-matching-whitespace-in-slice:body/disp8
927
928 81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x0d/imm32/cr
929 75/jump-if-not-equal $skip-chars-matching-whitespace-in-slice:end/disp8
930 $skip-chars-matching-whitespace-in-slice:body:
931
932 40/increment-eax
933 eb/jump $skip-chars-matching-whitespace-in-slice:loop/disp8
934 $skip-chars-matching-whitespace-in-slice:end:
935
936 5b/pop-to-ebx
937 59/pop-to-ecx
938
939 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
940 5d/pop-to-ebp
941 c3/return
942
943 test-skip-chars-matching-whitespace-in-slice:
944
945 b8/copy-to-eax " \nab"/imm32
946 8b/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . .
947 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/eax 1/index/ecx . 1/r32/ecx 4/disp8 .
948 05/add-to-eax 4/imm32
949
950
951 51/push-ecx
952 50/push-eax
953
954 e8/call skip-chars-matching-whitespace-in-slice/disp32
955
956 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
957
958
959 68/push "F - test-skip-chars-matching-whitespace-in-slice"/imm32
960 68/push 2/imm32
961
962 29/subtract 3/mod/direct 1/rm32/ecx . . . 0/r32/eax . .
963 51/push-ecx
964
965 e8/call check-ints-equal/disp32
966
967 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
968
969 c3/return
970
971
972 skip-chars-not-matching-in-slice:
973
974 55/push-ebp
975 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
976
977 51/push-ecx
978 52/push-edx
979 53/push-ebx
980
981 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 0/r32/eax 8/disp8 .
982
983 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 1/r32/ecx 0xc/disp8 .
984
985 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 2/r32/edx 0x10/disp8 .
986
987 31/xor 3/mod/direct 3/rm32/ebx . . . 3/r32/ebx . .
988 $skip-chars-not-matching-in-slice:loop:
989
990 39/compare 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . .
991 73/jump-if-greater-or-equal-unsigned $skip-chars-not-matching-in-slice:end/disp8
992
993 8a/copy-byte 0/mod/indirect 0/rm32/eax . . . 3/r32/BL . .
994 39/compare 3/mod/direct 3/rm32/ebx . . . 2/r32/edx . .
995 74/jump-if-equal $skip-chars-not-matching-in-slice:end/disp8
996
997 40/increment-eax
998 eb/jump $skip-chars-not-matching-in-slice:loop/disp8
999 $skip-chars-not-matching-in-slice:end:
1000
1001 5b/pop-to-ebx
1002 5a/pop-to-edx
1003 59/pop-to-ecx
1004
1005 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
1006 5d/pop-to-ebp
1007 c3/return
1008
1009 test-skip-chars-not-matching-in-slice:
1010
1011 b8/copy-to-eax "ab "/imm32
1012 8b/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . .
1013 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/eax 1/index/ecx . 1/r32/ecx 4/disp8 .
1014 05/add-to-eax 4/imm32
1015
1016
1017 68/push 0x20/imm32/space
1018 51/push-ecx
1019 50/push-eax
1020
1021 e8/call skip-chars-not-matching-in-slice/disp32
1022
1023 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1024
1025
1026 68/push "F - test-skip-chars-not-matching-in-slice"/imm32
1027 68/push 1/imm32
1028
1029 29/subtract 3/mod/direct 1/rm32/ecx . . . 0/r32/eax . .
1030 51/push-ecx
1031
1032 e8/call check-ints-equal/disp32
1033
1034 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1035
1036 c3/return
1037
1038 test-skip-chars-not-matching-in-slice-none:
1039
1040 b8/copy-to-eax " ab"/imm32
1041 8b/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . .
1042 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/eax 1/index/ecx . 1/r32/ecx 4/disp8 .
1043 05/add-to-eax 4/imm32
1044
1045
1046 68/push 0x20/imm32/space
1047 51/push-ecx
1048 50/push-eax
1049
1050 e8/call skip-chars-not-matching-in-slice/disp32
1051
1052 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1053
1054
1055 68/push "F - test-skip-chars-not-matching-in-slice-none"/imm32
1056 68/push 3/imm32
1057
1058 29/subtract 3/mod/direct 1/rm32/ecx . . . 0/r32/eax . .
1059 51/push-ecx
1060
1061 e8/call check-ints-equal/disp32
1062
1063 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1064
1065 c3/return
1066
1067 test-skip-chars-not-matching-in-slice-all:
1068
1069 b8/copy-to-eax "ab"/imm32
1070 8b/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . .
1071 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/eax 1/index/ecx . 1/r32/ecx 4/disp8 .
1072 05/add-to-eax 4/imm32
1073
1074
1075 68/push 0x20/imm32/space
1076 51/push-ecx
1077 50/push-eax
1078
1079 e8/call skip-chars-not-matching-in-slice/disp32
1080
1081 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1082
1083
1084 68/push "F - test-skip-chars-not-matching-in-slice-all"/imm32
1085 68/push 0/imm32
1086
1087 29/subtract 3/mod/direct 1/rm32/ecx . . . 0/r32/eax . .
1088 51/push-ecx
1089
1090 e8/call check-ints-equal/disp32
1091
1092 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1093
1094 c3/return
1095
1096 skip-chars-not-matching-whitespace-in-slice:
1097
1098 55/push-ebp
1099 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
1100
1101 51/push-ecx
1102 53/push-ebx
1103
1104 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 0/r32/eax 8/disp8 .
1105
1106 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 1/r32/ecx 0xc/disp8 .
1107
1108 31/xor 3/mod/direct 3/rm32/ebx . . . 3/r32/ebx . .
1109 $skip-chars-not-matching-whitespace-in-slice:loop:
1110
1111 39/compare 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . .
1112 0f 83/jump-if-greater-or-equal-unsigned $skip-chars-not-matching-in-slice:end/disp32
1113
1114 8a/copy-byte 0/mod/indirect 0/rm32/eax . . . 3/r32/BL . .
1115
1116 81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x20/imm32/space
1117 74/jump-if-equal $skip-chars-not-matching-whitespace-in-slice:end/disp8
1118
1119 81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x0a/imm32/newline
1120 74/jump-if-equal $skip-chars-not-matching-whitespace-in-slice:end/disp8
1121
1122 81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x09/imm32/tab
1123 74/jump-if-equal $skip-chars-not-matching-whitespace-in-slice:end/disp8
1124
1125 81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x0d/imm32/cr
1126 74/jump-if-equal $skip-chars-not-matching-whitespace-in-slice:end/disp8
1127
1128 40/increment-eax
1129 eb/jump $skip-chars-not-matching-whitespace-in-slice:loop/disp8
1130 $skip-chars-not-matching-whitespace-in-slice:end:
1131
1132 5b/pop-to-ebx
1133 59/pop-to-ecx
1134
1135 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
1136 5d/pop-to-ebp
1137 c3/return
1138
1139 test-skip-chars-not-matching-whitespace-in-slice:
1140
1141 b8/copy-to-eax "ab\n"/imm32
1142 8b/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . .
1143 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/eax 1/index/ecx . 1/r32/ecx 4/disp8 .
1144 05/add-to-eax 4/imm32
1145
1146
1147 51/push-ecx
1148 50/push-eax
1149
1150 e8/call skip-chars-not-matching-whitespace-in-slice/disp32
1151
1152 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1153
1154
1155 68/push "F - test-skip-chars-not-matching-whitespace-in-slice"/imm32
1156 68/push 1/imm32
1157
1158 29/subtract 3/mod/direct 1/rm32/ecx . . . 0/r32/eax . .
1159 51/push-ecx
1160
1161 e8/call check-ints-equal/disp32
1162
1163 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1164
1165 c3/return
1166
1167
1168
1169 skip-string:
1170
1171 55/push-ebp
1172 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
1173
1174 50/push-eax
1175 51/push-ecx
1176 52/push-edx
1177
1178 8b/copy 1/mod/*+disp8 5/rm32/ebp . . 1/r32/ecx 8/disp8 .
1179
1180
1181 8b/copy 1/mod/*+disp8 1/rm32/ecx . . 2/r32/edx 8/disp8 .
1182 8d/copy-address 1/mod/*+disp8 4/rm32/sib 1/base/ecx 2/index/edx . 2/r32/edx 0xc/disp8 .
1183 52/push-edx
1184
1185 8b/copy 1/mod/*+disp8 1/rm32/ecx . . 2/r32/edx 4/disp8 .
1186 8d/copy-address 1/mod/*+disp8 4/rm32/sib 1/base/ecx 2/index/edx . 2/r32/edx 0xc/disp8 .
1187 52/push-edx
1188
1189 e8/call skip-string-in-slice/disp32
1190
1191 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1192
1193 29/subtract 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . .
1194 2d/subtract-from-eax 0xc/imm32
1195 89/copy 1/mod/*+disp8 1/rm32/ecx . . 0/r32/eax 4/disp8 .
1196 $skip-string:end:
1197
1198 5a/pop-to-edx
1199 59/pop-to-ecx
1200 58/pop-to-eax
1201
1202 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
1203 5d/pop-to-ebp
1204 c3/return
1205
1206 test-skip-string:
1207
1208 55/push-ebp
1209 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
1210
1211
1212
1213 68/push _test-input-stream/imm32
1214
1215 e8/call clear-stream/disp32
1216
1217 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
1218
1219
1220
1221 68/push "\"abc\" def"/imm32
1222 68/push _test-input-stream/imm32
1223
1224 e8/call write/disp32
1225
1226 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1227
1228
1229 68/push "F - test-skip-string/precondition"/imm32
1230 68/push 0/imm32
1231 b8/copy-to-eax _test-input-stream/imm32
1232 ff 6/subop/push 1/mod/*+disp8 0/rm32/eax . . . . 4/disp8 .
1233
1234 e8/call check-ints-equal/disp32
1235
1236 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1237
1238
1239 68/push _test-input-stream/imm32
1240
1241 e8/call skip-string/disp32
1242
1243 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
1244
1245
1246 68/push "F - test-skip-string"/imm32
1247 68/push 5/imm32
1248 b8/copy-to-eax _test-input-stream/imm32
1249 ff 6/subop/push 1/mod/*+disp8 0/rm32/eax . . . . 4/disp8 .
1250
1251 e8/call check-ints-equal/disp32
1252
1253 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1254
1255 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
1256 5d/pop-to-ebp
1257 c3/return
1258
1259 test-skip-string-ignores-spaces:
1260
1261 55/push-ebp
1262 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
1263
1264
1265
1266 68/push _test-input-stream/imm32
1267
1268 e8/call clear-stream/disp32
1269
1270 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
1271
1272
1273
1274 68/push "\"a b\"/yz"/imm32
1275 68/push _test-input-stream/imm32
1276
1277 e8/call write/disp32
1278
1279 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1280
1281
1282 68/push "F - test-skip-string-ignores-spaces/precondition"/imm32
1283 68/push 0/imm32
1284 b8/copy-to-eax _test-input-stream/imm32
1285 ff 6/subop/push 1/mod/*+disp8 0/rm32/eax . . . . 4/disp8 .
1286
1287 e8/call check-ints-equal/disp32
1288
1289 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1290
1291
1292 68/push _test-input-stream/imm32
1293
1294 e8/call skip-string/disp32
1295
1296 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
1297
1298
1299 68/push "F - test-skip-string-ignores-spaces"/imm32
1300 68/push 5/imm32
1301 b8/copy-to-eax _test-input-stream/imm32
1302 ff 6/subop/push 1/mod/*+disp8 0/rm32/eax . . . . 4/disp8 .
1303
1304 e8/call check-ints-equal/disp32
1305
1306 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1307
1308 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
1309 5d/pop-to-ebp
1310 c3/return
1311
1312 test-skip-string-ignores-escapes:
1313
1314 55/push-ebp
1315 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
1316
1317
1318
1319 68/push _test-input-stream/imm32
1320
1321 e8/call clear-stream/disp32
1322
1323 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
1324
1325
1326
1327 68/push "\"a\\\"b\"/yz"/imm32
1328 68/push _test-input-stream/imm32
1329
1330 e8/call write/disp32
1331
1332 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1333
1334
1335 68/push "F - test-skip-string-ignores-escapes/precondition"/imm32
1336 68/push 0/imm32
1337 b8/copy-to-eax _test-input-stream/imm32
1338 ff 6/subop/push 1/mod/*+disp8 0/rm32/eax . . . . 4/disp8 .
1339
1340 e8/call check-ints-equal/disp32
1341
1342 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1343
1344
1345 68/push _test-input-stream/imm32
1346
1347 e8/call skip-string/disp32
1348
1349 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
1350
1351
1352 68/push "F - test-skip-string-ignores-escapes"/imm32
1353 68/push 6/imm32
1354 b8/copy-to-eax _test-input-stream/imm32
1355 ff 6/subop/push 1/mod/*+disp8 0/rm32/eax . . . . 4/disp8 .
1356
1357 e8/call check-ints-equal/disp32
1358
1359 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1360
1361 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
1362 5d/pop-to-ebp
1363 c3/return
1364
1365 test-skip-string-works-from-mid-stream:
1366
1367 55/push-ebp
1368 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
1369
1370
1371
1372 68/push _test-input-stream/imm32
1373
1374 e8/call clear-stream/disp32
1375
1376 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
1377
1378
1379
1380 68/push "0 \"a\\\"b\"/yz"/imm32
1381 68/push _test-input-stream/imm32
1382
1383 e8/call write/disp32
1384
1385 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1386
1387 b8/copy-to-eax _test-input-stream/imm32
1388 c7 0/subop/copy 1/mod/*+disp8 0/rm32/eax . . . . 4/disp8 2/imm32
1389
1390
1391 68/push _test-input-stream/imm32
1392
1393 e8/call skip-string/disp32
1394
1395 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
1396
1397
1398 68/push "F - test-skip-string-works-from-mid-stream"/imm32
1399 68/push 8/imm32
1400 b8/copy-to-eax _test-input-stream/imm32
1401 ff 6/subop/push 1/mod/*+disp8 0/rm32/eax . . . . 4/disp8 .
1402
1403 e8/call check-ints-equal/disp32
1404
1405 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1406
1407 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
1408 5d/pop-to-ebp
1409 c3/return
1410
1411 skip-string-in-slice:
1412
1413 55/push-ebp
1414 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
1415
1416 51/push-ecx
1417 52/push-edx
1418 53/push-ebx
1419
1420 8b/copy 1/mod/*+disp8 5/rm32/ebp . . 1/r32/ecx 8/disp8 .
1421
1422 8b/copy 1/mod/*+disp8 5/rm32/ebp . . 2/r32/edx 0xc/disp8 .
1423
1424 31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . .
1425
1426 41/increment-ecx
1427 $skip-string-in-slice:loop:
1428
1429 39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . .
1430 73/jump-if-greater-unsigned-or-equal $skip-string-in-slice:return-curr/disp8
1431
1432 8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . .
1433 $skip-string-in-slice:dquote:
1434
1435 3d/compare-eax-and 0x22/imm32/double-quote
1436 74/jump-if-equal $skip-string-in-slice:break/disp8
1437 $skip-string-in-slice:check-for-escape:
1438
1439 3d/compare-eax-and 0x5c/imm32/backslash
1440 75/jump-if-not-equal $skip-string-in-slice:continue/disp8
1441 $skip-string-in-slice:escape:
1442 41/increment-ecx
1443 $skip-string-in-slice:continue:
1444
1445 41/increment-ecx
1446 eb/jump $skip-string-in-slice:loop/disp8
1447 $skip-string-in-slice:break:
1448
1449 41/increment-ecx
1450 $skip-string-in-slice:return-curr:
1451
1452 89/copy 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . .
1453 $skip-string-in-slice:end:
1454
1455 5b/pop-to-ebx
1456 5a/pop-to-edx
1457 59/pop-to-ecx
1458
1459 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
1460 5d/pop-to-ebp
1461 c3/return
1462
1463 test-skip-string-in-slice:
1464
1465 55/push-ebp
1466 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
1467
1468 b8/copy-to-eax "\"abc\" def"/imm32
1469 8b/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . .
1470 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/eax 1/index/ecx . 1/r32/ecx 4/disp8 .
1471 05/add-to-eax 4/imm32
1472
1473
1474 51/push-ecx
1475 50/push-eax
1476
1477 e8/call skip-string-in-slice/disp32
1478
1479 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1480
1481
1482 68/push "F - test-skip-string-in-slice"/imm32
1483 68/push 4/imm32
1484
1485 29/subtract 3/mod/direct 1/rm32/ecx . . . 0/r32/eax . .
1486 51/push-ecx
1487
1488 e8/call check-ints-equal/disp32
1489
1490 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1491
1492 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
1493 5d/pop-to-ebp
1494 c3/return
1495
1496 test-skip-string-in-slice-ignores-spaces:
1497
1498 55/push-ebp
1499 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
1500
1501 b8/copy-to-eax "\"a b\"/yz"/imm32
1502 8b/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . .
1503 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/eax 1/index/ecx . 1/r32/ecx 4/disp8 .
1504 05/add-to-eax 4/imm32
1505
1506
1507 51/push-ecx
1508 50/push-eax
1509
1510 e8/call skip-string-in-slice/disp32
1511
1512 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1513
1514
1515 68/push "F - test-skip-string-in-slice-ignores-spaces"/imm32
1516 68/push 3/imm32
1517
1518 29/subtract 3/mod/direct 1/rm32/ecx . . . 0/r32/eax . .
1519 51/push-ecx
1520
1521 e8/call check-ints-equal/disp32
1522
1523 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1524
1525 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
1526 5d/pop-to-ebp
1527 c3/return
1528
1529 test-skip-string-in-slice-ignores-escapes:
1530
1531 55/push-ebp
1532 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
1533
1534 b8/copy-to-eax "\"a\\\"b\"/yz"/imm32
1535 8b/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . .
1536 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/eax 1/index/ecx . 1/r32/ecx 4/disp8 .
1537 05/add-to-eax 4/imm32
1538
1539
1540 51/push-ecx
1541 50/push-eax
1542
1543 e8/call skip-string-in-slice/disp32
1544
1545 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1546
1547
1548 68/push "F - test-skip-string-in-slice-ignores-escapes"/imm32
1549 68/push 3/imm32
1550
1551 29/subtract 3/mod/direct 1/rm32/ecx . . . 0/r32/eax . .
1552 51/push-ecx
1553
1554 e8/call check-ints-equal/disp32
1555
1556 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1557
1558 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
1559 5d/pop-to-ebp
1560 c3/return
1561
1562 test-skip-string-in-slice-stops-at-end:
1563
1564 55/push-ebp
1565 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
1566
1567 b8/copy-to-eax "\"abc"/imm32
1568 8b/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . .
1569 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/eax 1/index/ecx . 1/r32/ecx 4/disp8 .
1570 05/add-to-eax 4/imm32
1571
1572
1573 51/push-ecx
1574 50/push-eax
1575
1576 e8/call skip-string-in-slice/disp32
1577
1578 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1579
1580
1581 68/push "F - test-skip-string-in-slice-stops-at-end"/imm32
1582 68/push 0/imm32
1583
1584 29/subtract 3/mod/direct 1/rm32/ecx . . . 0/r32/eax . .
1585 51/push-ecx
1586
1587 e8/call check-ints-equal/disp32
1588
1589 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1590
1591 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
1592 5d/pop-to-ebp
1593 c3/return
1594
1595
1596
1597 skip-until-close-paren:
1598
1599 55/push-ebp
1600 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
1601
1602 50/push-eax
1603 51/push-ecx
1604 52/push-edx
1605
1606 8b/copy 1/mod/*+disp8 5/rm32/ebp . . 1/r32/ecx 8/disp8 .
1607
1608
1609 8b/copy 1/mod/*+disp8 1/rm32/ecx . . 2/r32/edx 8/disp8 .
1610 8d/copy-address 1/mod/*+disp8 4/rm32/sib 1/base/ecx 2/index/edx . 2/r32/edx 0xc/disp8 .
1611 52/push-edx
1612
1613 8b/copy 1/mod/*+disp8 1/rm32/ecx . . 2/r32/edx 4/disp8 .
1614 8d/copy-address 1/mod/*+disp8 4/rm32/sib 1/base/ecx 2/index/edx . 2/r32/edx 0xc/disp8 .
1615 52/push-edx
1616
1617 e8/call skip-until-close-paren-in-slice/disp32
1618
1619 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1620
1621 29/subtract 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . .
1622 2d/subtract-from-eax 0xc/imm32
1623 89/copy 1/mod/*+disp8 1/rm32/ecx . . 0/r32/eax 4/disp8 .
1624 $skip-until-close-paren:end:
1625
1626 5a/pop-to-edx
1627 59/pop-to-ecx
1628 58/pop-to-eax
1629
1630 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
1631 5d/pop-to-ebp
1632 c3/return
1633
1634 test-skip-until-close-paren:
1635
1636 55/push-ebp
1637 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
1638
1639
1640
1641 68/push _test-input-stream/imm32
1642
1643 e8/call clear-stream/disp32
1644
1645 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
1646
1647
1648
1649 68/push "*(abc) def"/imm32
1650 68/push _test-input-stream/imm32
1651
1652 e8/call write/disp32
1653
1654 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1655
1656
1657 68/push "F - test-skip-until-close-paren/precondition"/imm32
1658 68/push 0/imm32
1659 b8/copy-to-eax _test-input-stream/imm32
1660 ff 6/subop/push 1/mod/*+disp8 0/rm32/eax . . . . 4/disp8 .
1661
1662 e8/call check-ints-equal/disp32
1663
1664 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1665
1666
1667 68/push _test-input-stream/imm32
1668
1669 e8/call skip-until-close-paren/disp32
1670
1671 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
1672
1673
1674 68/push "F - test-skip-until-close-paren"/imm32
1675 68/push 5/imm32
1676 b8/copy-to-eax _test-input-stream/imm32
1677 ff 6/subop/push 1/mod/*+disp8 0/rm32/eax . . . . 4/disp8 .
1678
1679 e8/call check-ints-equal/disp32
1680
1681 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1682
1683 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
1684 5d/pop-to-ebp
1685 c3/return
1686
1687 test-skip-until-close-paren-ignores-spaces:
1688
1689 55/push-ebp
1690 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
1691
1692
1693
1694 68/push _test-input-stream/imm32
1695
1696 e8/call clear-stream/disp32
1697
1698 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
1699
1700
1701 68/push "*(a b)/yz"/imm32
1702 68/push _test-input-stream/imm32
1703
1704 e8/call write/disp32
1705
1706 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1707
1708
1709 68/push "F - test-skip-until-close-paren-ignores-spaces/precondition"/imm32
1710 68/push 0/imm32
1711 b8/copy-to-eax _test-input-stream/imm32
1712 ff 6/subop/push 1/mod/*+disp8 0/rm32/eax . . . . 4/disp8 .
1713
1714 e8/call check-ints-equal/disp32
1715
1716 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1717
1718
1719 68/push _test-input-stream/imm32
1720
1721 e8/call skip-until-close-paren/disp32
1722
1723 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
1724
1725
1726 68/push "F - test-skip-until-close-paren-ignores-spaces"/imm32
1727 68/push 5/imm32
1728 b8/copy-to-eax _test-input-stream/imm32
1729 ff 6/subop/push 1/mod/*+disp8 0/rm32/eax . . . . 4/disp8 .
1730
1731 e8/call check-ints-equal/disp32
1732
1733 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1734
1735 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
1736 5d/pop-to-ebp
1737 c3/return
1738
1739 test-skip-until-close-paren-works-from-mid-stream:
1740
1741 55/push-ebp
1742 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
1743
1744
1745
1746 68/push _test-input-stream/imm32
1747
1748 e8/call clear-stream/disp32
1749
1750 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
1751
1752
1753 68/push "0 *(a b)/yz"/imm32
1754 68/push _test-input-stream/imm32
1755
1756 e8/call write/disp32
1757
1758 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1759
1760 b8/copy-to-eax _test-input-stream/imm32
1761 c7 0/subop/copy 1/mod/*+disp8 0/rm32/eax . . . . 4/disp8 2/imm32
1762
1763
1764 68/push _test-input-stream/imm32
1765
1766 e8/call skip-until-close-paren/disp32
1767
1768 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
1769
1770
1771 68/push "F - test-skip-until-close-paren-works-from-mid-stream"/imm32
1772 68/push 7/imm32
1773 b8/copy-to-eax _test-input-stream/imm32
1774 ff 6/subop/push 1/mod/*+disp8 0/rm32/eax . . . . 4/disp8 .
1775
1776 e8/call check-ints-equal/disp32
1777
1778 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1779
1780 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
1781 5d/pop-to-ebp
1782 c3/return
1783
1784 skip-until-close-paren-in-slice:
1785
1786 55/push-ebp
1787 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
1788
1789 51/push-ecx
1790 52/push-edx
1791
1792 8b/copy 1/mod/*+disp8 5/rm32/ebp . . 1/r32/ecx 8/disp8 .
1793
1794 8b/copy 1/mod/*+disp8 5/rm32/ebp . . 2/r32/edx 0xc/disp8 .
1795
1796 31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . .
1797
1798 41/increment-ecx
1799 $skip-until-close-paren-in-slice:loop:
1800
1801 39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . .
1802 73/jump-if-greater-unsigned-or-equal $skip-until-close-paren-in-slice:break/disp8
1803
1804 8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . .
1805 $skip-until-close-paren-in-slice:check-close:
1806
1807 3d/compare-eax-and 0x29/imm32/close-paren
1808 74/jump-if-equal $skip-until-close-paren-in-slice:break/disp8
1809
1810 41/increment-ecx
1811 eb/jump $skip-until-close-paren-in-slice:loop/disp8
1812 $skip-until-close-paren-in-slice:break:
1813
1814 89/copy 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . .
1815 $skip-until-close-paren-in-slice:end:
1816
1817 5a/pop-to-edx
1818 59/pop-to-ecx
1819
1820 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
1821 5d/pop-to-ebp
1822 c3/return
1823
1824 test-skip-until-close-paren-in-slice:
1825
1826 55/push-ebp
1827 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
1828
1829 b8/copy-to-eax "*(abc) def"/imm32
1830 8b/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . .
1831 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/eax 1/index/ecx . 1/r32/ecx 4/disp8 .
1832 05/add-to-eax 4/imm32
1833
1834
1835 51/push-ecx
1836 50/push-eax
1837
1838 e8/call skip-until-close-paren-in-slice/disp32
1839
1840 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1841
1842
1843 68/push "F - test-skip-until-close-paren-in-slice"/imm32
1844 68/push 5/imm32
1845
1846 29/subtract 3/mod/direct 1/rm32/ecx . . . 0/r32/eax . .
1847 51/push-ecx
1848
1849 e8/call check-ints-equal/disp32
1850
1851 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1852
1853 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
1854 5d/pop-to-ebp
1855 c3/return
1856
1857 test-skip-until-close-paren-in-slice-ignores-spaces:
1858
1859 55/push-ebp
1860 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
1861
1862 b8/copy-to-eax "*(a b)/yz"/imm32
1863 8b/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . .
1864 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/eax 1/index/ecx . 1/r32/ecx 4/disp8 .
1865 05/add-to-eax 4/imm32
1866
1867
1868 51/push-ecx
1869 50/push-eax
1870
1871 e8/call skip-until-close-paren-in-slice/disp32
1872
1873 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1874
1875
1876 68/push "F - test-skip-until-close-paren-in-slice-ignores-spaces"/imm32
1877 68/push 4/imm32
1878
1879 29/subtract 3/mod/direct 1/rm32/ecx . . . 0/r32/eax . .
1880 51/push-ecx
1881
1882 e8/call check-ints-equal/disp32
1883
1884 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1885
1886 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
1887 5d/pop-to-ebp
1888 c3/return
1889
1890 test-skip-until-close-paren-in-slice-stops-at-end:
1891
1892 55/push-ebp
1893 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
1894
1895 b8/copy-to-eax "*(abc"/imm32
1896 8b/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . .
1897 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/eax 1/index/ecx . 1/r32/ecx 4/disp8 .
1898 05/add-to-eax 4/imm32
1899
1900
1901 51/push-ecx
1902 50/push-eax
1903
1904 e8/call skip-until-close-paren-in-slice/disp32
1905
1906 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1907
1908
1909 68/push "F - test-skip-until-close-paren-in-slice-stops-at-end"/imm32
1910 68/push 0/imm32
1911
1912 29/subtract 3/mod/direct 1/rm32/ecx . . . 0/r32/eax . .
1913 51/push-ecx
1914
1915 e8/call check-ints-equal/disp32
1916
1917 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1918
1919 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
1920 5d/pop-to-ebp
1921 c3/return
1922
1923