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);
 }
Exemplo n.º 2
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);
 }
Exemplo n.º 3
0
 /**
  * 在运行线程(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);
 }
Exemplo n.º 5
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);
        }
Exemplo n.º 6
0
 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();
     }
 }
Exemplo n.º 7
0
        public RTSInnerFuncR(object[] args, IRTSFunction func)
        {
            mArgs       = args;
            mReturnType = func.returnType();
            mFunc       = func;
            IRTSLinker body = func.getBody();

            mBody = body == null ? null : body.createRunner();
        }
Exemplo n.º 8
0
 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);
 }
Exemplo n.º 10
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);
 }
Exemplo n.º 11
0
 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);
 }
Exemplo n.º 12
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);
     }
 }
Exemplo n.º 14
0
 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);
 }
Exemplo n.º 15
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);
            }
        }
Exemplo n.º 16
0
        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);
        }
Exemplo n.º 17
0
        override public IRTSRunner createRunner()
        {
            IRTSLinker l = mLins.getLast();

            return(l == null ? null : l.createRunner());
        }
Exemplo n.º 18
0
 override public IRTSRunner createRunner()
 {
     return(mBodyL.createRunner());
 }
Exemplo n.º 19
0
        override public IRTSRunner createRunner()
        {
            IRTSRunner r = new org.vr.rts.runner.RTSNotR(mChildL.createRunner());

            return(r);
        }
Exemplo n.º 20
0
 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);
 }
Exemplo n.º 22
0
 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);
 }