blob: 3b9e4a48da4318c84d7a11ffc14f1b760b18cfc5 [file] [log] [blame]
David Reissea2cba82009-03-30 21:35:00 +00001/*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
Mark Sleee9ce01c2007-05-16 02:29:53 +000019
Mark Slee31985722006-05-24 21:45:31 +000020#ifndef T_GLOBALS_H
21#define T_GLOBALS_H
22
Mark Sleef0712dc2006-10-25 19:03:57 +000023#include <set>
24#include <queue>
25#include <stack>
26#include <vector>
27#include <string>
28
29/**
30 * This module contains all the global variables (slap on the wrist) that are
31 * shared throughout the program. The reason for this is to facilitate simple
32 * interaction between the parser and the rest of the program. Before calling
33 * yyparse(), the main.cc program will make necessary adjustments to these
34 * global variables such that the parser does the right thing and puts entries
35 * into the right containers, etc.
36 *
Mark Sleef0712dc2006-10-25 19:03:57 +000037 */
38
39/**
40 * Hooray for forward declaration of types!
41 */
42
Mark Slee31985722006-05-24 21:45:31 +000043class t_program;
Mark Sleef0712dc2006-10-25 19:03:57 +000044class t_scope;
45class t_type;
46
47/**
48 * Parsing mode, two passes up in this gin rummy!
49 */
50
51enum PARSE_MODE {
52 INCLUDES = 1,
53 PROGRAM = 2
54};
Mark Slee31985722006-05-24 21:45:31 +000055
Mark Sleef5377b32006-10-10 01:42:59 +000056/**
57 * The master program parse tree. This is accessed from within the parser code
58 * to build up the program elements.
59 */
Mark Slee31985722006-05-24 21:45:31 +000060extern t_program* g_program;
61
Mark Sleef5377b32006-10-10 01:42:59 +000062/**
Mark Sleef0712dc2006-10-25 19:03:57 +000063 * Global types for the parser to be able to reference
Mark Sleef5377b32006-10-10 01:42:59 +000064 */
Mark Sleef0712dc2006-10-25 19:03:57 +000065
66extern t_type* g_type_void;
67extern t_type* g_type_string;
Mark Slee8d725a22007-04-13 01:57:12 +000068extern t_type* g_type_binary;
Mark Sleeb6200d82007-01-19 19:14:36 +000069extern t_type* g_type_slist;
Mark Sleef0712dc2006-10-25 19:03:57 +000070extern t_type* g_type_bool;
71extern t_type* g_type_byte;
72extern t_type* g_type_i16;
73extern t_type* g_type_i32;
74extern t_type* g_type_i64;
75extern t_type* g_type_double;
76
77/**
78 * The scope that we are currently parsing into
79 */
80extern t_scope* g_scope;
81
82/**
83 * The parent scope to also load symbols into
84 */
85extern t_scope* g_parent_scope;
86
87/**
88 * The prefix for the parent scope entries
89 */
90extern std::string g_parent_prefix;
91
92/**
93 * The parsing pass that we are on. We do different things on each pass.
94 */
95extern PARSE_MODE g_parse_mode;
Mark Slee31985722006-05-24 21:45:31 +000096
Mark Sleef5377b32006-10-10 01:42:59 +000097/**
98 * Global time string, used in formatting error messages etc.
99 */
Mark Slee31985722006-05-24 21:45:31 +0000100extern char* g_time_str;
101
David Reisscbd4bac2007-08-14 17:12:33 +0000102/**
103 * The last parsed doctext comment.
104 */
105extern char* g_doctext;
106
107/**
108 * The location of the last parsed doctext comment.
109 */
110extern int g_doctext_lineno;
111
Mark Slee31985722006-05-24 21:45:31 +0000112#endif