Hi All,<div><br></div><div>    the following won&#39;t parse because of support for positional messages (whatever they are; I&#39;ll come to that later).</div><div><br></div><div>        #(word()) should be equal to { #word. #() }</div>
<div><br></div><div>but because of the type == #leftParenthesis clause in the below it causes a syntax error:</div><div><br></div><div>Scanner methods for multi-character scans</div><div><div>xLetter</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>&quot;Form a word or keyword.&quot;</div>
<div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>| type |</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>buffer reset.</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>[(type := self typeTableAt: hereChar) == #xLetter</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>or: [type == #xDigit</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>or: [type == #xUnderscore and:[self allowUnderscoreSelectors]]]] whileTrue:</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>[&quot;open code step for speed&quot;</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>buffer nextPut: hereChar.</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>hereChar := aheadChar.</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>aheadChar := source atEnd</div><div><span class="Apple-tab-span" style="white-space:pre">                                                        </span>ifTrue: [30 asCharacter &quot;doit&quot;]</div><div>
<span class="Apple-tab-span" style="white-space:pre">                                                        </span>ifFalse: [source next]].</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>tokenType := (type == #colon or: [type == #xColon and: [aheadChar ~~ $=]])</div>
<div><span class="Apple-tab-span" style="white-space:pre">                                        </span>ifTrue: </div><div><span class="Apple-tab-span" style="white-space:pre">                                                </span>[buffer nextPut: self step.</div><div><span class="Apple-tab-span" style="white-space:pre">                                                </span>&quot;Allow any number of embedded colons in literal symbols&quot;</div>
<div><span class="Apple-tab-span" style="white-space:pre">                                                </span>[(self typeTableAt: hereChar) == #xColon] whileTrue:</div><div><span class="Apple-tab-span" style="white-space:pre">                                                        </span>[buffer nextPut: self step].</div>
<div><span class="Apple-tab-span" style="white-space:pre">                                                </span>#keyword]</div><div><span class="Apple-tab-span" style="white-space:pre">                                        </span>ifFalse: </div><div><span class="Apple-tab-span" style="white-space:pre">                                                </span>[type == #leftParenthesis </div>
<div><span class="Apple-tab-span" style="white-space:pre">                                                        </span>ifTrue:</div><div><span class="Apple-tab-span" style="white-space:pre">                                                                </span>[buffer nextPut: self step; nextPut: $).</div><div><span class="Apple-tab-span" style="white-space:pre">                                                                </span> #positionalMessage]</div>
<div><span class="Apple-tab-span" style="white-space:pre">                                                        </span>ifFalse:[#word]].</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>token := buffer contents</div></div><div><br></div><div>e.g. evaluate any of the following:</div>
<div><div><br></div><div>    #(word())</div><div><div><br></div><div>    Compiler evaluate: &#39;#(word())&#39;</div><div><br></div><div>    Scanner new scanTokens: &#39;#(word())&#39;</div></div></div><div><br></div><div>
What is this support for?  Is it for those funky ffi calls in the OpenGL code?  Can it not be hoisted out of the scanner and into the parser proper? [and optimistically anyone have a fix already?]</div><div><br></div><div>
best,</div><div>Eliot</div>