public void GenerateGet(Expression target, MethodBodyGenerator generator, MethodCompileOption option)
 {
     if ((option & MethodCompileOption.EmitStartAddress) == MethodCompileOption.EmitStartAddress && property.PropertyType.IsValueType)
     {
         var temp = generator.CreateTemporaryVariable(Type);
         generator.Call(Getter);
         generator.StoreVariable(temp);
         generator.LoadAddressOfVariable(temp);
         return;
     }
     generator.Call(Getter);
 }
        public void GenerateSet(Expression value, MethodBodyGenerator generator, MethodCompileOption option)
        {
            if ((option & MethodCompileOption.Dupplicate) == 0)
            {
                generator.Call(Setter);
                return;
            }
            generator.Duplicate();
            var temp = generator.CreateTemporaryVariable(value.Type);

            generator.StoreVariable(temp);
            generator.Call(Setter);
            generator.LoadVariable(temp);
        }
Esempio n. 3
0
        public void GenerateSet(Expression value, MethodBodyGenerator generator, MethodCompileOption option)
        {
            var field = this.field;

            if (field.IsInitOnly && !(generator.Method is ConstructorInfo))
            {
                throw new FieldAccessException("A readonly field cannot be assigned to (except in a constructor of the class in which the field is defined or a variable initializer))");
            }
            if (field is Generators.FieldGenerator)
            {
                field = ((Generators.FieldGenerator)field).FieldInfo;
            }
            if ((option & MethodCompileOption.Dupplicate) == 0)
            {
                generator.StoreField(field);
                return;
            }
            generator.Duplicate();
            var temp = generator.CreateTemporaryVariable(value.Type);

            generator.StoreVariable(temp);
            generator.StoreField(field);
            generator.LoadVariable(temp);
        }