Пример #1
0
        public virtual object Invoke(IScriptContext context, object[] args)
        {
            object result = RuntimeHost.NullValue;

            IObjectBind bind = null;

            if (MethodInfo == null)
            {
                bind = RuntimeHost.Binder.BindToMethod(Target, MethodName, null, args);
            }
            else
            {
                bind = RuntimeHost.Binder.BindToMethod(Target, MethodInfo, args);
            }

            if (bind != null)
            {
                result = bind.Invoke(context, null);
            }
            else
            {
                throw new ScriptMethodNotFoundException(MethodName);
            }

            context.Result = result;
            return(result);
        }
Пример #2
0
        public object Evaluate(object left, object right)
        {
            if (left == null || right == null)
            {
                return(object.Equals(left, right));
            }

            IObjectBind equalityMethod = null;

            equalityMethod = RuntimeHost.Binder.BindToMethod(left, "op_Equality", null, new object[] { left, right });
            if (equalityMethod != null)
            {
                return(equalityMethod.Invoke(null, new object[] { left, right }));
            }

            equalityMethod = RuntimeHost.Binder.BindToMethod(right, "op_Equality", null, new object[] { right, left });
            if (equalityMethod != null)
            {
                return(equalityMethod.Invoke(null, new object[] { right, left }));
            }

            equalityMethod = RuntimeHost.Binder.BindToMethod(left, "Equals", null, new object[] { right });
            if (equalityMethod != null)
            {
                return(equalityMethod.Invoke(null, new object[] { left, right }));
            }

            return(object.Equals(left, right));
        }
Пример #3
0
        public override void Evaluate(IScriptContext context)
        {
            constrExpr.Evaluate(context);

            IObjectBind call = (IObjectBind)context.Result;

            context.Result = RuntimeHost.Activator.CreateInstance(context, call);
        }
Пример #4
0
        public override IObjectBind GetMethod(string name, params object[] arguments)
        {
            IObjectBind bind = RuntimeHost.Binder.BindToMethod(instance, name, null, arguments);

            if (bind != null)
            {
                return(bind);
            }

            return(base.GetMethod(name, arguments));
        }
Пример #5
0
        private static object CallAppropriateMethod(IScriptContext context, object obj, string Name, Type[] genericArguments, object[] param)
        {
            IObjectBind methodBind = methodBind = RuntimeHost.Binder.BindToMethod(obj, Name, genericArguments, param);

            if (methodBind != null)
            {
                return(methodBind.Invoke(context, null));
            }

            throw MethodNotFoundException(Name, param);
        }
Пример #6
0
        private static void GetArrayValue(object obj, ScriptArrayResolution scriptArrayResolution, IScriptContext context)
        {
            scriptArrayResolution.Evaluate(context);
            object[]    param     = (object[])context.Result;
            IObjectBind indexBind = RuntimeHost.Binder.BindToIndex(obj, param, false);

            if (indexBind != null)
            {
                context.Result = indexBind.Invoke(context, null);
            }
            else
            {
                throw MethodNotFoundException("indexer[]", param);
            }
        }
Пример #7
0
        IObjectBind IObjectBinder.BindToIndex(object target, object[] arguments, bool setter)
        {
            IScriptable scriptable = target as IScriptable;

            if (scriptable != null)
            {
                IObjectBind bind = base.BindToIndex(scriptable.Instance, arguments, setter);
                if (bind != null)
                {
                    return(bind);
                }
            }

            return(base.BindToIndex(target, arguments, setter));
        }
