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);
 }
 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);
 }