예제 #1
0
        internal LocalBuilder EmitLoadMember(EmitContext ec, LocalBuilder local)
        {
            ec.EmitLoadSubject(local);

            return(member.OnFieldOrProperty <LocalBuilder> (
                       field => EmitLoadField(ec, field),
                       prop => EmitLoadProperty(ec, prop)));
        }
예제 #2
0
        private void EmitPropertyAccess(EmitContext ec, PropertyInfo property)
        {
            MethodInfo getMethod = property.GetGetMethod(true);

            if (!getMethod.IsStatic)
            {
                ec.EmitLoadSubject(this.expression);
            }
            ec.EmitCall(getMethod);
        }
        void EmitPropertyAccess(EmitContext ec, PropertyInfo property)
        {
            var getter = property.GetGetMethod(true);

            if (!getter.IsStatic)
            {
                ec.EmitLoadSubject(expression);
            }

            ec.EmitCall(getter);
        }
예제 #4
0
 private void EmitFieldAccess(EmitContext ec, FieldInfo field)
 {
     if (!field.IsStatic)
     {
         ec.EmitLoadSubject(this.expression);
         ec.ig.Emit(OpCodes.Ldfld, field);
     }
     else
     {
         ec.ig.Emit(OpCodes.Ldsfld, field);
     }
 }
예제 #5
0
        private void EmitPropertyAssignment(EmitContext ec, PropertyInfo property, LocalBuilder local)
        {
            MethodInfo setMethod = property.GetSetMethod(true);

            if (setMethod == null)
            {
                throw new InvalidOperationException();
            }
            ec.EmitLoadSubject(local);
            this.expression.Emit(ec);
            ec.EmitCall(setMethod);
        }
예제 #6
0
 internal LocalBuilder EmitLoadMember(EmitContext ec, LocalBuilder local)
 {
     ec.EmitLoadSubject(local);
     return(member.OnFieldOrProperty((FieldInfo field) => EmitLoadField(ec, field), (PropertyInfo prop) => EmitLoadProperty(ec, prop)));
 }
예제 #7
0
 void EmitFieldAssignment(EmitContext ec, FieldInfo field, LocalBuilder local)
 {
     ec.EmitLoadSubject(local);
     expression.Emit(ec);
     ec.ig.Emit(OpCodes.Stfld, field);
 }