about summary refs log tree commit diff stats
path: root/html
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2016-11-05 22:40:22 -0700
committerKartik K. Agaram <vc@akkartik.com>2016-11-05 22:41:18 -0700
commit87196c341506ea140a1b88b74f1bb24b609d9e78 (patch)
treeeea94030106c8fd7092a7e991857d228658fea18 /html
parentbc53f46d46a08e95b424ae280a6e45b1566689fa (diff)
downloadmu-87196c341506ea140a1b88b74f1bb24b609d9e78.tar.gz
3628 - fix a segfault in parsing
Thanks Jack Couch for accidentally leading me to this bug.
Diffstat (limited to 'html')
-rw-r--r--html/017parse_tree.cc.html9
1 files changed, 8 insertions, 1 deletions
diff --git a/html/017parse_tree.cc.html b/html/017parse_tree.cc.html
index 98f55374..f700033e 100644
--- a/html/017parse_tree.cc.html
+++ b/html/017parse_tree.cc.html
@@ -115,10 +115,11 @@ string_tree* parse_string_tree<span class="Delimiter">(</span>istream&amp; in<sp
   <span class="Delimiter">}</span>
   in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>  <span class="Comment">// skip ')'</span>
   assert<span class="Delimiter">(</span>*curr == <span class="Constant">NULL</span><span class="Delimiter">);</span>
+  <span class="Normal">if</span> <span class="Delimiter">(</span>result<span class="Delimiter">-&gt;</span>right == <span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Identifier">return</span> result<span class="Delimiter">;</span>
   <span class="Comment">// standardize the final element to always be on the right if it's an atom</span>
   <span class="Comment">// (a b c) =&gt; (a b . c) in s-expression parlance</span>
   string_tree* tmp = result<span class="Delimiter">;</span>
-  <span class="Normal">while</span> <span class="Delimiter">(</span>tmp<span class="Delimiter">-&gt;</span>right &amp;&amp; tmp<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span> tmp = tmp<span class="Delimiter">-&gt;</span>right<span class="Delimiter">;</span>
+  <span class="Normal">while</span> <span class="Delimiter">(</span>tmp<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span> tmp = tmp<span class="Delimiter">-&gt;</span>right<span class="Delimiter">;</span>
   assert<span class="Delimiter">(</span>!tmp<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
   <span class="Normal">if</span> <span class="Delimiter">(</span>!tmp<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span> result<span class="Delimiter">;</span>
   string_tree* tmp2 = tmp<span class="Delimiter">-&gt;</span>right<span class="Delimiter">;</span>
@@ -140,6 +141,12 @@ string_tree* parse_string_tree<span class="Delimiter">(</span>istream&amp; in<sp
 <span class="muData">container</span> bar [
 ]
 <span class="traceContains">+parse:   product: {1: (&quot;foo&quot; (&quot;address&quot; &quot;array&quot; &quot;character&quot;) (&quot;bar&quot; &quot;number&quot;))}</span>
+
+<span class="Delimiter">:(scenario dilated_singleton_tree)</span>
+<span class="muRecipe">def</span> main [
+  <span class="Delimiter">{</span><span class="Constant">1</span>: number<span class="Delimiter">,</span> foo: <span class="Delimiter">(</span>bar<span class="Delimiter">)}</span><span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+]
+<span class="traceContains">+parse:   product: {1: &quot;number&quot;, &quot;foo&quot;: (&quot;bar&quot;)}</span>
 </pre>
 </body>
 </html>