From 022d636605730cf5ab211957dac6fecce51ff32e Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Wed, 13 Jun 2018 00:07:06 -0400 Subject: [PATCH] record class names --- src/parser/parser.cc | 11 +++++++++++ src/parser/parser.h | 2 ++ src/parser/parser.yc | 2 ++ 3 files changed, 15 insertions(+) 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); } ;