public void testScriptWithMultipleContinuations() {
   Context cx = Context.enter();
   try {
     cx.setOptimizationLevel(-1); // must use interpreter mode
     Script script =
         cx.compileString("myObject.f(3) + myObject.g(3) + 2;", "test source", 1, null);
     cx.executeScriptWithContinuations(script, globalScope);
     fail("Should throw ContinuationPending");
   } catch (ContinuationPending pending) {
     try {
       Object applicationState = pending.getApplicationState();
       assertEquals(new Integer(3), applicationState);
       int saved = (Integer) applicationState;
       cx.resumeContinuation(pending.getContinuation(), globalScope, saved + 1);
       fail("Should throw another ContinuationPending");
     } catch (ContinuationPending pending2) {
       Object applicationState2 = pending2.getApplicationState();
       assertEquals(new Integer(6), applicationState2);
       int saved2 = (Integer) applicationState2;
       Object result2 = cx.resumeContinuation(pending2.getContinuation(), globalScope, saved2 + 1);
       assertEquals(13, ((Number) result2).intValue());
     }
   } finally {
     Context.exit();
   }
 }
 public void testFunctionWithContinuations() {
   Context cx = Context.enter();
   try {
     cx.setOptimizationLevel(-1); // must use interpreter mode
     cx.evaluateString(
         globalScope, "function f(a) { return myObject.f(a); }", "function test source", 1, null);
     Function f = (Function) globalScope.get("f", globalScope);
     Object[] args = {7};
     cx.callFunctionWithContinuations(f, globalScope, args);
     fail("Should throw ContinuationPending");
   } catch (ContinuationPending pending) {
     Object applicationState = pending.getApplicationState();
     assertEquals(7, ((Number) applicationState).intValue());
     int saved = (Integer) applicationState;
     Object result = cx.resumeContinuation(pending.getContinuation(), globalScope, saved + 1);
     assertEquals(8, ((Number) result).intValue());
   } finally {
     Context.exit();
   }
 }