114 fprint (stderr, "error: %1\n", e.what()); |
114 fprint (stderr, "error: %1\n", e.what()); |
115 } |
115 } |
116 } |
116 } |
117 |
117 |
118 // ============================================================================ |
118 // ============================================================================ |
119 // Utility functions |
119 // |
120 |
|
121 // ============================================================================ |
|
122 // Does the given file exist? |
|
123 bool fexists (string path) |
|
124 { |
|
125 if (FILE* test = fopen (path, "r")) |
|
126 { |
|
127 fclose (test); |
|
128 return true; |
|
129 } |
|
130 |
|
131 return false; |
|
132 } |
|
133 |
|
134 // ============================================================================ |
|
135 // Mutates given filename to an object filename |
120 // Mutates given filename to an object filename |
136 string ObjectFileName (string s) |
121 // |
|
122 string make_object_file_name (string s) |
137 { |
123 { |
138 // Locate the extension and chop it out |
124 // Locate the extension and chop it out |
139 int extdot = s.last ("."); |
125 int extdot = s.last ("."); |
140 |
126 |
141 if (extdot >= s.length() - 4) |
127 if (extdot >= s.length() - 4) |
144 s += ".o"; |
130 s += ".o"; |
145 return s; |
131 return s; |
146 } |
132 } |
147 |
133 |
148 // ============================================================================ |
134 // ============================================================================ |
149 type_e GetTypeByName (string t) |
135 // |
|
136 type_e get_type_by_name (string t) |
150 { |
137 { |
151 t = t.to_lowercase(); |
138 t = t.to_lowercase(); |
152 return (t == "int") ? TYPE_INT : |
139 return (t == "int") ? e_int_type : |
153 (t == "str") ? TYPE_STRING : |
140 (t == "str") ? e_string_type : |
154 (t == "void") ? TYPE_VOID : |
141 (t == "void") ? e_void_type : |
155 (t == "bool") ? TYPE_BOOL : |
142 (t == "bool") ? e_bool_type : |
156 TYPE_UNKNOWN; |
143 e_unknown_type; |
157 } |
144 } |
158 |
145 |
159 |
146 |
160 // ============================================================================ |
147 // ============================================================================ |
|
148 // |
161 // Inverse operation - type name by value |
149 // Inverse operation - type name by value |
162 string GetTypeName (type_e type) |
150 // |
|
151 string get_type_name (type_e type) |
163 { |
152 { |
164 switch (type) |
153 switch (type) |
165 { |
154 { |
166 case TYPE_INT: return "int"; break; |
155 case e_int_type: return "int"; break; |
167 case TYPE_STRING: return "str"; break; |
156 case e_string_type: return "str"; break; |
168 case TYPE_VOID: return "void"; break; |
157 case e_void_type: return "void"; break; |
169 case TYPE_BOOL: return "bool"; break; |
158 case e_bool_type: return "bool"; break; |
170 case TYPE_UNKNOWN: return "???"; break; |
159 case e_unknown_type: return "???"; break; |
171 } |
160 } |
172 |
161 |
173 return ""; |
162 return ""; |
174 } |
163 } |
|
164 |
175 // ============================================================================= |
165 // ============================================================================= |
176 // |
166 // |
177 |
|
178 string make_version_string (int major, int minor, int patch) |
167 string make_version_string (int major, int minor, int patch) |
179 { |
168 { |
180 string ver = format ("%1.%2", major, minor); |
169 string ver = format ("%1.%2", major, minor); |
181 |
170 |
182 if (patch != 0) |
171 if (patch != 0) |