public override void EmitStatement(EmitContext ec) { if (conditionalAccessReceiver) { ec.ConditionalAccess = new ConditionalAccessContext(type, ec.DefineLabel()) { Statement = true }; } var call = new CallEmitter(); call.InstanceExpression = InstanceExpr; call.EmitStatement(ec, method, arguments, loc); if (conditionalAccessReceiver) { ec.CloseConditionalAccess(null); } }
public override void Emit(EmitContext ec) { if (conditionalAccessReceiver) { ec.ConditionalAccess = new ConditionalAccessContext(type, ec.DefineLabel()); } // // Invocation on delegates call the virtual Invoke member // so we are always `instance' calls // var call = new CallEmitter(); call.InstanceExpression = InstanceExpr; call.Emit(ec, method, arguments, loc); if (conditionalAccessReceiver) { ec.CloseConditionalAccess(type.IsNullableType && type != method.ReturnType ? type : null); } }
public override void Emit(EmitContext ec) { if (conditional_access_receiver) { ec.ConditionalAccess = new ConditionalAccessContext(type, ec.DefineLabel()); } if (method_group.InstanceExpression == null) { ec.EmitNull(); } else { var ie = new InstanceEmitter(method_group.InstanceExpression, false); ie.Emit(ec, method_group.ConditionalAccess); } var delegate_method = method_group.BestCandidate; // Any delegate must be sealed if (!delegate_method.DeclaringType.IsDelegate && delegate_method.IsVirtual && !method_group.IsBase) { ec.Emit(OpCodes.Dup); ec.Emit(OpCodes.Ldvirtftn, delegate_method); } else { ec.Emit(OpCodes.Ldftn, delegate_method); } ec.Emit(OpCodes.Newobj, constructor_method); if (conditional_access_receiver) { ec.CloseConditionalAccess(null); } }
public override void EmitStatement (EmitContext ec) { if (conditionalAccessReceiver) { ec.ConditionalAccess = new ConditionalAccessContext (type, ec.DefineLabel ()) { Statement = true }; } var call = new CallEmitter (); call.InstanceExpression = InstanceExpr; call.EmitStatement (ec, method, arguments, loc); if (conditionalAccessReceiver) ec.CloseConditionalAccess (null); }
public override void Emit (EmitContext ec) { if (conditionalAccessReceiver) { ec.ConditionalAccess = new ConditionalAccessContext (type, ec.DefineLabel ()); } // // Invocation on delegates call the virtual Invoke member // so we are always `instance' calls // var call = new CallEmitter (); call.InstanceExpression = InstanceExpr; call.Emit (ec, method, arguments, loc); if (conditionalAccessReceiver) ec.CloseConditionalAccess (type.IsNullableType && type != method.ReturnType ? type : null); }
public override void Emit (EmitContext ec) { if (conditional_access_receiver) ec.ConditionalAccess = new ConditionalAccessContext (type, ec.DefineLabel ()); if (method_group.InstanceExpression == null) { ec.EmitNull (); } else { var ie = new InstanceEmitter (method_group.InstanceExpression, false); ie.Emit (ec, method_group.ConditionalAccess); } var delegate_method = method_group.BestCandidate; // Any delegate must be sealed if (!delegate_method.DeclaringType.IsDelegate && delegate_method.IsVirtual && !method_group.IsBase) { ec.Emit (OpCodes.Dup); ec.Emit (OpCodes.Ldvirtftn, delegate_method); } else { ec.Emit (OpCodes.Ldftn, delegate_method); } ec.Emit (OpCodes.Newobj, constructor_method); if (conditional_access_receiver) ec.CloseConditionalAccess (null); }