>From 4ed72cf8e6fc703845ea951e4a8a3f29827af55b Mon Sep 17 00:00:00 2001
From: Gwenael Casaccio
Date: Tue, 3 Sep 2013 13:58:02 +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 | 124 +++++++++++++++++++++++
packages/kernel-tests/ChangeLog | 4 +
packages/kernel-tests/kernel/ContextPartTests.st | 43 ++++++++
packages/kernel-tests/package.xml | 2 +
5 files changed, 177 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..e8a160c 100644
--- a/kernel/ContextPart.st
+++ b/kernel/ContextPart.st
@@ -77,6 +77,130 @@ 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: variables size do: [ :i |
+ self printVariable: variables at: i do: [ self at: self numArgs + i ] on: aStream spaces: anInteger ].
+ ]
+
+ printOptimizedTemporariesOn: aStream spaces: anInteger [
+
+
+ | variables |
+
+ self printVariableKind: 'optimized temps' on: aStream spaces: 2.
+
+ variables := self method temporaries.
+ self numArgs + variables size + 1 to: self numArgs + self numTemps do: [ :i |
+ self printVariable: nil at: i do: [ self at: i ] on: aStream spaces: anInteger ].
+ ]
+
+ printContextStateOn: aStream spaces: anInteger [
+
+
+ self
+ printArgumentsOn: aStream spaces: 2;
+ printTemporariesOn: aStream spaces: 2;
+ printOptimizedTemporariesOn: 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..301d360
--- /dev/null
+++ b/packages/kernel-tests/kernel/ContextPartTests.st
@@ -0,0 +1,43 @@
+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
+ optimized temps:
+'.
+ ]
+
+ testOptimizedContextStatePrint [
+
+
+ | ctxt stream |
+ stream := WriteStream on: String new.
+ ctxt := [ : a : b : c | | d e f | d := 21. e := 22. f := 23. 1 to: 10 do: [ :i | ]. 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
+ optimized temps:
+ 7 -> 11
+'.
+ ]
+]
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