public static bool FindMember(this System.Type type, string name, BindingFlags flags, out IBinder binder) { if (type is null) { binder = null; return(false); } var properties = type.GetProperties(flags); for (int i = 0; i < properties.Length; i++) { var p = properties[i]; var data = (System.Attribute[])p.GetCustomAttributes(typeof(RegisterAttribute), false); if (data.Length > 0 && data[0].Match(name)) { binder = new PropertyBinder(p); return(true); } } var fields = type.GetFields(flags); for (int i = 0; i < fields.Length; i++) { var f = fields[i]; var data = (System.Attribute[])f.GetCustomAttributes(typeof(RegisterAttribute), false); if (data.Length > 0 && data[0].Match(name)) { binder = new FieldBinder(f); return(true); } } return(FindMember(type.BaseType, name, flags, out binder)); }
internal BindContext(FieldBinder field, MethodBinder method, LocalBinder local, ArgBinder arg) { this.field = field; this.method = method; this.local = local; this.arg = arg; }
public FieldData(object relation, int index, TParent parent, TValue value, Delegate binder) { this.Relation = relation; this.Index = index; this.Parent = parent; this.Value = value; this.Binder = (FieldBinder <TParent, TValue>)binder; }
private Expression Translate(Expression expression) { var rootQueryable = new RootQueryableFinder().Find(expression); var elementType = ((IQueryable)((ConstantExpression)rootQueryable).Value).ElementType; expression = PartialEvaluator.Evaluate(expression, CanBeEvaluatedLocally); expression = new FieldBinder().Bind(expression, elementType); expression = new QueryBinder(this, expression).Bind(expression); expression = new AggregateRewriter().Rewrite(expression); expression = new RedundantFieldRemover().Remove(expression); expression = new RedundantSubqueryRemover().Remove(expression); expression = new OrderByRewriter().Rewrite(expression); expression = new RedundantFieldRemover().Remove(expression); expression = new RedundantSubqueryRemover().Remove(expression); return(expression); }
public FieldIdTests() { this.binder = new FieldBinder(this.binderProvider); }
public RequirednessTests() { this.binder = new FieldBinder(this.binderProvider); }
public FieldIdTests() { this.binder = new FieldBinder(this.containerBinder, this.binderProvider); }
internal ILData(ILInstructionsAttribute atrib, FieldBinder fields, MethodBinder methods, LocalBinder locals, ArgBinder args, Pass pass) { //int ct = 0; this.canEmit = false; this.localDatas = new(); this.instructionEmitters = new(); foreach (var v in locals.arr) { this.localDatas.Add(v); } var stream = new InstrStream(atrib); var bindContext = new BindContext(fields, methods, locals, args); var labelManager = this.lblMgr = new LabelManager(); labelManager.logger = pass.logger; var currentLabels = new List <String>(); while (!stream.IsFinished()) { while (stream.Read(out LabelToken tok)) { stream.Advance(1); currentLabels.Add(tok.name); } if (stream.Read(out Op op)) { stream.Advance(1); var emitter = pass.OpToEmitter(op, stream, labelManager.AddCallback, bindContext); if (emitter is null) { //pass.logger.Error("No emitter produced"); return; } //pass.logger.Message($"Successfully got emitter"); var ctx = new EmitterContext(emitter); //pass.logger.Message($"Successfully got emitcontext"); this.instructionEmitters.Add(ctx); //pass.logger.Message($"Successfully added emitcontext, handling labels"); foreach (var l in currentLabels) { //pass.logger.Message($"Applying label {l}"); if (!labelManager.LabelCreated(l, ctx)) { pass.logger.Error("Duplicate label"); return; } } currentLabels.Clear(); } else { pass.logger.Error("Expected Op or Label"); return; } } //pass.logger.Message($"{ct++}"); pass.logger.Message($"Building emit data successful"); this.canEmit = true; }
public IdentifierTests() { this.binder = new FieldBinder(this.containerBinder, this.binderProvider); }