ContextInspectorView.st
changeset 5339 a740e2325527
parent 5148 8e1e6728fe69
child 5341 08d5088726d3
--- a/ContextInspectorView.st	Tue Nov 11 17:08:09 2003 +0100
+++ b/ContextInspectorView.st	Tue Nov 11 19:47:39 2003 +0100
@@ -57,11 +57,11 @@
 inspect:aContext
     "set the context to be inspected"
 
-    |homeContext method homeNames rec sel 
+    |methodHomeContext method homeNames rec sel 
      argNames varNames tmpNames m argsOnly blockNode vars
      numVarsInSource numVarsInContext isDoIt
      numArgs numVars n tempNames realTempNames src
-     oldSelection oldSelectedName argAndVarNames|
+     oldSelection oldSelectedName argAndVarNames hCon|
 
     (aContext == inspectedContext) ifTrue:[
         "/ care for contexts which change size
@@ -89,24 +89,24 @@
 
 "/    realized ifFalse:[^ self].
 
-    homeContext := aContext methodHome.
+    methodHomeContext := aContext methodHome.
 
-    homeContext isNil ifTrue:[
+    methodHomeContext isNil ifTrue:[
         "its a cheap blocks context"
         rec := aContext receiver.
         sel := aContext selector.
         homeNames := OrderedCollection new.
         isDoIt := false.
     ] ifFalse:[
-        rec := homeContext receiver.
-        sel := homeContext selector.
+        rec := methodHomeContext receiver.
+        sel := methodHomeContext selector.
 
         "/ #doIt needs special handling below
         isDoIt := (sel == #doIt) or:[sel == #doIt:].
 
-        method := homeContext method.
+        method := methodHomeContext method.
 
-"/        implementorClass := homeContext methodClass.
+"/        implementorClass := methodHomeContext methodClass.
 "/        implementorClass notNil ifTrue:[
 "/            method := implementorClass compiledMethodAt:sel.
 "/        ] ifFalse:[
@@ -114,9 +114,9 @@
 "/            "/ see if it was invoked by a direct call
 "/            "/ consider this a kludge
 "/
-"/            homeContext sender notNil ifTrue:[
-"/                (homeContext sender selector startsWith:'valueWithReceiver:') ifTrue:[
-"/                    method := homeContext sender receiver
+"/            methodHomeContext sender notNil ifTrue:[
+"/                (methodHomeContext sender selector startsWith:'valueWithReceiver:') ifTrue:[
+"/                    method := methodHomeContext sender receiver
 "/                ]
 "/            ]
 "/        ].
@@ -145,7 +145,7 @@
                     homeNames := method methodArgAndVarNames.
 
                     "/ did it already allocate its locals ?
-                    homeNames size > (homeContext numArgs + homeContext numVars)
+                    homeNames size > (methodHomeContext numArgs + methodHomeContext numVars)
                     ifTrue:[
                         homeNames := method methodArgNames.
                         argsOnly := true.
@@ -163,7 +163,7 @@
 
                     "/ check
 
-                    numVarsInContext := homeContext argsAndVars size.
+                    numVarsInContext := methodHomeContext argsAndVars size.
                     numVarsInSource := homeNames size.
 
                     numVarsInSource > 0 ifTrue:[
@@ -178,8 +178,8 @@
                             numVarsInSource > numVarsInContext ifTrue:[
                                 homeNames := homeNames copyTo:numVarsInContext.
                             ] ifFalse:[
-                                numVarsInContext >= homeContext numArgs ifTrue:[
-                                    homeNames := homeNames copyTo:homeContext numArgs
+                                numVarsInContext >= methodHomeContext numArgs ifTrue:[
+                                    homeNames := homeNames copyTo:methodHomeContext numArgs
                                 ] ifFalse:[
                                     homeNames := nil
                                 ]    
@@ -195,35 +195,35 @@
         "
         homeNames isNil ifTrue:[
             homeNames := OrderedCollection new.
-            1 to:homeContext numArgs do:[:index |
+            1 to:methodHomeContext numArgs do:[:index |
                 homeNames add:('mArg' , index printString)
             ].
             argsOnly ifFalse:[
-                1 to:homeContext numVars do:[:index |
+                1 to:methodHomeContext numVars do:[:index |
                     homeNames add:('mVar' , index printString)
                 ].
 "/                showingTemporaries ifTrue:[
-"/                    1 to:homeContext numTemps do:[:index |
+"/                    1 to:methodHomeContext numTemps do:[:index |
 "/                        homeNames add:('mTmp' , index printString)
 "/                    ]
 "/                ]
             ]
         ].
         showingTemporaries ifTrue:[
-            1 to:homeContext numTemps do:[:index |
+            1 to:methodHomeContext numTemps do:[:index |
                 homeNames add:('mTmp' , index printString)
             ]
         ].
 
         n := homeNames size.
-        n < (homeContext numVars + homeContext numArgs) ifTrue:[
+        n < (methodHomeContext numVars + methodHomeContext 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 |
+            n to:(methodHomeContext numVars + methodHomeContext numArgs - 1) do:[:inlinedTempIdx |
                 tempNames add:('*t' , (inlinedTempIdx - n + 1) printString)
             ].
 
@@ -242,7 +242,7 @@
                                     numVars:numVars.
                 ] ifFalse:[
                     blockNode := Compiler 
-                                    blockAtLine:(homeContext lineNumber)
+                                    blockAtLine:(methodHomeContext lineNumber)
                                     in:method
                                     orSource:nil
                                     numArgs:numArgs
@@ -284,76 +284,13 @@
      method-home and put real names in here
     "
     aContext isBlockContext ifTrue:[
-        numArgs := aContext numArgs.
-        numVars := aContext numVars.
-
-        (numArgs > 0 or:[numVars > 0]) ifTrue:[
-            argAndVarNames := aContext argAndVarNames.
-            argAndVarNames notEmptyOrNil ifTrue:[
-                argNames := argAndVarNames copyTo:numArgs.
-                varNames := argAndVarNames copyFrom:numArgs+1.
-            ].
-
-"/            method notNil ifTrue:[
-"/                isDoIt ifTrue:[
-"/                    "/ special for #doIt
-"/                    "/ my source is found in the method.
-"/                    m := nil.
-"/                    src := ('[' , method source , '\]') withCRs
-"/                ] ifFalse:[
-"/                    m := method.
-"/                    src := nil.
-"/                ].
-"/                blockNode := Compiler
-"/                                blockAtLine:(aContext lineNumber)
-"/                                in:m
-"/                                orSource:src
-"/                                numArgs:numArgs 
-"/                                numVars:numVars.
-"/                blockNode notNil ifTrue:[
-"/                    numArgs > 0 ifTrue:[
-"/                        vars := blockNode arguments.
-"/                        vars size > 0 ifTrue:[
-"/                            argNames := vars collect:[:var | var name]
-"/                        ]
-"/                    ].
-"/                    numVars > 0 ifTrue:[
-"/                        vars := blockNode variables.
-"/                        vars size > 0 ifTrue:[
-"/                            varNames := vars collect:[:var | var name].
-"/                        ]
-"/                    ]
-"/                ].
-"/            ].
+        names := self namesOfBlockContext:aContext.
+        hCon := aContext home.
+        [hCon == methodHomeContext] whileFalse:[
+            names addAll:(self namesOfBlockContext:hCon).
+            hCon := hCon home.
         ].
-
-        names := OrderedCollection new.
-
-        argNames isNil ifTrue:[
-            argNames := (1 to:numArgs) collect:[:i | 'arg' , i printString].
-        ].
-
-        names addAll:argNames.
-        varNames isNil ifTrue:[
-            varNames := (1 to:numVars) collect:[:i | 'var' , i printString].
-        ] ifFalse:[
-            varNames size ~~ numVars ifTrue:[
-                varNames := varNames asOrderedCollection.
-                varNames size+1 to:aContext numVars do:[:i |
-                    varNames add:('var' , i printString)
-                ]
-            ]
-        ].
-
-        names addAll:varNames.
-
-        showingTemporaries ifTrue:[
-            tmpNames := (1 to:(aContext numTemps)) collect:[:i | 'tmp' , i printString].
-            names addAll:tmpNames.
-        ].
-
         names addAll:homeNames.
-
     ] ifFalse:[
         names := homeNames.
     ].
@@ -373,6 +310,49 @@
     "Modified: / 30.7.1998 / 12:51:44 / cg"
 !
 
+namesOfBlockContext:aContext
+    |numArgs numVars argAndVarNames argNames varNames tmpNames names|
+
+    numArgs := aContext numArgs.
+    numVars := aContext numVars.
+
+    (numArgs > 0 or:[numVars > 0]) ifTrue:[
+        argAndVarNames := aContext argAndVarNames.
+        argAndVarNames notEmptyOrNil ifTrue:[
+            argNames := argAndVarNames copyTo:numArgs.
+            varNames := argAndVarNames copyFrom:numArgs+1.
+        ].
+Transcript showCR:argAndVarNames.
+    ].
+
+    names := OrderedCollection new.
+
+    argNames isNil ifTrue:[
+        argNames := (1 to:numArgs) collect:[:i | 'arg' , i printString].
+    ].
+
+    names addAll:argNames.
+    varNames isNil ifTrue:[
+        varNames := (1 to:numVars) collect:[:i | 'var' , i printString].
+    ] ifFalse:[
+        varNames size ~~ numVars ifTrue:[
+            varNames := varNames asOrderedCollection.
+            varNames size+1 to:aContext numVars do:[:i |
+                varNames add:('var' , i printString)
+            ]
+        ]
+    ].
+
+    names addAll:varNames.
+
+    showingTemporaries ifTrue:[
+        tmpNames := (1 to:(aContext numTemps)) collect:[:i | 'tmp' , i printString].
+        names addAll:tmpNames.
+    ].
+
+    ^ names
+!
+
 release
     "release inspected object"
 
@@ -519,36 +499,45 @@
 valueAtIndex:varIdx
     "helper - return the value of the selected entry"
 
-    |homeContext theContext values|
+    |methodHomeContext hCon theContext values|
 
     inspectedContext isNil ifTrue:[^ nil].
 
     argsOnly := false.
     theContext := inspectedContext.
-    homeContext := theContext methodHome.
+    methodHomeContext := theContext methodHome.
 
     theContext isBlockContext ifTrue:[
         values := Array withAll:(theContext argsAndVars).
         (showingTemporaries and:[theContext numTemps ~~ 0]) ifTrue:[
             values := values , theContext temporaries
         ].
-        homeContext notNil ifTrue:[
-            values := values , homeContext args.
+        hCon := theContext home.
+        [hCon == methodHomeContext] whileFalse:[
+            values := values , hCon argsAndVars.
+            (showingTemporaries and:[theContext numTemps ~~ 0]) ifTrue:[
+                values := values , hCon temporaries
+            ].
+            hCon := hCon home.
+        ].
+
+        methodHomeContext notNil ifTrue:[
+            values := values , methodHomeContext args.
             argsOnly ifFalse:[
-                values := values , homeContext vars.
-                (showingTemporaries and:[homeContext numTemps ~~ 0])ifTrue:[
-                    values := values , homeContext temporaries
+                values := values , methodHomeContext vars.
+                (showingTemporaries and:[methodHomeContext numTemps ~~ 0])ifTrue:[
+                    values := values , methodHomeContext temporaries
                 ]
             ].
         ].
     ] ifFalse:[
         argsOnly ifTrue:[
-            values := homeContext args
+            values := methodHomeContext args
         ] ifFalse:[
-            values := homeContext argsAndVars
+            values := methodHomeContext argsAndVars
         ].
-        (showingTemporaries and:[homeContext numTemps ~~ 0])ifTrue:[
-            values := values , homeContext temporaries
+        (showingTemporaries and:[methodHomeContext numTemps ~~ 0])ifTrue:[
+            values := values , methodHomeContext temporaries
         ]
 
     ].
@@ -630,5 +619,5 @@
 !ContextInspectorView class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/ContextInspectorView.st,v 1.56 2003-09-03 08:05:19 penk Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/ContextInspectorView.st,v 1.57 2003-11-11 18:47:39 cg Exp $'
 ! !