Parser.st
changeset 101 845d70bbd94d
parent 98 ccc7f9389a8e
child 102 77e4d1119ff2
--- a/Parser.st	Thu Aug 03 03:25:58 1995 +0200
+++ b/Parser.st	Tue Aug 08 03:06:10 1995 +0200
@@ -42,7 +42,7 @@
 COPYRIGHT (c) 1989 by Claus Gittinger
 	     All Rights Reserved
 
-$Header: /cvs/stx/stx/libcomp/Parser.st,v 1.46 1995-07-23 02:23:59 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Parser.st,v 1.47 1995-08-08 01:06:10 claus Exp $
 '!
 
 !Parser class methodsFor:'documentation'!
@@ -63,7 +63,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libcomp/Parser.st,v 1.46 1995-07-23 02:23:59 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Parser.st,v 1.47 1995-08-08 01:06:10 claus Exp $
 "
 !
 
@@ -1960,8 +1960,8 @@
 	 must check for variable first, to be backward compatible
 	 with other smalltalks. 
 	"
-	self variableOrError == #Error ifTrue:[
-	    tokenName = 'here' ifTrue:[
+	tokenName = 'here' ifTrue:[
+	    self variableOrError == #Error ifTrue:[
 		tokenType := #Here.
 		warnSTXHereExtensionUsed ifTrue:[
 		    self warning:'here-sends are a nonstandard feature of ST/X' 
@@ -1976,6 +1976,8 @@
     ].
 
     (tokenType == #Identifier) ifTrue:[
+	name := tokenName.
+
 	var := self variable.
 	(var == #Error) ifTrue:[
 	    errorFlag := true
@@ -1984,6 +1986,19 @@
 	(tokenType == $_) ifFalse:[
 	    ^ var
 	].
+	"/ careful: it could already be an implicit self send
+	ImplicitSelfSends ifTrue:[
+	    var isMessage ifTrue:[
+		self nextToken.
+		expr := self expression.
+		(errorFlag or:[expr == #Error]) ifTrue:[^ #Error].
+		selfNode isNil ifTrue:[
+		    selfNode := SelfNode value:selfValue
+		].
+		^ MessageNode receiver:selfNode selector:('implicit_' , name , ':') asSymbol arg:expr.
+	    ].
+	].
+
 	(var ~~ #Error) ifTrue:[
 	    t := var type.
 	    (t == #MethodArg) ifTrue:[
@@ -2312,7 +2327,8 @@
 		    selfNode := SelfNode value:selfValue
 		].
 		^ UnaryNode receiver:selfNode selector:('implicit_' , tokenName) asSymbol.
-	    ]
+	    ].
+	    ^ #Error
 	]
     ].
     ^ VariableNode type:#GlobalVariable name:tokenName asSymbol