blob: dd5018af82aaa5fd66aa4eb7404cba30bcb24283 [file] [log] [blame]
//===-- TypeXML.def - Metadata about Type XML nodes ------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file defines the XML type info database as written in the
// <ReferenceSection>/<Types> sub-nodes of the XML document. Type nodes
// are referred by "type" reference attributes throughout the document.
// A type node never contains sub-nodes.
// The semantics of the attributes and enums are mostly self-documenting
// by looking at the appropriate internally used functions and values.
// The following macros are used:
//
// NODE_XML( CLASS, NAME ) - A node of name NAME denotes a concrete
// type of class CLASS where CLASS is a class name used internally by clang.
// After a NODE_XML the definition of all (optional) attributes of that type
// node follows.
//
// END_NODE_XML - Closes the attribute definition of the current node.
//
// ID_ATTRIBUTE_XML - Each type node has an "id" attribute containing a
// string, which value uniquely identify the type. Other nodes may refer
// by "type" reference attributes to this value.
//
// TYPE_ATTRIBUTE_XML( FN ) - Type nodes may refer to the ids of other type
// nodes by a "type" attribute. FN is internally used by clang.
//
// CONTEXT_ATTRIBUTE_XML( FN ) - Type nodes may refer to the ids of their
// declaration contexts by a "context" attribute. FN is internally used by
// clang.
//
// ATTRIBUTE_XML( FN, NAME ) - An attribute named NAME. FN is internally
// used by clang. A boolean attribute have the values "0" or "1".
//
// ATTRIBUTE_OPT_XML( FN, NAME ) - An optional attribute named NAME.
// Optional attributes are omitted for boolean types, if the value is false,
// for integral types, if the value is null and for strings,
// if the value is the empty string. FN is internally used by clang.
//
// ATTRIBUTE_ENUM[_OPT]_XML( FN, NAME ) - An attribute named NAME. The value
// is an enumeration defined with ENUM_XML macros immediately following after
// that macro. An optional attribute is ommited, if the particular enum is the
// empty string. FN is internally used by clang.
//
// ENUM_XML( VALUE, NAME ) - An enumeration element named NAME. VALUE is
// internally used by clang.
//
// END_ENUM_XML - Closes the enumeration definition of the current attribute.
//
//===----------------------------------------------------------------------===//
#ifndef TYPE_ATTRIBUTE_XML
# define TYPE_ATTRIBUTE_XML( FN ) ATTRIBUTE_XML(FN, "type")
#endif
#ifndef CONTEXT_ATTRIBUTE_XML
# define CONTEXT_ATTRIBUTE_XML( FN ) ATTRIBUTE_XML(FN, "context")
#endif
NODE_XML(QualType, "CvQualifiedType")
ID_ATTRIBUTE_XML
TYPE_ATTRIBUTE_XML(getTypePtr()) // the qualified type, e.g. for 'T* const' it's 'T*'
ATTRIBUTE_OPT_XML(isLocalConstQualified(), "const") // boolean
ATTRIBUTE_OPT_XML(isLocalVolatileQualified(), "volatile") // boolean
ATTRIBUTE_OPT_XML(isLocalRestrictQualified(), "restrict") // boolean
ATTRIBUTE_OPT_XML(getObjCGCAttr(), "objc_gc") // Qualifiers::GC
ATTRIBUTE_OPT_XML(getAddressSpace(), "address_space") // unsigned
END_NODE_XML
NODE_XML(BuiltinType, "FundamentalType")
ID_ATTRIBUTE_XML
ATTRIBUTE_ENUM_XML(getKind(), "kind")
ENUM_XML(BuiltinType::Void, "void")
ENUM_XML(BuiltinType::Bool, "bool")
ENUM_XML(BuiltinType::Char_U, "char") // not explicitely qualified char, depends on target platform
ENUM_XML(BuiltinType::Char_S, "char") // not explicitely qualified char, depends on target platform
ENUM_XML(BuiltinType::SChar, "signed char")
ENUM_XML(BuiltinType::Short, "short");
ENUM_XML(BuiltinType::Int, "int");
ENUM_XML(BuiltinType::Long, "long");
ENUM_XML(BuiltinType::LongLong, "long long");
ENUM_XML(BuiltinType::Int128, "__int128_t");
ENUM_XML(BuiltinType::UChar, "unsigned char");
ENUM_XML(BuiltinType::UShort, "unsigned short");
ENUM_XML(BuiltinType::UInt, "unsigned int");
ENUM_XML(BuiltinType::ULong, "unsigned long");
ENUM_XML(BuiltinType::ULongLong, "unsigned long long");
ENUM_XML(BuiltinType::UInt128, "__uint128_t");
ENUM_XML(BuiltinType::Float, "float");
ENUM_XML(BuiltinType::Double, "double");
ENUM_XML(BuiltinType::LongDouble, "long double");
ENUM_XML(BuiltinType::WChar, "wchar_t");
ENUM_XML(BuiltinType::Char16, "char16_t");
ENUM_XML(BuiltinType::Char32, "char32_t");
ENUM_XML(BuiltinType::NullPtr, "nullptr_t"); // This is the type of C++0x 'nullptr'.
ENUM_XML(BuiltinType::Overload, "overloaded");
ENUM_XML(BuiltinType::Dependent, "dependent");
END_ENUM_XML
END_NODE_XML
NODE_XML(PointerType, "PointerType")
ID_ATTRIBUTE_XML
TYPE_ATTRIBUTE_XML(getPointeeType())
END_NODE_XML
NODE_XML(LValueReferenceType, "ReferenceType")
ID_ATTRIBUTE_XML
TYPE_ATTRIBUTE_XML(getPointeeType())
END_NODE_XML
NODE_XML(RValueReferenceType, "ReferenceType")
ID_ATTRIBUTE_XML
TYPE_ATTRIBUTE_XML(getPointeeType())
END_NODE_XML
NODE_XML(FunctionNoProtoType, "FunctionNoProtoType")
ID_ATTRIBUTE_XML
END_NODE_XML
NODE_XML(FunctionProtoType, "FunctionType")
ID_ATTRIBUTE_XML
ATTRIBUTE_XML(getResultType(), "result_type")
ATTRIBUTE_OPT_XML(isVariadic(), "variadic")
END_NODE_XML
NODE_XML(TypedefType, "Typedef")
ID_ATTRIBUTE_XML
TYPE_ATTRIBUTE_XML(getDecl()->getUnderlyingType())
ATTRIBUTE_XML(getDecl()->getNameAsString(), "name") // string
CONTEXT_ATTRIBUTE_XML(getDecl()->getDeclContext())
END_NODE_XML
NODE_XML(ComplexType, "ComplexType") // C99 complex types (_Complex float etc)
ID_ATTRIBUTE_XML
TYPE_ATTRIBUTE_XML(getElementType())
END_NODE_XML
NODE_XML(BlockPointerType, "BlockPointerType")
ID_ATTRIBUTE_XML
TYPE_ATTRIBUTE_XML(getPointeeType()) // alway refers to a function type
END_NODE_XML
NODE_XML(MemberPointerType, "MemberPointerType")
ID_ATTRIBUTE_XML
TYPE_ATTRIBUTE_XML(getPointeeType())
ATTRIBUTE_XML(getClass(), "class_type") // refers to the class type id of which the pointee is a member
END_NODE_XML
NODE_XML(ConstantArrayType, "ArrayType")
ID_ATTRIBUTE_XML
TYPE_ATTRIBUTE_XML(getElementType())
ATTRIBUTE_XML(getSize(), "size") // unsigned
ATTRIBUTE_ENUM_OPT_XML(getSizeModifier(), "size_modifier")
ENUM_XML(ArrayType::Normal, "")
ENUM_XML(ArrayType::Static, "static")
ENUM_XML(ArrayType::Star, "star")
END_ENUM_XML
ATTRIBUTE_OPT_XML(getIndexTypeCVRQualifiers(), "index_type_qualifier") // unsigned
END_NODE_XML
NODE_XML(IncompleteArrayType, "IncompleteArrayType")
ID_ATTRIBUTE_XML
TYPE_ATTRIBUTE_XML(getElementType())
END_NODE_XML
NODE_XML(VariableArrayType, "VariableArrayType")
ID_ATTRIBUTE_XML
TYPE_ATTRIBUTE_XML(getElementType())
// note: the size expression is print at the point of declaration
END_NODE_XML
NODE_XML(DependentSizedArrayType, "DependentSizedArrayType")
ID_ATTRIBUTE_XML
TYPE_ATTRIBUTE_XML(getElementType())
// FIXME: how to deal with size expression?
END_NODE_XML
NODE_XML(VectorType, "VectorType")
ID_ATTRIBUTE_XML
TYPE_ATTRIBUTE_XML(getElementType())
ATTRIBUTE_XML(getNumElements(), "size") // unsigned
END_NODE_XML
NODE_XML(ExtVectorType, "ExtVectorType")
ID_ATTRIBUTE_XML
TYPE_ATTRIBUTE_XML(getElementType())
ATTRIBUTE_XML(getNumElements(), "size") // unsigned
END_NODE_XML
NODE_XML(TypeOfExprType, "TypeOfExprType")
ID_ATTRIBUTE_XML
// note: the typeof expression is print at the point of use
END_NODE_XML
NODE_XML(TypeOfType, "TypeOfType")
ID_ATTRIBUTE_XML
TYPE_ATTRIBUTE_XML(getUnderlyingType())
END_NODE_XML
NODE_XML(RecordType, "Record")
ID_ATTRIBUTE_XML
ATTRIBUTE_XML(getDecl()->getNameAsString(), "name") // string
ATTRIBUTE_ENUM_XML(getDecl()->getTagKind(), "kind")
ENUM_XML(TagDecl::TK_struct, "struct")
ENUM_XML(TagDecl::TK_union, "union")
ENUM_XML(TagDecl::TK_class, "class")
END_ENUM_XML
CONTEXT_ATTRIBUTE_XML(getDecl()->getDeclContext())
END_NODE_XML
NODE_XML(EnumType, "Enum")
ID_ATTRIBUTE_XML
ATTRIBUTE_XML(getDecl()->getNameAsString(), "name") // string
CONTEXT_ATTRIBUTE_XML(getDecl()->getDeclContext())
END_NODE_XML
NODE_XML(TemplateTypeParmType, "TemplateTypeParmType")
ID_ATTRIBUTE_XML
END_NODE_XML
NODE_XML(TemplateSpecializationType, "TemplateSpecializationType")
ID_ATTRIBUTE_XML
END_NODE_XML
NODE_XML(QualifiedNameType, "QualifiedNameType")
ID_ATTRIBUTE_XML
TYPE_ATTRIBUTE_XML(getNamedType())
END_NODE_XML
NODE_XML(TypenameType, "TypenameType")
ID_ATTRIBUTE_XML
END_NODE_XML
NODE_XML(ObjCInterfaceType, "ObjCInterfaceType")
ID_ATTRIBUTE_XML
END_NODE_XML
NODE_XML(ObjCObjectPointerType, "ObjCObjectPointerType")
ID_ATTRIBUTE_XML
END_NODE_XML
//===----------------------------------------------------------------------===//
#undef NODE_XML
#undef ID_ATTRIBUTE_XML
#undef TYPE_ATTRIBUTE_XML
#undef CONTEXT_ATTRIBUTE_XML
#undef ATTRIBUTE_XML
#undef ATTRIBUTE_OPT_XML
#undef ATTRIBUTE_ENUM_XML
#undef ATTRIBUTE_ENUM_OPT_XML
#undef ENUM_XML
#undef END_ENUM_XML
#undef END_NODE_XML