Beispiel #1
0
 public void loadedOnThread()
 {
     mFuncR   = null;
     mFunc    = null;
     mFuncCur = 0;
     mValue   = null;
 }
Beispiel #2
0
 public void addFunction(string funcName, IRTSFunction func)
 {
     if (mFuncs == null)
     {
         mFuncs = new System.Collections.Generic.Dictionary <string, IRTSFunction>();
     }
     mFuncs[RTSUtil.keyOfFunc(funcName, func.argSize())] = func;
 }
Beispiel #3
0
 public void AddFunction(string funcName, IRTSFunction func, bool autoLink = true)
 {
     mEngine.addFunction(funcName, func);
     if (autoLink && func.argSize() <= 0)
     {
         mEngine.addLinker(funcName, new RTSFuncShortcutL());
     }
 }
 public void loadedOnThread()
 {
     mFuncR  = null;
     mFunc   = null;
     mArgCur = 0;
     mLoaded = false;
     mValue  = null;
 }
Beispiel #5
0
        public RTSInnerFuncR(object[] args, IRTSFunction func)
        {
            mArgs       = args;
            mReturnType = func.returnType();
            mFunc       = func;
            IRTSLinker body = func.getBody();

            mBody = body == null ? null : body.createRunner();
        }
        public virtual object getProperty(IRTSEngine engine, object target, string propertyname)
        {
            IRTSFunction func = engine.getFunction(string.Format("{0}_get_{1}", typeName(), propertyname), 1);

            if (func != null)
            {
                return(func.createRunner(new object[] { target }));
            }
            else
            {
                return(null);
            }
        }
Beispiel #7
0
 public object ExecuteFunction(string funcName, object[] args, bool immediate)
 {
     if (RTSUtil.isGoodName(funcName))
     {
         IRTSThread t = null;
         if (immediate)
         {
             t = mImmediateT;
         }
         else
         {
             int p = 0;
             for (int i = 1; i <= mThreads.Length; i++)
             {
                 p = i % mThreads.Length;
                 if (mThreads[p].isFinished())
                 {
                     t = mThreads[p];
                     break;
                 }
             }
         }
         if (t == null || !t.isFinished())
         {
             return(false);
         }
         IRTSFunction func = mEngine.getFunction(funcName, args == null ? 0 : args.Length);
         if (func == null)
         {
             return(false);
         }
         bool ret = t.loadRunner(func.createRunner(args));
         if (immediate)
         {
             while (!t.isFinished())
             {
                 t.run(mEngine);
             }
             return(t.getOutput());
         }
         else
         {
             mExecUpdate |= ret;
             return(ret);
         }
     }
     else
     {
         return(null);
     }
 }
 public IRTSDefine.Stack run(IRTSStack stack)
 {
     if (mFunc == null)
     {
         mFunc = stack.getThread().getEngine().getFunction(mFuncName, mArgC);
         if (mFunc == null)
         {
             stack.getThread().catchError(IRTSDefine.Error.Runtime_NoFunctionDefine,
                                          "Don't find function defined:" + RTSUtil.keyOfFunc(mFuncName, mArgC));
             return(0);
         }
     }
     while (mArgs != null && mArgCur < mArgs.length())
     {
         IRTSRunner r = mArgs.get(mArgCur++);
         if (stack.getThread().loadRunner(r))
         {
             return(0);
         }
     }
     if (!mLoaded)
     {
         mLoaded = true;
         object[] args = mArgC > 0 ? new object[mArgC] : null;
         if (args != null)
         {
             for (int i = 0; i < mArgC; i++)
             {
                 IRTSRunner r = mArgs.get(i);
                 if (r != null)
                 {
                     args[i] = r.getOutput();
                 }
             }
         }
         mFuncR = mFunc.createRunner(args);
         if (stack.getThread().loadRunner(mFuncR))
         {
             return(0);
         }
     }
     mValue = mFuncR == null ? null : mFuncR.getOutput();
     if (mCast != null)
     {
         mValue = mCast.castValue(mValue);
     }
     return(0);
 }
Beispiel #9
0
        object funcs(object[] args)
        {
            bool set;
            Dictionary <string, IRTSFunction> funcs = Ref.GetField(mEngine, "mFuncs", out set) as Dictionary <string, IRTSFunction>;
            StringBuilder b   = new StringBuilder("\n============== FUNCTIONS ==============\n");
            int           num = 0;

            foreach (string key in funcs.Keys)
            {
                string fname;
                int    n = key.IndexOf('-');
                if (n > 0)
                {
                    fname = key.Substring(0, n);
                }
                else
                {
                    fname = key;
                }
                if (!filterName(fname, args))
                {
                    continue;
                }
                b.Append(num++).Append(":    ");
                b.Append(fname);
                b.Append(" ( ");
                IRTSFunction func = funcs[key];
                int          argc = func.argSize();
                if (argc < 0)
                {
                    b.Append("args [ ]");
                }
                else if (argc > 0)
                {
                    for (int i = 0; i < argc; i++)
                    {
                        if (i > 0)
                        {
                            b.Append(", ");
                        }
                        b.Append(func.getArgDef(i));
                    }
                }
                b.Append(" )\n");
            }
            PutLog(Level.info, b.ToString());
            return(RTSVoid.VOID);
        }
Beispiel #10
0
 public IRTSDefine.Stack run(IRTSStack stack)
 {
     while (mFuncNames != null && mFuncCur < mFuncNames.Length)
     {
         mFunc  = stack.getThread().getEngine().getFunction(mFuncNames[mFuncCur++], mArgC);
         mFuncR = mFunc == null ? null : mFunc.createRunner(mArgs);
         if (stack.getThread().loadRunner(mFuncR))
         {
             return(0);
         }
     }
     mValue = mFuncR == null ? null : mFuncR.getOutput();
     if (mCast != null)
     {
         mValue = mCast.castValue(mValue);
     }
     return(0);
 }
        public virtual object function(IRTSEngine engine, object target, string funcname, object[] args)
        {
            object[] arg;
            if (args != null && args.Length > 0)
            {
                arg = new object[args.Length + 1];
                System.Array.Copy(args, 0, arg, 1, args.Length);
            }
            else
            {
                arg = new object[1];
            }
            arg[0] = target;
            IRTSFunction func = engine.getFunction(string.Format("{0}_{1}", typeName(), funcname), arg.Length);

            if (func != null)
            {
                return(func.createRunner(arg));
            }
            else
            {
                return(null);
            }
        }
Beispiel #12
0
 public void AddCommand(string cmd, IRTSFunction func)
 {
     mEngine.addFunction("_" + cmd, func);
     mEngine.addLinker(cmd, new RTSCmdL());
 }