예제 #1
0
        // saveContext: saves numbered registers and Reg.implicitContinuation to frame
        //   will restore registers and return to Reg.implicitContinuation of Reg.Register0
        //   clears Reg.implicitContinuation
        //   Also saves Result and flag whether to restore Result
        public static void saveContext(bool full)
        {
            // Save current context: Create frame described below, before RestoreContextCode
            Instructions.save(1 + Reg.LASTREG + 2);
            ContinuationFrame frame = Cont.cont;

            frame.saveRegisters(RestoreContextCode.singletonProcedure, full);
//            frame.setSlot(0, RestoreContextCode.singletonProcedure);
//            frame.returnIndex = Reg.implicitContinuation;
//            for (int i = 0; i <= Reg.LASTREG; ++i) {
//                frame.setSlot(i + 1, Reg.getRegister(i));
//            }
//            frame.setSlot(Reg.LASTREG + 2, Reg.Result);
//            frame.setSlot(Reg.LASTREG + 3, full ? Factory.True : Factory.False);
            Reg.implicitContinuation = -1;
        }