<div dir="ltr"><div>Thanks. Looking at the c code I realized I made an embarrassingly dumb mistake interpreting the error. The problem is not that the reader does not accept &#39;.&#39;, but that it expects it to be followed by an expression as in &#39;(a . b)&#39;. So it chokes on &#39;(a .)&#39;, as it should. Hacking the C code to accept the latter would obviously be a bad idea. ;) So I&#39;ll just catch the error and tell the user to  use &#39;./&#39; instead of &#39;.&#39;.</div><div><br></div><div>On the other hand, it would be nice if the error args included the string that caused the error in a more convenient form. It&#39;s included in the message string, but it would be nice if it were passed in isolation, like &#39;(:data ...badcode here...)&#39; or some such.</div><div><br></div><div>Thanks!</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Oct 8, 2021 at 9:27 AM &lt;<a href="mailto:bil@ccrma.stanford.edu">bil@ccrma.stanford.edu</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">I can&#39;t think of a way to do this in scheme code.<br>
*read-error-hook* is not currently called at the<br>
point of the error (probably line 69449 in s7.c).<br>
I suppose it could be called, but I&#39;d need to back<br>
out with the new input (if any), which would take<br>
a ton of testing.  You could change the C code,<br>
perhaps --<br>
<br>
   {<br>
     s7_pointer pt;<br>
     pt = current_input_port(sc);<br>
     fprintf(stderr, &quot;%c\n&quot;, port_data(pt)[port_position(pt) - 2]);<br>
   }<br>
<br>
at that pointer prints &quot;.&quot;, so you know it&#39;s reading<br>
&quot;.)&quot;.  You&#39;d need to add the symbol ./ to the current<br>
list in the reader, then pop back to whatever was<br>
being read before that -- kinda tricky!<br>
I&#39;ll look into extending *read-error-hook*, but with<br>
input like that, there are probably more such gotchas.<br>
<br>
</blockquote></div></div>