Parser.st
changeset 4263 25e950b4c9e8
parent 4249 a308dc806db6
child 4271 6fe0287a7164
--- 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