# HG changeset patch # User mawalch # Date 1487879765 -3600 # Node ID 905b5a2216f79100e37a6d7db561adfabba8e7b3 # Parent 821ec5a9d9c4d2428b6e734ceb4cbb6bd84285ca #BUGFIX by mawalch class: DoWhatIMeanSupport changed: #addClassesOfExpression:inClass:to: Fix nil DNU. diff -r 821ec5a9d9c4 -r 905b5a2216f7 DoWhatIMeanSupport.st --- 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