public DescriptorVariable(IClimbStore store, Expression processor, Expression owner, IStateMember member, Type runtimeType) { Type descriptorType = DescriptorExtensions.GetDescriptorType(member, runtimeType); Type memberLocalType = typeof(MemberLocal <,>).MakeGenericType(member.MemberType, runtimeType); _reference = Expression.Variable(descriptorType, member.Name.FirstLowerCase() + "Descriptor"); object memberLocal = Activator.CreateInstance(memberLocalType, store, member); ConstructorInfo constructor = descriptorType.GetConstructors().FirstOrDefault(); ParameterInfo ownerParameter = constructor.GetParameters()[1]; Type ownerParameterType = ownerParameter.ParameterType; NewExpression creation = Expression.New(constructor, processor, owner.Convert(ownerParameterType), memberLocal.Constant(), store.Constant()); BinaryExpression assign = Expression.Assign(_reference, creation); _descriptorDeclaration = assign; }
// TRuntime is Enum! public EnumReadWriteDescriptor(object processor, object owner, MemberLocal <TField, TRuntime> member, IClimbStore climbStore) : base(processor, owner, member, climbStore) { }
// TField is Enum! public EnumWriteOnlyDescriptor(object processor, object owner, MemberLocal <TField, TField> member, IClimbStore climbStore) : base(processor, owner, member, climbStore) { }
public RouteDelegateFactory(Type processorType, IMethodMapper methodMapper, IClimbStore climbStore, IExpressionCompiler compiler) { _processorType = processorType; _climbStore = climbStore; _specialMutator = new SpecialMethodMutator(processorType); _methodMapper = methodMapper; _compiler = compiler; }
protected ValueDescriptor(object processor, object owner, MemberLocal <TField, TRuntime> member, IClimbStore climbStore) { _owner = owner; _member = member; _climbStore = climbStore; _processor = processor; _isStructMember = Member.Member.OwnerType.IsValueType; }
public MemberLocal(IClimbStore climbStore, IStateMember member) { _member = member; _getter = new Lazy <Func <object, TField> >(() => climbStore.GetGetter <TField>(member)); _setter = new Lazy <Action <object, TField> >(() => climbStore.GetSetter <TField>(member)); _climb = new Lazy <ClimbDelegate <TRuntime> > (() => climbStore.GetClimb <TRuntime>(typeof(TRuntime))); _structClimb = new Lazy <ClimbDelegate <object> > (() => climbStore.GetClimb <object>(typeof(TRuntime))); }
public DescriptorWriter(IClimbStore store) { _store = store; }