Beispiel #1
0
        public static JsFunction GetDelegate(object obj, JsFunction func)
        {
            var target = obj.As <JsCompilerObject>();

            if (target == null)
            {
                return(func);
            }
            if (JsContext.@typeof(func) == "string")
            {
                func = target.As <JsObject>()[func.As <JsString>()].As <JsFunction>();
            }
            var cache = target.__delegateCache;

            if (cache == null)
            {
                cache = new JsObject <JsDelegateFunction>();
                target.__delegateCache = cache;
            }
            var key = JsCompiler.GetHashKey(func);
            var del = cache[key];

            if (del == null)
            {
                del = new JsNativeFunc <object>(delegate()
                {
                    var del2 = JsContext.arguments.callee.As <JsDelegateFunction>();
                    return(del2.func.apply(del.target, JsContext.arguments.As <object[]>()));
                }).As <JsDelegateFunction>();
                del.func       = func;
                del.target     = target;
                del.isDelegate = true;
                cache[key]     = del;
            }
            return(del);
        }
Beispiel #2
0
 public static JsFunction GetDelegate(object obj, JsFunction func)
 {
     var target = obj.As<JsCompilerObject>();
     if (target == null)
         return func;
     if (JsContext.@typeof(func) == "string")
         func = target.As<JsObject>()[func.As<JsString>()].As<JsFunction>();
     var cache = target.__delegateCache;
     if (cache == null)
     {
         cache = new JsObject<JsDelegateFunction>();
         target.__delegateCache = cache;
     }
     var key = JsCompiler.GetHashKey(func);
     var del = cache[key];
     if (del == null)
     {
         del = new JsNativeFunc<object>(delegate()
         {
             var del2 = JsContext.arguments.callee.As<JsDelegateFunction>();
             return del2.func.apply(del.target, JsContext.arguments.As<object[]>());
         }).As<JsDelegateFunction>();
         del.func = func;
         del.target = target;
         del.isDelegate = true;
         cache[key] = del;
     }
     return del;
 }