public override bool Equals(object obj)
        {
            TypeRefDefinition t = obj as TypeRefDefinition;

            if (t == null)
            {
                return(false);
            }

            if (t.IsBasic != IsBasic ||
                t.IsConstantArray != IsConstantArray ||
                t.IsPointer != IsPointer ||
                t.IsReference != IsReference)
            {
                return(false);
            }

            if (IsPointer || IsReference || IsConstantArray)
            {
                return(t.Referenced.Equals(Referenced));
            }

            return(string.Equals(t.Name, Name, StringComparison.Ordinal));
        }
 public MethodDefinition(string name, params ParameterDefinition[] parameters)
     : base(name)
 {
     Parameters = parameters;
     ReturnType = new TypeRefDefinition();
 }
Exemplo n.º 3
0
 public FieldDefinition(string name, TypeRefDefinition type)
     : base(name)
 {
     Type = type;
 }
        public TypeRefDefinition(ClangSharp.Type type)
            : base(GetName(type))
        {
            switch (type.TypeKind)
            {
            case ClangSharp.Type.Kind.Void:
            case ClangSharp.Type.Kind.Bool:
            case ClangSharp.Type.Kind.CharS:
            case ClangSharp.Type.Kind.Double:
            case ClangSharp.Type.Kind.Float:
            case ClangSharp.Type.Kind.Int:
            case ClangSharp.Type.Kind.UChar:
            case ClangSharp.Type.Kind.UInt:
            case ClangSharp.Type.Kind.WChar:
            case ClangSharp.Type.Kind.SChar:
            case ClangSharp.Type.Kind.Long:
            case ClangSharp.Type.Kind.LongLong:
            case ClangSharp.Type.Kind.Short:
            case ClangSharp.Type.Kind.ULong:
            case ClangSharp.Type.Kind.ULongLong:
            case ClangSharp.Type.Kind.UShort:
            case ClangSharp.Type.Kind.Enum:
            case ClangSharp.Type.Kind.LongDouble:
                IsBasic = true;
                break;

            case ClangSharp.Type.Kind.Typedef:
                if (type.Canonical.TypeKind == ClangSharp.Type.Kind.MemberPointer)
                {
                    IsBasic = false;
                }
                else
                {
                    Referenced = new TypeRefDefinition(type.Canonical);
                    IsBasic    = Referenced.IsBasic;
                }
                break;

            case ClangSharp.Type.Kind.Pointer:
                Referenced = new TypeRefDefinition(type.Pointee);
                IsPointer  = true;
                break;

            case ClangSharp.Type.Kind.LValueReference:
                Referenced  = new TypeRefDefinition(type.Pointee);
                IsReference = true;
                break;

            case ClangSharp.Type.Kind.ConstantArray:
                Referenced      = new TypeRefDefinition(type.ArrayElementType);
                IsConstantArray = true;
                break;

            case ClangSharp.Type.Kind.FunctionProto:
            case ClangSharp.Type.Kind.Record:
            case ClangSharp.Type.Kind.Unexposed:
            case ClangSharp.Type.Kind.DependentSizedArray:
            case ClangSharp.Type.Kind.IncompleteArray:
                break;

            default:
                throw new NotImplementedException();
            }
        }