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; }
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); }
void EmitOpCode(ILBuilder il, ILOpCode code) { il.EmitOpCode(code); il.EmitToken(_field, null, DiagnosticBag.GetInstance()); // .{field} }