<div id="__MailbirdStyleContent" style="font-size: 10pt;font-family: Arial;color: #000000;text-align: left" dir="ltr">
Hi Christoph.<div><br></div><div>> <span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px">Depends on Collections-ct.936.</span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px"><br></span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px">Please try to avoid connecting bug fixes to (unrelated) proposals. Instead, try to fix the bugs with the available means. This way, your fixes can get merged faster.</span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px"><br></span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px">For your proposals, try to find examples that can improve code readability in general to promote an objective discussion.</span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px"><br></span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px">Best,</span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px">Marcel</span></div><div class="mb_sig"></div>
<blockquote class="history_container" type="cite" style="border-left-style: solid;border-width: 1px;margin-top: 20px;margin-left: 0px;padding-left: 10px;min-width: 500px">
<p style="color: #AAAAAA; margin-top: 10px;">Am 13.04.2021 19:45:09 schrieb commits@source.squeak.org <commits@source.squeak.org>:</p><div style="font-family:Arial,Helvetica,sans-serif">A new version of Compiler was added to project The Inbox:<br>http://source.squeak.org/inbox/Compiler-ct.457.mcz<br><br>==================== Summary ====================<br><br>Name: Compiler-ct.457<br>Author: ct<br>Time: 13 April 2021, 7:44:59.516492 pm<br>UUID: 22e7ee9f-1b8a-054c-a950-a742690bc284<br>Ancestors: Compiler-nice.456<br><br>Fixes a long-known bug when parsing a message with multiple repetitions of a colon. See Tests-ct.451 and http://forum.world.st/BUG-Parser-does-not-detect-syntax-error-with-double-colon-tp5112572.html.<br><br>Depends on Collections-ct.936.<br><br>=============== Diff against Compiler-nice.456 ===============<br><br>Item was changed:<br> ----- Method: Parser>>expected: (in category 'error handling') -----<br> expected: aString <br> "Notify a problem at token 'here'."<br> <br>+ ^ self expected: aString at: hereMark + requestorOffset!<br>- ^ self notify: aString , ' expected' at: hereMark + requestorOffset!<br><br>Item was added:<br>+ ----- Method: Parser>>expected:at: (in category 'error handling') -----<br>+ expected: aString at: location<br>+ <br>+ ^ self<br>+ notify: ('{1} expected' translated format: {aString})<br>+ at: location!<br><br>Item was changed:<br> ----- Method: Parser>>messagePart:repeat: (in category 'expression types') -----<br> messagePart: level repeat: repeat<br> <br> | start receiver selector args precedence words keywordStart |<br> [receiver := parseNode.<br> (hereType == #keyword and: [level >= 3])<br> ifTrue: <br> [start := self startOfNextToken.<br> selector := WriteStream on: (String new: 32).<br> args := OrderedCollection new.<br> words := OrderedCollection new.<br> [hereType == #keyword]<br> whileTrue: <br> [keywordStart := self startOfNextToken + requestorOffset.<br> selector nextPutAll: self advance.<br> words addLast: (keywordStart to: self endOfLastToken + requestorOffset).<br> self primaryExpression ifFalse: [^self expected: 'Argument'].<br> self messagePart: 2 repeat: true.<br> args addLast: parseNode].<br>+ <br>+ selector := selector readStream.<br>+ words do: [:word |<br>+ (selector next: word size - 1)<br>+ indexOf: $: ifPresent: [:index |<br>+ ^self expected: 'Argument' at: word start + index].<br>+ selector skip: 1].<br>+ <br> selector := (Symbol lookup: selector contents)<br> ifNil: [ self correctSelector: selector contents<br> wordIntervals: words<br> exprInterval: (start to: self endOfLastToken)<br> ifAbort: [ ^ self fail ] ].<br> precedence := 3]<br> ifFalse: [<br> (level >= 2 and: [hereType == #verticalBar]) ifTrue: [self transformAVerticalBarIntoABinarySelector].<br> (hereType == #binary and: [level >= 2])<br> ifTrue: <br> [start := self startOfNextToken.<br> selector := self advance asOctetString asSymbol.<br> self primaryExpression ifFalse: [^self expected: 'Argument'].<br> self messagePart: 1 repeat: true.<br> args := Array with: parseNode.<br> precedence := 2]<br> ifFalse: [hereType == #word<br> ifTrue: <br> [start := self startOfNextToken.<br> selector := self advance.<br> args := #().<br> words := OrderedCollection with: (start + requestorOffset to: self endOfLastToken + requestorOffset).<br> selector := (Symbol lookup: selector)<br> ifNil: [ self correctSelector: selector<br> wordIntervals: words<br> exprInterval: (start to: self endOfLastToken)<br> ifAbort: [ ^ self fail ] ].<br> precedence := 1]<br> ifFalse: [^args notNil]]].<br> parseNode := MessageNode new<br> receiver: receiver<br> selector: selector<br> arguments: args<br> precedence: precedence<br> from: encoder<br> sourceRange: (start to: self endOfLastToken).<br> repeat]<br> whileTrue: [].<br> ^true!<br><br><br></div></blockquote></div>