mirror of
https://github.com/MaskRay/ccls.git
synced 2024-11-29 11:01:57 +00:00
wip
This commit is contained in:
parent
41f2a75de0
commit
fd1d8c8785
@ -16,6 +16,11 @@ bool Type::operator==(const Type& rhs) const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool Type::is_fundamental() const {
|
bool Type::is_fundamental() const {
|
||||||
|
//switch (cx_type.kind) {
|
||||||
|
//case CXType_Auto:
|
||||||
|
//return true;
|
||||||
|
//}
|
||||||
|
|
||||||
// NOTE: This will return false for pointed types. Should we call
|
// NOTE: This will return false for pointed types. Should we call
|
||||||
// strip_qualifiers for the user?
|
// strip_qualifiers for the user?
|
||||||
return cx_type.kind >= CXType_FirstBuiltin &&
|
return cx_type.kind >= CXType_FirstBuiltin &&
|
||||||
|
22
main.cpp
22
main.cpp
@ -85,7 +85,8 @@ struct TypeDef {
|
|||||||
std::vector<clang::SourceLocation> uses;
|
std::vector<clang::SourceLocation> uses;
|
||||||
|
|
||||||
TypeDef(TypeId id, const std::string& usr) : id(id), usr(usr) {
|
TypeDef(TypeId id, const std::string& usr) : id(id), usr(usr) {
|
||||||
std::cout << "Creating type with usr " << usr << std::endl;
|
//assert(usr.size() > 0);
|
||||||
|
//std::cout << "Creating type with usr " << usr << std::endl;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -152,6 +153,8 @@ struct ParsingDatabase {
|
|||||||
std::vector<FuncDef> funcs;
|
std::vector<FuncDef> funcs;
|
||||||
std::vector<VarDef> vars;
|
std::vector<VarDef> vars;
|
||||||
|
|
||||||
|
ParsingDatabase();
|
||||||
|
|
||||||
TypeId ToTypeId(const std::string& usr);
|
TypeId ToTypeId(const std::string& usr);
|
||||||
FuncId ToFuncId(const std::string& usr);
|
FuncId ToFuncId(const std::string& usr);
|
||||||
VarId ToVarId(const std::string& usr);
|
VarId ToVarId(const std::string& usr);
|
||||||
@ -163,6 +166,8 @@ struct ParsingDatabase {
|
|||||||
std::string ToString();
|
std::string ToString();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ParsingDatabase::ParsingDatabase() {}
|
||||||
|
|
||||||
TypeId ParsingDatabase::ToTypeId(const std::string& usr) {
|
TypeId ParsingDatabase::ToTypeId(const std::string& usr) {
|
||||||
auto it = usr_to_type_id.find(usr);
|
auto it = usr_to_type_id.find(usr);
|
||||||
if (it != usr_to_type_id.end())
|
if (it != usr_to_type_id.end())
|
||||||
@ -296,6 +301,12 @@ void Write(Writer& writer, const char* key, uint64_t value) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::string ParsingDatabase::ToString() {
|
std::string ParsingDatabase::ToString() {
|
||||||
|
auto it = usr_to_type_id.find("");
|
||||||
|
if (it != usr_to_type_id.end()) {
|
||||||
|
Resolve(it->second)->short_name = "<fundamental>";
|
||||||
|
assert(Resolve(it->second)->uses.size() == 0);
|
||||||
|
}
|
||||||
|
|
||||||
#define WRITE(name) Write(writer, #name, def.name)
|
#define WRITE(name) Write(writer, #name, def.name)
|
||||||
|
|
||||||
rapidjson::StringBuffer output;
|
rapidjson::StringBuffer output;
|
||||||
@ -539,7 +550,8 @@ void Dump(clang::Cursor cursor) {
|
|||||||
void InsertTypeUsageAtLocation(ParsingDatabase* db, clang::Type type, const clang::SourceLocation& location) {
|
void InsertTypeUsageAtLocation(ParsingDatabase* db, clang::Type type, const clang::SourceLocation& location) {
|
||||||
clang::Type raw_type = type.strip_qualifiers();
|
clang::Type raw_type = type.strip_qualifiers();
|
||||||
|
|
||||||
if (raw_type.is_fundamental())
|
std::string usr = raw_type.get_usr();
|
||||||
|
if (usr == "")
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Add a usage to the type of the variable.
|
// Add a usage to the type of the variable.
|
||||||
@ -583,7 +595,9 @@ void HandleVarDecl(ParsingDatabase* db, NamespaceStack* ns, clang::Cursor var, s
|
|||||||
// TODO: Figure out how to scan initializations properly. We probably need
|
// TODO: Figure out how to scan initializations properly. We probably need
|
||||||
// to scan for assignment statement, or definition+ctor.
|
// to scan for assignment statement, or definition+ctor.
|
||||||
var_def->initializations.push_back(var.get_source_location());
|
var_def->initializations.push_back(var.get_source_location());
|
||||||
var_def->variable_type = db->ToTypeId(var.get_type().strip_qualifiers().get_usr());
|
std::string var_type_usr = var.get_type().strip_qualifiers().get_usr();
|
||||||
|
if (var_type_usr != "")
|
||||||
|
var_def->variable_type = db->ToTypeId(var_type_usr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -945,7 +959,7 @@ void DiffDocuments(rapidjson::Document& expected, rapidjson::Document& actual) {
|
|||||||
int main(int argc, char** argv) {
|
int main(int argc, char** argv) {
|
||||||
for (std::string path : GetFilesInFolder("tests")) {
|
for (std::string path : GetFilesInFolder("tests")) {
|
||||||
// TODO: Fix all existing tests.
|
// TODO: Fix all existing tests.
|
||||||
//if (path != "tests/method_definition.cc") continue;
|
//if (path != "tests/usage/func_usage_addr_func.cc") continue;
|
||||||
|
|
||||||
// Parse expected output from the test, parse it into JSON document.
|
// Parse expected output from the test, parse it into JSON document.
|
||||||
std::string expected_output;
|
std::string expected_output;
|
||||||
|
@ -10,10 +10,7 @@ void user() {
|
|||||||
/*
|
/*
|
||||||
OUTPUT:
|
OUTPUT:
|
||||||
{
|
{
|
||||||
"types": [{
|
"types": [],
|
||||||
"id": 0,
|
|
||||||
"uses": ["tests/usage/func_usage_addr_func.cc:6:8"]
|
|
||||||
}],
|
|
||||||
"functions": [{
|
"functions": [{
|
||||||
"id": 0,
|
"id": 0,
|
||||||
"usr": "c:@F@consume#*v#",
|
"usr": "c:@F@consume#*v#",
|
||||||
@ -41,16 +38,14 @@ OUTPUT:
|
|||||||
"variables": [{
|
"variables": [{
|
||||||
"id": 0,
|
"id": 0,
|
||||||
"declaration": "tests/usage/func_usage_addr_func.cc:1:19",
|
"declaration": "tests/usage/func_usage_addr_func.cc:1:19",
|
||||||
"initializations": ["tests/usage/func_usage_addr_func.cc:1:19"],
|
"initializations": ["tests/usage/func_usage_addr_func.cc:1:19"]
|
||||||
"variable_type": 0
|
|
||||||
}, {
|
}, {
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"usr": "c:func_usage_addr_func.cc@61@F@user#@x",
|
"usr": "c:func_usage_addr_func.cc@61@F@user#@x",
|
||||||
"short_name": "x",
|
"short_name": "x",
|
||||||
"qualified_name": "x",
|
"qualified_name": "x",
|
||||||
"declaration": "tests/usage/func_usage_addr_func.cc:6:8",
|
"declaration": "tests/usage/func_usage_addr_func.cc:6:8",
|
||||||
"initializations": ["tests/usage/func_usage_addr_func.cc:6:8"],
|
"initializations": ["tests/usage/func_usage_addr_func.cc:6:8"]
|
||||||
"variable_type": 0
|
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
*/
|
*/
|
@ -17,9 +17,6 @@ OUTPUT:
|
|||||||
"qualified_name": "Foo",
|
"qualified_name": "Foo",
|
||||||
"definition": "tests/usage/func_usage_addr_method.cc:1:8",
|
"definition": "tests/usage/func_usage_addr_method.cc:1:8",
|
||||||
"funcs": [0]
|
"funcs": [0]
|
||||||
}, {
|
|
||||||
"id": 1,
|
|
||||||
"uses": ["tests/usage/func_usage_addr_method.cc:6:8"]
|
|
||||||
}],
|
}],
|
||||||
"functions": [{
|
"functions": [{
|
||||||
"id": 0,
|
"id": 0,
|
||||||
@ -44,8 +41,7 @@ OUTPUT:
|
|||||||
"short_name": "x",
|
"short_name": "x",
|
||||||
"qualified_name": "x",
|
"qualified_name": "x",
|
||||||
"declaration": "tests/usage/func_usage_addr_method.cc:6:8",
|
"declaration": "tests/usage/func_usage_addr_method.cc:6:8",
|
||||||
"initializations": ["tests/usage/func_usage_addr_method.cc:6:8"],
|
"initializations": ["tests/usage/func_usage_addr_method.cc:6:8"]
|
||||||
"variable_type": 1
|
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
*/
|
*/
|
@ -9,8 +9,6 @@ class Foo {
|
|||||||
// TODO(libclang): libclang doesn't expose the |helper| reference in the ast,
|
// TODO(libclang): libclang doesn't expose the |helper| reference in the ast,
|
||||||
// so we can't add the |helper| usage.
|
// so we can't add the |helper| usage.
|
||||||
|
|
||||||
// TODO: Remove "id" 1 output
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
OUTPUT:
|
OUTPUT:
|
||||||
{
|
{
|
||||||
@ -21,8 +19,6 @@ OUTPUT:
|
|||||||
"qualified_name": "Foo",
|
"qualified_name": "Foo",
|
||||||
"definition": "tests/usage/func_usage_class_inline_var_def.cc:5:7",
|
"definition": "tests/usage/func_usage_class_inline_var_def.cc:5:7",
|
||||||
"vars": [0]
|
"vars": [0]
|
||||||
}, {
|
|
||||||
"id": 1
|
|
||||||
}],
|
}],
|
||||||
"functions": [{
|
"functions": [{
|
||||||
"id": 0,
|
"id": 0,
|
||||||
@ -38,7 +34,6 @@ OUTPUT:
|
|||||||
"qualified_name": "Foo::x",
|
"qualified_name": "Foo::x",
|
||||||
"declaration": "tests/usage/func_usage_class_inline_var_def.cc:6:7",
|
"declaration": "tests/usage/func_usage_class_inline_var_def.cc:6:7",
|
||||||
"initializations": ["tests/usage/func_usage_class_inline_var_def.cc:6:7"],
|
"initializations": ["tests/usage/func_usage_class_inline_var_def.cc:6:7"],
|
||||||
"variable_type": 1,
|
|
||||||
"declaring_type": 0
|
"declaring_type": 0
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
class Foo {
|
class Foo {
|
||||||
int member;
|
Foo* member;
|
||||||
};
|
};
|
||||||
/*
|
/*
|
||||||
OUTPUT:
|
OUTPUT:
|
||||||
@ -10,9 +10,8 @@ OUTPUT:
|
|||||||
"short_name": "Foo",
|
"short_name": "Foo",
|
||||||
"qualified_name": "Foo",
|
"qualified_name": "Foo",
|
||||||
"definition": "tests/vars/class_member.cc:1:7",
|
"definition": "tests/vars/class_member.cc:1:7",
|
||||||
"vars": [0]
|
"vars": [0],
|
||||||
}, {
|
"uses": ["tests/vars/class_member.cc:2:8"]
|
||||||
"id": 1
|
|
||||||
}],
|
}],
|
||||||
"functions": [],
|
"functions": [],
|
||||||
"variables": [{
|
"variables": [{
|
||||||
@ -20,9 +19,9 @@ OUTPUT:
|
|||||||
"usr": "c:@S@Foo@FI@member",
|
"usr": "c:@S@Foo@FI@member",
|
||||||
"short_name": "member",
|
"short_name": "member",
|
||||||
"qualified_name": "Foo::member",
|
"qualified_name": "Foo::member",
|
||||||
"declaration": "tests/vars/class_member.cc:2:7",
|
"declaration": "tests/vars/class_member.cc:2:8",
|
||||||
"initializations": ["tests/vars/class_member.cc:2:7"],
|
"initializations": ["tests/vars/class_member.cc:2:8"],
|
||||||
"variable_type": 1,
|
"variable_type": 0,
|
||||||
"declaring_type": 0
|
"declaring_type": 0
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
class Foo {
|
class Foo {
|
||||||
static int member;
|
static Foo* member;
|
||||||
};
|
};
|
||||||
int Foo::member = 0;
|
Foo* Foo::member = nullptr;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
OUTPUT:
|
OUTPUT:
|
||||||
{
|
{
|
||||||
@ -11,9 +12,8 @@ OUTPUT:
|
|||||||
"short_name": "Foo",
|
"short_name": "Foo",
|
||||||
"qualified_name": "Foo",
|
"qualified_name": "Foo",
|
||||||
"definition": "tests/vars/class_static_member.cc:1:7",
|
"definition": "tests/vars/class_static_member.cc:1:7",
|
||||||
"vars": [0]
|
"vars": [0],
|
||||||
}, {
|
"uses": ["tests/vars/class_static_member.cc:2:15", "tests/vars/class_static_member.cc:4:11"]
|
||||||
"id": 1
|
|
||||||
}],
|
}],
|
||||||
"functions": [],
|
"functions": [],
|
||||||
"variables": [{
|
"variables": [{
|
||||||
@ -21,9 +21,9 @@ OUTPUT:
|
|||||||
"usr": "c:@S@Foo@member",
|
"usr": "c:@S@Foo@member",
|
||||||
"short_name": "member",
|
"short_name": "member",
|
||||||
"qualified_name": "Foo::member",
|
"qualified_name": "Foo::member",
|
||||||
"declaration": "tests/vars/class_static_member.cc:2:14",
|
"declaration": "tests/vars/class_static_member.cc:2:15",
|
||||||
"initializations": ["tests/vars/class_static_member.cc:4:10"],
|
"initializations": ["tests/vars/class_static_member.cc:4:11"],
|
||||||
"variable_type": 1,
|
"variable_type": 0,
|
||||||
"declaring_type": 0
|
"declaring_type": 0
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
|
@ -1,26 +1,33 @@
|
|||||||
|
struct Foo;
|
||||||
|
|
||||||
void foo() {
|
void foo() {
|
||||||
int a;
|
Foo* a;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
OUTPUT:
|
OUTPUT:
|
||||||
{
|
{
|
||||||
"types": [{
|
"types": [{
|
||||||
"id": 0
|
"id": 0,
|
||||||
|
"usr": "c:@S@Foo",
|
||||||
|
"short_name": "Foo",
|
||||||
|
"qualified_name": "Foo",
|
||||||
|
"declaration": "tests/vars/function_local.cc:1:8",
|
||||||
|
"uses": ["tests/vars/function_local.cc:4:8"]
|
||||||
}],
|
}],
|
||||||
"functions": [{
|
"functions": [{
|
||||||
"id": 0,
|
"id": 0,
|
||||||
"usr": "c:@F@foo#",
|
"usr": "c:@F@foo#",
|
||||||
"short_name": "foo",
|
"short_name": "foo",
|
||||||
"qualified_name": "foo",
|
"qualified_name": "foo",
|
||||||
"definition": "tests/vars/function_local.cc:1:6"
|
"definition": "tests/vars/function_local.cc:3:6"
|
||||||
}],
|
}],
|
||||||
"variables": [{
|
"variables": [{
|
||||||
"id": 0,
|
"id": 0,
|
||||||
"usr": "c:function_local.cc@16@F@foo#@a",
|
"usr": "c:function_local.cc@31@F@foo#@a",
|
||||||
"short_name": "a",
|
"short_name": "a",
|
||||||
"qualified_name": "a",
|
"qualified_name": "a",
|
||||||
"declaration": "tests/vars/function_local.cc:2:7",
|
"declaration": "tests/vars/function_local.cc:4:8",
|
||||||
"initializations": ["tests/vars/function_local.cc:2:7"],
|
"initializations": ["tests/vars/function_local.cc:4:8"],
|
||||||
"variable_type": 0
|
"variable_type": 0
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
|
@ -1,32 +1,39 @@
|
|||||||
void foo(int p0, int p1) {}
|
struct Foo;
|
||||||
|
|
||||||
|
void foo(Foo* p0, Foo* p1) {}
|
||||||
/*
|
/*
|
||||||
OUTPUT:
|
OUTPUT:
|
||||||
{
|
{
|
||||||
"types": [{
|
"types": [{
|
||||||
"id": 0
|
"id": 0,
|
||||||
|
"usr": "c:@S@Foo",
|
||||||
|
"short_name": "Foo",
|
||||||
|
"qualified_name": "Foo",
|
||||||
|
"declaration": "tests/vars/function_param.cc:1:8",
|
||||||
|
"uses": ["tests/vars/function_param.cc:3:15", "tests/vars/function_param.cc:3:24"]
|
||||||
}],
|
}],
|
||||||
"functions": [{
|
"functions": [{
|
||||||
"id": 0,
|
"id": 0,
|
||||||
"usr": "c:@F@foo#I#I#",
|
"usr": "c:@F@foo#*$@S@Foo#S0_#",
|
||||||
"short_name": "foo",
|
"short_name": "foo",
|
||||||
"qualified_name": "foo",
|
"qualified_name": "foo",
|
||||||
"definition": "tests/vars/function_param.cc:1:6"
|
"definition": "tests/vars/function_param.cc:3:6"
|
||||||
}],
|
}],
|
||||||
"variables": [{
|
"variables": [{
|
||||||
"id": 0,
|
"id": 0,
|
||||||
"usr": "c:function_param.cc@9@F@foo#I#I#@p0",
|
"usr": "c:function_param.cc@24@F@foo#*$@S@Foo#S0_#@p0",
|
||||||
"short_name": "p0",
|
"short_name": "p0",
|
||||||
"qualified_name": "p0",
|
"qualified_name": "p0",
|
||||||
"declaration": "tests/vars/function_param.cc:1:14",
|
"declaration": "tests/vars/function_param.cc:3:15",
|
||||||
"initializations": ["tests/vars/function_param.cc:1:14"],
|
"initializations": ["tests/vars/function_param.cc:3:15"],
|
||||||
"variable_type": 0
|
"variable_type": 0
|
||||||
}, {
|
}, {
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"usr": "c:function_param.cc@17@F@foo#I#I#@p1",
|
"usr": "c:function_param.cc@33@F@foo#*$@S@Foo#S0_#@p1",
|
||||||
"short_name": "p1",
|
"short_name": "p1",
|
||||||
"qualified_name": "p1",
|
"qualified_name": "p1",
|
||||||
"declaration": "tests/vars/function_param.cc:1:22",
|
"declaration": "tests/vars/function_param.cc:3:24",
|
||||||
"initializations": ["tests/vars/function_param.cc:1:22"],
|
"initializations": ["tests/vars/function_param.cc:3:24"],
|
||||||
"variable_type": 0
|
"variable_type": 0
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
|
@ -7,9 +7,7 @@ void foo(int, int) {}
|
|||||||
|
|
||||||
OUTPUT:
|
OUTPUT:
|
||||||
{
|
{
|
||||||
"types": [{
|
"types": [],
|
||||||
"id": 0
|
|
||||||
}],
|
|
||||||
"functions": [{
|
"functions": [{
|
||||||
"id": 0,
|
"id": 0,
|
||||||
"usr": "c:@F@foo#I#I#",
|
"usr": "c:@F@foo#I#I#",
|
||||||
@ -20,8 +18,7 @@ OUTPUT:
|
|||||||
"variables": [{
|
"variables": [{
|
||||||
"id": 0,
|
"id": 0,
|
||||||
"declaration": "tests/vars/function_param_unnamed.cc:1:13",
|
"declaration": "tests/vars/function_param_unnamed.cc:1:13",
|
||||||
"initializations": ["tests/vars/function_param_unnamed.cc:1:13", "tests/vars/function_param_unnamed.cc:1:18"],
|
"initializations": ["tests/vars/function_param_unnamed.cc:1:13", "tests/vars/function_param_unnamed.cc:1:18"]
|
||||||
"variable_type": 0
|
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
*/
|
*/
|
@ -1,15 +1,16 @@
|
|||||||
void foo() {
|
void foo() {
|
||||||
int a;
|
int a;
|
||||||
|
a = 1;
|
||||||
{
|
{
|
||||||
int a;
|
int a;
|
||||||
|
a = 2;
|
||||||
}
|
}
|
||||||
|
a = 3;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
OUTPUT:
|
OUTPUT:
|
||||||
{
|
{
|
||||||
"types": [{
|
"types": [],
|
||||||
"id": 0
|
|
||||||
}],
|
|
||||||
"functions": [{
|
"functions": [{
|
||||||
"id": 0,
|
"id": 0,
|
||||||
"usr": "c:@F@foo#",
|
"usr": "c:@F@foo#",
|
||||||
@ -24,15 +25,15 @@ OUTPUT:
|
|||||||
"qualified_name": "a",
|
"qualified_name": "a",
|
||||||
"declaration": "tests/vars/function_shadow_local.cc:2:7",
|
"declaration": "tests/vars/function_shadow_local.cc:2:7",
|
||||||
"initializations": ["tests/vars/function_shadow_local.cc:2:7"],
|
"initializations": ["tests/vars/function_shadow_local.cc:2:7"],
|
||||||
"variable_type": 0
|
"uses": ["tests/vars/function_shadow_local.cc:3:3", "tests/vars/function_shadow_local.cc:8:3"]
|
||||||
}, {
|
}, {
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"usr": "c:function_shadow_local.cc@33@F@foo#@a",
|
"usr": "c:function_shadow_local.cc@43@F@foo#@a",
|
||||||
"short_name": "a",
|
"short_name": "a",
|
||||||
"qualified_name": "a",
|
"qualified_name": "a",
|
||||||
"declaration": "tests/vars/function_shadow_local.cc:4:9",
|
"declaration": "tests/vars/function_shadow_local.cc:5:9",
|
||||||
"initializations": ["tests/vars/function_shadow_local.cc:4:9"],
|
"initializations": ["tests/vars/function_shadow_local.cc:5:9"],
|
||||||
"variable_type": 0
|
"uses": ["tests/vars/function_shadow_local.cc:6:5"]
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
*/
|
*/
|
@ -4,9 +4,7 @@ void foo(int p) {
|
|||||||
/*
|
/*
|
||||||
OUTPUT:
|
OUTPUT:
|
||||||
{
|
{
|
||||||
"types": [{
|
"types": [],
|
||||||
"id": 0
|
|
||||||
}],
|
|
||||||
"functions": [{
|
"functions": [{
|
||||||
"id": 0,
|
"id": 0,
|
||||||
"usr": "c:@F@foo#I#",
|
"usr": "c:@F@foo#I#",
|
||||||
@ -20,16 +18,14 @@ OUTPUT:
|
|||||||
"short_name": "p",
|
"short_name": "p",
|
||||||
"qualified_name": "p",
|
"qualified_name": "p",
|
||||||
"declaration": "tests/vars/function_shadow_param.cc:1:14",
|
"declaration": "tests/vars/function_shadow_param.cc:1:14",
|
||||||
"initializations": ["tests/vars/function_shadow_param.cc:1:14"],
|
"initializations": ["tests/vars/function_shadow_param.cc:1:14"]
|
||||||
"variable_type": 0
|
|
||||||
}, {
|
}, {
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"usr": "c:function_shadow_param.cc@21@F@foo#I#@p",
|
"usr": "c:function_shadow_param.cc@21@F@foo#I#@p",
|
||||||
"short_name": "p",
|
"short_name": "p",
|
||||||
"qualified_name": "p",
|
"qualified_name": "p",
|
||||||
"declaration": "tests/vars/function_shadow_param.cc:2:7",
|
"declaration": "tests/vars/function_shadow_param.cc:2:7",
|
||||||
"initializations": ["tests/vars/function_shadow_param.cc:2:7"],
|
"initializations": ["tests/vars/function_shadow_param.cc:2:7"]
|
||||||
"variable_type": 0
|
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
*/
|
*/
|
@ -2,9 +2,7 @@ static int global = 0;
|
|||||||
/*
|
/*
|
||||||
OUTPUT:
|
OUTPUT:
|
||||||
{
|
{
|
||||||
"types": [{
|
"types": [],
|
||||||
"id": 0
|
|
||||||
}],
|
|
||||||
"functions": [],
|
"functions": [],
|
||||||
"variables": [{
|
"variables": [{
|
||||||
"id": 0,
|
"id": 0,
|
||||||
@ -12,8 +10,7 @@ OUTPUT:
|
|||||||
"short_name": "global",
|
"short_name": "global",
|
||||||
"qualified_name": "global",
|
"qualified_name": "global",
|
||||||
"declaration": "tests/vars/global_variable.cc:1:12",
|
"declaration": "tests/vars/global_variable.cc:1:12",
|
||||||
"initializations": ["tests/vars/global_variable.cc:1:12"],
|
"initializations": ["tests/vars/global_variable.cc:1:12"]
|
||||||
"variable_type": 0
|
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
*/
|
*/
|
Loading…
Reference in New Issue
Block a user