Beispiel #1
0
        /*--------------------------------------------------------------*/

        // wasEnd == 1 -> END or EXIT
        // wasEnd == 2 -> SUBEND
        public void SubEval(ScriptState st)
        {
            if (reg_R.TypeOf() != ValueTypeID.TYPE_PROGRAMREF)
            {
                throw new SharpNektonException(new SharpNektonError(SharpNektonErrorID.E_NOCODE));
            }

            // set up the subprogram code pointers
            //sti->code = (list_head_t *) r->value.program.code;
            reg_PC = ((OpCodeList)reg_R.GetObjectValue()).First();

            // evaluate code
            programState = ProgramStateID.RUNNING;
            for (; ;)
            {
                EvalStep(st);
                if (programState != ProgramStateID.RUNNING)
                {
                    break;
                }
            }

            //*wasEnd = st->done;

            GetVal();
        }
Beispiel #2
0
 public EvaluatorState(ScriptState state)
 {
     this.state   = state;
     stack        = new Stack();
     reg_R        = new UndefinedValue();
     reg_PC       = null;
     reg_FP       = -1;
     globals      = new Hashtable(128);
     codeParts    = new List <OpCodeList>();
     programState = ProgramStateID.RUNNING;
     runLevel     = 0;
 }
Beispiel #3
0
        /*--------------------------------------------------------------*/

        public void EvalStep(ScriptState st)
        {
            AOpCode opcode;

            opcode = DispatchOpCode();
            if (opcode == null)
            {
                programState = ProgramStateID.END;
            }
            else
            {
                programState = ProgramStateID.RUNNING; // clear the done flag
                                                       //Console.WriteLine(">> {0}", opcode);
                opcode.Eval(st.Evaluator);             // run the instruction
            }
        }