Bash++
Bash++ compiler internal documentation
BashppListener.h
Go to the documentation of this file.
1
6#ifndef SRC_LISTENER_BASHPPLISTENER_H_
7#define SRC_LISTENER_BASHPPLISTENER_H_
8
9#include <iostream>
10#include <vector>
11#include <set>
12#include <list>
13#include <memory>
14#include <stack>
15#include <optional>
16#include <antlr4-runtime.h>
17
18#include "../antlr/BashppParserBaseListener.h"
19
20class BashppListener;
21
22#include "../bpp_include/bpp_codegen.h"
28
29#include "../bpp_include/bpp.h"
30
31#include "../syntax_error.h"
32#include "../internal_error.h"
33
34#define skip_syntax_errors if (error_thrown) { \
35 if (error_context == ctx) { \
36 error_thrown = false; \
37 error_context = nullptr; \
38 } \
39 return; \
40 }
41
62class BashppListener : public BashppParserBaseListener, std::enable_shared_from_this<BashppListener> {
63 private:
68 std::string source_file;
69
70 bool included = false;
71
76 std::shared_ptr<std::vector<std::string>> include_paths = nullptr;
77
78 bool suppress_warnings = false;
79
84 std::shared_ptr<std::set<std::string>> included_files = std::make_shared<std::set<std::string>>();
86
91 std::stack<std::string> include_stack;
92
97 std::shared_ptr<std::ostream> code_buffer;
98 std::shared_ptr<std::ostream> output_stream;
99 std::string output_file;
100 bool run_on_exit = false;
101
106 std::pair<uint16_t, uint16_t> target_bash_version = {5, 2};
107
112 std::vector<char*> arguments = {};
113
114 std::shared_ptr<bpp::bpp_program> program = std::make_shared<bpp::bpp_program>();
115
116 bool in_while_condition = false;
117 std::shared_ptr<bpp::bash_while_condition> current_while_condition = nullptr;
118 bool in_method = false;
119
120 bool in_class = false;
121 bool in_supershell = false;
122 bool in_bash_function = false;
123
135 std::stack<std::shared_ptr<bpp::bpp_entity>> entity_stack;
136
147 std::optional<std::pair<std::string, std::string>> replacement_file_contents;
148
149 std::shared_ptr<bpp::bpp_class> primitive;
150
151 bool error_thrown = false;
152 antlr4::ParserRuleContext* error_context = nullptr;
153
154 bool program_has_errors = false;
155
156 #define set_error_context error_thrown = true; error_context = ctx;
157
158 template<class T>
159 static constexpr bool dependent_false_v = false;
160
161 template<typename Sym>
162 void output_syntax_error(Sym* error_ctx, const std::string& msg) {
163 if constexpr(std::is_base_of<antlr4::ParserRuleContext, Sym>::value) {
164 // A ParserRuleContext has been passed
165 int line = static_cast<int>(error_ctx->getStart()->getLine());
166 int column = static_cast<int>(error_ctx->getStart()->getCharPositionInLine());
167 std::string text = error_ctx->getText();
169 } else if constexpr(std::is_base_of<antlr4::tree::TerminalNode, Sym>::value) {
170 // A token has been passed directly
171 antlr4::Token* symbol = error_ctx->getSymbol();
172 antlr4::CommonToken* token = dynamic_cast<antlr4::CommonToken*>(symbol);
173 int line;
174 int column;
175 std::string text;
176 if (token == nullptr) {
177 line = static_cast<int>(symbol->getLine());
178 column = static_cast<int>(symbol->getCharPositionInLine());
179 text = symbol->getText();
180 } else {
181 line = static_cast<int>(token->getLine());
182 column = static_cast<int>(token->getCharPositionInLine());
183 text = token->getText();
184 }
186 } else if constexpr(std::is_base_of<antlr4::Token, Sym>::value) {
187 // A symbol has been passed
188 int line = static_cast<int>(error_ctx->getLine());
189 int column = static_cast<int>(error_ctx->getCharPositionInLine());
190 std::string text = error_ctx->getText();
192 } else {
193 static_assert(dependent_false_v<Sym>, "output_syntax_error<Sym>: Sym must be a ParserRuleContext*, TerminalNode*, or Token*.");
194 }
195 program_has_errors = true;
196 }
197
198 #define throw_syntax_error_sym(symbol, msg) \
199 output_syntax_error(symbol, msg); \
200 set_error_context \
201 return;
202
203 #define throw_syntax_error(token, msg) \
204 throw_syntax_error_sym(token, msg) \
205 set_error_context \
206 return;
207
208 #define throw_syntax_error_from_exitRule(token, msg) \
209 output_syntax_error(token, msg); \
210 return;
211
212 #define show_warning_sym(symbol, msg) \
213 if (!suppress_warnings) { \
214 int line = static_cast<int>(symbol->getLine()); \
215 int column = static_cast<int>(symbol->getCharPositionInLine()); \
216 std::string text = symbol->getText(); \
217 print_syntax_error_or_warning(source_file, line, column, text, msg, get_include_stack(), program, true); \
218 }
219
220 #define show_warning(token, msg) antlr4::Token* symbol = token->getSymbol(); \
221 show_warning_sym(symbol, msg)
222
223 public:
224
225 void set_source_file(std::string source_file);
226 void set_include_paths(std::shared_ptr<std::vector<std::string>> include_paths);
227 void set_included(bool included);
229 void set_included_files(std::shared_ptr<std::set<std::string>> included_files);
230 void set_errors();
231 void set_code_buffer(std::shared_ptr<std::ostream> code_buffer);
232 void set_output_stream(std::shared_ptr<std::ostream> output_stream);
233 void set_output_file(std::string output_file);
234 void set_run_on_exit(bool run_on_exit);
236 void set_target_bash_version(uint16_t major, uint16_t minor);
237 void set_arguments(std::vector<char*> arguments);
238
239 void set_replacement_file_contents(const std::string& file_path, const std::string& contents);
240
241 std::shared_ptr<bpp::bpp_program> get_program();
242 std::shared_ptr<std::set<std::string>> get_included_files();
243 std::stack<std::string> get_include_stack();
244
245 std::shared_ptr<bpp::bpp_code_entity> latest_code_entity();
246
247 void enterProgram(BashppParser::ProgramContext *ctx) override;
248 void exitProgram(BashppParser::ProgramContext *ctx) override;
249
250 void enterInclude_statement(BashppParser::Include_statementContext *ctx) override;
251 void exitInclude_statement(BashppParser::Include_statementContext *ctx) override;
252
253 void enterClass_definition(BashppParser::Class_definitionContext *ctx) override;
254 void exitClass_definition(BashppParser::Class_definitionContext *ctx) override;
255
256 void enterMember_declaration(BashppParser::Member_declarationContext *ctx) override;
257 void exitMember_declaration(BashppParser::Member_declarationContext *ctx) override;
258
259 void enterObject_instantiation(BashppParser::Object_instantiationContext *ctx) override;
260 void exitObject_instantiation(BashppParser::Object_instantiationContext *ctx) override;
261
262 void enterPointer_declaration(BashppParser::Pointer_declarationContext *ctx) override;
263 void exitPointer_declaration(BashppParser::Pointer_declarationContext *ctx) override;
264
265 void enterValue_assignment(BashppParser::Value_assignmentContext *ctx) override;
266 void exitValue_assignment(BashppParser::Value_assignmentContext *ctx) override;
267
268 void enterMethod_definition(BashppParser::Method_definitionContext *ctx) override;
269 void exitMethod_definition(BashppParser::Method_definitionContext *ctx) override;
270
271 void enterConstructor_definition(BashppParser::Constructor_definitionContext *ctx) override;
272 void exitConstructor_definition(BashppParser::Constructor_definitionContext *ctx) override;
273
274 void enterDestructor_definition(BashppParser::Destructor_definitionContext *ctx) override;
275 void exitDestructor_definition(BashppParser::Destructor_definitionContext *ctx) override;
276
277 void enterSelf_reference(BashppParser::Self_referenceContext *ctx) override;
278 void exitSelf_reference(BashppParser::Self_referenceContext *ctx) override;
279
280 void enterSelf_reference_as_lvalue(BashppParser::Self_reference_as_lvalueContext *ctx) override;
281 void exitSelf_reference_as_lvalue(BashppParser::Self_reference_as_lvalueContext *ctx) override;
282
283 void enterStatement(BashppParser::StatementContext *ctx) override;
284 void exitStatement(BashppParser::StatementContext *ctx) override;
285
286 void enterClass_body_statement(BashppParser::Class_body_statementContext *ctx) override;
287 void exitClass_body_statement(BashppParser::Class_body_statementContext *ctx) override;
288
289 void enterGeneral_statement(BashppParser::General_statementContext *ctx) override;
290 void exitGeneral_statement(BashppParser::General_statementContext *ctx) override;
291
292 void enterObject_assignment(BashppParser::Object_assignmentContext *ctx) override;
293
294 void exitObject_assignment(BashppParser::Object_assignmentContext *ctx) override;
295
296 void enterPointer_dereference(BashppParser::Pointer_dereferenceContext *ctx) override;
297 void exitPointer_dereference(BashppParser::Pointer_dereferenceContext *ctx) override;
298
299 void enterObject_address(BashppParser::Object_addressContext *ctx) override;
300 void exitObject_address(BashppParser::Object_addressContext *ctx) override;
301
302 void enterObject_reference(BashppParser::Object_referenceContext *ctx) override;
303 void exitObject_reference(BashppParser::Object_referenceContext *ctx) override;
304
305 void enterObject_reference_as_lvalue(BashppParser::Object_reference_as_lvalueContext *ctx) override;
306 void exitObject_reference_as_lvalue(BashppParser::Object_reference_as_lvalueContext *ctx) override;
307
308 void enterNullptr_ref(BashppParser::Nullptr_refContext *ctx) override;
309 void exitNullptr_ref(BashppParser::Nullptr_refContext *ctx) override;
310
311 void enterNew_statement(BashppParser::New_statementContext *ctx) override;
312 void exitNew_statement(BashppParser::New_statementContext *ctx) override;
313
314 void enterDelete_statement(BashppParser::Delete_statementContext *ctx) override;
315 void exitDelete_statement(BashppParser::Delete_statementContext *ctx) override;
316
317 void enterDynamic_cast_statement(BashppParser::Dynamic_cast_statementContext *ctx) override;
318 void exitDynamic_cast_statement(BashppParser::Dynamic_cast_statementContext *ctx) override;
319
320 void enterDynamic_cast_target(BashppParser::Dynamic_cast_targetContext *ctx) override;
321 void exitDynamic_cast_target(BashppParser::Dynamic_cast_targetContext *ctx) override;
322
323 void enterTypeof_statement(BashppParser::Typeof_statementContext *ctx) override;
324 void exitTypeof_statement(BashppParser::Typeof_statementContext *ctx) override;
325
326 void enterSupershell(BashppParser::SupershellContext *ctx) override;
327 void exitSupershell(BashppParser::SupershellContext *ctx) override;
328
329 void enterSubshell(BashppParser::SubshellContext *ctx) override;
330 void exitSubshell(BashppParser::SubshellContext *ctx) override;
331
332 void enterDeprecated_subshell(BashppParser::Deprecated_subshellContext *ctx) override;
333 void exitDeprecated_subshell(BashppParser::Deprecated_subshellContext *ctx) override;
334
335 void enterBash_arithmetic(BashppParser::Bash_arithmeticContext *ctx) override;
336 void exitBash_arithmetic(BashppParser::Bash_arithmeticContext *ctx) override;
337
338 void enterString(BashppParser::StringContext *ctx) override;
339 void exitString(BashppParser::StringContext *ctx) override;
340
341 void enterSinglequote_string(BashppParser::Singlequote_stringContext *ctx) override;
342 void exitSinglequote_string(BashppParser::Singlequote_stringContext *ctx) override;
343
344 void enterParameter(BashppParser::ParameterContext *ctx) override;
345 void exitParameter(BashppParser::ParameterContext *ctx) override;
346
347 void enterOther_statement(BashppParser::Other_statementContext *ctx) override;
348 void exitOther_statement(BashppParser::Other_statementContext *ctx) override;
349
350 void enterRaw_rvalue(BashppParser::Raw_rvalueContext *ctx) override;
351 void exitRaw_rvalue(BashppParser::Raw_rvalueContext *ctx) override;
352
353 void enterArray_value(BashppParser::Array_valueContext *ctx) override;
354 void exitArray_value(BashppParser::Array_valueContext *ctx) override;
355
356 void enterArray_index(BashppParser::Array_indexContext *ctx) override;
357 void exitArray_index(BashppParser::Array_indexContext *ctx) override;
358
359 void enterBash_if_statement(BashppParser::Bash_if_statementContext *ctx) override;
360 void exitBash_if_statement(BashppParser::Bash_if_statementContext *ctx) override;
361
362 void enterBash_if_root_branch(BashppParser::Bash_if_root_branchContext *ctx) override;
363 void exitBash_if_root_branch(BashppParser::Bash_if_root_branchContext *ctx) override;
364
365 void enterBash_if_else_branch(BashppParser::Bash_if_else_branchContext *ctx) override;
366 void exitBash_if_else_branch(BashppParser::Bash_if_else_branchContext *ctx) override;
367
368 void enterBash_if_condition(BashppParser::Bash_if_conditionContext *ctx) override;
369 void exitBash_if_condition(BashppParser::Bash_if_conditionContext *ctx) override;
370
371 void enterBash_case_statement(BashppParser::Bash_case_statementContext *ctx) override;
372 void exitBash_case_statement(BashppParser::Bash_case_statementContext *ctx) override;
373
374 void enterBash_case_pattern(BashppParser::Bash_case_patternContext *ctx) override;
375 void exitBash_case_pattern(BashppParser::Bash_case_patternContext *ctx) override;
376
377 void enterBash_case_pattern_header(BashppParser::Bash_case_pattern_headerContext *ctx) override;
378 void exitBash_case_pattern_header(BashppParser::Bash_case_pattern_headerContext *ctx) override;
379
380 void enterBash_while_loop(BashppParser::Bash_while_loopContext *ctx) override;
381 void exitBash_while_loop(BashppParser::Bash_while_loopContext *ctx) override;
382
383 void enterBash_while_condition(BashppParser::Bash_while_conditionContext *ctx) override;
384 void exitBash_while_condition(BashppParser::Bash_while_conditionContext *ctx) override;
385
386 void enterBash_for_loop(BashppParser::Bash_for_loopContext *ctx) override;
387 void exitBash_for_loop(BashppParser::Bash_for_loopContext *ctx) override;
388
389 void enterBash_for_header(BashppParser::Bash_for_headerContext *ctx) override;
390 void exitBash_for_header(BashppParser::Bash_for_headerContext *ctx) override;
391
392 void enterBash_function(BashppParser::Bash_functionContext *ctx) override;
393 void exitBash_function(BashppParser::Bash_functionContext *ctx) override;
394
395 void enterHeredoc(BashppParser::HeredocContext *ctx) override;
396 void exitHeredoc(BashppParser::HeredocContext *ctx) override;
397
398 void enterHeredoc_header(BashppParser::Heredoc_headerContext *ctx) override;
399 void exitHeredoc_header(BashppParser::Heredoc_headerContext *ctx) override;
400
401 void enterExtra_statement(BashppParser::Extra_statementContext *ctx) override;
402 void exitExtra_statement(BashppParser::Extra_statementContext *ctx) override;
403
404 void enterTerminal_token(BashppParser::Terminal_tokenContext *ctx) override;
405 void exitTerminal_token(BashppParser::Terminal_tokenContext *ctx) override;
406
407};
408
409#endif // SRC_LISTENER_BASHPPLISTENER_H_
The main listener class for the Bash++ compiler.
Definition BashppListener.h:62
void enterValue_assignment(BashppParser::Value_assignmentContext *ctx) override
Definition value_assignment.cpp:8
void enterBash_while_loop(BashppParser::Bash_while_loopContext *ctx) override
Definition bash_while_loop.cpp:14
void enterArray_index(BashppParser::Array_indexContext *ctx) override
Definition array_index.cpp:8
bool in_class
Definition BashppListener.h:120
bool in_method
Definition BashppListener.h:118
void exitBash_for_header(BashppParser::Bash_for_headerContext *ctx) override
Definition bash_for_loop.cpp:78
std::shared_ptr< bpp::bash_while_condition > current_while_condition
Definition BashppListener.h:117
void exitObject_assignment(BashppParser::Object_assignmentContext *ctx) override
Definition object_assignment.cpp:17
void exitBash_if_root_branch(BashppParser::Bash_if_root_branchContext *ctx) override
Definition bash_if_statement.cpp:142
void exitDelete_statement(BashppParser::Delete_statementContext *ctx) override
Definition delete_statement.cpp:29
bool in_bash_function
Definition BashppListener.h:122
void enterBash_case_statement(BashppParser::Bash_case_statementContext *ctx) override
Definition bash_case_statement.cpp:15
void enterBash_if_root_branch(BashppParser::Bash_if_root_branchContext *ctx) override
Definition bash_if_statement.cpp:117
void enterMember_declaration(BashppParser::Member_declarationContext *ctx) override
Definition member_declaration.cpp:8
bool run_on_exit
Definition BashppListener.h:100
void exitArray_value(BashppParser::Array_valueContext *ctx) override
Definition array_value.cpp:33
void exitDynamic_cast_target(BashppParser::Dynamic_cast_targetContext *ctx) override
Definition dynamic_cast_target.cpp:27
std::stack< std::string > include_stack
A chain of included files, from the main file to the current file (used for error reporting)
Definition BashppListener.h:91
bool error_thrown
Definition BashppListener.h:151
std::optional< std::pair< std::string, std::string > > replacement_file_contents
This option is used by the language server.
Definition BashppListener.h:147
void set_output_file(std::string output_file)
Definition BashppListener.cpp:53
void exitRaw_rvalue(BashppParser::Raw_rvalueContext *ctx) override
Definition raw_rvalue.cpp:17
bool program_has_errors
Definition BashppListener.h:154
void exitBash_case_statement(BashppParser::Bash_case_statementContext *ctx) override
Definition bash_case_statement.cpp:46
void exitSelf_reference(BashppParser::Self_referenceContext *ctx) override
Definition self_reference.cpp:38
void enterHeredoc_header(BashppParser::Heredoc_headerContext *ctx) override
Definition heredoc.cpp:47
void enterBash_while_condition(BashppParser::Bash_while_conditionContext *ctx) override
Definition bash_while_loop.cpp:83
void set_run_on_exit(bool run_on_exit)
Definition BashppListener.cpp:57
void enterInclude_statement(BashppParser::Include_statementContext *ctx) override
Handles.
Definition include_statement.cpp:29
void enterSubshell(BashppParser::SubshellContext *ctx) override
Definition subshell.cpp:8
std::shared_ptr< std::ostream > code_buffer
Definition BashppListener.h:97
void exitSinglequote_string(BashppParser::Singlequote_stringContext *ctx) override
Definition singlequote_string.cpp:19
void exitTerminal_token(BashppParser::Terminal_tokenContext *ctx) override
Definition terminal_token.cpp:18
bool in_supershell
Definition BashppListener.h:121
void enterPointer_dereference(BashppParser::Pointer_dereferenceContext *ctx) override
Definition pointer_dereference.cpp:8
std::pair< uint16_t, uint16_t > target_bash_version
The target Bash version to compile for (default is 5.2)
Definition BashppListener.h:106
std::vector< char * > arguments
Command-line arguments to pass to the compiled program if run_on_exit is true.
Definition BashppListener.h:112
void enterClass_definition(BashppParser::Class_definitionContext *ctx) override
Definition class_definition.cpp:8
void set_include_paths(std::shared_ptr< std::vector< std::string > > include_paths)
Definition BashppListener.cpp:12
void enterArray_value(BashppParser::Array_valueContext *ctx) override
Definition array_value.cpp:8
void exitNullptr_ref(BashppParser::Nullptr_refContext *ctx) override
Definition nullptr_ref.cpp:25
void enterSelf_reference(BashppParser::Self_referenceContext *ctx) override
Definition self_reference.cpp:8
void exitClass_definition(BashppParser::Class_definitionContext *ctx) override
Definition class_definition.cpp:69
void exitConstructor_definition(BashppParser::Constructor_definitionContext *ctx) override
Definition constructor_definition.cpp:37
void set_included_files(std::shared_ptr< std::set< std::string > > included_files)
Sets the included_files pointer to the given set of included files.
Definition BashppListener.cpp:32
void set_source_file(std::string source_file)
Definition BashppListener.cpp:8
void set_output_stream(std::shared_ptr< std::ostream > output_stream)
Definition BashppListener.cpp:49
void exitObject_reference_as_lvalue(BashppParser::Object_reference_as_lvalueContext *ctx) override
Definition object_reference_as_lvalue.cpp:216
void exitBash_if_statement(BashppParser::Bash_if_statementContext *ctx) override
Definition bash_if_statement.cpp:89
void enterSelf_reference_as_lvalue(BashppParser::Self_reference_as_lvalueContext *ctx) override
Definition self_reference_as_lvalue.cpp:8
void set_errors()
Sets the program_has_errors flag to true.
Definition BashppListener.cpp:41
bool in_while_condition
Definition BashppListener.h:116
void enterDelete_statement(BashppParser::Delete_statementContext *ctx) override
Definition delete_statement.cpp:8
void enterBash_for_loop(BashppParser::Bash_for_loopContext *ctx) override
Definition bash_for_loop.cpp:14
static constexpr bool dependent_false_v
Definition BashppListener.h:159
void enterOther_statement(BashppParser::Other_statementContext *ctx) override
Definition other_statement.cpp:8
void enterTypeof_statement(BashppParser::Typeof_statementContext *ctx) override
Definition typeof.cpp:8
void set_included(bool included)
Definition BashppListener.cpp:16
std::shared_ptr< std::ostream > output_stream
Pointer to the output stream to write the compiled code to.
Definition BashppListener.h:98
void enterBash_function(BashppParser::Bash_functionContext *ctx) override
Definition bash_function.cpp:8
void exitBash_arithmetic(BashppParser::Bash_arithmeticContext *ctx) override
Definition bash_arithmetic.cpp:33
void set_included_from(BashppListener *included_from)
Sets the included_from pointer to the given listener.
Definition BashppListener.cpp:23
void enterMethod_definition(BashppParser::Method_definitionContext *ctx) override
Definition method_definition.cpp:8
void exitHeredoc_header(BashppParser::Heredoc_headerContext *ctx) override
Definition heredoc.cpp:61
std::string output_file
Definition BashppListener.h:99
void exitDynamic_cast_statement(BashppParser::Dynamic_cast_statementContext *ctx) override
Definition dynamic_cast.cpp:39
void output_syntax_error(Sym *error_ctx, const std::string &msg)
Definition BashppListener.h:162
void enterExtra_statement(BashppParser::Extra_statementContext *ctx) override
Definition extra_statement.cpp:8
void enterStatement(BashppParser::StatementContext *ctx) override
Definition statement.cpp:8
void exitBash_for_loop(BashppParser::Bash_for_loopContext *ctx) override
Definition bash_for_loop.cpp:34
void enterObject_instantiation(BashppParser::Object_instantiationContext *ctx) override
Definition object_instantiation.cpp:8
void exitObject_address(BashppParser::Object_addressContext *ctx) override
Definition object_address.cpp:30
void exitMember_declaration(BashppParser::Member_declarationContext *ctx) override
Definition member_declaration.cpp:71
bool included
Definition BashppListener.h:70
void exitExtra_statement(BashppParser::Extra_statementContext *ctx) override
Definition extra_statement.cpp:18
void exitParameter(BashppParser::ParameterContext *ctx) override
Definition parameter.cpp:81
bool suppress_warnings
Definition BashppListener.h:78
void set_arguments(std::vector< char * > arguments)
Definition BashppListener.cpp:69
antlr4::ParserRuleContext * error_context
Definition BashppListener.h:152
void enterSinglequote_string(BashppParser::Singlequote_stringContext *ctx) override
Definition singlequote_string.cpp:8
void enterParameter(BashppParser::ParameterContext *ctx) override
Definition parameter.cpp:8
void enterObject_reference(BashppParser::Object_referenceContext *ctx) override
Definition object_reference.cpp:8
std::stack< std::shared_ptr< bpp::bpp_entity > > entity_stack
A stack to keep track of the current entity being processed.
Definition BashppListener.h:135
void set_code_buffer(std::shared_ptr< std::ostream > code_buffer)
Definition BashppListener.cpp:45
std::shared_ptr< std::set< std::string > > included_files
A set of (unique) included files (used for '@include_once' directives)
Definition BashppListener.h:84
void enterNullptr_ref(BashppParser::Nullptr_refContext *ctx) override
Definition nullptr_ref.cpp:8
void set_target_bash_version(uint16_t major, uint16_t minor)
Definition BashppListener.cpp:65
void exitBash_case_pattern(BashppParser::Bash_case_patternContext *ctx) override
Definition bash_case_statement.cpp:90
void enterNew_statement(BashppParser::New_statementContext *ctx) override
Definition new_statement.cpp:8
void enterBash_if_condition(BashppParser::Bash_if_conditionContext *ctx) override
Definition bash_if_statement.cpp:228
void enterBash_if_else_branch(BashppParser::Bash_if_else_branchContext *ctx) override
Definition bash_if_statement.cpp:170
void exitObject_instantiation(BashppParser::Object_instantiationContext *ctx) override
Definition object_instantiation.cpp:97
void enterBash_if_statement(BashppParser::Bash_if_statementContext *ctx) override
Definition bash_if_statement.cpp:16
void exitHeredoc(BashppParser::HeredocContext *ctx) override
Definition heredoc.cpp:28
void enterTerminal_token(BashppParser::Terminal_tokenContext *ctx) override
Definition terminal_token.cpp:8
void enterDynamic_cast_target(BashppParser::Dynamic_cast_targetContext *ctx) override
Definition dynamic_cast_target.cpp:8
void enterObject_assignment(BashppParser::Object_assignmentContext *ctx) override
Definition object_assignment.cpp:8
BashppListener * included_from
Definition BashppListener.h:85
void enterBash_arithmetic(BashppParser::Bash_arithmeticContext *ctx) override
Definition bash_arithmetic.cpp:8
void enterHeredoc(BashppParser::HeredocContext *ctx) override
Definition heredoc.cpp:14
std::shared_ptr< bpp::bpp_code_entity > latest_code_entity()
Definition BashppListener.cpp:85
std::shared_ptr< std::vector< std::string > > include_paths
A list of paths to search for included files.
Definition BashppListener.h:76
void exitBash_while_loop(BashppParser::Bash_while_loopContext *ctx) override
Definition bash_while_loop.cpp:34
void enterDestructor_definition(BashppParser::Destructor_definitionContext *ctx) override
Definition destructor_definition.cpp:8
void set_suppress_warnings(bool suppress_warnings)
Definition BashppListener.cpp:61
void enterBash_case_pattern(BashppParser::Bash_case_patternContext *ctx) override
Definition bash_case_statement.cpp:67
void enterGeneral_statement(BashppParser::General_statementContext *ctx) override
Definition general_statement.cpp:8
void enterString(BashppParser::StringContext *ctx) override
Definition string.cpp:8
void enterDynamic_cast_statement(BashppParser::Dynamic_cast_statementContext *ctx) override
Definition dynamic_cast.cpp:8
void exitSupershell(BashppParser::SupershellContext *ctx) override
Definition supershell.cpp:37
void exitOther_statement(BashppParser::Other_statementContext *ctx) override
Definition other_statement.cpp:25
void exitNew_statement(BashppParser::New_statementContext *ctx) override
Definition new_statement.cpp:63
void enterSupershell(BashppParser::SupershellContext *ctx) override
Definition supershell.cpp:8
std::shared_ptr< bpp::bpp_class > primitive
Definition BashppListener.h:149
void enterBash_case_pattern_header(BashppParser::Bash_case_pattern_headerContext *ctx) override
Definition bash_case_statement.cpp:122
void exitBash_while_condition(BashppParser::Bash_while_conditionContext *ctx) override
Definition bash_while_loop.cpp:102
void exitGeneral_statement(BashppParser::General_statementContext *ctx) override
Definition general_statement.cpp:19
void exitPointer_dereference(BashppParser::Pointer_dereferenceContext *ctx) override
Definition pointer_dereference.cpp:43
void exitProgram(BashppParser::ProgramContext *ctx) override
Definition program.cpp:39
void exitSubshell(BashppParser::SubshellContext *ctx) override
Definition subshell.cpp:32
void enterPointer_declaration(BashppParser::Pointer_declarationContext *ctx) override
Definition pointer_declaration.cpp:8
void exitArray_index(BashppParser::Array_indexContext *ctx) override
Definition array_index.cpp:34
std::shared_ptr< std::set< std::string > > get_included_files()
Definition BashppListener.cpp:77
void exitBash_case_pattern_header(BashppParser::Bash_case_pattern_headerContext *ctx) override
Definition bash_case_statement.cpp:137
void exitClass_body_statement(BashppParser::Class_body_statementContext *ctx) override
Definition class_body_statement.cpp:39
void exitString(BashppParser::StringContext *ctx) override
Definition string.cpp:30
void enterRaw_rvalue(BashppParser::Raw_rvalueContext *ctx) override
Definition raw_rvalue.cpp:8
void enterProgram(BashppParser::ProgramContext *ctx) override
Definition program.cpp:14
void exitDestructor_definition(BashppParser::Destructor_definitionContext *ctx) override
Definition destructor_definition.cpp:37
void enterDeprecated_subshell(BashppParser::Deprecated_subshellContext *ctx) override
Definition deprecated_subshell.cpp:8
void exitObject_reference(BashppParser::Object_referenceContext *ctx) override
Definition object_reference.cpp:35
void exitBash_function(BashppParser::Bash_functionContext *ctx) override
Definition bash_function.cpp:56
void exitInclude_statement(BashppParser::Include_statementContext *ctx) override
Definition include_statement.cpp:230
std::shared_ptr< bpp::bpp_program > program
Definition BashppListener.h:114
void enterObject_reference_as_lvalue(BashppParser::Object_reference_as_lvalueContext *ctx) override
Definition object_reference_as_lvalue.cpp:8
std::string source_file
Path to the source file being compiled (used for error reporting)
Definition BashppListener.h:68
void enterConstructor_definition(BashppParser::Constructor_definitionContext *ctx) override
Definition constructor_definition.cpp:8
void enterClass_body_statement(BashppParser::Class_body_statementContext *ctx) override
Definition class_body_statement.cpp:8
void exitTypeof_statement(BashppParser::Typeof_statementContext *ctx) override
Definition typeof.cpp:28
std::shared_ptr< bpp::bpp_program > get_program()
Definition BashppListener.cpp:73
void exitValue_assignment(BashppParser::Value_assignmentContext *ctx) override
Definition value_assignment.cpp:25
void enterBash_for_header(BashppParser::Bash_for_headerContext *ctx) override
Definition bash_for_loop.cpp:64
void exitStatement(BashppParser::StatementContext *ctx) override
Definition statement.cpp:12
void exitBash_if_else_branch(BashppParser::Bash_if_else_branchContext *ctx) override
Definition bash_if_statement.cpp:200
void exitPointer_declaration(BashppParser::Pointer_declarationContext *ctx) override
Definition pointer_declaration.cpp:97
void exitSelf_reference_as_lvalue(BashppParser::Self_reference_as_lvalueContext *ctx) override
Definition self_reference_as_lvalue.cpp:173
void set_replacement_file_contents(const std::string &file_path, const std::string &contents)
Definition BashppListener.cpp:108
void enterObject_address(BashppParser::Object_addressContext *ctx) override
Definition object_address.cpp:8
void exitBash_if_condition(BashppParser::Bash_if_conditionContext *ctx) override
Definition bash_if_statement.cpp:245
std::stack< std::string > get_include_stack()
Definition BashppListener.cpp:81
void exitMethod_definition(BashppParser::Method_definitionContext *ctx) override
Definition method_definition.cpp:66
void exitDeprecated_subshell(BashppParser::Deprecated_subshellContext *ctx) override
Definition deprecated_subshell.cpp:26
code_segment generate_supershell_code(const std::string &code_to_run, bool in_while_condition, std::shared_ptr< bash_while_condition > current_while_condition, std::shared_ptr< bpp::bpp_program > program)
Generates a supershell code segment for executing a bash command.
Definition bpp_codegen.cpp:27
code_segment generate_dynamic_cast_code(const std::string &reference_code, const std::string &class_name, std::shared_ptr< bpp::bpp_program > program)
Generates a code segment for performing a dynamic cast.
Definition bpp_codegen.cpp:185
code_segment generate_delete_code(std::shared_ptr< bpp::bpp_object > object, const std::string &object_ref, std::shared_ptr< bpp::bpp_program > program)
Generates a code segment for deleting an object.
Definition bpp_codegen.cpp:90
code_segment generate_method_call_code(const std::string &reference_code, const std::string &method_name, std::shared_ptr< bpp::bpp_class > assumed_class, bool force_static_reference, std::shared_ptr< bpp::bpp_program > program)
Generates a code segment for calling a method.
Definition bpp_codegen.cpp:128
A struct to hold (compiled) code segments.
Definition bpp_codegen.h:40
void print_syntax_error_or_warning(std::string source_file, int line, int column, const std::string &text, const std::string &msg, std::stack< std::string > include_chain, std::shared_ptr< bpp::bpp_program > program, bool is_warning)
Print a syntax error or warning message to stderr.
Definition syntax_error.cpp:19