# HG changeset patch # User Claus Gittinger # Date 1559236120 -7200 # Node ID de1012adb310901501ccf772a5a0100a2f4d8a0c # Parent 49123df91ffa5482fae52a9c62f661b8cc1a9101 #UI_ENHANCEMENT by cg class: Parser changed: #checkForEndOfInput #primary better error message for unexpected EOF diff -r 49123df91ffa -r de1012adb310 Parser.st --- a/Parser.st Thu May 30 19:07:34 2019 +0200 +++ b/Parser.st Thu May 30 19:08:40 2019 +0200 @@ -5876,7 +5876,7 @@ ] ifFalse:[ what := tokenType printString allBold. ]. - msg := 'Nothing more expected (i.e. ',what, ' unexpected.'. + msg := 'Nothing more expected (i.e. ',what,' unexpected)'. endPos := source position. ]. self parseError:msg position:tokenPosition to:endPos. @@ -5884,6 +5884,7 @@ ] "Modified: / 22-08-2006 / 14:22:45 / cg" + "Modified: / 30-05-2019 / 14:50:05 / Claus Gittinger" ! emptyStatement @@ -7712,7 +7713,7 @@ "parse a primary-expression; return a node-tree, nil or #Error. This also cares for namespace-access-paths." - |val pos node eMsg endPos parenStart parenStartLine| + |val pos node eMsg endPos startPos parenStart parenStartLine| (tokenType == #Self) ifTrue:[ ^ self primary_self. @@ -7899,7 +7900,7 @@ (tokenType == #Primitive) ifTrue:[ node := PrimitiveNode code:tokenValue. - node startPosition: tokenPosition endPosition: source position + 1. + node startPosition: tokenPosition endPosition:(source position + 1). self nextToken. hasNonOptionalPrimitiveCode := true. hasPrimitiveCode := true. @@ -8008,28 +8009,36 @@ ]. (tokenType == #Error) ifTrue:[^ #Error]. - tokenType isCharacter ifTrue:[ - eMsg := '"',tokenType printString,'" unexpected in primary.'. + + startPos := tokenPosition. + tokenType == #EOF ifTrue:[ + eMsg := 'unexpected EOF in primary.'. + startPos := tokenPosition-1. endPos := tokenPosition. - ] ifFalse:[ - (#(BinaryOperator Keyword) includes:tokenType) ifTrue:[ - eMsg := tokenType printString,' ("' , tokenName , '") ',' unexpected in primary. (missing receiver ?)' + ] ifFalse:[ + tokenType isCharacter ifTrue:[ + eMsg := '"',tokenType printString,'" unexpected in primary.'. + endPos := tokenPosition. ] ifFalse:[ - (#(Integer Float) includes:tokenType) ifTrue:[ - eMsg := tokenType printString,' (' , tokenValue , ') ',' unexpected in primary. (missing receiver ?)' + (#(BinaryOperator Keyword) includes:tokenType) ifTrue:[ + eMsg := tokenType printString,' ("' , tokenName , '") ',' unexpected in primary. (missing receiver ?)' ] ifFalse:[ - eMsg := '"',(token ? ''),'" (',tokenType printString,') unexpected in primary.' - ] - ]. - endPos :=source position. - ]. - self syntaxError:eMsg position:tokenPosition to:endPos. + (#(Integer Float) includes:tokenType) ifTrue:[ + eMsg := tokenType printString,' (' , tokenValue , ') ',' unexpected in primary. (missing receiver ?)' + ] ifFalse:[ + eMsg := '"',(token ? ''),'" (',tokenType printString,') unexpected in primary.' + ] + ]. + endPos :=source position. + ]. + ]. + self syntaxError:eMsg position:startPos to:endPos. ^ #Error "Created: / 13-09-1995 / 12:50:50 / claus" "Modified: / 01-08-2011 / 12:04:16 / Jan Vrany " "Modified: / 26-07-2012 / 11:35:46 / cg" - "Modified: / 22-05-2019 / 20:58:09 / Claus Gittinger" + "Modified: / 30-05-2019 / 14:54:56 / Claus Gittinger" ! primary_dolphinComputedLiteral