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