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); }
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)); }
public override void Evaluate(IScriptContext context) { constrExpr.Evaluate(context); IObjectBind call = (IObjectBind)context.Result; context.Result = RuntimeHost.Activator.CreateInstance(context, call); }
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)); }
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); }
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); } }
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)); }
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)); }
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)); }
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; }
public InterfaceMember(IObjectBind getter, IObjectBind setter, object target) { this.getter = getter; this.setter = setter; Target = target; }
public DynamicMethodBind(IScriptable scriptable, IObjectBind dynamicMethod, object[] arguments) { this.scriptable = scriptable; this.dynamicMethod = dynamicMethod; this.arguments = arguments; }
public static object CreateInstance(this IObjectActivator activator, IScriptContext context, IObjectBind bind) { return(activator.CreateInstance(null, bind)); }
public object CreateInstance(IScriptContext context, IObjectBind bind) { return bind.Invoke(context, null); }
public object CreateInstance(IScriptContext context, IObjectBind bind) { return(bind.Invoke(context, null)); }