--- a/Parser.st Wed May 16 14:50:20 2018 +0200
+++ b/Parser.st Wed May 16 14:51:19 2018 +0200
@@ -7520,7 +7520,7 @@
"parse a primary-expression; return a node-tree, nil or #Error.
This also cares for namespace-access-paths."
- |val pos node eMsg endPos|
+ |val pos node eMsg endPos parenStart parenStartLine|
(tokenType == #Self) ifTrue:[
^ self primary_self.
@@ -7634,18 +7634,49 @@
(tokenType == $() ifTrue:[
parenthesisLevel := parenthesisLevel + 1.
+ parenStart := tokenPosition.
+ parenStartLine := tokenLineNr.
self markParenthesisAt:tokenPosition.
- ^ self primary_expression.
+ node :=
+ ParseError handle:[:ex |
+ ex rejected ifFalse:[
+ "/ sigh need a special MissingParenthesisError ...
+ (ex description includesString:'missing '')''') ifTrue:[
+ ex errorMessage:(ex errorMessage
+ , (' (matching ''('' in line %1)' bindWith:parenStartLine)).
+ self markErrorFrom:parenStart to:nil. "/ to the end
+ ].
+ ].
+ ex reject
+ ] do:[
+ self primary_expression.
+ ].
+ ^ node
].
(tokenType == $[ ) ifTrue:[
+ parenStart := tokenPosition.
+ parenStartLine := tokenLineNr.
self markBracketAt:tokenPosition.
- val := self block.
+ node :=
+ ParseError handle:[:ex |
+ "/ sigh need a special MissingParenthesisError ...
+ "/ Transcript showCR:ex errorMessage.
+ (ex description includesString:'missing '']''') ifTrue:[
+ ex errorMessage:(ex errorMessage
+ , (' (matching ''['' in line %1)' bindWith:parenStartLine)).
+ self markErrorFrom:parenStart to:nil. "/ to the end
+ ].
+ ex reject
+ ] do:[
+ self block.
+ ].
+
self nextToken.
(self noAssignmentAllowed:'invalid assignment' at:pos) ifFalse:[
^ #Error
].
- ^ val
+ ^ node
].
"/ EXPERIMENTAL - may be in next release