public override BoundNode VisitDelegateCreationExpression(BoundDelegateCreationExpression node) { BoundSpillSequenceBuilder builder = null; var argument = VisitExpression(ref builder, node.Argument); return(UpdateExpression(builder, node.Update(argument, node.MethodOpt, node.IsExtensionMethod, node.Type))); }
public override BoundNode VisitDelegateCreationExpression(BoundDelegateCreationExpression node) { if (node.Argument.HasDynamicType()) { var loweredArgument = VisitExpression(node.Argument); // Creates a delegate whose instance is the delegate that is returned by the call-site and the method is Invoke. var loweredReceiver = _dynamicFactory.MakeDynamicConversion(loweredArgument, isExplicit: false, isArrayIndex: false, isChecked: false, resultType: node.Type).ToExpression(); return(new BoundDelegateCreationExpression(node.Syntax, loweredReceiver, methodOpt: null, isExtensionMethod: false, type: node.Type)); } if (node.Argument.Kind == BoundKind.MethodGroup) { var mg = (BoundMethodGroup)node.Argument; var method = node.MethodOpt; var oldSyntax = _factory.Syntax; _factory.Syntax = (mg.ReceiverOpt ?? mg).Syntax; var receiver = (!method.RequiresInstanceReceiver && !node.IsExtensionMethod) ? _factory.Type(method.ContainingType) : VisitExpression(mg.ReceiverOpt); _factory.Syntax = oldSyntax; return(node.Update(receiver, method, node.IsExtensionMethod, node.Type)); } return(base.VisitDelegateCreationExpression(node)); }
public override BoundNode VisitDelegateCreationExpression(BoundDelegateCreationExpression node) { BoundExpression argument = (BoundExpression)this.Visit(node.Argument); TypeSymbol type = this.VisitType(node.Type); if (argument.Kind != BoundKind.SpillSequence) { return(node.Update(argument, node.MethodOpt, node.IsExtensionMethod, type)); } var spill = (BoundSpillSequence)argument; return(RewriteSpillSequence(spill, node.Update( spill.Value, node.MethodOpt, node.IsExtensionMethod, type))); }
public override BoundNode VisitDelegateCreationExpression(BoundDelegateCreationExpression node) { BoundSpillSequence2 ss = null; var argument = VisitExpression(ref ss, node.Argument); return UpdateExpression(ss, node.Update(argument, node.MethodOpt, node.IsExtensionMethod, node.Type)); }
public override BoundNode VisitDelegateCreationExpression(BoundDelegateCreationExpression node) { BoundExpression argument = (BoundExpression)this.Visit(node.Argument); TypeSymbol type = this.VisitType(node.Type); if (argument.Kind != BoundKind.SpillSequence) { return node.Update(argument, node.MethodOpt, node.IsExtensionMethod, type); } var spill = (BoundSpillSequence)argument; return RewriteSpillSequence(spill, node.Update( spill.Value, node.MethodOpt, node.IsExtensionMethod, type)); }