[clang-doc] serialize IsBuiltIn and IsTemplate for types (#146149)
IsBuiltIn and IsTemplate were being emitted as their default values.
This commit is contained in:
@@ -283,7 +283,15 @@ static llvm::Error parseRecord(const Record &R, unsigned ID,
|
||||
|
||||
static llvm::Error parseRecord(const Record &R, unsigned ID,
|
||||
llvm::StringRef Blob, TypeInfo *I) {
|
||||
return llvm::Error::success();
|
||||
switch (ID) {
|
||||
case TYPE_IS_BUILTIN:
|
||||
return decodeRecord(R, I->IsBuiltIn, Blob);
|
||||
case TYPE_IS_TEMPLATE:
|
||||
return decodeRecord(R, I->IsTemplate, Blob);
|
||||
default:
|
||||
return llvm::createStringError(llvm::inconvertibleErrorCode(),
|
||||
"invalid field for TypeInfo");
|
||||
}
|
||||
}
|
||||
|
||||
static llvm::Error parseRecord(const Record &R, unsigned ID,
|
||||
@@ -293,6 +301,10 @@ static llvm::Error parseRecord(const Record &R, unsigned ID,
|
||||
return decodeRecord(R, I->Name, Blob);
|
||||
case FIELD_DEFAULT_VALUE:
|
||||
return decodeRecord(R, I->DefaultValue, Blob);
|
||||
case FIELD_TYPE_IS_BUILTIN:
|
||||
return decodeRecord(R, I->IsBuiltIn, Blob);
|
||||
case FIELD_TYPE_IS_TEMPLATE:
|
||||
return decodeRecord(R, I->IsTemplate, Blob);
|
||||
default:
|
||||
return llvm::createStringError(llvm::inconvertibleErrorCode(),
|
||||
"invalid field for TypeInfo");
|
||||
@@ -308,6 +320,10 @@ static llvm::Error parseRecord(const Record &R, unsigned ID,
|
||||
return decodeRecord(R, I->Access, Blob);
|
||||
case MEMBER_TYPE_IS_STATIC:
|
||||
return decodeRecord(R, I->IsStatic, Blob);
|
||||
case MEMBER_TYPE_IS_BUILTIN:
|
||||
return decodeRecord(R, I->IsBuiltIn, Blob);
|
||||
case MEMBER_TYPE_IS_TEMPLATE:
|
||||
return decodeRecord(R, I->IsTemplate, Blob);
|
||||
default:
|
||||
return llvm::createStringError(llvm::inconvertibleErrorCode(),
|
||||
"invalid field for MemberTypeInfo");
|
||||
|
||||
@@ -161,9 +161,15 @@ static const llvm::IndexedMap<RecordIdDsc, RecordIdToIndexFunctor>
|
||||
{COMMENT_ARG, {"Arg", &genStringAbbrev}},
|
||||
{FIELD_TYPE_NAME, {"Name", &genStringAbbrev}},
|
||||
{FIELD_DEFAULT_VALUE, {"DefaultValue", &genStringAbbrev}},
|
||||
{FIELD_TYPE_IS_BUILTIN, {"IsBuiltin", &genBoolAbbrev}},
|
||||
{FIELD_TYPE_IS_TEMPLATE, {"IsTemplate", &genBoolAbbrev}},
|
||||
{MEMBER_TYPE_NAME, {"Name", &genStringAbbrev}},
|
||||
{MEMBER_TYPE_ACCESS, {"Access", &genIntAbbrev}},
|
||||
{MEMBER_TYPE_IS_STATIC, {"IsStatic", &genBoolAbbrev}},
|
||||
{MEMBER_TYPE_IS_BUILTIN, {"IsBuiltin", &genBoolAbbrev}},
|
||||
{MEMBER_TYPE_IS_TEMPLATE, {"IsTemplate", &genBoolAbbrev}},
|
||||
{TYPE_IS_BUILTIN, {"IsBuiltin", &genBoolAbbrev}},
|
||||
{TYPE_IS_TEMPLATE, {"IsTemplate", &genBoolAbbrev}},
|
||||
{NAMESPACE_USR, {"USR", &genSymbolIdAbbrev}},
|
||||
{NAMESPACE_NAME, {"Name", &genStringAbbrev}},
|
||||
{NAMESPACE_PATH, {"Path", &genStringAbbrev}},
|
||||
@@ -239,12 +245,15 @@ static const std::vector<std::pair<BlockId, std::vector<RecordId>>>
|
||||
COMMENT_PARAMNAME, COMMENT_CLOSENAME, COMMENT_SELFCLOSING,
|
||||
COMMENT_EXPLICIT, COMMENT_ATTRKEY, COMMENT_ATTRVAL, COMMENT_ARG}},
|
||||
// Type Block
|
||||
{BI_TYPE_BLOCK_ID, {}},
|
||||
{BI_TYPE_BLOCK_ID, {TYPE_IS_BUILTIN, TYPE_IS_TEMPLATE}},
|
||||
// FieldType Block
|
||||
{BI_FIELD_TYPE_BLOCK_ID, {FIELD_TYPE_NAME, FIELD_DEFAULT_VALUE}},
|
||||
{BI_FIELD_TYPE_BLOCK_ID,
|
||||
{FIELD_TYPE_NAME, FIELD_DEFAULT_VALUE, FIELD_TYPE_IS_BUILTIN,
|
||||
FIELD_TYPE_IS_TEMPLATE}},
|
||||
// MemberType Block
|
||||
{BI_MEMBER_TYPE_BLOCK_ID,
|
||||
{MEMBER_TYPE_NAME, MEMBER_TYPE_ACCESS, MEMBER_TYPE_IS_STATIC}},
|
||||
{MEMBER_TYPE_NAME, MEMBER_TYPE_ACCESS, MEMBER_TYPE_IS_STATIC,
|
||||
MEMBER_TYPE_IS_BUILTIN, MEMBER_TYPE_IS_TEMPLATE}},
|
||||
// Enum Block
|
||||
{BI_ENUM_BLOCK_ID,
|
||||
{ENUM_USR, ENUM_NAME, ENUM_DEFLOCATION, ENUM_LOCATION, ENUM_SCOPED}},
|
||||
@@ -470,6 +479,8 @@ void ClangDocBitcodeWriter::emitBlock(const Reference &R, FieldId Field) {
|
||||
void ClangDocBitcodeWriter::emitBlock(const TypeInfo &T) {
|
||||
StreamSubBlockGuard Block(Stream, BI_TYPE_BLOCK_ID);
|
||||
emitBlock(T.Type, FieldId::F_type);
|
||||
emitRecord(T.IsBuiltIn, TYPE_IS_BUILTIN);
|
||||
emitRecord(T.IsTemplate, TYPE_IS_TEMPLATE);
|
||||
}
|
||||
|
||||
void ClangDocBitcodeWriter::emitBlock(const TypedefInfo &T) {
|
||||
@@ -491,6 +502,8 @@ void ClangDocBitcodeWriter::emitBlock(const FieldTypeInfo &T) {
|
||||
emitBlock(T.Type, FieldId::F_type);
|
||||
emitRecord(T.Name, FIELD_TYPE_NAME);
|
||||
emitRecord(T.DefaultValue, FIELD_DEFAULT_VALUE);
|
||||
emitRecord(T.IsBuiltIn, FIELD_TYPE_IS_BUILTIN);
|
||||
emitRecord(T.IsTemplate, FIELD_TYPE_IS_TEMPLATE);
|
||||
}
|
||||
|
||||
void ClangDocBitcodeWriter::emitBlock(const MemberTypeInfo &T) {
|
||||
@@ -499,6 +512,9 @@ void ClangDocBitcodeWriter::emitBlock(const MemberTypeInfo &T) {
|
||||
emitRecord(T.Name, MEMBER_TYPE_NAME);
|
||||
emitRecord(T.Access, MEMBER_TYPE_ACCESS);
|
||||
emitRecord(T.IsStatic, MEMBER_TYPE_IS_STATIC);
|
||||
emitRecord(T.IsBuiltIn, MEMBER_TYPE_IS_BUILTIN);
|
||||
emitRecord(T.IsTemplate, MEMBER_TYPE_IS_TEMPLATE);
|
||||
emitRecord(T.IsTemplate, MEMBER_TYPE_IS_TEMPLATE);
|
||||
for (const auto &CI : T.Description)
|
||||
emitBlock(CI);
|
||||
}
|
||||
|
||||
@@ -96,11 +96,17 @@ enum RecordId {
|
||||
COMMENT_ATTRKEY,
|
||||
COMMENT_ATTRVAL,
|
||||
COMMENT_ARG,
|
||||
TYPE_IS_BUILTIN,
|
||||
TYPE_IS_TEMPLATE,
|
||||
FIELD_TYPE_NAME,
|
||||
FIELD_DEFAULT_VALUE,
|
||||
FIELD_TYPE_IS_BUILTIN,
|
||||
FIELD_TYPE_IS_TEMPLATE,
|
||||
MEMBER_TYPE_NAME,
|
||||
MEMBER_TYPE_ACCESS,
|
||||
MEMBER_TYPE_IS_STATIC,
|
||||
MEMBER_TYPE_IS_BUILTIN,
|
||||
MEMBER_TYPE_IS_TEMPLATE,
|
||||
NAMESPACE_USR,
|
||||
NAMESPACE_NAME,
|
||||
NAMESPACE_PATH,
|
||||
|
||||
@@ -17,7 +17,7 @@ template<typename T> struct MyClass {
|
||||
// CHECK-NEXT: ],
|
||||
// CHECK-NEXT: "ReturnType": {
|
||||
// CHECK-NEXT: "IsBuiltIn": false,
|
||||
// CHECK-NEXT: "IsTemplate": false,
|
||||
// CHECK-NEXT: "IsTemplate": true,
|
||||
// CHECK-NEXT: "Name": "T",
|
||||
// CHECK-NEXT: "QualName": "T"
|
||||
// CHECK-NEXT: "USR": "0000000000000000000000000000000000000000"
|
||||
|
||||
@@ -107,7 +107,7 @@ protected:
|
||||
// CHECK-NEXT: "GlobalNamespace"
|
||||
// CHECK-NEXT: ],
|
||||
// CHECK-NEXT: "ReturnType": {
|
||||
// CHECK-NEXT: "IsBuiltIn": false,
|
||||
// CHECK-NEXT: "IsBuiltIn": true,
|
||||
// CHECK-NEXT: "IsTemplate": false,
|
||||
// CHECK-NEXT: "Name": "int",
|
||||
// CHECK-NEXT: "QualName": "int",
|
||||
@@ -137,7 +137,7 @@ protected:
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ],
|
||||
// CHECK-NEXT: "ReturnType": {
|
||||
// CHECK-NEXT: "IsBuiltIn": false,
|
||||
// CHECK-NEXT: "IsBuiltIn": true,
|
||||
// CHECK-NEXT: "IsTemplate": false,
|
||||
// CHECK-NEXT: "Name": "int",
|
||||
// CHECK-NEXT: "QualName": "int",
|
||||
@@ -184,7 +184,7 @@ protected:
|
||||
// CHECK-NEXT: "TypeDeclaration": "",
|
||||
// CHECK-NEXT: "USR": "{{[0-9A-F]*}}",
|
||||
// CHECK-NEXT: "Underlying": {
|
||||
// CHECK-NEXT: "IsBuiltIn": false,
|
||||
// CHECK-NEXT: "IsBuiltIn": true,
|
||||
// CHECK-NEXT: "IsTemplate": false,
|
||||
// CHECK-NEXT: "Name": "int",
|
||||
// CHECK-NEXT: "QualName": "int",
|
||||
|
||||
@@ -23,7 +23,7 @@ template<Incrementable T> Incrementable auto incrementTwo(T t);
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ],
|
||||
// CHECK-NEXT: "ReturnType": {
|
||||
// CHECK-NEXT: "IsBuiltIn": false,
|
||||
// CHECK-NEXT: "IsBuiltIn": true,
|
||||
// CHECK-NEXT: "IsTemplate": false,
|
||||
// CHECK-NEXT: "Name": "void",
|
||||
// CHECK-NEXT: "QualName": "void",
|
||||
|
||||
@@ -27,7 +27,7 @@ struct MyClass {
|
||||
// CHECK-NEXT: ],
|
||||
// CHECK-NEXT: "ReturnType": {
|
||||
// CHECK-NEXT: "IsBuiltIn": false,
|
||||
// CHECK-NEXT: "IsTemplate": false,
|
||||
// CHECK-NEXT: "IsTemplate": true,
|
||||
// CHECK-NEXT: "Name": "T",
|
||||
// CHECK-NEXT: "QualName": "T",
|
||||
// CHECK-NEXT: "USR": "0000000000000000000000000000000000000000"
|
||||
|
||||
@@ -56,7 +56,7 @@ typedef int MyTypedef;
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ],
|
||||
// CHECK-NEXT: "ReturnType": {
|
||||
// CHECK-NEXT: "IsBuiltIn": false,
|
||||
// CHECK-NEXT: "IsBuiltIn": true,
|
||||
// CHECK-NEXT: "IsTemplate": false,
|
||||
// CHECK-NEXT: "Name": "void",
|
||||
// CHECK-NEXT: "QualName": "void",
|
||||
@@ -93,7 +93,7 @@ typedef int MyTypedef;
|
||||
// CHECK-NEXT: "TypeDeclaration": "",
|
||||
// CHECK-NEXT: "USR": "{{[0-9A-F]*}}",
|
||||
// CHECK-NEXT: "Underlying": {
|
||||
// CHECK-NEXT: "IsBuiltIn": false,
|
||||
// CHECK-NEXT: "IsBuiltIn": true,
|
||||
// CHECK-NEXT: "IsTemplate": false,
|
||||
// CHECK-NEXT: "Name": "int",
|
||||
// CHECK-NEXT: "QualName": "int",
|
||||
@@ -111,8 +111,7 @@ typedef int MyTypedef;
|
||||
// CHECK-NEXT: },
|
||||
// CHECK-NEXT: "Name": "Global",
|
||||
// CHECK-NEXT: "Type": {
|
||||
// COM: FIXME: IsBuiltIn emits as its default value
|
||||
// CHECK-NEXT: "IsBuiltIn": false,
|
||||
// CHECK-NEXT: "IsBuiltIn": true,
|
||||
// CHECK-NEXT: "IsTemplate": false,
|
||||
// CHECK-NEXT: "Name": "int",
|
||||
// CHECK-NEXT: "QualName": "int",
|
||||
|
||||
Reference in New Issue
Block a user