/// <summary> /// Generate IL for the getter. /// </summary> /// <param name="stubField">The proxy stub field.</param> /// <param name="dbKey">The database key of this property.</param> /// <param name="propMetadata">The type metadata for this property.</param> /// <param name="ilGenerator">The getter's IL generator.</param> /// <param name="readOnly">True if the proxy from the getter is readonly.</param> private static void GenerateGetterIL( FieldInfo stubField, string dbKey, TypeMetadata propMetadata, ILGenerator ilGenerator, bool readOnly) { // this._stub. ilGenerator.Emit(OpCodes.Ldarg_0); ilGenerator.Emit(OpCodes.Ldfld, stubField); ilGenerator.Emit(OpCodes.Ldstr, dbKey); // this._stub.?Getter(dbKey). propMetadata.CallStubGetter(ilGenerator, readOnly); // return ?; ilGenerator.Emit(OpCodes.Ret); }
/// <summary> /// Generate IL for GetElemAt method. /// </summary> /// <param name="elemTypeMetadata">The element type metadata.</param> /// <param name="ilGenerator">The method's IL generator.</param> /// <param name="readOnly">True if the property is readonly.</param> private static void GenerateGetElemAtIL( TypeMetadata elemTypeMetadata, ILGenerator ilGenerator, bool readOnly) { // this._stub. ilGenerator.Emit(OpCodes.Ldarg_0); ilGenerator.Emit(OpCodes.Ldfld, typeof(ListProxy <>).MakeGenericType(elemTypeMetadata.Type).GetField("stub", BindingFlags.NonPublic | BindingFlags.Instance)); // this.ElemPrefix(index). ilGenerator.Emit(OpCodes.Ldarg_0); ilGenerator.Emit(OpCodes.Ldarg_1); ilGenerator.Emit(OpCodes.Call, typeof(ListProxy <>).MakeGenericType(elemTypeMetadata.Type).GetMethod("GetElemDbKey", BindingFlags.NonPublic | BindingFlags.Instance)); // this._stub.?Getter(elemPrefix). elemTypeMetadata.CallStubGetter(ilGenerator, readOnly); // return ?; ilGenerator.Emit(OpCodes.Ret); }