/*--------------------------------------------------------------*/ // 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(); }
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; }
/*--------------------------------------------------------------*/ 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 } }