Exemple #1
0
        public bool loadRunner(IRTSRunner cal)
        {
            if (cal == null)
            {
                return(false);
            }
            if (cal.isConst())
            {
                mOutput = cal.getOutput();
                return(false);
            }
            int len = mRunners.length();

            if (len >= mStackSize)
            {
                return(false);
            }
            mRunners.add(cal);
            IRTSDefine.Stack sco = cal.applyStack();
            if ((sco & IRTSDefine.Stack.ACTION_RETURN) != 0)
            {
                IRTSStack scope = mStack.makeChild(len);
                if (scope != null)
                {
                    mStack = scope;
                }
            }
            cal.loadedOnThread();
            return(true);
        }
 public bool onReturnAndSkip(IRTSDefine.Stack returnTppe, object value)
 {
     if (returnTppe == IRTSDefine.Stack.ACTION_CONTINUE)
     {
         mCur = 2;
         return(false);
     }
     else
     {
         return(true);
     }
 }
Exemple #3
0
        public void run(IRTSEngine engine)
        {
            mTicks = System.DateTime.Now.Ticks;
            int len = mRunners.length();

            if (len > 0)
            {
                mEngine = engine;
                while (mStack.getId() >= len)
                {
                    mStack.onRemoved();
                    mStack = mStack.getSuper();
                }
                IRTSRunner       cal = mRunners.getLast();
                IRTSDefine.Stack ret = cal.run(mStack);
                mOutput = cal.getOutput();
                if (ret != IRTSDefine.Stack.ACTION_HOLD)
                {
                    if (ret != 0)
                    {
                        int off = mRunners.length();
                        for (int i = off - 1; i >= 0; i--)
                        {
                            if ((mRunners.get(i).applyStack() & ret) != 0)
                            {
                                break;
                            }
                            off = i;
                        }
                        mRunners.removeFrom(off);
                        IRTSRunner cal2 = mRunners.getLast();
                        if (cal2 != null && cal2.onReturnAndSkip(ret, mOutput))
                        {
                            mRunners.removeLast();
                        }
                    }
                    else if (len == mRunners.length())
                    {
                        mRunners.removeLast();
                    }
                }
                mEngine = null;
                len     = mRunners.length();
                while (mStack.getId() >= len)
                {
                    mStack.onRemoved();
                    mStack = (RTSStack)mStack.getSuper();
                }
            }
        }
 public RTSStackActL(IRTSDefine.Stack type)
     : base(IRTSDefine.Linker.STACK_ACT)
 {
     mType = type;
 }
 public bool onReturnAndSkip(IRTSDefine.Stack returnTppe, object value)
 {
     return(true);
 }
Exemple #6
0
 public RTSStackActR(IRTSDefine.Stack type, IRTSLinker child)
 {
     mType   = type;
     mChildL = child;
 }