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 <antlr4-runtime.h>
16 
17 #include "../antlr/BashppParserBaseListener.h"
18 
19 class BashppListener;
20 
21 #include "../bpp_include/bpp_codegen.h"
27 
28 #include "../bpp_include/bpp.h"
29 
30 #include "../syntax_error.h"
31 #include "../internal_error.h"
32 
33 #define skip_syntax_errors if (error_thrown) { \
34  if (error_context == ctx) { \
35  error_thrown = false; \
36  error_context = nullptr; \
37  } \
38  return; \
39  }
40 
61 class BashppListener : public BashppParserBaseListener, std::enable_shared_from_this<BashppListener> {
62  private:
67  std::string source_file;
68 
69  bool included = false;
70 
75  std::shared_ptr<std::vector<std::string>> include_paths = nullptr;
76 
77  bool suppress_warnings = false;
78 
83  std::shared_ptr<std::set<std::string>> included_files = std::make_shared<std::set<std::string>>();
85 
90  std::stack<std::string> include_stack;
91 
96  std::shared_ptr<std::ostream> code_buffer;
97  std::shared_ptr<std::ostream> output_stream;
98  std::string output_file;
99  bool run_on_exit = false;
100 
105  std::vector<char*> arguments = {};
106 
107  std::shared_ptr<bpp::bpp_program> program = std::make_shared<bpp::bpp_program>();
108 
109  bool in_while_condition = false;
110  std::shared_ptr<bpp::bash_while_condition> current_while_condition = nullptr;
111  bool in_method = false;
112 
124  std::stack<std::shared_ptr<bpp::bpp_entity>> entity_stack;
125 
126  static constexpr const char* protected_keywords[] = {
127  "class", "constructor", "delete", "destructor",
128  "dynamic_cast", "include", "include_once", "method",
129  "new", "nullptr", "primitive", "private",
130  "protected", "public", "super", "this", "virtual"
131  };
132 
133  bool is_protected_keyword(const std::string& keyword);
134 
135  std::shared_ptr<bpp::bpp_class> primitive;
136 
137  bool error_thrown = false;
138  antlr4::ParserRuleContext* error_context = nullptr;
139 
140  bool program_has_errors = false;
141 
142  #define set_error_context error_thrown = true; error_context = ctx;
143 
144  #define output_syntax_error(symbol, msg) \
145  antlr4::CommonToken* token = dynamic_cast<antlr4::CommonToken*>(symbol); \
146  int line; \
147  int column; \
148  std::string text; \
149  if (token == nullptr) { \
150  line = static_cast<int>(symbol->getLine()); \
151  column = static_cast<int>(symbol->getCharPositionInLine()); \
152  text = symbol->getText(); \
153  } else { \
154  line = static_cast<int>(token->getLine()); \
155  column = static_cast<int>(token->getCharPositionInLine()); \
156  text = token->getText(); \
157  } \
158  print_syntax_error_or_warning(source_file, line, column, text, msg, get_include_stack()); \
159  program_has_errors = true;
160 
161  #define throw_syntax_error_sym(symbol, msg) \
162  output_syntax_error(symbol, msg) \
163  set_error_context \
164  return;
165 
166  #define throw_syntax_error(token, msg) antlr4::Token* symbol = token->getSymbol(); \
167  throw_syntax_error_sym(symbol, msg) \
168  set_error_context \
169  return;
170 
171  #define throw_syntax_error_from_exitRule(token, msg) antlr4::Token* symbol = token->getSymbol(); \
172  output_syntax_error(symbol, msg) \
173  return;
174 
175  #define show_warning_sym(symbol, msg) \
176  if (!suppress_warnings) { \
177  int line = static_cast<int>(symbol->getLine()); \
178  int column = static_cast<int>(symbol->getCharPositionInLine()); \
179  std::string text = symbol->getText(); \
180  print_syntax_error_or_warning(source_file, line, column, text, msg, get_include_stack(), true); \
181  }
182 
183  #define show_warning(token, msg) antlr4::Token* symbol = token->getSymbol(); \
184  show_warning_sym(symbol, msg)
185 
186  public:
187 
188  void set_source_file(std::string source_file);
189  void set_include_paths(std::shared_ptr<std::vector<std::string>> include_paths);
190  void set_included(bool included);
192  void set_included_files(std::shared_ptr<std::set<std::string>> included_files);
193  void set_errors();
194  void set_code_buffer(std::shared_ptr<std::ostream> code_buffer);
195  void set_output_stream(std::shared_ptr<std::ostream> output_stream);
196  void set_output_file(std::string output_file);
197  void set_run_on_exit(bool run_on_exit);
199  void set_arguments(std::vector<char*> arguments);
200 
201  std::shared_ptr<bpp::bpp_program> get_program();
202  std::shared_ptr<std::set<std::string>> get_included_files();
203  std::stack<std::string> get_include_stack();
204 
205  std::shared_ptr<bpp::bpp_code_entity> latest_code_entity();
206 
207  void enterProgram(BashppParser::ProgramContext *ctx) override;
208  void exitProgram(BashppParser::ProgramContext *ctx) override;
209 
210  void enterInclude_statement(BashppParser::Include_statementContext *ctx) override;
211  void exitInclude_statement(BashppParser::Include_statementContext *ctx) override;
212 
213  void enterClass_definition(BashppParser::Class_definitionContext *ctx) override;
214  void exitClass_definition(BashppParser::Class_definitionContext *ctx) override;
215 
216  void enterMember_declaration(BashppParser::Member_declarationContext *ctx) override;
217  void exitMember_declaration(BashppParser::Member_declarationContext *ctx) override;
218 
219  void enterObject_instantiation(BashppParser::Object_instantiationContext *ctx) override;
220  void exitObject_instantiation(BashppParser::Object_instantiationContext *ctx) override;
221 
222  void enterPointer_declaration(BashppParser::Pointer_declarationContext *ctx) override;
223  void exitPointer_declaration(BashppParser::Pointer_declarationContext *ctx) override;
224 
225  void enterValue_assignment(BashppParser::Value_assignmentContext *ctx) override;
226  void exitValue_assignment(BashppParser::Value_assignmentContext *ctx) override;
227 
228  void enterMethod_definition(BashppParser::Method_definitionContext *ctx) override;
229  void exitMethod_definition(BashppParser::Method_definitionContext *ctx) override;
230 
231  void enterConstructor_definition(BashppParser::Constructor_definitionContext *ctx) override;
232  void exitConstructor_definition(BashppParser::Constructor_definitionContext *ctx) override;
233 
234  void enterDestructor_definition(BashppParser::Destructor_definitionContext *ctx) override;
235  void exitDestructor_definition(BashppParser::Destructor_definitionContext *ctx) override;
236 
237  void enterSelf_reference(BashppParser::Self_referenceContext *ctx) override;
238  void exitSelf_reference(BashppParser::Self_referenceContext *ctx) override;
239 
240  void enterSelf_reference_as_lvalue(BashppParser::Self_reference_as_lvalueContext *ctx) override;
241  void exitSelf_reference_as_lvalue(BashppParser::Self_reference_as_lvalueContext *ctx) override;
242 
243  void enterStatement(BashppParser::StatementContext *ctx) override;
244  void exitStatement(BashppParser::StatementContext *ctx) override;
245 
246  void enterClass_body_statement(BashppParser::Class_body_statementContext *ctx) override;
247  void exitClass_body_statement(BashppParser::Class_body_statementContext *ctx) override;
248 
249  void enterGeneral_statement(BashppParser::General_statementContext *ctx) override;
250  void exitGeneral_statement(BashppParser::General_statementContext *ctx) override;
251 
252  void enterObject_assignment(BashppParser::Object_assignmentContext *ctx) override;
253 
254  void exitObject_assignment(BashppParser::Object_assignmentContext *ctx) override;
255 
256  void enterPointer_dereference(BashppParser::Pointer_dereferenceContext *ctx) override;
257  void exitPointer_dereference(BashppParser::Pointer_dereferenceContext *ctx) override;
258 
259  void enterObject_address(BashppParser::Object_addressContext *ctx) override;
260  void exitObject_address(BashppParser::Object_addressContext *ctx) override;
261 
262  void enterObject_reference(BashppParser::Object_referenceContext *ctx) override;
263  void exitObject_reference(BashppParser::Object_referenceContext *ctx) override;
264 
265  void enterObject_reference_as_lvalue(BashppParser::Object_reference_as_lvalueContext *ctx) override;
266  void exitObject_reference_as_lvalue(BashppParser::Object_reference_as_lvalueContext *ctx) override;
267 
268  void enterNullptr_ref(BashppParser::Nullptr_refContext *ctx) override;
269  void exitNullptr_ref(BashppParser::Nullptr_refContext *ctx) override;
270 
271  void enterNew_statement(BashppParser::New_statementContext *ctx) override;
272  void exitNew_statement(BashppParser::New_statementContext *ctx) override;
273 
274  void enterDelete_statement(BashppParser::Delete_statementContext *ctx) override;
275  void exitDelete_statement(BashppParser::Delete_statementContext *ctx) override;
276 
277  void enterDynamic_cast_statement(BashppParser::Dynamic_cast_statementContext *ctx) override;
278  void exitDynamic_cast_statement(BashppParser::Dynamic_cast_statementContext *ctx) override;
279 
280  void enterSupershell(BashppParser::SupershellContext *ctx) override;
281  void exitSupershell(BashppParser::SupershellContext *ctx) override;
282 
283  void enterSubshell(BashppParser::SubshellContext *ctx) override;
284  void exitSubshell(BashppParser::SubshellContext *ctx) override;
285 
286  void enterDeprecated_subshell(BashppParser::Deprecated_subshellContext *ctx) override;
287  void exitDeprecated_subshell(BashppParser::Deprecated_subshellContext *ctx) override;
288 
289  void enterBash_arithmetic(BashppParser::Bash_arithmeticContext *ctx) override;
290  void exitBash_arithmetic(BashppParser::Bash_arithmeticContext *ctx) override;
291 
292  void enterString(BashppParser::StringContext *ctx) override;
293  void exitString(BashppParser::StringContext *ctx) override;
294 
295  void enterSinglequote_string(BashppParser::Singlequote_stringContext *ctx) override;
296  void exitSinglequote_string(BashppParser::Singlequote_stringContext *ctx) override;
297 
298  void enterParameter(BashppParser::ParameterContext *ctx) override;
299  void exitParameter(BashppParser::ParameterContext *ctx) override;
300 
301  void enterOther_statement(BashppParser::Other_statementContext *ctx) override;
302  void exitOther_statement(BashppParser::Other_statementContext *ctx) override;
303 
304  void enterRaw_rvalue(BashppParser::Raw_rvalueContext *ctx) override;
305  void exitRaw_rvalue(BashppParser::Raw_rvalueContext *ctx) override;
306 
307  void enterArray_value(BashppParser::Array_valueContext *ctx) override;
308  void exitArray_value(BashppParser::Array_valueContext *ctx) override;
309 
310  void enterArray_index(BashppParser::Array_indexContext *ctx) override;
311  void exitArray_index(BashppParser::Array_indexContext *ctx) override;
312 
313  void enterBash_if_statement(BashppParser::Bash_if_statementContext *ctx) override;
314  void exitBash_if_statement(BashppParser::Bash_if_statementContext *ctx) override;
315 
316  void enterBash_if_root_branch(BashppParser::Bash_if_root_branchContext *ctx) override;
317  void exitBash_if_root_branch(BashppParser::Bash_if_root_branchContext *ctx) override;
318 
319  void enterBash_if_else_branch(BashppParser::Bash_if_else_branchContext *ctx) override;
320  void exitBash_if_else_branch(BashppParser::Bash_if_else_branchContext *ctx) override;
321 
322  void enterBash_if_condition(BashppParser::Bash_if_conditionContext *ctx) override;
323  void exitBash_if_condition(BashppParser::Bash_if_conditionContext *ctx) override;
324 
325  void enterBash_case_statement(BashppParser::Bash_case_statementContext *ctx) override;
326  void exitBash_case_statement(BashppParser::Bash_case_statementContext *ctx) override;
327 
328  void enterBash_case_pattern(BashppParser::Bash_case_patternContext *ctx) override;
329  void exitBash_case_pattern(BashppParser::Bash_case_patternContext *ctx) override;
330 
331  void enterBash_case_pattern_header(BashppParser::Bash_case_pattern_headerContext *ctx) override;
332  void exitBash_case_pattern_header(BashppParser::Bash_case_pattern_headerContext *ctx) override;
333 
334  void enterBash_while_loop(BashppParser::Bash_while_loopContext *ctx) override;
335  void exitBash_while_loop(BashppParser::Bash_while_loopContext *ctx) override;
336 
337  void enterBash_while_condition(BashppParser::Bash_while_conditionContext *ctx) override;
338  void exitBash_while_condition(BashppParser::Bash_while_conditionContext *ctx) override;
339 
340  void enterBash_for_loop(BashppParser::Bash_for_loopContext *ctx) override;
341  void exitBash_for_loop(BashppParser::Bash_for_loopContext *ctx) override;
342 
343  void enterBash_for_header(BashppParser::Bash_for_headerContext *ctx) override;
344  void exitBash_for_header(BashppParser::Bash_for_headerContext *ctx) override;
345 
346  void enterBash_function(BashppParser::Bash_functionContext *ctx) override;
347  void exitBash_function(BashppParser::Bash_functionContext *ctx) override;
348 
349  void enterHeredoc(BashppParser::HeredocContext *ctx) override;
350  void exitHeredoc(BashppParser::HeredocContext *ctx) override;
351 
352  void enterHeredoc_header(BashppParser::Heredoc_headerContext *ctx) override;
353  void exitHeredoc_header(BashppParser::Heredoc_headerContext *ctx) override;
354 
355  void enterExtra_statement(BashppParser::Extra_statementContext *ctx) override;
356  void exitExtra_statement(BashppParser::Extra_statementContext *ctx) override;
357 
358  void enterTerminal_token(BashppParser::Terminal_tokenContext *ctx) override;
359  void exitTerminal_token(BashppParser::Terminal_tokenContext *ctx) override;
360 
361 };
362 
363 #endif // SRC_LISTENER_BASHPPLISTENER_H_
bpp::code_segment code_segment
Definition: BashppListener.h:22
The main listener class for the Bash++ compiler.
Definition: BashppListener.h:61
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_method
Definition: BashppListener.h:111
void exitBash_for_header(BashppParser::Bash_for_headerContext *ctx) override
Definition: bash_for_loop.cpp:63
std::shared_ptr< bpp::bash_while_condition > current_while_condition
Definition: BashppListener.h:110
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:136
void exitDelete_statement(BashppParser::Delete_statementContext *ctx) override
Definition: delete_statement.cpp:29
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:99
void exitArray_value(BashppParser::Array_valueContext *ctx) override
Definition: array_value.cpp:33
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:90
bool error_thrown
Definition: BashppListener.h:137
void set_include_paths(std::shared_ptr< std::vector< std::string >> include_paths)
Definition: BashppListener.cpp:12
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:140
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:59
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:96
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
void enterPointer_dereference(BashppParser::Pointer_dereferenceContext *ctx) override
Definition: pointer_dereference.cpp:8
std::vector< char * > arguments
Command-line arguments to pass to the compiled program if run_on_exit is true.
Definition: BashppListener.h:105
void enterClass_definition(BashppParser::Class_definitionContext *ctx) override
Definition: class_definition.cpp:8
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:53
void exitConstructor_definition(BashppParser::Constructor_definitionContext *ctx) override
Definition: constructor_definition.cpp:31
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:215
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:109
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
void enterOther_statement(BashppParser::Other_statementContext *ctx) override
Definition: other_statement.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:97
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:98
void exitDynamic_cast_statement(BashppParser::Dynamic_cast_statementContext *ctx) override
Definition: dynamic_cast.cpp:41
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:28
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:65
bool included
Definition: BashppListener.h:69
void exitExtra_statement(BashppParser::Extra_statementContext *ctx) override
Definition: extra_statement.cpp:18
void exitParameter(BashppParser::ParameterContext *ctx) override
Definition: parameter.cpp:68
bool suppress_warnings
Definition: BashppListener.h:77
void set_arguments(std::vector< char * > arguments)
Definition: BashppListener.cpp:65
antlr4::ParserRuleContext * error_context
Definition: BashppListener.h:138
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:124
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:83
void enterNullptr_ref(BashppParser::Nullptr_refContext *ctx) override
Definition: nullptr_ref.cpp:8
void exitBash_case_pattern(BashppParser::Bash_case_patternContext *ctx) override
Definition: bash_case_statement.cpp:84
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:198
void enterBash_if_else_branch(BashppParser::Bash_if_else_branchContext *ctx) override
Definition: bash_if_statement.cpp:155
void exitObject_instantiation(BashppParser::Object_instantiationContext *ctx) override
Definition: object_instantiation.cpp:81
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
bool is_protected_keyword(const std::string &keyword)
Definition: BashppListener.cpp:104
void enterTerminal_token(BashppParser::Terminal_tokenContext *ctx) override
Definition: terminal_token.cpp:8
void enterObject_assignment(BashppParser::Object_assignmentContext *ctx) override
Definition: object_assignment.cpp:8
BashppListener * included_from
Definition: BashppListener.h:84
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:81
std::shared_ptr< std::vector< std::string > > include_paths
A list of paths to search for included files.
Definition: BashppListener.h:75
void exitBash_while_loop(BashppParser::Bash_while_loopContext *ctx) override
Definition: bash_while_loop.cpp:28
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:29
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:51
void enterSupershell(BashppParser::SupershellContext *ctx) override
Definition: supershell.cpp:8
std::shared_ptr< bpp::bpp_class > primitive
Definition: BashppListener.h:135
void enterBash_case_pattern_header(BashppParser::Bash_case_pattern_headerContext *ctx) override
Definition: bash_case_statement.cpp:107
void exitBash_while_condition(BashppParser::Bash_while_conditionContext *ctx) override
Definition: bash_while_loop.cpp:78
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:30
void exitSubshell(BashppParser::SubshellContext *ctx) override
Definition: subshell.cpp:26
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:73
void exitBash_case_pattern_header(BashppParser::Bash_case_pattern_headerContext *ctx) override
Definition: bash_case_statement.cpp:122
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:13
void exitDestructor_definition(BashppParser::Destructor_definitionContext *ctx) override
Definition: destructor_definition.cpp:31
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:48
void exitInclude_statement(BashppParser::Include_statementContext *ctx) override
Definition: include_statement.cpp:219
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
std::shared_ptr< bpp::bpp_program > program
Definition: BashppListener.h:107
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:67
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
std::shared_ptr< bpp::bpp_program > get_program()
Definition: BashppListener.cpp:69
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:49
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:179
void exitPointer_declaration(BashppParser::Pointer_declarationContext *ctx) override
Definition: pointer_declaration.cpp:85
void exitSelf_reference_as_lvalue(BashppParser::Self_reference_as_lvalueContext *ctx) override
Definition: self_reference_as_lvalue.cpp:172
void enterObject_address(BashppParser::Object_addressContext *ctx) override
Definition: object_address.cpp:8
static constexpr const char * protected_keywords[]
Definition: BashppListener.h:126
void exitBash_if_condition(BashppParser::Bash_if_conditionContext *ctx) override
Definition: bash_if_statement.cpp:215
std::stack< std::string > get_include_stack()
Definition: BashppListener.cpp:77
void exitMethod_definition(BashppParser::Method_definitionContext *ctx) override
Definition: method_definition.cpp:60
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:170
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:75
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:113
A struct to hold (compiled) code segments.
Definition: bpp_codegen.h:39