DoWhatIMeanSupport.st
changeset 4727 983f74d3c7a1
parent 4711 1c2e635489e5
child 4731 145b177a3203
--- a/DoWhatIMeanSupport.st	Thu Mar 12 11:07:58 2015 +0100
+++ b/DoWhatIMeanSupport.st	Wed Mar 18 19:18:31 2015 +0100
@@ -1695,24 +1695,27 @@
     | nm nodeVal receiverClass nodeSelector nodeReceiver mthd|
 
     aNode isBlock ifTrue:[
-	^ Block
+        ^ Block
     ].
 
     (nodeVal := self valueOfNode:aNode) notNil ifTrue:[
-	"/ knowing the value is always great!!
-	^ nodeVal class
+        "/ knowing the value is always great!!
+        ^ nodeVal class
     ].
 
     aNode isVariable ifTrue:[
-	nm := aNode name.
-	nm = 'self' ifTrue:[
-	    classOrNil isNil ifTrue:[^ UndefinedObject].
-	    ^ classOrNil
-	].
-	nm = 'super' ifTrue:[
-	    classOrNil isNil ifTrue:[^ Object].
-	    ^ classOrNil superclass
-	].
+        nm := aNode name.
+        nm = 'self' ifTrue:[
+            classOrNil isNil ifTrue:[^ UndefinedObject].
+            ^ classOrNil
+        ].
+        nm = 'super' ifTrue:[
+            classOrNil isNil ifTrue:[^ Object].
+            ^ classOrNil superclass
+        ].
+        nm = 'thisContext' ifTrue:[
+            ^ Context
+        ].
 
 "/        classOrNil notNil ifTrue:[
 "/            (classOrNil allInstVarNames includes:nm) ifTrue:[
@@ -1720,83 +1723,83 @@
 "/                self breakPoint:#cg.
 "/            ].
 "/        ].
-	^ nil
+        ^ nil
     ].
 
     aNode isMessage ifTrue:[
-	nodeSelector := aNode selector.
-	nodeReceiver := aNode receiver.
-
-	"/ some hardwired knowlegde here
-	receiverClass := self classOfNode:nodeReceiver.
-	receiverClass notNil ifTrue:[
-	    nodeSelector == #class ifTrue:[
-		^ receiverClass class
-	    ].
-
-	    receiverClass isBehavior ifTrue:[
-		mthd := receiverClass lookupMethodFor:nodeSelector.
-		receiverClass isMeta ifTrue:[
-		    ( #( #'new' #'basicNew' #'new:' #'basicNew:' #'with:' #'with:with:') includes: nodeSelector ) ifTrue:[
-			^ receiverClass theNonMetaclass
-		    ].
-		    "/ if that method sends one of new/basicNew/new:/basicNew:, assume it returns an instance of itself
-		    mthd notNil ifTrue:[
-			( mthd sendsAny:#( #'new' #'basicNew' #'new:' #'basicNew:' )) ifTrue:[
-			    ^ receiverClass theNonMetaclass
-			].
-		    ].
-		] ifFalse:[
-		    mthd notNil ifTrue:[
-			(ParseTreeSearcher methodIsSetterMethod:mthd) ifTrue:[
-			    ^ receiverClass.
-			]
-		    ]
-		]
-	    ].
-	].
-	classOrNil notNil ifTrue:[
-	    (nodeReceiver isSelf and:[nodeSelector = #'class']) ifTrue:[
-		^ classOrNil class
-	    ].
-	].
-
-	(nodeSelector = #'asFilename') ifTrue:[
-	    ^ Filename
-	].
-	(nodeSelector = #'asOrderedCollection') ifTrue:[
-	    ^ OrderedCollection
-	].
-	(nodeSelector = #'asArray') ifTrue:[
-	    ^ Array
-	].
-	(nodeSelector = #'asSet') ifTrue:[
-	    ^ Set
-	].
-	(nodeSelector = #'size') ifTrue:[
-	    ^ SmallInteger
-	].
-
-	"/ some wellknown boolean returners (need better type inference here)
-	(#( isNil notNil not isEmptyOrNil notEmptyOrNil notEmpty isEmpty
-	    isBehavior isMeta
-	    = ~= == ~~ > >= < <=
-	    includes: contains:
-	    and: or:
-	    exists atEnd
-	) includes:nodeSelector ) ifTrue:[
-	    ^ True "/ Boolean - not boolean; it does not contain the full protocol (would not find ifTrue:)
-	].
-
-	( #( + - * / // \\ ) includes:nodeSelector) ifTrue:[
-	    "/ assume numeric
-	    ^ Number
-	].
-
-	( #( class theMetaclass theNonMetaclass ) includes:nodeSelector) ifTrue:[
-	    "/ assume behavior
-	    ^ Behavior
-	].
+        nodeSelector := aNode selector.
+        nodeReceiver := aNode receiver.
+
+        "/ some hardwired knowlegde here
+        receiverClass := self classOfNode:nodeReceiver.
+        receiverClass notNil ifTrue:[
+            nodeSelector == #class ifTrue:[
+                ^ receiverClass class
+            ].
+
+            receiverClass isBehavior ifTrue:[
+                mthd := receiverClass lookupMethodFor:nodeSelector.
+                receiverClass isMeta ifTrue:[
+                    ( #( #'new' #'basicNew' #'new:' #'basicNew:' #'with:' #'with:with:') includes: nodeSelector ) ifTrue:[
+                        ^ receiverClass theNonMetaclass
+                    ].
+                    "/ if that method sends one of new/basicNew/new:/basicNew:, assume it returns an instance of itself
+                    mthd notNil ifTrue:[
+                        ( mthd sendsAny:#( #'new' #'basicNew' #'new:' #'basicNew:' )) ifTrue:[
+                            ^ receiverClass theNonMetaclass
+                        ].
+                    ].
+                ] ifFalse:[
+                    mthd notNil ifTrue:[
+                        (ParseTreeSearcher methodIsSetterMethod:mthd) ifTrue:[
+                            ^ receiverClass.
+                        ]
+                    ]
+                ]
+            ].
+        ].
+        classOrNil notNil ifTrue:[
+            (nodeReceiver isSelf and:[nodeSelector = #'class']) ifTrue:[
+                ^ classOrNil class
+            ].
+        ].
+
+        (nodeSelector = #'asFilename') ifTrue:[
+            ^ Filename
+        ].
+        (nodeSelector = #'asOrderedCollection') ifTrue:[
+            ^ OrderedCollection
+        ].
+        (nodeSelector = #'asArray') ifTrue:[
+            ^ Array
+        ].
+        (nodeSelector = #'asSet') ifTrue:[
+            ^ Set
+        ].
+        (nodeSelector = #'size') ifTrue:[
+            ^ SmallInteger
+        ].
+
+        "/ some wellknown boolean returners (need better type inference here)
+        (#( isNil notNil not isEmptyOrNil notEmptyOrNil notEmpty isEmpty
+            isBehavior isMeta
+            = ~= == ~~ > >= < <=
+            includes: contains:
+            and: or:
+            exists atEnd
+        ) includes:nodeSelector ) ifTrue:[
+            ^ True "/ Boolean - not boolean; it does not contain the full protocol (would not find ifTrue:)
+        ].
+
+        ( #( + - * / // \\ ) includes:nodeSelector) ifTrue:[
+            "/ assume numeric
+            ^ Number
+        ].
+
+        ( #( class theMetaclass theNonMetaclass ) includes:nodeSelector) ifTrue:[
+            "/ assume behavior
+            ^ Behavior
+        ].
     ].
     ^ nil
 
@@ -4764,10 +4767,10 @@
 !DoWhatIMeanSupport class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libwidg2/DoWhatIMeanSupport.st,v 1.219 2015-02-13 22:48:09 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libwidg2/DoWhatIMeanSupport.st,v 1.220 2015-03-18 18:18:31 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libwidg2/DoWhatIMeanSupport.st,v 1.219 2015-02-13 22:48:09 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libwidg2/DoWhatIMeanSupport.st,v 1.220 2015-03-18 18:18:31 cg Exp $'
 ! !