//===-- DeclXML.def - Metadata about Decl 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 statement database structure as written in // sub-nodes of the XML document. // 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 // statement 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 statement // node and possible sub-nodes follows. // // END_NODE_XML - Closes the attribute definition of the current node. // // ID_ATTRIBUTE_XML - Some statement nodes have an "id" attribute containing a // string, which value uniquely identify that statement. Other nodes may refer // by reference attributes to this value (currently used only for Label). // // TYPE_ATTRIBUTE_XML( FN ) - Type nodes refer to the result type id of an // expression by a "type" 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_SPECIAL_XML( FN, NAME ) - An attribute named NAME which deserves // a special handling. See the appropriate documentations. // // ATTRIBUTE_FILE_LOCATION_XML - A bunch of attributes denoting the location of // a statement in the source file(s). // // 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. // // SUB_NODE_XML( CLASS ) - A mandatory sub-node of class CLASS or its sub-classes. // // SUB_NODE_OPT_XML( CLASS ) - An optional sub-node of class CLASS or its sub-classes. // // SUB_NODE_SEQUENCE_XML( CLASS ) - Zero or more sub-nodes of class CLASS or // its sub-classes. // //===----------------------------------------------------------------------===// #ifndef ATTRIBUTE_FILE_LOCATION_XML # define ATTRIBUTE_FILE_LOCATION_XML \ ATTRIBUTE_XML(getFilename(), "file") \ ATTRIBUTE_XML(getLine(), "line") \ ATTRIBUTE_XML(getColumn(), "col") \ ATTRIBUTE_OPT_XML(getFilename(), "endfile") \ ATTRIBUTE_OPT_XML(getLine(), "endline") \ ATTRIBUTE_OPT_XML(getColumn(), "endcol") #endif #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(TranslationUnitDecl, "TranslationUnit") // SUB_NODE_SEQUENCE_XML(Decl) //END_NODE_XML NODE_XML(Decl, "FIXME_Decl") ATTRIBUTE_FILE_LOCATION_XML END_NODE_XML NODE_XML(FunctionDecl, "Function") ID_ATTRIBUTE_XML ATTRIBUTE_FILE_LOCATION_XML ATTRIBUTE_XML(getDeclContext(), "context") ATTRIBUTE_XML(getNameAsString(), "name") TYPE_ATTRIBUTE_XML(getType()->getAs()->getResultType()) ATTRIBUTE_XML(getType()->getAs(), "function_type") ATTRIBUTE_ENUM_OPT_XML(getStorageClass(), "storage_class") ENUM_XML(FunctionDecl::None, "") ENUM_XML(FunctionDecl::Extern, "extern") ENUM_XML(FunctionDecl::Static, "static") ENUM_XML(FunctionDecl::PrivateExtern, "__private_extern__") END_ENUM_XML ATTRIBUTE_OPT_XML(isInlineSpecified(), "inline") //ATTRIBUTE_OPT_XML(isVariadic(), "variadic") // in the type reference ATTRIBUTE_XML(getNumParams(), "num_args") SUB_NODE_SEQUENCE_XML(ParmVarDecl) //SUB_NODE_OPT_XML("Body") END_NODE_XML NODE_XML(CXXMethodDecl, "CXXMethodDecl") ID_ATTRIBUTE_XML ATTRIBUTE_FILE_LOCATION_XML ATTRIBUTE_XML(getDeclContext(), "context") ATTRIBUTE_XML(getNameAsString(), "name") TYPE_ATTRIBUTE_XML(getType()->getAs()->getResultType()) ATTRIBUTE_XML(getType()->getAs(), "function_type") ATTRIBUTE_OPT_XML(isInlineSpecified(), "inline") ATTRIBUTE_OPT_XML(isStatic(), "static") ATTRIBUTE_OPT_XML(isVirtual(), "virtual") ATTRIBUTE_XML(getNumParams(), "num_args") SUB_NODE_SEQUENCE_XML(ParmVarDecl) //SUB_NODE_OPT_XML("Body") END_NODE_XML //NODE_XML("Body") // SUB_NODE_XML(Stmt) //END_NODE_XML NODE_XML(NamespaceDecl, "Namespace") ID_ATTRIBUTE_XML ATTRIBUTE_FILE_LOCATION_XML ATTRIBUTE_XML(getDeclContext(), "context") ATTRIBUTE_XML(getNameAsString(), "name") END_NODE_XML NODE_XML(UsingDirectiveDecl, "UsingDirective") ATTRIBUTE_FILE_LOCATION_XML ATTRIBUTE_XML(getDeclContext(), "context") ATTRIBUTE_XML(getNameAsString(), "name") ATTRIBUTE_XML(getNominatedNamespace(), "ref") END_NODE_XML NODE_XML(NamespaceAliasDecl, "NamespaceAlias") ATTRIBUTE_FILE_LOCATION_XML ATTRIBUTE_XML(getDeclContext(), "context") ATTRIBUTE_XML(getNameAsString(), "name") ATTRIBUTE_XML(getNamespace(), "ref") END_NODE_XML NODE_XML(RecordDecl, "Record") ID_ATTRIBUTE_XML ATTRIBUTE_FILE_LOCATION_XML ATTRIBUTE_XML(getDeclContext(), "context") ATTRIBUTE_XML(getNameAsString(), "name") ATTRIBUTE_OPT_XML(isDefinition() == false, "forward") ATTRIBUTE_XML(getTypeForDecl(), "type") // refers to the type this decl creates SUB_NODE_SEQUENCE_XML(FieldDecl) END_NODE_XML NODE_XML(EnumDecl, "Enum") ID_ATTRIBUTE_XML ATTRIBUTE_FILE_LOCATION_XML ATTRIBUTE_XML(getDeclContext(), "context") ATTRIBUTE_XML(getNameAsString(), "name") ATTRIBUTE_OPT_XML(isDefinition() == false, "forward") ATTRIBUTE_SPECIAL_XML(getIntegerType(), "type") // is NULL in pure declarations thus deserves special handling SUB_NODE_SEQUENCE_XML(EnumConstantDecl) // only present in definition END_NODE_XML NODE_XML(EnumConstantDecl, "EnumConstant") ID_ATTRIBUTE_XML ATTRIBUTE_FILE_LOCATION_XML ATTRIBUTE_XML(getDeclContext(), "context") ATTRIBUTE_XML(getNameAsString(), "name") TYPE_ATTRIBUTE_XML(getType()) ATTRIBUTE_XML(getInitVal().toString(10, true), "value") // integer SUB_NODE_OPT_XML(Expr) // init expr of this constant END_NODE_XML NODE_XML(FieldDecl, "Field") ID_ATTRIBUTE_XML ATTRIBUTE_FILE_LOCATION_XML ATTRIBUTE_XML(getDeclContext(), "context") ATTRIBUTE_XML(getNameAsString(), "name") TYPE_ATTRIBUTE_XML(getType()) ATTRIBUTE_OPT_XML(isMutable(), "mutable") ATTRIBUTE_OPT_XML(isBitField(), "bitfield") SUB_NODE_OPT_XML(Expr) // init expr of a bit field END_NODE_XML NODE_XML(TypedefDecl, "Typedef") ID_ATTRIBUTE_XML ATTRIBUTE_FILE_LOCATION_XML ATTRIBUTE_XML(getDeclContext(), "context") ATTRIBUTE_XML(getNameAsString(), "name") TYPE_ATTRIBUTE_XML(getUnderlyingType()) END_NODE_XML NODE_XML(VarDecl, "Var") ID_ATTRIBUTE_XML ATTRIBUTE_FILE_LOCATION_XML ATTRIBUTE_XML(getDeclContext(), "context") ATTRIBUTE_XML(getNameAsString(), "name") TYPE_ATTRIBUTE_XML(getType()) ATTRIBUTE_ENUM_OPT_XML(getStorageClass(), "storage_class") ENUM_XML(VarDecl::None, "") ENUM_XML(VarDecl::Auto, "auto") ENUM_XML(VarDecl::Register, "register") ENUM_XML(VarDecl::Extern, "extern") ENUM_XML(VarDecl::Static, "static") ENUM_XML(VarDecl::PrivateExtern, "__private_extern__") END_ENUM_XML SUB_NODE_OPT_XML(Expr) // init expr END_NODE_XML NODE_XML(ParmVarDecl, "ParmVar") ID_ATTRIBUTE_XML ATTRIBUTE_FILE_LOCATION_XML ATTRIBUTE_XML(getDeclContext(), "context") ATTRIBUTE_XML(getNameAsString(), "name") TYPE_ATTRIBUTE_XML(getType()) SUB_NODE_OPT_XML(Expr) // default argument expression END_NODE_XML NODE_XML(LinkageSpecDecl, "LinkageSpec") ID_ATTRIBUTE_XML ATTRIBUTE_FILE_LOCATION_XML ATTRIBUTE_XML(getDeclContext(), "context") ATTRIBUTE_ENUM_OPT_XML(getLanguage(), "lang") ENUM_XML(LinkageSpecDecl::lang_c, "C") ENUM_XML(LinkageSpecDecl::lang_cxx, "CXX") END_ENUM_XML END_NODE_XML //===----------------------------------------------------------------------===// #undef NODE_XML #undef ID_ATTRIBUTE_XML #undef TYPE_ATTRIBUTE_XML #undef ATTRIBUTE_XML #undef ATTRIBUTE_SPECIAL_XML #undef ATTRIBUTE_OPT_XML #undef ATTRIBUTE_ENUM_XML #undef ATTRIBUTE_ENUM_OPT_XML #undef ATTRIBUTE_FILE_LOCATION_XML #undef ENUM_XML #undef END_ENUM_XML #undef END_NODE_XML #undef SUB_NODE_XML #undef SUB_NODE_SEQUENCE_XML #undef SUB_NODE_OPT_XML