Parser.st
changeset 743 3ced4791090c
parent 739 18bce3ea44f5
child 748 9c44179d6b03
--- a/Parser.st	Wed Jul 15 18:16:56 1998 +0200
+++ b/Parser.st	Thu Jul 16 20:51:51 1998 +0200
@@ -2306,7 +2306,7 @@
     ^ aSelectorString
 
     "Modified: / 5.9.1995 / 17:02:11 / claus"
-    "Modified: / 7.5.1998 / 11:28:03 / cg"
+    "Modified: / 16.7.1998 / 20:45:06 / cg"
 ! !
 
 !Parser methodsFor:'error handling'!
@@ -2550,7 +2550,7 @@
 blockStatementList
     "parse a blocks statementlist; return a node-tree, nil or #Error"
 
-    |thisStatement prevStatement firstStatement|
+    |thisStatement prevStatement firstStatement eMsg|
 
     (tokenType == $] ) ifTrue:[^ nil].
     thisStatement := self statement.
@@ -2559,10 +2559,11 @@
     [tokenType == $] ] whileFalse:[
         (tokenType == $.) ifFalse:[
             ((tokenType == #EOF) or:[tokenType == $)]) ifTrue:[
-                self syntaxError:'missing '']'' in block'
+                eMsg := 'missing '']'' in block'
             ] ifFalse:[
-                self syntaxError:'missing ''.'' in block'
+                eMsg := 'missing ''.'' between statements (i.e. ' , tokenType printString , ' token unexpected)'
             ].
+            self syntaxError:eMsg "position:tokenPosition".
             ^ #Error
         ] ifTrue:[
             prevStatement := thisStatement.
@@ -2586,6 +2587,8 @@
     ].
     self markBracketAt:tokenPosition.
     ^ firstStatement
+
+    "Modified: / 16.7.1998 / 20:38:25 / cg"
 !
 
 parseMethod
@@ -3324,22 +3327,25 @@
                             | IDENTIFIER
     "
 
-    |receiver arg sel args pos pos2 lno tokenEnd|
+    |receiver arg sel args pos pos2 lno tokenEnd realReceiver|
 
     pos := tokenPosition.
     receiver := self keywordExpression.
     (receiver == #Error) ifTrue:[^ #Error].
     (tokenType == $;) ifTrue:[
+        receiver isMessage ifFalse:[
+            self syntaxError:'left side of cascade must be a message expression'
+                    position:pos to:tokenPosition.
+            realReceiver := receiver. "/ only to allow continuing.
+        ] ifTrue:[
+            realReceiver := receiver receiver.
+        ].
         [tokenType == $;] whileTrue:[
-            receiver isMessage ifFalse:[
-                self syntaxError:'left side of cascade must be a message expression'
-                        position:pos to:tokenPosition
-            ].
             self nextToken.
             (tokenType == #Identifier) ifTrue:[
                 tokenEnd := tokenPosition + tokenName size - 1.
                 self markSelectorFrom:tokenPosition to:tokenEnd.
-                sel := self selectorCheck:tokenName for:receiver position:tokenPosition to:tokenEnd.
+                sel := self selectorCheck:tokenName for:realReceiver position:tokenPosition to:tokenEnd.
                 receiver := CascadeNode receiver:receiver selector:sel.
                 receiver lineNumber:tokenLineNr.
                 parseForCode ifFalse:[self rememberSelectorUsed:sel].
@@ -3348,7 +3354,7 @@
                 (tokenType == #BinaryOperator) ifTrue:[
                     tokenEnd := tokenPosition + tokenName size - 1.
                     self markSelectorFrom:tokenPosition to:tokenEnd.
-                    sel := self selectorCheck:tokenName for:receiver position:tokenPosition to:tokenEnd.
+                    sel := self selectorCheck:tokenName for:realReceiver position:tokenPosition to:tokenEnd.
                     lno := tokenLineNr. 
                     self nextToken.
                     arg := self unaryExpression.
@@ -3378,7 +3384,7 @@
                             args := args copyWith:arg.
                             pos2 := tokenEnd
                         ].
-                        sel := self selectorCheck:sel for:receiver position:pos to:pos2.
+                        sel := self selectorCheck:sel for:realReceiver position:pos to:pos2.
                         receiver := CascadeNode receiver:receiver selector:sel args:args.
                         receiver lineNumber:lno.
                         parseForCode ifFalse:[self rememberSelectorUsed:sel].
@@ -3417,7 +3423,7 @@
     ].
     ^ receiver
 
-    "Modified: / 7.7.1998 / 19:40:48 / cg"
+    "Modified: / 16.7.1998 / 20:46:59 / cg"
 !
 
 keywordExpression
@@ -4646,6 +4652,6 @@
 !Parser class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libcomp/Parser.st,v 1.182 1998-07-09 08:11:31 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libcomp/Parser.st,v 1.183 1998-07-16 18:51:51 cg Exp $'
 ! !
 Parser initialize!