>From f8cf50a060589d417ec533a7f561b0f1a11c958d Mon Sep 17 00:00:00 2001 From: Gwenael Casaccio Date: Wed, 21 Aug 2013 12:39:10 +0200 Subject: [PATCH] Print context args and temps names and their value while inspecting them and add a unit testing in kernel-tests. --- ChangeLog | 4 + kernel/ContextPart.st | 111 +++++++++++++++++++++++ packages/kernel-tests/ChangeLog | 4 + packages/kernel-tests/kernel/ContextPartTests.st | 22 +++++ packages/kernel-tests/package.xml | 2 + 5 files changed, 143 insertions(+) create mode 100644 packages/kernel-tests/kernel/ContextPartTests.st diff --git a/ChangeLog b/ChangeLog index d4c410f..acdf5c0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-08-20 Gwenael Casaccio + + * kernel/ContextPart.st: Print context args and temps names and their value while inspecting them. + 2013-08-10 Gwenael Casaccio * kernel/BlkClosure.st: Add >>#method: setter. diff --git a/kernel/ContextPart.st b/kernel/ContextPart.st index e57cec3..3383526 100644 --- a/kernel/ContextPart.st +++ b/kernel/ContextPart.st @@ -77,6 +77,117 @@ methods that can be used in inspection or debugging.'> ] + + printContextState [ + + + self printContextStateOn: Transcript spaces: 4 + ] + + + printVariableKind: aString on: aStream spaces: anInteger [ + + + aStream + space: anInteger; + nextPutAll: aString; + nextPutAll: ':'; + nl. + ] + + printVariable: anArray at: anIndex do: aBlock on: aStream spaces: anInteger [ + + + aStream space: anInteger * 2. + anArray ifNil: [ aStream print: anIndex ] ifNotNil: [ aStream nextPutAll: (anArray at: anIndex) ]. + aStream + nextPutAll: ' -> '; + print: aBlock value; + nl + ] + + printArgumentsOn: aStream spaces: anInteger [ + + + | variables | + + self printVariableKind: 'args' on: aStream spaces: 2. + + variables := self method arguments. + 1 to: self numArgs do: [ :i | + self printVariable: variables at: i do: [ self at: i ] on: aStream spaces: anInteger ]. + ] + + printTemporariesOn: aStream spaces: anInteger [ + + + | variables | + + self printVariableKind: 'temps' on: aStream spaces: 2. + + variables := self method temporaries. + 1 to: self numTemps do: [ :i | + self printVariable: variables at: i do: [ self at: self numArgs + i ] on: aStream spaces: anInteger ]. + ] + + printContextStateOn: aStream spaces: anInteger [ + + + self + printArgumentsOn: aStream spaces: 2; + printTemporariesOn: aStream spaces: 2. + ] + + examineOn: aStream [ + + + | instVars output object | + aStream + nextPutAll: 'An instance of '; + print: self class; + nl. + instVars := self class allInstVarNames. + 1 to: instVars size + do: + [:i | + object := self instVarAt: i. + output := [object printString] on: Error + do: + [:ex | + ex + return: '%1 %2' % + {object class article. + object class name asString}]. + aStream + nextPutAll: ' '; + nextPutAll: (instVars at: i); + nextPutAll: ': '; + nextPutAll: output; + nl]. + self printContextStateOn: aStream spaces: 2. + aStream + space: 2; + nextPutAll: 'stack: '; + nl. + self numArgs + self numTemps + 1 to: self validSize do: [ :i | + object := self at: i. + output := [object printString] on: Error + do: + [:ex | + ex + return: '%1 %2' % + {object class article. + object class name asString}]. + aStream + space: 4; + nextPutAll: '['; + print: i; + nextPutAll: ']: '; + nextPutAll: output; + nl]. + + ] + backtrace [ "Print a backtrace from the receiver to the bottom of the stack on the Transcript." diff --git a/packages/kernel-tests/ChangeLog b/packages/kernel-tests/ChangeLog index 5a716fb..5c573f4 100644 --- a/packages/kernel-tests/ChangeLog +++ b/packages/kernel-tests/ChangeLog @@ -1,3 +1,7 @@ +2013-08-20 Gwenael Casaccio + + * kernel/ContextParTests.st: Add tests for ContextPart + 2013-06-11 Gwenael Casaccio * kernel/CompiledMethodTests.st: Add tests for CompiledMethod diff --git a/packages/kernel-tests/kernel/ContextPartTests.st b/packages/kernel-tests/kernel/ContextPartTests.st new file mode 100644 index 0000000..29d4ded --- /dev/null +++ b/packages/kernel-tests/kernel/ContextPartTests.st @@ -0,0 +1,22 @@ +TestCase subclass: TestContextPart [ + + testContextStatePrint [ + + + | ctxt stream | + stream := WriteStream on: String new. + ctxt := [ : a : b : c | | d e f | d := 21. e := 22. f := 23. thisContext ] value: 1 value: 2 value: 3. + ctxt printContextStateOn: stream spaces: 2. + self assert: stream contents = +' args: + a -> 1 + b -> 2 + c -> 3 + temps: + d -> 21 + e -> 22 + f -> 23 +'. + ] + +] diff --git a/packages/kernel-tests/package.xml b/packages/kernel-tests/package.xml index 4dc8484..9c387e3 100644 --- a/packages/kernel-tests/package.xml +++ b/packages/kernel-tests/package.xml @@ -3,7 +3,9 @@ TestCompiledMethod + TestContextPart kernel/CompiledMethodTests.st + kernel/ContextPartTests.st ChangeLog -- 1.8.1.2