Skip to content

Commit

Permalink
Using USR instead of mangled name
Browse files Browse the repository at this point in the history
Clang supports Unified Symbol Resolution which is a unique identifier of AST
nodes. We are using this instead of the previous hand-made mangled name.
  • Loading branch information
bruntib committed Oct 11, 2020
1 parent 2d02215 commit a33d1bc
Show file tree
Hide file tree
Showing 29 changed files with 270 additions and 413 deletions.
6 changes: 3 additions & 3 deletions plugins/cpp/model/include/model/cppastnode.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ struct CppAstNode
#pragma db null
FileLoc location;

std::uint64_t mangledNameHash;
std::uint64_t entityHash;

SymbolType symbolType = SymbolType::Other;

Expand All @@ -84,7 +84,7 @@ struct CppAstNode
bool operator==(const CppAstNode& other) const { return id == other.id; }

#pragma db index("location_file_idx") member(location.file)
#pragma db index("mangledNameHash_astType_idx") members(mangledNameHash, astType)
#pragma db index("entityHash_astType_idx") members(entityHash, astType)
#pragma db index("astType_symbolType_idx") members(astType, symbolType)
};

Expand Down Expand Up @@ -183,7 +183,7 @@ inline std::uint64_t createIdentifier(const CppAstNode& astNode_)

res
.append(astNode_.astValue).append(":")
.append(std::to_string(astNode_.mangledNameHash)).append(":")
.append(std::to_string(astNode_.entityHash)).append(":")
.append(std::to_string(
static_cast<SymbolTypeInt>(astNode_.symbolType))).append(":")
.append(std::to_string(
Expand Down
2 changes: 1 addition & 1 deletion plugins/cpp/model/include/model/cppdoccomment.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ struct CppDocComment
std::string content;

#pragma db not_null index
unsigned long long mangledNameHash;
unsigned long long entityHash;
};

} //model
Expand Down
4 changes: 2 additions & 2 deletions plugins/cpp/model/include/model/cppentity.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,14 @@ struct CppEntity
#pragma db unique
CppAstNodeId astNodeId;

std::uint64_t mangledNameHash = 0;
std::uint64_t entityHash = 0;

std::string name;
std::string qualifiedName;

std::set<Tag> tags;

#pragma db index member(mangledNameHash)
#pragma db index member(entityHash)
};

typedef std::shared_ptr<CppEntity> CppEntityPtr;
Expand Down
4 changes: 2 additions & 2 deletions plugins/cpp/model/include/model/cppenum.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ struct CppEnumConstant : CppEntity

ret
.append("\nid = ").append(std::to_string(id))
.append("\nmangledNameHash = ").append(std::to_string(mangledNameHash))
.append("\nentityHash = ").append(std::to_string(entityHash))
.append("\nqualifiedName = ").append(qualifiedName)
.append("\nvalue = ").append(std::to_string(value));

Expand Down Expand Up @@ -47,7 +47,7 @@ struct CppEnum : CppEntity

ret
.append("\nid = ").append(std::to_string(id))
.append("\nmangledNameHash = ").append(std::to_string(mangledNameHash))
.append("\nentityHash = ").append(std::to_string(entityHash))
.append("\nqualifiedName = ").append(qualifiedName);

if (!tags.empty())
Expand Down
2 changes: 1 addition & 1 deletion plugins/cpp/model/include/model/cppfunction.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ struct CppFunction : CppTypedEntity
{
return std::string("CppFunction")
.append("\nid = ").append(std::to_string(id))
.append("\nmangledNameHash = ").append(std::to_string(mangledNameHash))
.append("\nentityHash = ").append(std::to_string(entityHash))
.append("\nqualifiedName = ").append(qualifiedName)
.append("\nqualifiedType = ").append(qualifiedType);
}
Expand Down
2 changes: 1 addition & 1 deletion plugins/cpp/model/include/model/cppmacro.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ struct CppMacro : CppEntity

ret
.append("\nid = ").append(std::to_string(id))
.append("\nmangledNameHash = ").append(std::to_string(mangledNameHash))
.append("\nentityHash = ").append(std::to_string(entityHash))
.append("\nqualifiedName = ").append(qualifiedName);

if (!tags.empty())
Expand Down
2 changes: 1 addition & 1 deletion plugins/cpp/model/include/model/cppnamespace.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ struct CppNamespace : CppEntity

ret
.append("\nid = ").append(std::to_string(id))
.append("\nmangledNameHash = ").append(std::to_string(mangledNameHash))
.append("\nentityHash = ").append(std::to_string(entityHash))
.append("\nqualifiedName = ").append(qualifiedName);

if (!tags.empty())
Expand Down
2 changes: 1 addition & 1 deletion plugins/cpp/model/include/model/cpprecord.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ struct CppRecord : CppEntity

ret
.append("\nid = ").append(std::to_string(id))
.append("\nmangledNameHash = ").append(std::to_string(mangledNameHash))
.append("\nentityHash = ").append(std::to_string(entityHash))
.append("\nqualifiedName = ").append(qualifiedName)
.append("\nisAbstract = ").append(std::to_string(isAbstract))
.append("\nisPOD = ").append(std::to_string(isPOD));
Expand Down
2 changes: 1 addition & 1 deletion plugins/cpp/model/include/model/cpptypedef.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ struct CppTypedef : CppTypedEntity
{
return std::string("CppTypedef")
.append("\nid = ").append(std::to_string(id))
.append("\nmangledNameHash = ").append(std::to_string(mangledNameHash))
.append("\nentityHash = ").append(std::to_string(entityHash))
.append("\nqualifiedName = ").append(qualifiedName)
.append("\nqualifiedType = ").append(qualifiedType);
}
Expand Down
2 changes: 1 addition & 1 deletion plugins/cpp/model/include/model/cppvariable.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ struct CppVariable : CppTypedEntity
{
return std::string("CppVariable")
.append("\nid = ").append(std::to_string(id))
.append("\nmangledNameHash = ").append(std::to_string(mangledNameHash))
.append("\nentityHash = ").append(std::to_string(entityHash))
.append("\nqualifiedName = ").append(qualifiedName)
.append("\nqualifiedType = ").append(qualifiedType);
}
Expand Down
3 changes: 2 additions & 1 deletion plugins/cpp/parser/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ add_definitions(${LLVM_DEFINITIONS})
add_library(cppparser SHARED
src/cppparser.cpp
src/symbolhelper.cpp
src/manglednamecache.cpp
src/entitycache.cpp
src/ppincludecallback.cpp
src/ppmacrocallback.cpp
src/relationcollector.cpp
Expand All @@ -60,6 +60,7 @@ target_link_libraries(cppparser
clangAST
clangLex
clangBasic
clangIndex
clang)

target_compile_options(cppparser PUBLIC -Wno-unknown-pragmas)
Expand Down
Loading

0 comments on commit a33d1bc

Please sign in to comment.