Sun, 02 Feb 2014 01:50:23 +0200
- further reformat
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
72
diff
changeset
|
1 | /* |
85
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
84
diff
changeset
|
2 | Copyright 2012-2014 Santeri Piippo |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
72
diff
changeset
|
3 | All rights reserved. |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
72
diff
changeset
|
4 | |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
72
diff
changeset
|
5 | Redistribution and use in source and binary forms, with or without |
85
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
84
diff
changeset
|
6 | modification, are permitted provided that the following conditions |
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
84
diff
changeset
|
7 | are met: |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
72
diff
changeset
|
8 | |
85
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
84
diff
changeset
|
9 | 1. Redistributions of source code must retain the above copyright |
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
84
diff
changeset
|
10 | notice, this list of conditions and the following disclaimer. |
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
84
diff
changeset
|
11 | 2. Redistributions in binary form must reproduce the above copyright |
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
84
diff
changeset
|
12 | notice, this list of conditions and the following disclaimer in the |
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
84
diff
changeset
|
13 | documentation and/or other materials provided with the distribution. |
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
84
diff
changeset
|
14 | 3. The name of the author may not be used to endorse or promote products |
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
84
diff
changeset
|
15 | derived from this software without specific prior written permission. |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
72
diff
changeset
|
16 | |
85
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
84
diff
changeset
|
17 | THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
84
diff
changeset
|
18 | IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
84
diff
changeset
|
19 | OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
84
diff
changeset
|
20 | IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
84
diff
changeset
|
21 | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
84
diff
changeset
|
22 | NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
84
diff
changeset
|
23 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
84
diff
changeset
|
24 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
84
diff
changeset
|
25 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
84
diff
changeset
|
26 | THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
72
diff
changeset
|
27 | */ |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
72
diff
changeset
|
28 | |
72
03e4d9db3fd9
- major refactoring begins
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
29 | #ifndef BOTC_TYPES_H |
03e4d9db3fd9
- major refactoring begins
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
30 | #define BOTC_TYPES_H |
03e4d9db3fd9
- major refactoring begins
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
31 | |
03e4d9db3fd9
- major refactoring begins
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
32 | #include <cstdlib> |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
72
diff
changeset
|
33 | #include <stdexcept> |
86
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
34 | #include "str.h" |
72
03e4d9db3fd9
- major refactoring begins
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
35 | |
03e4d9db3fd9
- major refactoring begins
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
36 | static const std::nullptr_t null = nullptr; |
03e4d9db3fd9
- major refactoring begins
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
37 | |
86
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
38 | // Byte datatype |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
39 | typedef int32_t word; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
40 | typedef unsigned char byte; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
41 | |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
42 | // Parser mode: where is the parser at? |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
43 | enum parsermode_e |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
44 | { |
87 | 45 | e_top_level_mode, // at top level |
46 | e_event_mode, // inside event definition | |
47 | e_main_loop_mode, // inside mainloop | |
48 | e_onenter_mode, // inside onenter | |
49 | e_onexit_mode, // inside onexit | |
86
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
50 | }; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
51 | |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
52 | enum type_e |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
53 | { |
87 | 54 | e_unknown_type = 0, |
55 | e_void_type, | |
56 | e_int_type, | |
57 | e_string_type, | |
58 | e_bool_type, | |
86
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
59 | }; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
60 | |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
61 | // Script mark and reference |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
62 | struct byte_mark |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
63 | { |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
64 | string name; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
65 | int pos; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
66 | }; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
67 | |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
68 | struct mark_reference |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
69 | { |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
70 | byte_mark* target; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
71 | int pos; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
72 | }; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
73 | |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
74 | class script_error : public std::exception |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
75 | { |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
76 | public: |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
77 | script_error (const string& msg) : m_msg (msg) {} |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
78 | |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
79 | inline const char* what() const throw() |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
80 | { |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
81 | return m_msg.c_str(); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
82 | } |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
83 | |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
84 | private: |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
85 | string m_msg; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
86 | }; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
87 | |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
88 | // ==================================================================== |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
89 | // Generic union |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
90 | template <class T> union generic_union |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
91 | { |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
92 | T as_t; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
93 | byte as_bytes[sizeof (T)]; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
94 | char as_chars[sizeof (T)]; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
95 | double as_double; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
96 | float as_float; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
97 | int as_int; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
98 | word as_word; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
99 | }; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
100 | |
75
bf8c57437231
- renamed files to .cxx, restructured parser.cc
Teemu Piippo <crimsondusk64@gmail.com>
parents:
74
diff
changeset
|
101 | template<class T> inline T abs (T a) |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
72
diff
changeset
|
102 | { |
75
bf8c57437231
- renamed files to .cxx, restructured parser.cc
Teemu Piippo <crimsondusk64@gmail.com>
parents:
74
diff
changeset
|
103 | return (a >= 0) ? a : -a; |
bf8c57437231
- renamed files to .cxx, restructured parser.cc
Teemu Piippo <crimsondusk64@gmail.com>
parents:
74
diff
changeset
|
104 | } |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
72
diff
changeset
|
105 | |
81
071715c17296
- further lexer corrections
Teemu Piippo <crimsondusk64@gmail.com>
parents:
75
diff
changeset
|
106 | #ifdef IN_IDE_PARSER |
071715c17296
- further lexer corrections
Teemu Piippo <crimsondusk64@gmail.com>
parents:
75
diff
changeset
|
107 | using FILE = void; |
071715c17296
- further lexer corrections
Teemu Piippo <crimsondusk64@gmail.com>
parents:
75
diff
changeset
|
108 | #endif |
071715c17296
- further lexer corrections
Teemu Piippo <crimsondusk64@gmail.com>
parents:
75
diff
changeset
|
109 | |
72
03e4d9db3fd9
- major refactoring begins
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
110 | #endif // BOTC_TYPES_H |