| /* |
| * 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 |