|  | // 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; | 
|  |  | 
|  | /** | 
|  | * The last parsed doctext comment. | 
|  | */ | 
|  | extern char* g_doctext; | 
|  |  | 
|  | /** | 
|  | * The location of the last parsed doctext comment. | 
|  | */ | 
|  | extern int g_doctext_lineno; | 
|  |  | 
|  | #endif |