public string RunProgram(string program) { xmlScriptParse scriptParse = new xmlScriptParse(); scriptParse.Set(program); var element = scriptParse.Parse1(); var pgmelement = (element.GetListElement(0).isPROGRAM()) ? element.GetListElement(0) : null; if (pgmelement == null) { throw new SystemException("Error program"); } m_rootElement.list.Add(pgmelement); var scrObj = GetScriptObj(null); if (string.IsNullOrEmpty(pgmelement.decname)) { pgmelement.decname = "program_" + pgm_num++; } var stack = m_stackval.CreateStack(pgmelement.decname, pgmelement); scrObj.m_stdout = ""; try { xmlScriptFunc.ExecutePROGRAM(pgmelement, scrObj, stack); } catch (SystemException e) { Debug.Log(e.Message); } return(scrObj.m_stdout); }
public static object ExecuteDEC_FUNC(ELEMENT e, xmlScriptObj scrObj, STACKVAL stack, object args) { if (e == null || !e.isDEC_FUNC()) { return(null); } var newstack = stack.CreateStack(e.decname, e); var block_c = e.GetListElement(0); for (int i = 0; i < block_c.GetListCount(); i++) { var vname = block_c.GetListElement(i).raw; var val = ((object[])args)[i]; newstack.DeclareLocalVal(vname); newstack.SetVal(vname, val); } var o = Execute(e.GetListElement(1), scrObj, newstack); stack.DestroyStack(newstack); return(o); }