--- 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!