diff --git a/src/parser/parser.cc b/src/parser/parser.cc index de0bc86..5415d61 100644 --- a/src/parser/parser.cc +++ b/src/parser/parser.cc @@ -7,6 +7,7 @@ #include std::unordered_set type_names; +std::unordered_set class_names; extern FILE * yyin; @@ -260,3 +261,13 @@ void set_translation_unit_node(Node * _translation_unit_node) { translation_unit_node = _translation_unit_node; } + +void observe_class_name(const std::string & name) +{ + class_names.insert(name); +} + +bool is_class_name(const std::string & name) +{ + return class_names.count(name) != 0u; +} diff --git a/src/parser/parser.h b/src/parser/parser.h index a6ded94..07eb21c 100644 --- a/src/parser/parser.h +++ b/src/parser/parser.h @@ -15,5 +15,7 @@ void handle_parse_error(const char * str, const YYLTYPE * yylloc); void observe_type_name(const Node * node); bool is_type_name(const std::string & type_name); void set_translation_unit_node(Node * _translation_unit_node); +void observe_class_name(const std::string & name); +bool is_class_name(const std::string & name); #endif diff --git a/src/parser/parser.yc b/src/parser/parser.yc index 85b5e6a..431df85 100644 --- a/src/parser/parser.yc +++ b/src/parser/parser.yc @@ -749,9 +749,11 @@ enumerator class_specifier : CLASS IDENTIFIER LCURLY RCURLY { $$ = new Node(NODE_TYPE_LIST); + observe_class_name(*$2->token.text); } | CLASS IDENTIFIER LCURLY external_declaration_list RCURLY { $$ = new Node(NODE_TYPE_LIST); + observe_class_name(*$2->token.text); } ;