checkin from browser
authorClaus Gittinger <cg@exept.de>
Tue, 31 Mar 1998 19:55:31 +0200
changeset 664 63d1460e8ee3
parent 663 6c6a20f144ea
child 665 14114d1e653c
checkin from browser
Parser.st
--- a/Parser.st	Tue Mar 31 18:44:20 1998 +0200
+++ b/Parser.st	Tue Mar 31 19:55:31 1998 +0200
@@ -16,7 +16,7 @@
 		currentBlock parseForCode usedInstVars usedClassVars usedVars
 		modifiedInstVars modifiedClassVars modifiedGlobals usesSuper
 		usedGlobals usedSymbols usedMessages localVarDefPosition
-		evalExitBlock selfNode superNode hasPrimitiveCode
+		evalExitBlock selfNode superNode nilNode hasPrimitiveCode
 		hasNonOptionalPrimitiveCode primitiveNr primitiveResource logged
 		warnedUndefVars warnSTXHereExtensionUsed correctedSource
 		foldConstants lineNumberInfo currentNamespace
@@ -1673,8 +1673,10 @@
 !
 
 release
-    methodArgs := methodVars := tree := selfNode := superNode := nil.
+    methodArgs := methodVars := tree := selfNode := superNode := nilNode := nil.
     super release.
+
+    "Modified: / 31.3.1998 / 19:45:58 / cg"
 !
 
 setNameSpace:aNameSpaceName
@@ -1760,6 +1762,12 @@
 markSuperFrom:pos1 to:pos2
 
     "Created: / 31.3.1998 / 17:40:20 / cg"
+!
+
+markUnknownIdentifierFrom:pos1 to:pos2
+
+    "Modified: / 31.3.1998 / 19:16:26 / cg"
+    "Created: / 31.3.1998 / 19:35:53 / cg"
 ! !
 
 !Parser methodsFor:'error correction'!
@@ -3651,7 +3659,11 @@
             self parseError:'assignment to nil' position:pos to:tokenPosition.
             ^ #Error
         ].
-        ^ ConstantNode type:#Nil value:nil
+        self markConstantFrom:pos to:pos+2.
+        nilNode isNil ifTrue:[ 
+            nilNode := ConstantNode type:#Nil value:nil
+        ].
+        ^ nilNode
     ].
     (tokenType == #True) ifTrue:[
         self nextToken.
@@ -3792,7 +3804,7 @@
     ^ #Error
 
     "Created: / 13.9.1995 / 12:50:50 / claus"
-    "Modified: / 31.3.1998 / 18:08:37 / cg"
+    "Modified: / 31.3.1998 / 19:44:23 / cg"
 !
 
 statement
@@ -3975,7 +3987,7 @@
 
     pos1 := tokenPosition.
     v := self variableOrError:tokenName.
-    (v == #Error) ifFalse:[
+    (v ~~ #Error) ifTrue:[
         (v isMemberOf:VariableNode) ifTrue:[
             type := v type.
             (type == #BlockVariable
@@ -3991,8 +4003,12 @@
         ].
         ^ v
     ].
+
+    self markUnknownIdentifierFrom:pos1 to:pos1+tokenName size-1.
+
     v := self correctVariable.
-    (v == #Error) ifFalse:[^ v].
+    (v ~~ #Error) ifTrue:[^ v].
+
     parseForCode ifFalse:[
         self rememberGlobalUsed:tokenName
     ] ifTrue:[
@@ -4009,7 +4025,7 @@
     self markGlobalIdentifierFrom:pos1 to:pos1+tokenName size-1.
     ^ VariableNode type:#GlobalVariable name:tokenName asSymbol
 
-    "Modified: / 31.3.1998 / 18:15:17 / cg"
+    "Modified: / 31.3.1998 / 19:45:32 / cg"
 !
 
 variableOrError
@@ -4590,6 +4606,6 @@
 !Parser class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libcomp/Parser.st,v 1.157 1998-03-31 16:44:20 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libcomp/Parser.st,v 1.158 1998-03-31 17:55:31 cg Exp $'
 ! !
 Parser initialize!