I am work on a project related with GCC AST.
In my project, i write a plugin for GCC. This plugin read a AST from a
source code, a covert this source code to another language.
Currently i have a problem with GCC AST. In particular, i cannot
retrieve all information about CALL_EXPR.
I read GCC internal, and i have known about structure of CALL_EXPR node in GCC.
But when i have a source code
class A{
public:
virtual void read();
};
class B : A {
public:
int a;
void read() {}
};
class D {
public:
void test() {
B *b;
b->read();
}
};
int main(int argc, char** argv) {
D d;
d.test();
}
This is AST of method test in class D i got:
bind_expr (test.cpp:21-18)
statement_list
decl_expr (test.cpp:20-12)
var_decl : b (B *) (test.cpp :20)
cleanup_point_expr (test.cpp:21-18)
expr_stmt (test.cpp:21-18)
call_expr (test.cpp:21-17)
obj_type_ref
indirect_ref (test.cpp:21-17)
non_lvalue_expr (test.cpp:21-17)
component_ref
component_ref
indirect_ref
non_lvalue_expr
var_decl : b (B *) (test.cpp :20)
field_decl : internal hidden (unknown type) (test.cpp :9)
field_decl : _vptr.A (int * *) (test.cpp :4)
non_lvalue_expr
var_decl : b (B *) (test.cpp :20)
integer_cst 0
non_lvalue_expr
var_decl : b (B *) (test.cpp :20)
The problem is method read() of class B is get from a virtual method
of based class A. And i cannot get the real name of this method.
Do you have any ideal to help me. Thansk