public Runtime() { unaryOps = new Dictionary<ExpressionType, UnaryOperationBinder>(); binaryOps = new Dictionary<ExpressionType, BinaryOperationBinder>(); InvokeCallSite = new InvokeBinder(); ConvertCallSite = new ConvertBinder(); GetIndexCallSite = new GetIndexBinder(); SetIndexCallSite = new SetIndexBinder(); BuiltIns = new Dictionary<string, Expression>(); RegisterClass("Foo", null); RegisterFunction("range", args => { return Iter.Range(((Number)args[0]).Value, ((Number)args[1]).Value); }); RegisterFunction("using", args => { var filename = args[0].ToString(); var scanner = new Scanner(File.ReadAllText(filename)); var parser = new Parser(this, scanner); var expr = parser.Parse(); var func = expr.Compile(); return func(); }); RegisterFunction("print", args => Console.WriteLine(string.Join(" ", args))); RegisterModule("maths", new Dictionary<string, Any> { {"PI", new Number(Math.PI)}, {"cos", new Function(args => new Number(Math.Cos(((Number) args[0]).Value)))}, {"sin", new Function(args => new Number(Math.Sin(((Number) args[0]).Value)))}, }); }
/// <summary> /// Gets a Record Value by position Index. /// </summary> public override bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result) { result = this.GetStoredValue(GetFieldDefinitionFromIndexer(indexes)); return(true); }
public override bool TryGetIndex( GetIndexBinder binder, object[] indexes, out object result) { if (indexes.Length == 1) { var name = indexes[0].ToString(); if (MethodNames.Contains(name)) { result = null; return(false); } switch (Def.ExtendedColumnTypes.Get(name)) { case "Class": result = Model.GetClass(name); return(true); case "Num": result = Model.GetNum(name).Value; return(true); case "Date": result = Model.GetDate(name); return(true); case "Description": result = Model.GetDescription(name); return(true); case "Check": result = Model.GetCheck(name); return(true); } switch (name) { case nameof(BaseItemModel.Ver): result = Model.Ver; return(true); case nameof(BaseItemModel.Creator): result = Model.Creator.Id; return(true); case nameof(BaseItemModel.Updator): result = Model.Updator.Id; return(true); case nameof(BaseItemModel.CreatedTime): result = Model.CreatedTime.Value; return(true); case nameof(BaseItemModel.UpdatedTime): result = Model.UpdatedTime.Value; return(true); case nameof(BaseItemModel.VerUp): result = Model.VerUp; return(true); case nameof(BaseItemModel.SiteId): result = Model.SiteId; return(true); case nameof(BaseItemModel.Body): result = Model.Body; return(true); case nameof(BaseItemModel.Title): result = Model.Title.Value; return(true); } if (Model is IssueModel issueModel) { switch (name) { case nameof(IssueModel.IssueId): result = issueModel.IssueId; return(true); case nameof(IssueModel.StartTime): result = issueModel.StartTime; return(true); case nameof(IssueModel.CompletionTime): result = issueModel.CompletionTime.Value; return(true); case nameof(IssueModel.WorkValue): result = issueModel.WorkValue.Value; return(true); case nameof(IssueModel.ProgressRate): result = issueModel.ProgressRate.Value; return(true); case nameof(IssueModel.RemainingWorkValue): result = issueModel.RemainingWorkValue; return(true); case nameof(IssueModel.Status): result = issueModel.Status.Value; return(true); case nameof(IssueModel.Manager): result = issueModel.Manager.Id; return(true); case nameof(IssueModel.Owner): result = issueModel.Owner.Id; return(true); case nameof(IssueModel.Locked): result = issueModel.Locked; return(true); case nameof(IssueModel.ReadOnly): result = issueModel.ReadOnly; return(true); } } else if (Model is ResultModel resultModel) { switch (name) { case nameof(ResultModel.ResultId): result = resultModel.ResultId; return(true); case nameof(ResultModel.Status): result = resultModel.Status.Value; return(true); case nameof(ResultModel.Manager): result = resultModel.Manager.Id; return(true); case nameof(ResultModel.Owner): result = resultModel.Owner.Id; return(true); case nameof(ResultModel.Locked): result = resultModel.Locked; return(true); case nameof(ResultModel.ReadOnly): result = resultModel.ReadOnly; return(true); } } } result = null; return(false); }
public override bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result) { return(this.TryGetMemberCommon((string)indexes[0], out result)); }
public override bool TryGetIndex(GetIndexBinder binder, object[] indices, out object result) { return(TryWrappedBindAndInvoke(binder, indices, out result)); }
public virtual bool TryGetIndex(T instance, GetIndexBinder binder, object[] indexes, out object result) { result = null; return(false); }
public override DynamicMetaObject BindGetIndex(GetIndexBinder binder, DynamicMetaObject[] indexes) { ContractUtils.RequiresNotNull(binder, "binder"); return binder.FallbackGetIndex(UnwrapSelf(), indexes); }
/// <summary> /// Performs the binding of the dynamic get index operation. /// </summary> /// <param name="binder">An instance of the <see cref="GetIndexBinder"/> that represents the details of the dynamic operation.</param> /// <param name="indexes">An array of <see cref="DynamicMetaObject"/> instances - indexes for the get index operation.</param> /// <returns>The new <see cref="DynamicMetaObject"/> representing the result of the binding.</returns> public virtual DynamicMetaObject BindGetIndex(GetIndexBinder binder, DynamicMetaObject[] indexes) { ContractUtils.RequiresNotNull(binder, "binder"); return binder.FallbackGetIndex(this, indexes); }
public override DynamicMetaObject BindGetIndex(GetIndexBinder binder, DynamicMetaObject[] indexes) { return(BindGetMember(indexes[0].Value, binder, BindingRestrictions.GetInstanceRestriction(indexes[0].Expression, indexes[0].Value), () => base.BindGetIndex(binder, indexes))); }
public override DynamicMetaObject BindGetIndex(GetIndexBinder binder, DynamicMetaObject[] indexes) { ContractUtils.RequiresNotNull(binder, "binder"); return(binder.FallbackGetIndex(UnwrapSelf(), indexes)); }
public override bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result) { return(vals.TryGetValue((string)indexes[0], out result)); }
public override bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result) { return(this.fields.TryGetValue(indexes[0] as string, out result)); }
public override bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result) { return(TryHandleDynamicCall(indexes[0].ToString(), out result)); }
public override bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result) { return(base.TryGetIndex(binder, indexes, out result)); }
public sealed override bool TryGetIndex(GetIndexBinder b, object[] i, out object r) => ByMemberName(out r, (string)i[0]);
public override bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result) { switch (indexes.Length) { case 1: if (indexes[0] is int) { int value = _oneDimension[(int)indexes[0]]; result = value; return true; } break; case 2: if (indexes[0] is int && indexes[1] is int) { string value = _twoDimensions[Tuple.Create((int)indexes[0], (int)indexes[1])]; result = value; return true; } break; } result = null; return false; }
public override bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result) { IArrayType dataType = (IArrayType)base.DataType; return(TryGetIndex(this, dataType, binder, indexes, out result)); }
public override bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result) { result = ToValue(IsArray ? _data.Array[(int)indexes[0]] : _data.Dictionary[(string)indexes[0]]); return(true); }
public override DynamicMetaObject BindGetIndex(GetIndexBinder binder, DynamicMetaObject[] indexes) { if (IsOverridden("TryGetIndex")) { return CallMethodWithResult("TryGetIndex", binder, GetArgArray(indexes), (e) => binder.FallbackGetIndex(this, indexes, e)); } return base.BindGetIndex(binder, indexes); }
public override bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result) { result = this[indexes[0].ToString()]; return(true); }
public override DynamicMetaObject BindGetIndex( GetIndexBinder binder, DynamicMetaObject[] indexes ) { DEBUG.IndentLine( "\n-- BindGetIndex: {0}", TypeHelper.ToString( MetaList2List( indexes ), "[]" ) ); var obj = (DynamicNode)this.Value; var node = new DynamicNode.GetIndex( obj, MetaList2List( indexes ) ) { _Parser = obj._Parser }; obj._Parser._LastNode = node; var par = Expression.Variable( typeof( DynamicNode ), "ret" ); var exp = Expression.Block( new ParameterExpression[] { par }, Expression.Assign( par, Expression.Constant( node ) ) ); DEBUG.Unindent(); return new DynamicMetaNode( exp, this.Restrictions, node ); }
public override DynamicMetaObject BindGetIndex(GetIndexBinder binder, DynamicMetaObject[] indexes) { return(BindGetOrInvoke(indexes, binder.CallInfo) ?? base.BindGetIndex(binder, indexes)); }
public override DynamicMetaObject BindGetIndex(GetIndexBinder binder, DynamicMetaObject[] indexes) { return(binder.FallbackGetIndex(_baseMetaObject, indexes, AddTypeRestrictions(_metaObject.BindGetIndex(binder, indexes)))); }
public override bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result) { return(GetMember(indexes[0].ToString(), out result)); }
public override DynamicMetaObject BindGetIndex(GetIndexBinder binder, DynamicMetaObject[] indexes) { return(scriptItem.PostProcessBindResult(metaDynamic.BindGetIndex(binder, indexes))); }
public override bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result) { return((IsArray) ? TryGet(xml.Elements().ElementAtOrDefault((int)indexes[0]), out result) : TryGet(xml.Element((string)indexes[0]), out result)); }
// TODO: access multi-dimesional // https://stackoverflow.com/questions/2783502/c-sharp-using-the-dynamic-keyword-to-access-properties-via-strings-without-refle public override bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result) { result = AsDynamic[indexes[0]]; return(true); }
/// <summary> /// /// </summary> /// <param name="binder"></param> /// <param name="indexes"></param> /// <param name="result"></param> /// <returns></returns> public override bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result) { object index0 = indexes[0]; return(TryGetColumn(index0, out result)); }
public sealed override DynamicMetaObject BindGetIndex(GetIndexBinder binder, DynamicMetaObject[] indexes) => VariantValue.BindGetIndex(binder, indexes);
public override bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result) { result = GetTableValue(indexes[0].ToString()); return(true); }
public override DynamicMetaObject BindGetIndex(GetIndexBinder binder, DynamicMetaObject[] indexes) { return(InteropBinder.GetIndex.Bind(new InteropBinder.GetIndex(Scope, binder.CallInfo), this, indexes)); }
public override DynamicMetaObject BindGetIndex(GetIndexBinder binder, DynamicMetaObject[] indexes) { return(AddRestrictions(_metaForwardee.BindGetIndex(binder, indexes))); }
public override DynamicMetaObject BindGetIndex(GetIndexBinder binder, DynamicMetaObject[] indexes) { return BindGetOrInvoke(indexes, binder.CallInfo) ?? base.BindGetIndex(binder, indexes); }
public override bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result) { result = Instance; return(true); }
public static bool TryBindGetIndex(GetIndexBinder binder, DynamicMetaObject instance, DynamicMetaObject[] args, out DynamicMetaObject result) { ContractUtils.RequiresNotNull(binder, "binder"); ContractUtils.RequiresNotNull(instance, "instance"); ContractUtils.RequiresNotNull(args, "args"); if (TryGetMetaObject(ref instance)) { // // Demand Full Trust to proceed with the binding. // new PermissionSet(PermissionState.Unrestricted).Demand(); result = instance.BindGetIndex(binder, args); return true; } else { result = null; return false; } }
public override DynamicMetaObject BindGetIndex(GetIndexBinder binder, DynamicMetaObject[] indexes) => this;
public virtual bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result) { result = null; return false; }
/// <summary> /// Create call expression to any indexer that matches in the library. /// </summary> /// <param name="binder"></param> /// <param name="args"></param> /// <param name="dynamicObjectType">The LimitType property or value.GetType() of the dynamic object</param> /// <param name="dynamicObjectExpression">the Expression property of the dynamic object</param> /// <returns>new DynamicMetaObject or null</returns> public virtual DynamicMetaObject BindGetIndex(GetIndexBinder binder, DynamicMetaObject[] args, Type dynamicObjectType, Expression dynamicObjectExpression) { Type selfType = dynamicObjectType; foreach (PropertyInfo pi in Indexers) { MethodInfo mi = pi.GetGetMethod(); if (mi == null) { continue; } ParameterInfo[] pis = mi.GetParameters(); // Test instance type matches if (!mi.DeclaringType.IsAssignableFrom(selfType)) { continue; } // Test if other parameters match arguments bool match = true; for (int i = 0; i < args.Length; i++) { Type piType = pis[i].ParameterType; DynamicMetaObject arg = args[i]; bool argTypeMatches = arg.RuntimeType != null && piType.IsAssignableFrom(arg.RuntimeType) | arg.LimitType != null && piType.IsAssignableFrom(arg.LimitType) | arg.HasValue && piType.IsAssignableFrom(arg.Value.GetType()) | arg.Expression != null && piType.IsAssignableFrom(arg.Expression.Type); match &= argTypeMatches; if (!match) { break; } } if (!match) { continue; } Expression selfExpression = dynamicObjectExpression; if (!selfExpression.Type.Equals(mi.DeclaringType)) { selfExpression = Expression.Convert(selfExpression, mi.DeclaringType); } Expression[] argExps = new Expression[args.Length]; BindingRestrictions restrictions = BindingRestrictions.GetTypeRestriction(dynamicObjectExpression, dynamicObjectType); for (int i = 0; i < args.Length; i++) { argExps[i] = args[i].Expression.Type.Equals(pis[i].ParameterType) ? args[i].Expression : Expression.Convert(args[i].Expression, pis[i].ParameterType); restrictions = restrictions.Merge(BindingRestrictions.GetTypeRestriction(args[i].Expression, pis[i].ParameterType)); } Expression exp = mi.IsStatic ? Expression.Call(mi, argExps) : Expression.Call(selfExpression, mi, argExps); //restrictions = restrictions.Merge(BindingRestrictions.GetTypeRestriction(exp, mi.ReturnType)); return(new DynamicMetaObject(exp, restrictions)); } return(null); }
public override DynamicMetaObject/*!*/ BindGetIndex(GetIndexBinder/*!*/ binder, DynamicMetaObject/*!*/[]/*!*/ indexes) { return PythonProtocol.Index(binder, PythonIndexType.GetItem, ArrayUtils.Insert(this, indexes)); }
public override DynamicMetaObject BindGetIndex(GetIndexBinder binder, DynamicMetaObject[] indexes) { return(IsOverridden("TryGetIndex") ? CallMethodWithResult("TryGetIndex", binder, GetArgArray(indexes), e => binder.FallbackGetIndex(this, indexes, e)) : base.BindGetIndex(binder, indexes)); }
public override DynamicMetaObject/*!*/ BindGetIndex(GetIndexBinder/*!*/ binder, DynamicMetaObject/*!*/[]/*!*/ indexes) { PerfTrack.NoteEvent(PerfTrack.Categories.Binding, "OldClass GetIndex" + indexes.Length); PerfTrack.NoteEvent(PerfTrack.Categories.BindingTarget, "OldClass GetIndex"); return PythonProtocol.Index(binder, PythonIndexType.GetItem, ArrayUtils.Insert(this, indexes)); }
public override DynamicMetaObject BindGetIndex(GetIndexBinder binder, DynamicMetaObject[] indexes) { ContractUtils.RequiresNotNull(binder, "binder"); ComMethodDesc getItem; if (_self.TryGetGetItem(out getItem)) { bool[] isByRef = ComBinderHelpers.ProcessArgumentsForCom(ref indexes); return BindComInvoke(indexes, getItem, binder.CallInfo , isByRef); } return base.BindGetIndex(binder, indexes); }