ContextInspectorView.st
changeset 1370 d322faba88b9
parent 1361 20c353524524
child 1377 0b4eb8d544b4
--- a/ContextInspectorView.st	Mon Nov 03 16:20:13 1997 +0100
+++ b/ContextInspectorView.st	Tue Nov 11 15:04:48 1997 +0100
@@ -58,7 +58,7 @@
     |homeContext method homeNames rec sel implementorClass 
      argNames varNames tmpNames m argsOnly blockNode vars
      numVarsInSource numVarsInContext isDoIt
-     numArgs numVars n|
+     numArgs numVars n tempNames realTempNames|
 
     (aContext == inspectedContext) ifTrue:[
         listView selection notNil ifTrue:[
@@ -202,10 +202,53 @@
 
         n := homeNames size.
         n < (homeContext numVars + homeContext numArgs) ifTrue:[
+            "/ its a context which includes locals from
+            "/ inlined sub-blocks.
+            "/ First, generate synthetic varNames ...
+
             homeNames := homeNames asOrderedCollection.
+            tempNames := OrderedCollection new.
             n to:(homeContext numVars + homeContext numArgs - 1) do:[:inlinedTempIdx |
-                homeNames add:('*t' , (inlinedTempIdx - n + 1) printString)
-            ]
+                tempNames add:('*t' , (inlinedTempIdx - n + 1) printString)
+            ].
+
+            "/ now, see if we can find out more
+            "/ (failes, if source is not available)
+
+            method notNil ifTrue:[
+                (isDoIt and:[tempNames size > 0]) ifTrue:[
+                    "/ special for #doIt
+                    "/ my source is found in the method.
+                    blockNode := Compiler
+                                    blockAtLine:(aContext lineNumber)
+                                    in:nil
+                                    orSource:('[' , method source , '\]') withCRs
+                                    numArgs:numArgs 
+                                    numVars:numVars.
+                ] ifFalse:[
+                    blockNode := Compiler 
+                                    blockAtLine:(homeContext lineNumber)
+                                    in:method
+                                    orSource:nil
+                                    numArgs:numArgs
+                                    numVars:numVars.
+                ].
+
+                realTempNames := OrderedCollection new.
+                [blockNode notNil] whileTrue:[
+                    blockNode variables notNil ifTrue:[
+                        realTempNames := (blockNode variables collect:[:aVar | aVar name]) , realTempNames.
+                    ].
+                    blockNode arguments notNil ifTrue:[
+                        realTempNames := (blockNode arguments collect:[:aVar | aVar name]) , realTempNames.
+                    ].
+                    blockNode := blockNode home.
+                ].
+                tempNames replaceFrom:1 to:tempNames size with:realTempNames.
+            ].
+
+            homeNames := homeNames asOrderedCollection.
+            homeNames addAll:tempNames.
         ]
     ].
 
@@ -292,7 +335,7 @@
     workspace contents:nil.
     self setDoitActionIn:workspace for:aContext.
 
-    "Modified: 26.6.1997 / 10:33:53 / cg"
+    "Modified: / 8.11.1997 / 19:39:53 / cg"
 !
 
 release
@@ -460,5 +503,5 @@
 !ContextInspectorView class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/ContextInspectorView.st,v 1.36 1997-10-29 16:06:16 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/ContextInspectorView.st,v 1.37 1997-11-11 14:04:48 cg Exp $'
 ! !