--- a/Continuation.st Wed Sep 22 12:03:04 2004 +0200
+++ b/Continuation.st Wed Sep 22 13:52:26 2004 +0200
@@ -55,10 +55,26 @@
[author:]
Claus Gittinger
"
+!
+
+supported
+ ^ false
! !
!Continuation class methodsFor:'instance creation'!
+current
+ ^ self fromContext: thisContext sender
+!
+
+currentDo: aBlock
+ ^ aBlock value: (self fromContext: thisContext sender)
+!
+
+fromContext: aStack
+ ^self new initializeFromContext: aStack
+!
+
new
|cont id|
@@ -80,6 +96,65 @@
^ cont
! !
+!Continuation methodsFor:'as yet unclassified'!
+
+restoreValues
+self halt.
+"/ | valueStream context |
+"/
+"/ valueStream _ values readStream.
+"/ [valueStream atEnd] whileFalse:
+"/ [context _ valueStream next.
+"/ 1 to: context class instSize do: [:i | context instVarAt: i put: valueStream next].
+"/ 1 to: context localSize do: [:i | context localAt: i put: valueStream next]]
+! !
+
+!Continuation methodsFor:'invocation'!
+
+numArgs
+ ^ 1
+!
+
+value
+ self value: nil
+!
+
+value: v
+self halt.
+"/ self terminate: thisContext.
+"/ self restoreValues.
+"/ thisContext swapSender: values first.
+"/ ^v
+!
+
+valueWithArguments: v
+ v size == 1 ifFalse: [^self error: 'continuations can only be resumed with one argument'].
+ self value: v first
+! !
+
+!Continuation methodsFor:'private'!
+
+initializeFromContext: aContext
+self halt.
+"/ | valueStream context |
+"/
+"/ valueStream _ WriteStream on: (Array new: 20).
+"/ context _ aContext.
+"/ [context notNil] whileTrue:
+"/ [valueStream nextPut: context.
+"/ 1 to: context class instSize do: [:i | valueStream nextPut: (context instVarAt: i)].
+"/ 1 to: context localSize do: [:i | valueStream nextPut: (context localAt: i)].
+"/ context _ context sender].
+"/ values _ valueStream contents
+!
+
+terminate: aContext
+self halt.
+"/ | context |
+"/ context _ aContext.
+"/ [context notNil] whileTrue: [context _ context swapSender: nil]
+! !
+
!Continuation methodsFor:'private accessing'!
setId:idArg process:aProcess
@@ -90,5 +165,5 @@
!Continuation class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/Continuation.st,v 1.5 2004-09-20 14:27:04 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/Continuation.st,v 1.6 2004-09-22 11:52:26 cg Exp $'
! !