>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