PointerType = 1 << 20,
InternalCompilerType = 1 << 21,
MissingType = 1 << 22,
+ Void = 1 << 23,
NestedMask = Class | Struct | Delegate | Enum | Interface,
GenericMask = Method | Class | Struct | Delegate | Interface,
- MaskType = Constructor | Event | Field | Method | Property | Indexer | Operator | Destructor | NestedMask,
- All = MaskType
+ MaskType = Constructor | Event | Field | Method | Property | Indexer | Operator | Destructor | NestedMask
}
[Flags]
public readonly MemberKind Kind;
public readonly AParametersCollection Parameters;
public readonly TypeSpec MemberType;
-
- int arity; // -1 to ignore the check
+ public readonly int Arity; // -1 to ignore the check
private MemberFilter (string name, MemberKind kind)
{
Kind = kind;
Parameters = null;
MemberType = null;
- arity = -1;
+ Arity = -1;
}
public MemberFilter (MethodSpec m)
Kind = MemberKind.Method;
Parameters = m.Parameters;
MemberType = m.ReturnType;
- arity = m.Arity;
+ Arity = m.Arity;
}
public MemberFilter (string name, int arity, MemberKind kind, AParametersCollection param, TypeSpec type)
Kind = kind;
Parameters = param;
MemberType = type;
- this.arity = arity;
+ this.Arity = arity;
}
public static MemberFilter Constructor (AParametersCollection param)
return false;
// Check arity when not disabled
- if (arity >= 0 && arity != other.Arity)
+ if (Arity >= 0 && Arity != other.Arity)
return false;
if (Parameters != null) {
//
public class MemberCache
{
+ [Flags]
enum StateFlags
{
HasConversionOperator = 1 << 1,
{
if (member.Kind == MemberKind.Operator) {
var dt = member.DeclaringType;
- if (dt.BuildinType == BuildinTypeSpec.Type.String || dt == TypeManager.delegate_type || dt == TypeManager.multicast_delegate_type) {
+ switch (dt.BuildinType) {
+ case BuildinTypeSpec.Type.String:
+ case BuildinTypeSpec.Type.Delegate:
+ case BuildinTypeSpec.Type.MulticastDelegate:
// Some core types have user operators but they cannot be used as normal
// user operators as they are predefined and therefore having different
// rules (e.g. binary operators) by not setting the flag we hide them for
// user conversions
// TODO: Should I do this for all core types ?
- } else if (name == Operator.GetMetadataName (Operator.OpType.Implicit) || name == Operator.GetMetadataName (Operator.OpType.Explicit)) {
- state |= StateFlags.HasConversionOperator;
- } else {
- state |= StateFlags.HasUserOperator;
+ break;
+ default:
+ if (name == Operator.GetMetadataName (Operator.OpType.Implicit) || name == Operator.GetMetadataName (Operator.OpType.Explicit)) {
+ state |= StateFlags.HasConversionOperator;
+ } else {
+ state |= StateFlags.HasUserOperator;
+ }
+
+ break;
}
}