| File: Microsoft\CSharp\RuntimeBinder\Semantics\Tree\MemberGroup.cs | Web Access |
| Project: src\runtime\src\libraries\Microsoft.CSharp\src\Microsoft.CSharp.csproj (Microsoft.CSharp) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Diagnostics; using Microsoft.CSharp.RuntimeBinder.Syntax; namespace Microsoft.CSharp.RuntimeBinder.Semantics { internal sealed class ExprMemberGroup : ExprWithType { public ExprMemberGroup(EXPRFLAG flags, Name name, TypeArray typeArgs, SYMKIND symKind, CType parentType, Expr optionalObject, CMemberLookupResults memberLookupResults) : base(ExpressionKind.MemberGroup, MethodGroupType.Instance) { Debug.Assert( (flags & ~(EXPRFLAG.EXF_CTOR | EXPRFLAG.EXF_INDEXER | EXPRFLAG.EXF_OPERATOR | EXPRFLAG.EXF_NEWOBJCALL | EXPRFLAG.EXF_DELEGATE | EXPRFLAG.EXF_USERCALLABLE | EXPRFLAG.EXF_MASK_ANY)) == 0); Flags = flags; Name = name; TypeArgs = typeArgs ?? TypeArray.Empty; SymKind = symKind; ParentType = parentType; OptionalObject = optionalObject; MemberLookupResults = memberLookupResults; } public Name Name { get; } public TypeArray TypeArgs { get; } public SYMKIND SymKind { get; } // The type containing the members. This may be a TypeParameterType or an AggregateType. // This may be NULL (if types is not NULL). // This is normally NULL - meaning the particular member // is unknown. For the invoke method on a delegate it is typically known. // After binding the group to arguments, this is set to the meth sym that is bound. // The object expression. NULL for a static invocation. public Expr OptionalObject { get; set; } // The owning call of this member group. NEVER visit this thing. // The list of the methods that the memgroup is binding to. This list is formulated after binding // the name of the method. When we've attempted to bind the arguments, we populate the MethPropWithInst list. public CMemberLookupResults MemberLookupResults { get; } public CType ParentType { get; } public bool IsDelegate => (Flags & EXPRFLAG.EXF_DELEGATE) != 0; } }