Author: kohsuke
Date: Sat Jan 28 11:04:48 2006
New Revision: 373217

URL: http://svn.apache.org/viewcvs?rev=373217&view=rev
Log:
implemented Continuation.exit()

Added:
    
jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/ContinuationDeath.java
   (with props)
Modified:
    
jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/Continuation.java
    
jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/StackRecorder.java

Modified: 
jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/Continuation.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/Continuation.java?rev=373217&r1=373216&r2=373217&view=diff
==============================================================================
--- 
jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/Continuation.java
 (original)
+++ 
jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/Continuation.java
 Sat Jan 28 11:04:48 2006
@@ -17,6 +17,7 @@
 
 import java.io.Serializable;
 import org.apache.commons.javaflow.bytecode.StackRecorder;
+import org.apache.commons.javaflow.bytecode.ContinuationDeath;
 import org.apache.commons.javaflow.utils.ReflectionUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -194,6 +195,18 @@
      */
     public static void suspend() {
         StackRecorder.suspend();
+    }
+
+    /**
+     * Exits the running continuation.
+     *
+     * <p>
+     * This method can be only called inside [EMAIL PROTECTED] #continueWith} 
or [EMAIL PROTECTED] #startWith} methods.
+     * When called, the thread returns from the above methods with null,
+     * indicating that there's nothing more to continue.
+     */
+    public static void exit() {
+        throw new ContinuationDeath();
     }
 
     public String toString() {

Added: 
jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/ContinuationDeath.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/ContinuationDeath.java?rev=373217&view=auto
==============================================================================
--- 
jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/ContinuationDeath.java
 (added)
+++ 
jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/ContinuationDeath.java
 Sat Jan 28 11:04:48 2006
@@ -0,0 +1,9 @@
+package org.apache.commons.javaflow.bytecode;
+
+/**
+ * This exception is used to signal that the continuation
+ * wants to exit the execution.
+ *
+ * @author Kohsuke Kawaguchi
+ */
+public class ContinuationDeath extends Error {}

Propchange: 
jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/ContinuationDeath.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/StackRecorder.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/StackRecorder.java?rev=373217&r1=373216&r2=373217&view=diff
==============================================================================
--- 
jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/StackRecorder.java
 (original)
+++ 
jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/bytecode/StackRecorder.java
 Sat Jan 28 11:04:48 2006
@@ -91,7 +91,12 @@
             }
             
             log.debug("calling runnable");
-            runnable.run();
+            try {
+                runnable.run();
+            } catch (ContinuationDeath e) {
+                // the code inside wanted to exit.
+                return null;
+            }
 
             if (isCapturing) {
                 if(isEmpty()) {



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to