public IRTSDefine.Stack run(IRTSStack stack) { if (mCur == 0) { mCur++; mConditionR = mConditionL == null ? null : mConditionL.createRunner(); if (stack.getThread().loadRunner(mConditionR)) { return(0); } } if (mCur == 1) { mCur++; object o = mConditionR == null ? null : mConditionR.getOutput(); bool c = org.vr.rts.modify.RTSBool.valueOf(o); IRTSLinker l = c ? mTrueL : mFalseL; mResultR = l == null ? null : l.createRunner(); if (stack.getThread().loadRunner(mResultR)) { return(0); } } return(0); }
public bool Execute(string cmd, int threadId) { if (!string.IsNullOrEmpty(cmd)) { int tid = FindFreeThread(threadId); IRTSThread t = tid == -1 ? null : mThreads[tid]; if (t == null) { return(false); } mCompiler.reset(); mCompiler.loadSource(cmd); while (mCompiler.isCompiling()) { IRTSDefine.Error error = mCompiler.onCompile(mEngine); if (error != 0) { logError("rts compile error:" + RTSUtil.getEnumDescript(typeof(IRTSDefine.Error), (int)error) + "-" + mCompiler.getCompilingLinker()); return(false); } } IRTSLinker root = mCompiler.getRootLinker(); if (root != null) { bool ret = t.loadRunner(root.createRunner()); mExecUpdate |= ret; return(ret); } return(false); } return(false); }
/** * 在运行线程(RTSThread)中计算,返回值为表示return的类型,有return,break,continue * * @param thread * @return returnType */ public IRTSDefine.Stack run(IRTSStack stack) { if (doCompile) { doCompile = false; compiler.loadSource(source); while (compiler.isCompiling()) { IRTSDefine.Error err = compiler.onCompile(stack.getThread().getEngine()); if (err != 0) { IRTSLog log = stack.getThread().getEngine().getLogger(); if (log != null) { log.logError("无法解析内容 \"" + source + "\""); } return(0); } } IRTSLinker l = compiler.getRootLinker(); child = l.createRunner(); if (stack.getThread().loadRunner(child)) { return(0); } } return(0); }
public IRTSDefine.Stack run(IRTSStack stack) { if (mChildCount == 0) { mChildCount++; if (!skipLeft()) { mLeft = mLeftL == null ? null : mLeftL.createRunner(); if (stack.getThread().loadRunner(mLeft)) { return(0); } } } if (mChildCount == 1) { mChildCount++; if (!skipRight()) { mRight = mRightL == null ? null : mRightL.createRunner(); if (stack.getThread().loadRunner(mRight)) { return(0); } } } if (mChildCount == 2) { mChildCount++; onFinalRun(stack, mLeft == null ? null : mLeft.getOutput(), mRight == null ? null : mRight.getOutput()); } return(0); }
override public IRTSRunner createRunner() { IRTSRunner r = null; RTSList <IRTSRunner> lrs = null; if (mArg != null) { RTSList <IRTSLinker> lins = ((RTSBracketL)mArg).getChildAsList(); if (lins != null) { lrs = new RTSList <IRTSRunner>(lins.length()); for (int i = 0; i < lins.length(); i++) { IRTSLinker l = lins.get(i); if (l == null) { lrs.add(null); } else { lrs.add(l.createRunner()); } } } } r = new RTSFuncR(mCastType, mSrc, lrs); return(r); }
public RTSForR(IRTSLinker initL, IRTSLinker condition, IRTSLinker endL, IRTSLinker bodyL) { mLins = new IRTSRunner[3]; mLins[0] = condition == null ? null : condition.createRunner(); mLins[1] = bodyL == null ? null : bodyL.createRunner(); mLins[2] = endL == null ? null : endL.createRunner(); if (initL == null) { mInit = null; } else if (initL.getId() == IRTSDefine.Linker.COMMA) { org.vr.rts.util.RTSList <IRTSLinker> lst = ((org.vr.rts.linker.RTSCommaL)initL).getChildren(); if (lst == null || lst.length() == 0) { mInit = null; } else { mInit = new IRTSRunner[lst.length()]; for (int i = 0; i < mInit.Length; i++) { IRTSLinker l = lst.get(i); mInit[i] = l == null ? null : l.createRunner(); } } } else { mInit = new IRTSRunner[1]; mInit[0] = initL.createRunner(); } }
public RTSInnerFuncR(object[] args, IRTSFunction func) { mArgs = args; mReturnType = func.returnType(); mFunc = func; IRTSLinker body = func.getBody(); mBody = body == null ? null : body.createRunner(); }
public IRTSDefine.Stack run(IRTSStack stack) { if (!mVarLoaded) { mVarLoaded = true; mVarR = mVar == null ? null : mVar.createRunner(); if (stack.getThread().loadRunner(mVarR)) { return(0); } } if (!mIndexLoaded) { mIndexLoaded = true; mIndexR = mIndex == null ? null : mIndex.createRunner(); if (stack.getThread().loadRunner(mIndexR)) { return(0); } } while (mArray != null && mListCur < mArray.length()) { IRTSLinker l = mArray.get(mListCur); mArrayR[mListCur] = l == null ? null : l.createRunner(); if (stack.getThread().loadRunner(mArrayR[mListCur++])) { return(0); } } if (mArrayR != null) { //org.vr.rts.typedef.RTSarray arr = new org.vr.rts.typedef.RTSarray(mArrayR.Length); object[] arr = new object[mArrayR.Length]; for (int i = 0; i < mArrayR.Length; i++) { object v = mArrayR[i] == null ? null : mArrayR[i].getOutput(); //arr.set(i, v); arr[i] = v; } mValue = arr; } else { object obj = mVarR == null ? null : mVarR.getOutput(); object index = mIndexR == null ? null : mIndexR.getOutput(); int n = org.vr.rts.modify.RTSInteger.valueOf(index); if (obj != null && obj is System.Collections.IList) { mValue = ((System.Collections.IList)obj)[n]; } else { mValue = n == 0 ? obj : null; } } return(0); }
public IRTSDefine.Stack run(IRTSStack stack) { if (mLeftL == null) { return(0); } if (!mChildLoaded) { mChildLoaded = true; bool ret = false; if (mPreRunner != null) { mRight = mPreRunner.createRunnerWith(mLeftL, mRightL); } else { mRight = mRightL == null ? null : mRightL.createRunner(); mLeft = mLeftL.createRunner(); if (mLeftL.getId() != IRTSDefine.Linker.VARIABLE) { ret = stack.getThread().loadRunner(mLeft); } } ret |= stack.getThread().loadRunner(mRight); if (ret) { return(0); } } if (!mEvaluate) { mEvaluate = true; if (mPreRunner != null && mRight != null) { mLeft = ((RTSBinaryR)mRight).getLeft(); } mLeft.evaluate(stack, mRight == null ? null : mRight.getOutput()); mValue = mLeft.getOutput(); mOutput = mValue as IRTSRunner; mLeft = null; if (stack.getThread().loadRunner(mOutput)) { return(0); } } if (mOutput != null) { mValue = mOutput.getOutput(); mOutput = mValue as IRTSRunner; if (stack.getThread().loadRunner(mOutput)) { return(0); } } return(0); }
public IRTSDefine.Stack run(IRTSStack stack) { if (!mLoaded) { mLoaded = true; mChild = mChildL == null ? null : mChildL.createRunner(); if (stack.getThread().loadRunner(mChild)) { return(0); } } return(mType); }
public IRTSDefine.Stack run(IRTSStack stack) { if (mRuntime != null && mChild != null) { int ret = mRuntime.LoadRunner(mChild.createRunner(), -1); if (mCastType != null) { mResult = mCastType.castValue(ret); } else { mResult = ret; } } return(0); }
override public IRTSRunner createRunner() { IRTSRunner r = null; if (mId == IRTSDefine.Linker.VARIABLE) { if (mConst == null && !mBeConst) { r = new RTSVariableR(mProperty, mCastType, mSrc); } else { r = new RTSVariableR(mCastType, mConst); } return(r); } else if (mId == IRTSDefine.Linker.FUNCTION) { RTSList <IRTSLinker> lins = ((RTSBracketL)mArg).getChildAsList(); RTSList <IRTSRunner> lrs = null; if (lins != null) { lrs = new RTSList <IRTSRunner>(lins.length()); for (int i = 0; i < lins.length(); i++) { IRTSLinker l = lins.get(i); if (l == null) { lrs.add(null); } else { lrs.add(l.createRunner()); } } } r = new RTSFuncR(mCastType, mSrc, lrs); return(r); } else { return(null); } }
override public IRTSRunner createRunner() { if (mChild != null) { IRTSRunner r = mChild.createRunner(); if (mCastType == null || r == null) { return(r); } else { return(new RTSCastR(mCastType, r)); } } else { return(null); } }
public IRTSDefine.Stack run(IRTSStack stack) { while (mRunners != null && mCur < mRunners.length()) { IRTSLinker l = mRunners.get(mCur++); IRTSRunner r = l == null ? null : l.createRunner(); if (r != null) { mLastRunner = r; } if (stack.getThread().loadRunner(r)) { return(0); } } if (mLastRunner != null) { mValue = mLastRunner.getOutput(); } return(0); }
public object ExecuteImmediate(string cmd) { mCompiler.reset(); mCompiler.loadSource(cmd); while (mCompiler.isCompiling()) { IRTSDefine.Error error = mCompiler.onCompile(mEngine); if (error != 0) { logError("rts compile error:" + RTSUtil.getEnumDescript(typeof(IRTSDefine.Error), (int)error) + "-" + mCompiler.getCompilingLinker()); return(null); } } IRTSLinker root = mCompiler.getRootLinker(); if (root != null) { mImmediateT.loadRunner(root.createRunner()); while (!mImmediateT.isFinished()) { try { mImmediateT.run(mEngine); } catch (System.Exception ex) { mImmediateT.catchError(IRTSDefine.Error.Runtime_IndexOutOfBounds, ex.ToString()); break; } } return(mImmediateT.getOutput()); } else { return(null); } }
public override IRTSRunner createRunner() { IRTSRunner r = null; RTSList <IRTSRunner> lrs = null; if (mArgs.length() > 0) { lrs = new RTSList <IRTSRunner>(mArgs.length()); for (int i = 0; i < mArgs.length(); i++) { IRTSLinker l = mArgs.get(i); if (l == null) { lrs.add(null); } else { lrs.add(l.createRunner()); } } } r = new RTSFuncR(null, "_" + mSrc, lrs); return(r); }
override public IRTSRunner createRunner() { IRTSLinker l = mLins.getLast(); return(l == null ? null : l.createRunner()); }
override public IRTSRunner createRunner() { return(mBodyL.createRunner()); }
override public IRTSRunner createRunner() { IRTSRunner r = new org.vr.rts.runner.RTSNotR(mChildL.createRunner()); return(r); }
public IRTSDefine.Stack run(IRTSStack stack) { if (mLeftRun) { mLeftRun = false; mLeftR = mLeftL.createRunner(); if (stack.getThread().loadRunner(mLeftR)) { return(0); } } while (mArgNum > mArgPtr) { IRTSRunner r = mArgs.get(mArgPtr++).createRunner(); mArgRs.add(r); if (stack.getThread().loadRunner(r)) { return(0); } } if (mInvokeFunc) { mInvokeFunc = false; object domain = mLeftR == null ? null : mLeftR.getOutput(); if (domain == null) { return(0); } IRTSType tp = stack.getThread().getEngine().getRTSType(domain.GetType()); if (!mAsFunction) { mValue = tp.getProperty(stack.getThread().getEngine(), domain, mDomain); mOutput = mValue as IRTSRunner; if (stack.getThread().loadRunner(mOutput)) { return(0); } } else { object[] args = new object[mArgNum]; for (int i = 0; i < mArgNum; i++) { IRTSRunner r = mArgRs.get(i); args[i] = r == null ? null : r.getOutput(); } mValue = tp.function(stack.getThread().getEngine(), domain, mDomain, args); mOutput = mValue as IRTSRunner; if (stack.getThread().loadRunner(mOutput)) { return(0); } } } if (mOutput != null) { mValue = mOutput.getOutput(); mOutput = mValue as IRTSRunner; if (stack.getThread().loadRunner(mOutput)) { return(0); } } return(0); }
override public IRTSRunner createRunner() { org.vr.rts.runner.RTSSelfRaiseR cal = new org.vr.rts.runner.RTSSelfRaiseR(mId, mVar.createRunner(), mVarAtLeft); return(cal); }
public IRTSDefine.Stack run(IRTSStack stack) { if (!mVarLoaded) { mVarLoaded = true; mVarR = mVar == null ? null : mVar.createRunner(); if (stack.getThread().loadRunner(mVarR)) { return(0); } } if (!mIndexLoaded) { mIndexLoaded = true; mIndexR = mIndex == null ? null : mIndex.createRunner(); if (stack.getThread().loadRunner(mIndexR)) { return(0); } } while (mArray != null && mListCur < mArray.length()) { IRTSLinker l = mArray.get(mListCur); mArrayR[mListCur] = l == null ? null : l.createRunner(); if (stack.getThread().loadRunner(mArrayR[mListCur++])) { return(0); } } if (mArrayR != null) { //org.vr.rts.typedef.RTSarray arr = new org.vr.rts.typedef.RTSarray(mArrayR.Length); object[] arr = new object[mArrayR.Length]; for (int i = 0; i < mArrayR.Length; i++) { object v = mArrayR[i] == null ? null : mArrayR[i].getOutput(); //arr.set(i, v); arr[i] = v; } mValue = arr; } else if (mVarR == null) { mValue = new object[0]; } else { object obj = mVarR.getOutput(); object index = mIndexR == null ? null : mIndexR.getOutput(); if (obj == null) { mValue = null; } else if (index is string) { var eng = stack.getThread().getEngine(); IRTSType tp = eng.getRTSType(obj.GetType()); mValue = tp.getProperty(eng, obj, RTSString.stringOf(index)); } else if (obj is System.Collections.IList) { int n = RTSInteger.valueOf(index); mValue = ((System.Collections.IList)obj)[n]; } else { int n = RTSInteger.valueOf(index); mValue = n == 0 ? obj : null; } mOutput = mValue as IRTSRunner; if (stack.getThread().loadRunner(mOutput)) { return(0); } } if (mOutput != null) { mValue = mOutput.getOutput(); mOutput = mValue as IRTSRunner; if (stack.getThread().loadRunner(mOutput)) { return(0); } } return(0); }