Parser.st
changeset 1060 9978f9d22dde
parent 1052 0a1e613468f5
child 1061 457156ffedec
--- a/Parser.st	Thu Jul 20 19:57:00 2000 +0200
+++ b/Parser.st	Sat Aug 05 18:35:53 2000 +0200
@@ -17,15 +17,16 @@
 		methodArgs methodArgNames methodVars methodVarNames tree
 		currentBlock parseForCode usedInstVars usedClassVars usedVars
 		modifiedInstVars modifiedClassVars modifiedGlobals usesSuper
-		usedGlobals usedSymbols usedMessages localVarDefPosition
-		evalExitBlock selfNode superNode nilNode hasPrimitiveCode
-		hasNonOptionalPrimitiveCode primitiveNr primitiveResource logged
-		warnedUndefVars warnedUnknownNamespaces warnSTXHereExtensionUsed
-		correctedSource foldConstants lineNumberInfo currentNamespace
-		currentUsedNamespaces warnUndeclared methodNode
-		alreadyWarnedClassInstVarRefs localBlockVarDefPosition
-		endOfSelectorPosition startOfBlockPosition primitiveContextInfo
-		usedLocalVars modifiedLocalVars alreadyWarnedUninitializedVars'
+		usedGlobals usedSymbols usedMessages usedSuperMessages
+		localVarDefPosition evalExitBlock selfNode superNode nilNode
+		hasPrimitiveCode hasNonOptionalPrimitiveCode primitiveNr
+		primitiveResource logged warnedUndefVars warnedUnknownNamespaces
+		warnSTXHereExtensionUsed correctedSource foldConstants
+		lineNumberInfo currentNamespace currentUsedNamespaces
+		warnUndeclared methodNode alreadyWarnedClassInstVarRefs
+		localBlockVarDefPosition endOfSelectorPosition
+		startOfBlockPosition primitiveContextInfo usedLocalVars
+		modifiedLocalVars alreadyWarnedUninitializedVars'
 	classVariableNames:'PrevClass PrevInstVarNames PrevClassVarNames
 		PrevClassInstVarNames LazyCompilation ArraysAreImmutable
 		ImplicitSelfSends WarnST80Directives FoldConstants LineNumberInfo
@@ -3783,7 +3784,9 @@
         ].
         receiver lineNumber:lno.
         receiver selectorPosition:pos.
-        parseForCode ifFalse:[self rememberSelectorUsed:sel].
+        parseForCode ifFalse:[
+            self rememberSelectorUsed:sel receiver:try receiver
+        ].
     ].
     ^ receiver
 
@@ -3911,7 +3914,9 @@
                 sel := self selectorCheck:tokenName for:realReceiver position:tokenPosition to:tokenEnd.
                 receiver := CascadeNode receiver:receiver selector:sel.
                 receiver lineNumber:tokenLineNr.
-                parseForCode ifFalse:[self rememberSelectorUsed:sel].
+                parseForCode ifFalse:[
+                    self rememberSelectorUsed:sel
+                ].
                 self nextToken.
             ] ifFalse:[
                 (tokenType == #BinaryOperator) ifTrue:[
@@ -3925,7 +3930,9 @@
                     (arg == #Error) ifTrue:[^ #Error].
                     receiver := CascadeNode receiver:receiver selector:sel arg:arg.
                     receiver lineNumber:lno.
-                    parseForCode ifFalse:[self rememberSelectorUsed:sel].
+                    parseForCode ifFalse:[
+                        self rememberSelectorUsed:sel
+                    ].
                 ] ifFalse:[
                     (tokenType == #Keyword) ifTrue:[
                         tokenEnd := tokenPosition + tokenName size - 1.
@@ -3955,7 +3962,9 @@
                         ].
                         receiver := CascadeNode receiver:receiver selector:sel args:args.
                         receiver lineNumber:lno.
-                        parseForCode ifFalse:[self rememberSelectorUsed:sel].
+                        parseForCode ifFalse:[
+                            self rememberSelectorUsed:sel
+                        ].
                     ] ifFalse:[
                         (tokenType == #Error) ifTrue:[^ #Error].
                         self syntaxError:('invalid cascade; ' , tokenType printString , ' unexpected')
@@ -4052,7 +4061,9 @@
             self warning:note position:pos1 to:pos2
         ].
         receiver lineNumber:lno.
-        parseForCode ifFalse:[self rememberSelectorUsed:sel].
+        parseForCode ifFalse:[
+            self rememberSelectorUsed:sel receiver:receiver receiver
+        ].
 
         (sel = #and: 
         or:[sel = #or:]) ifTrue:[
@@ -4608,7 +4619,7 @@
 unaryExpression
     "parse a unary-expression; return a node-tree, nil or #Error"
 
-    |receiver sel pos pos2 try|
+    |receiver thisReceiver sel pos pos2 try|
 
     receiver := self primary.
     (receiver == #Error) ifTrue:[^ #Error].
@@ -4627,7 +4638,9 @@
             receiver := try
         ].
         receiver lineNumber:tokenLineNr.
-        parseForCode ifFalse:[self rememberSelectorUsed:sel].
+        parseForCode ifFalse:[
+            self rememberSelectorUsed:sel receiver:receiver receiver
+        ].
         self nextToken.
     ].
     ^ receiver
@@ -5298,6 +5311,20 @@
     ^ selector
 !
 
+sentMessages
+    "return a collection with sent message selectors (valid after parsing)"
+
+    ^ usedMessages ? #()
+
+!
+
+sentSuperMessages
+    "return a collection with message selectors sent to super (valid after parsing)"
+
+    ^ usedSuperMessages ? #()
+
+!
+
 usedClassVars
     "return a collection with classvariablenames refd by method (valid after parsing)"
 
@@ -5439,9 +5466,23 @@
 
 rememberSelectorUsed:sel
     usedMessages isNil ifTrue:[
-	usedMessages := IdentitySet new.
+        usedMessages := IdentitySet new.
     ].
-    usedMessages add:sel
+    usedMessages add:(sel asSymbol)
+!
+
+rememberSelectorUsed:sel receiver:receiverNode
+    self rememberSelectorUsed:sel.
+    receiverNode isSuper ifTrue:[
+        self rememberSelectorUsedInSupersend:sel
+    ].
+!
+
+rememberSelectorUsedInSupersend:sel
+    usedSuperMessages isNil ifTrue:[
+        usedSuperMessages := IdentitySet new.
+    ].
+    usedSuperMessages add:(sel asSymbol)
 !
 
 rememberVariableUsed:name 
@@ -5454,6 +5495,6 @@
 !Parser class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libcomp/Parser.st,v 1.246 2000-07-05 15:49:44 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libcomp/Parser.st,v 1.247 2000-08-05 16:35:53 cg Exp $'
 ! !
 Parser initialize!