Beispiel #1
0
        public TypeSymbol EmitLoad(ILBuilder il)
        {
            //if (_property.Getter == null)
            //    throw new InvalidOperationException();

            var stack = +1;
            var getter = _property.GetMethod;

            if (_holder != null)
            {
                Debug.Assert(!getter.IsStatic);
                _holder.EmitLoad(il);   // {holder}
                stack -= 1;
            }

            il.EmitOpCode(getter.IsVirtual ? ILOpCode.Callvirt : ILOpCode.Call, stack);
            il.EmitToken(getter, null, DiagnosticBag.GetInstance());

            //
            return getter.ReturnType;
        }
Beispiel #2
0
        public void EmitStore(ILBuilder il)
        {
            //if (_property.Setter == null)
            //    throw new InvalidOperationException();

            var stack = 0;
            var setter = _property.SetMethod;

            if (_holder != null)
            {
                stack -= 1;
            }

            //
            il.EmitOpCode(setter.IsVirtual ? ILOpCode.Callvirt : ILOpCode.Call, stack);
            il.EmitToken(setter, null, DiagnosticBag.GetInstance());

            //
            Debug.Assert(setter.ReturnType.SpecialType == SpecialType.System_Void);
        }
Beispiel #3
0
 void EmitOpCode(ILBuilder il, ILOpCode code)
 {
     il.EmitOpCode(code);
     il.EmitToken(_field, null, DiagnosticBag.GetInstance());    // .{field}
 }