Пример #8
0
        private static void SetArrayValue(object obj, ScriptArrayResolution scriptArrayResolution, IScriptContext context, object value)
        {
            scriptArrayResolution.Evaluate(context);

            object[] indexParameters  = (object[])context.Result;
            object[] setterParameters = new object[indexParameters.Length + 1];
            indexParameters.CopyTo(setterParameters, 0);
            setterParameters[indexParameters.Length] = value;

            IObjectBind setter = RuntimeHost.Binder.BindToIndex(obj, setterParameters, true);

            if (setter != null)
            {
                setter.Invoke(context, null);
                return;
            }

            throw MethodNotFoundException("setter", indexParameters);
        }
        public override void Evaluate(IScriptContext context)
        {
            expr.Evaluate(context);

            IEnumerable enumeration = context.Result as IEnumerable;
            IEnumerator enumerator  = null;

            if (enumeration != null)
            {
                enumerator = enumeration.GetEnumerator();
            }
            else
            {
                IObjectBind bind = RuntimeHost.Binder.BindToMethod(context.Result, "GetEnumerator", new Type[0], new object[0]);
                if (bind != null)
                {
                    enumerator = bind.Invoke(context, null) as IEnumerator;
                }
            }

            if (enumerator == null)
            {
                throw new ScriptException("GetEnumerator() method did not found in object: " + context.Result.ToString());
            }

            enumerator.Reset();

            while (enumerator.MoveNext())
            {
                context.SetItem(name.Text, enumerator.Current);
                statement.Evaluate(context);
                if (context.IsBreak() || context.IsReturn())
                {
                    context.SetBreak(false);
                    break;
                }
                if (context.IsContinue())
                {
                    context.SetContinue(false);
                }
            }
        }
        public IMemberBind GetMember(string name, params object[] arguments)
        {
            IObjectBind getter    = null;
            MethodInfo  getMethod = FindMethod("get_" + name);

            if (getMethod != null)
            {
                getter = new LateBoundMethod(getMethod, Target);
            }

            IObjectBind setter    = null;
            MethodInfo  setMethod = FindMethod("set_" + name);

            if (setMethod != null)
            {
                setter = new LateBoundMethod(setMethod, Target);
            }

            return(new InterfaceMember(getter, setter, Target));
        }
Пример #11
0
        IObjectBind IObjectBinder.BindToMethod(object target, string methodName, Type[] genericParameters, object[] arguments)
        {
            IScriptable scriptable = target as IScriptable;

            if (scriptable != null)
            {
                IObjectBind bind = scriptable.GetMethod(methodName, null);
                if (bind == null)
                {
                    bind = base.BindToMethod(scriptable.Instance, methodName, genericParameters, arguments);
                }
                else
                {
                    return(new DynamicMethodBind(scriptable, bind, arguments));
                }

                if (bind != null)
                {
                    return(bind);
                }
            }

            return(base.BindToMethod(target, methodName, genericParameters, arguments));
        }
Пример #12
0
 public DynamicMethodBind(IScriptable scriptable, IObjectBind dynamicMethod, object[] arguments)
 {
     this.scriptable = scriptable;
     this.dynamicMethod = dynamicMethod;
     this.arguments = arguments;
 }
 public InterfaceMember(IObjectBind getter, IObjectBind setter, object target)
 {
     this.getter = getter;
     this.setter = setter;
     Target      = target;
 }
Пример #14
0
 public InterfaceMember(IObjectBind getter, IObjectBind setter, object target)
 {
     this.getter = getter;
     this.setter = setter;
     Target = target;
 }
Пример #15
0
 public DynamicMethodBind(IScriptable scriptable, IObjectBind dynamicMethod, object[] arguments)
 {
     this.scriptable    = scriptable;
     this.dynamicMethod = dynamicMethod;
     this.arguments     = arguments;
 }
Пример #16
0
 public static object CreateInstance(this IObjectActivator activator, IScriptContext context, IObjectBind bind)
 {
     return(activator.CreateInstance(null, bind));
 }
Пример #17
0
 public object CreateInstance(IScriptContext context, IObjectBind bind)
 {
     return bind.Invoke(context, null);
 }
Пример #18
0
 public object CreateInstance(IScriptContext context, IObjectBind bind)
 {
     return(bind.Invoke(context, null));
 }