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