| // Copyright (c) 2006- Facebook | 
 | // Distributed under the Thrift Software License | 
 | // | 
 | // See accompanying file LICENSE or visit the Thrift site at: | 
 | // http://developers.facebook.com/thrift/ | 
 |  | 
 | #ifndef T_GLOBALS_H | 
 | #define T_GLOBALS_H | 
 |  | 
 | #include <set> | 
 | #include <queue> | 
 | #include <stack> | 
 | #include <vector> | 
 | #include <string> | 
 |  | 
 | /** | 
 |  * This module contains all the global variables (slap on the wrist) that are | 
 |  * shared throughout the program. The reason for this is to facilitate simple | 
 |  * interaction between the parser and the rest of the program. Before calling | 
 |  * yyparse(), the main.cc program will make necessary adjustments to these | 
 |  * global variables such that the parser does the right thing and puts entries | 
 |  * into the right containers, etc. | 
 |  * | 
 |  * @author Mark Slee <mcslee@facebook.com> | 
 |  */ | 
 |  | 
 | /** | 
 |  * Hooray for forward declaration of types! | 
 |  */ | 
 |  | 
 | class t_program; | 
 | class t_scope; | 
 | class t_type; | 
 |  | 
 | /** | 
 |  * Parsing mode, two passes up in this gin rummy! | 
 |  */ | 
 |  | 
 | enum PARSE_MODE { | 
 |   INCLUDES = 1, | 
 |   PROGRAM = 2 | 
 | }; | 
 |  | 
 | /** | 
 |  * The master program parse tree. This is accessed from within the parser code | 
 |  * to build up the program elements. | 
 |  */ | 
 | extern t_program* g_program; | 
 |  | 
 | /** | 
 |  * Global types for the parser to be able to reference | 
 |  */ | 
 |  | 
 | extern t_type* g_type_void; | 
 | extern t_type* g_type_string; | 
 | extern t_type* g_type_binary; | 
 | extern t_type* g_type_slist; | 
 | extern t_type* g_type_bool; | 
 | extern t_type* g_type_byte; | 
 | extern t_type* g_type_i16; | 
 | extern t_type* g_type_i32; | 
 | extern t_type* g_type_i64; | 
 | extern t_type* g_type_double; | 
 |  | 
 | /** | 
 |  * The scope that we are currently parsing into | 
 |  */ | 
 | extern t_scope* g_scope; | 
 |  | 
 | /** | 
 |  * The parent scope to also load symbols into | 
 |  */ | 
 | extern t_scope* g_parent_scope; | 
 |  | 
 | /** | 
 |  * The prefix for the parent scope entries | 
 |  */ | 
 | extern std::string g_parent_prefix; | 
 |  | 
 | /** | 
 |  * The parsing pass that we are on. We do different things on each pass. | 
 |  */ | 
 | extern PARSE_MODE g_parse_mode; | 
 |  | 
 | /** | 
 |  * Global time string, used in formatting error messages etc. | 
 |  */ | 
 | extern char* g_time_str; | 
 |  | 
 | #endif |