| /* | 
 |  * Licensed to the Apache Software Foundation (ASF) under one | 
 |  * or more contributor license agreements. See the NOTICE file | 
 |  * distributed with this work for additional information | 
 |  * regarding copyright ownership. The ASF licenses this file | 
 |  * to you under the Apache License, Version 2.0 (the | 
 |  * "License"); you may not use this file except in compliance | 
 |  * with the License. You may obtain a copy of the License at | 
 |  * | 
 |  *   http://www.apache.org/licenses/LICENSE-2.0 | 
 |  * | 
 |  * Unless required by applicable law or agreed to in writing, | 
 |  * software distributed under the License is distributed on an | 
 |  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
 |  * KIND, either express or implied. See the License for the | 
 |  * specific language governing permissions and limitations | 
 |  * under the License. | 
 |  */ | 
 |  | 
 | #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. | 
 |  * | 
 |  */ | 
 |  | 
 | /** | 
 |  * 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 | 
 | }; | 
 |  | 
 | /** | 
 |  * Strictness level | 
 |  */ | 
 | extern int g_strict; | 
 |  | 
 | /** | 
 |  * 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 |