#BUGFIX by mawalch
class: DoWhatIMeanSupport
changed: #addClassesOfExpression:inClass:to:
Fix nil DNU.
--- a/DoWhatIMeanSupport.st Thu Feb 23 16:55:54 2017 +0100
+++ b/DoWhatIMeanSupport.st Thu Feb 23 20:56:05 2017 +0100
@@ -5596,19 +5596,19 @@
expr isLiteral ifTrue:[
exprVal := expr value.
- cls := exprVal class.
+ cls := exprVal class.
(exprVal isArray or:[ exprVal isByteArray or:[ exprVal isString ]]) ifTrue:[
exprVal isImmutable ifTrue:[
setOfTypes add:cls mutableClass.
- ^ setOfTypes.
+ ^ setOfTypes.
]
].
- setOfTypes add:cls.
- ^ setOfTypes.
- ].
-
+ setOfTypes add:cls.
+ ^ setOfTypes.
+ ].
+
expr isBlock ifTrue:[
- setOfTypes add:Block.
+ setOfTypes add:Block.
^ setOfTypes.
].
@@ -5627,56 +5627,56 @@
varName = 'self' ifTrue:[
instanceOrNil notNil ifTrue:[
setOfTypes add:(instanceOrNil class).
- ] ifFalse:[
+ ] ifFalse:[
setOfTypes add:(classOrNil ? UndefinedObject).
].
^ setOfTypes
].
varName = 'super' ifTrue:[
- classOrNil isNil
+ classOrNil isNil
ifTrue:[setOfTypes add:Object]
ifFalse:[setOfTypes add:classOrNil superclass].
- ^ setOfTypes.
+ ^ setOfTypes.
].
varName = 'thisContext' ifTrue:[
setOfTypes add:Context.
^ setOfTypes
].
-
+
varScope := expr whoDefines: varName.
(varScope notNil) ifTrue:[
varScope isSequence ifTrue:[
varScope := varScope parent.
].
-
+
(varScope isBlock) ifTrue:[
self addClassesOfBlockVarForWellknownBlocks:expr inScope:varScope to:setOfTypes.
self addClassesFromAssignmentTo:varName in:varScope to:setOfTypes.
self addClassesFromMessagesSentTo:expr in:varScope to:setOfTypes.
^ setOfTypes
- ].
+ ].
(varScope isMethod) ifTrue:[
self addClassesFromAssignmentTo:varName in:varScope to:setOfTypes.
self addClassesFromMessagesSentTo:expr in:varScope to:setOfTypes.
^ setOfTypes
- ].
+ ].
].
-
+
classOrNil notNil ifTrue:[
"/ inst var
instVarClass := classOrNil whichClassDefinesInstVar:varName.
instVarClass notNil ifTrue:[
setOfTypes addAll:(self classesOfInstVarNamed:varName inClass:instVarClass).
^ setOfTypes
- ].
-
+ ].
+
"/ class vars
classVarClass := classOrNil theNonMetaclass whichClassDefinesClassVar:varName.
classVarClass notNil ifTrue:[
"/ see what is currently there
setOfTypes add:(classVarClass classVarAt:varName asSymbol) class.
^ setOfTypes
- ].
+ ].
varName isUppercaseFirst ifTrue:[
"/ private class
varName knownAsSymbol ifTrue:[
@@ -5684,8 +5684,8 @@
cls notNil ifTrue:[
setOfTypes add:(cls theMetaclass).
^ setOfTypes
- ].
- ].
+ ].
+ ].
].
"/ pool vars
poolVarClass := classOrNil theNonMetaclass whichPoolDefinesPoolVar:varName.
@@ -5693,24 +5693,25 @@
"/ see what is currently there
setOfTypes add:(poolVarClass classVarAt:varName asSymbol) class.
^ setOfTypes
- ].
+ ].
].
-
+
varName isUppercaseFirst ifTrue:[
sym := varName asSymbolIfInterned.
sym notNil ifTrue:[
- ((topNameSpace := classOrNil topNameSpace) notNil
+ (classOrNil notNil
+ and:[ (topNameSpace := classOrNil topNameSpace) notNil
and:[ topNameSpace ~~ Smalltalk
- and:[ (exprVal := topNameSpace at:sym) notNil ]]) ifTrue:[
+ and:[ (exprVal := topNameSpace at:sym) notNil ]]]) ifTrue:[
setOfTypes add:(exprVal class).
- ] ifFalse:[
+ ] ifFalse:[
exprVal := (Smalltalk at:sym).
exprVal notNil ifTrue:[
setOfTypes add:(exprVal class).
]
- ].
- ].
- ].
+ ].
+ ].
+ ].
^ setOfTypes
].
@@ -5723,11 +5724,12 @@
expr isMessage ifTrue:[
self addClassesOfMessage:expr inClass:classOrNil to:setOfTypes.
^ setOfTypes
- ].
+ ].
^ setOfTypes
"Modified (comment): / 19-02-2017 / 14:03:29 / cg"
+ "Modified: / 23-02-2017 / 20:52:43 / mawalch"
!
addClassesOfInstVarNamed:varName inClass:aClass to:setOfTypes