diff -r 393edc0a849a -r a740e2325527 ContextInspectorView.st --- 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 $' ! !