about summary refs log tree commit diff stats
path: root/html/063error.subx.html
blob: d5190932d1b201d3b782ed7a71ad629d6fe6e84b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 063error.subx</title>
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=">
<meta name="colorscheme" content="minimal-light">
<style type="text/css">
<!--
pre { font-family: monospace; color: #000000; background-color: #c6c6c6; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #c6c6c6; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxComment { color: #005faf; }
.subxS2Comment { color: #8a8a8a; }
.LineNr { }
.SpecialChar { color: #d70000; }
.subxS1Comment { color: #0000af; }
.subxFunction { color: #af5f00; text-decoration: underline; }
.Normal { color: #000000; background-color: #c6c6c6; padding-bottom: 1px; }
.Constant { color: #008787; }
-->
</style>

<script type='text/javascript'>
<!--

/* function to open any folds containing a jumped-to line before jumping to it */
function JumpToLine()
{
  var lineNum;
  lineNum = window.location.hash;
  lineNum = lineNum.substr(1); /* strip off '#' */

  if (lineNum.indexOf('L') == -1) {
    lineNum = 'L'+lineNum;
  }
  var lineElem = document.getElementById(lineNum);
  /* Always jump to new location even if the line was hidden inside a fold, or
   * we corrected the raw number to a line ID.
   */
  if (lineElem) {
    lineElem.scrollIntoView(true);
  }
  return true;
}
if ('onhashchange' in window) {
  window.onhashchange = JumpToLine;
}

-->
</script>
</head>
<body onload='JumpToLine();'>
<a href='https://github.com/akkartik/mu/blob/master/063error.subx'>https://github.com/akkartik/mu/blob/master/063error.subx</a>
<pre id='vimCodeElement'>
<span id="L1" class="LineNr"> 1 </span><span class="subxComment"># Print an error message and exit.</span>
<span id="L2" class="LineNr"> 2 </span>
<span id="L3" class="LineNr"> 3 </span>== code
<span id="L4" class="LineNr"> 4 </span><span class="subxComment">#   instruction                     effective address                                                   register    displacement    immediate</span>
<span id="L5" class="LineNr"> 5 </span><span class="subxS1Comment"># . op          subop               mod             rm32          base        index         scale       r32</span>
<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>
<span id="L7" class="LineNr"> 7 </span>
<span id="L8" class="LineNr"> 8 </span><span class="subxComment"># write(out, &quot;Error: &quot;+msg+&quot;\n&quot;) then stop(ed, 1)</span>
<span id="L9" class="LineNr"> 9 </span><span class="subxFunction">error</span>:  <span class="subxComment"># ed : (address exit-descriptor), out : fd or (address stream), msg : (address array byte)</span>
<span id="L10" class="LineNr">10 </span>    <span class="subxS1Comment"># . prologue</span>
<span id="L11" class="LineNr">11 </span>    55/push-ebp
<span id="L12" class="LineNr">12 </span>    89/copy                         3/mod/direct    5/rm32/ebp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>          4/r32/esp  <span class="Normal"> . </span>             <span class="Normal"> . </span>                <span class="subxComment"># copy esp to ebp</span>
<span id="L13" class="LineNr">13 </span>    <span class="subxComment"># write(out, &quot;Error: &quot;)</span>
<span id="L14" class="LineNr">14 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L15" class="LineNr">15 </span>    68/push  <span class="Constant">&quot;Error: &quot;</span>/imm32
<span id="L16" class="LineNr">16 </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>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L17" class="LineNr">17 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L18" class="LineNr">18 </span>    e8/call  <a href='057write.subx.html#L24'>write</a>/disp32
<span id="L19" class="LineNr">19 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L20" class="LineNr">20 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L21" class="LineNr">21 </span>    <span class="subxComment"># write(out, msg)</span>
<span id="L22" class="LineNr">22 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L23" class="LineNr">23 </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>          0x10/disp8     <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+16)</span>
<span id="L24" class="LineNr">24 </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>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L25" class="LineNr">25 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L26" class="LineNr">26 </span>    e8/call  <a href='057write.subx.html#L24'>write</a>/disp32
<span id="L27" class="LineNr">27 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L28" class="LineNr">28 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L29" class="LineNr">29 </span>    <span class="subxComment"># write(out, &quot;\n&quot;)</span>
<span id="L30" class="LineNr">30 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L31" class="LineNr">31 </span>    68/push  <span class="SpecialChar"><a href='051test.subx.html#L83'>Newline</a></span>/imm32
<span id="L32" class="LineNr">32 </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>          0xc/disp8      <span class="Normal"> . </span>                <span class="subxComment"># push *(ebp+12)</span>
<span id="L33" class="LineNr">33 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L34" class="LineNr">34 </span>    e8/call  <a href='057write.subx.html#L24'>write</a>/disp32
<span id="L35" class="LineNr">35 </span>    <span class="subxS2Comment"># . . discard args</span>
<span id="L36" class="LineNr">36 </span>    81          0/subop/add         3/mod/direct    4/rm32/esp   <span class="Normal"> . </span>         <span class="Normal"> . </span>           <span class="Normal"> . </span>         <span class="Normal"> . </span>         <span class="Normal"> . </span>              8/imm32           <span class="subxComment"># add to esp</span>
<span id="L37" class="LineNr">37 </span>    <span class="subxComment"># stop(ed, 1)</span>
<span id="L38" class="LineNr">38 </span>    <span class="subxS2Comment"># . . push args</span>
<span id="L39" class="LineNr">39 </span>    68/push  1/imm32
<span id="L40" class="LineNr">40 </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>
<span id="L41" class="LineNr">41 </span>    <span class="subxS2Comment"># . . call</span>
<span id="L42" class="LineNr">42 </span>    e8/call  <a href='059stop.subx.html#L92'>stop</a>/disp32
<span id="L43" class="LineNr">43 </span>    <span class="subxComment"># should never get past this point</span>
<span id="L44" class="LineNr">44 </span><span class="Constant">$error:dead-end</span>:
<span id="L45" class="LineNr">45 </span>    <span class="subxS1Comment"># . epilogue</span>
<span id="L46" class="LineNr">46 </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>
<span id="L47" class="LineNr">47 </span>    5d/pop-to-ebp
<span id="L48" class="LineNr">48 </span>    c3/return
<span id="L49" class="LineNr">49 </span>
<span id="L50" class="LineNr">50 </span><span class="subxS2Comment"># . . vim&#0058;nowrap:textwidth=0</span>
</pre>
</body>
</html>
<!-- vim: set foldmethod=manual : -->
href='#n1903'>1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 073next-token.subx</title>
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=">
<meta name="colorscheme" content="minimal-light">
<style type="text/css">
<!--
pre { font-family: monospace; color: #000000; background-color: #c6c6c6; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #c6c6c6; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxComment { color: #005faf; }
.subxS2Comment { color: #8a8a8a; }
.LineNr { }
.subxS1Comment { color: #0000af; }
.Constant { color: #008787; }
.subxFunction { color: #af5f00; text-decoration: underline; }
.Normal { color: #000000; background-color: #c6c6c6; padding-bottom: 1px; }
.subxTest { color: #5f8700; }
-->
</style>

<script type='text/javascript'>
<!--

/* function to open any folds containing a jumped-to line before jumping to it */
function JumpToLine()
{
  var lineNum;
  lineNum = window.location.hash;
  lineNum = lineNum.substr(1); /* strip off '#' */

  if (lineNum.indexOf('L') == -1) {
    lineNum = 'L'+lineNum;
  }
  var lineElem = document.getElementById(lineNum);
  /* Always jump to new location even if the line was hidden inside a fold, or
   * we corrected the raw number to a line ID.
   */
  if (lineElem) {
    lineElem.scrollIntoView(true);
  }
  return true;
}
if ('onhashchange' in window) {
  window.onhashchange = JumpToLine;
}

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