12#include <unordered_map>
81class bpp_pointer_dereference;
85class bpp_object_address;
116 "class",
"constructor",
"delete",
"destructor",
117 "dynamic_cast",
"include",
"include_once",
"local",
"method",
118 "new",
"nullptr",
"primitive",
"private",
119 "protected",
"public",
"super",
"this",
143 if (identifier.contains(
"__"))
return false;
146 if (!isalpha(identifier[0]) && identifier[0] !=
'_') {
150 for (
char c : identifier) {
151 if (!isalnum(c) && c !=
'_') {
184 std::unordered_map<std::string, std::weak_ptr<bpp_class>>
classes;
211 std::vector<std::weak_ptr<bpp_class>>
parents;
224 virtual bool add_class(std::shared_ptr<bpp_class> class_);
225 virtual bool add_object(std::shared_ptr<bpp_object>
object,
bool make_local =
false);
227 virtual std::shared_ptr<bpp_class>
get_class();
230 virtual std::string
get_name()
const;
235 void inherit(std::shared_ptr<bpp_entity> parent);
236 void inherit(std::shared_ptr<bpp_program> program);
237 virtual void inherit(std::shared_ptr<bpp_class> parent);
240 void add_reference(
const std::string& file, uint64_t line, uint64_t column);
245 const std::unordered_map<std::string, std::weak_ptr<bpp_class>>&
get_classes()
const;
246 const std::unordered_map<std::string, std::weak_ptr<bpp_object>>&
get_foreign_objects()
const;
247 const std::unordered_map<std::string, std::shared_ptr<bpp_object>>&
get_local_objects()
const;
248 std::shared_ptr<bpp_class>
get_class(
const std::string&
name);
251 std::shared_ptr<bpp_class>
get_parent()
const;
273 std::shared_ptr<std::ostream>
code = std::make_shared<std::ostringstream>();
285 virtual void add_code(
const std::string&
code,
bool add_newline =
true);
289 bool add_object(std::shared_ptr<bpp_object>
object,
bool make_local =
false)
override;
299 virtual std::string
get_code()
const;
306 void adopt(std::shared_ptr<bpp_entity> entity);
372 void add_code(
const std::string&
code,
bool add_newline =
true)
override;
376 std::string
get_code()
const override;
411 void add_code(
const std::string&
code,
bool add_newline =
true)
override;
413 std::string
get_code()
const override;
427 std::vector<std::shared_ptr<bpp_method_parameter>>
parameters;
435 virtual bool add_parameter(std::shared_ptr<bpp_method_parameter> parameter);
442 bool add_object(std::shared_ptr<bpp_object>
object,
bool make_local)
override;
444 std::vector<std::shared_ptr<bpp_method_parameter>>
get_parameters()
const;
461 void set_class(std::shared_ptr<bpp_class>);
471 std::vector<std::shared_ptr<bpp_method>>
methods;
481 std::shared_ptr<bpp_class>
get_class()
override;
484 bool add_method(std::shared_ptr<bpp_method> method);
487 const std::vector<std::shared_ptr<bpp_method>>&
get_methods()
const;
488 const std::vector<std::shared_ptr<bpp_datamember>>&
get_datamembers()
const;
490 std::shared_ptr<bpp_method>
get_method(
const std::string&
name, std::shared_ptr<bpp_entity> context);
492 std::shared_ptr<bpp_datamember>
get_datamember(
const std::string&
name, std::shared_ptr<bpp_entity> context);
496 void inherit(std::shared_ptr<bpp_class> parent)
override;
514 void set_class(std::shared_ptr<bpp_class> object_class);
573 std::unordered_map<std::string, std::shared_ptr<bpp::bpp_class>>
owned_classes;
585 std::unordered_map<std::string, std::vector<bpp::diagnostic>>
diagnostics;
603 bool add_class(std::shared_ptr<bpp_class> class_)
override;
634 const std::string& file,
635 uint32_t start_line, uint32_t start_column,
636 uint32_t end_line, uint32_t end_column,
637 std::shared_ptr<bpp::bpp_entity> entity
641 const std::string& file,
642 uint32_t line, uint32_t column
654 const std::string& file,
656 const std::string& message,
657 uint32_t start_line, uint32_t start_column,
658 uint32_t end_line, uint32_t end_column
661 std::vector<bpp::diagnostic>
get_diagnostics(
const std::string& file)
const;
681 std::shared_ptr<bpp::bash_while_or_until_condition>
condition;
684 std::shared_ptr<bpp::bash_while_or_until_condition>
get_condition()
const;
686 std::string
get_code()
const override;
746 std::string
get_code()
const override;
764 void add_case(
const std::string& case_);
A pattern for a case statement in Bash++.
Definition bpp.h:778
std::string pattern
Definition bpp.h:780
void set_containing_case(std::shared_ptr< bpp::bash_case > containing_case)
Definition bash_case_pattern.cpp:15
const std::string & get_pattern() const
Definition bash_case_pattern.cpp:19
void set_pattern(const std::string &pattern)
Definition bash_case_pattern.cpp:11
std::shared_ptr< bpp::bash_case > containing_case
Definition bpp.h:781
std::shared_ptr< bpp::bash_case > get_containing_case() const
Definition bash_case_pattern.cpp:23
A case statement in Bash++.
Definition bpp.h:760
std::string cases
Definition bpp.h:762
const std::string & get_cases() const
Definition bash_case.cpp:15
void add_case(const std::string &case_)
Definition bash_case.cpp:11
A sequence of bash commands connected by '&&' and '||'.
Definition bpp.h:400
std::string joined_code
Definition bpp.h:402
std::string get_code() const override
Return the contents of the main code buffer as a string.
Definition bash_command_sequence.cpp:105
void set_perfect_forwarding(bool enable)
Definition bash_command_sequence.cpp:109
bool perfect_forwarding
Definition bpp.h:405
void add_connective(bool is_and)
Add a connective to the command sequence, finalizing the previously-received pipeline....
Definition bash_command_sequence.cpp:73
void join()
Definition bash_command_sequence.cpp:11
void add_code(const std::string &code, bool add_newline=true) override
Add code to the code entity.
Definition bash_command_sequence.cpp:86
std::string get_post_code() const override
Return the contents of the post-code buffer as a string.
Definition bash_command_sequence.cpp:101
bool contains_multiple_commands
Definition bpp.h:403
std::string get_pre_code() const override
Return the contents of the pre-code buffer as a string.
Definition bash_command_sequence.cpp:97
A for loop or select statement in Bash++.
Definition bpp.h:799
const std::string & get_header_post_code() const
Definition bash_for_or_select.cpp:27
void set_header_post_code(const std::string &post_code)
Definition bash_for_or_select.cpp:15
const std::string & get_header_code() const
Definition bash_for_or_select.cpp:31
std::string header_pre_code
Definition bpp.h:801
std::string header_post_code
Definition bpp.h:802
std::string header_code
Definition bpp.h:803
const std::string & get_header_pre_code() const
Definition bash_for_or_select.cpp:23
void set_header_pre_code(const std::string &pre_code)
Definition bash_for_or_select.cpp:11
void set_header_code(const std::string &code)
Definition bash_for_or_select.cpp:19
A normal Bash function.
Definition bpp.h:823
A branch of an if statement in Bash++.
Definition bpp.h:739
void set_if_statement(std::shared_ptr< bpp::bash_if > if_statement)
Definition bash_if_branch.cpp:11
std::shared_ptr< bpp::bash_if > get_if_statement() const
Definition bash_if_branch.cpp:15
std::string get_pre_code() const override
Return the contents of the pre-code buffer as a string.
Definition bash_if_branch.cpp:23
std::string get_post_code() const override
Return the contents of the post-code buffer as a string.
Definition bash_if_branch.cpp:31
std::string get_code() const override
Return the contents of the main code buffer as a string.
Definition bash_if_branch.cpp:19
std::shared_ptr< bpp::bash_if > if_statement
Definition bpp.h:741
An if statement in Bash++.
Definition bpp.h:719
std::vector< std::pair< std::string, std::string > > conditional_branches
Definition bpp.h:721
void new_branch()
Definition bash_if.cpp:11
void add_branch_code(const std::string &branch_code)
Definition bash_if.cpp:19
void add_condition_code(const std::string &condition_code)
Definition bash_if.cpp:15
const std::vector< std::pair< std::string, std::string > > & get_conditional_branches() const
Definition bash_if.cpp:23
The condition for a while/until loop in Bash++.
Definition bpp.h:698
A while/until loop in Bash++.
Definition bpp.h:679
std::string get_code() const override
Return the contents of the main code buffer as a string.
Definition bash_while_or_until_loop.cpp:19
std::string get_pre_code() const override
Return the contents of the pre-code buffer as a string.
Definition bash_while_or_until_loop.cpp:23
std::string get_post_code() const override
Return the contents of the post-code buffer as a string.
Definition bash_while_or_until_loop.cpp:31
std::shared_ptr< bpp::bash_while_or_until_condition > condition
Definition bpp.h:681
void set_condition(std::shared_ptr< bpp::bash_while_or_until_condition > condition)
Definition bash_while_or_until_loop.cpp:11
std::shared_ptr< bpp::bash_while_or_until_condition > get_condition() const
Definition bash_while_or_until_loop.cpp:15
A class in Bash++.
Definition bpp.h:469
void set_name(const std::string &name) override
Definition bpp_class.cpp:57
bool set_containing_class(std::weak_ptr< bpp::bpp_class > containing_class) override
Definition bpp_class.cpp:53
const std::vector< std::shared_ptr< bpp_method > > & get_methods() const
Definition bpp_class.cpp:145
std::shared_ptr< bpp_class > get_class() override
Definition bpp_class.cpp:49
void inherit(std::shared_ptr< bpp_class > parent) override
Inherit from a parent class.
Definition bpp_class.cpp:260
bool add_method(std::shared_ptr< bpp_method > method)
Add a method to the class.
Definition bpp_class.cpp:65
void add_default_toPrimitive()
Add the default toPrimitive method.
Definition bpp_class.cpp:31
std::vector< std::shared_ptr< bpp_datamember > > datamembers
Definition bpp.h:472
const std::vector< std::shared_ptr< bpp_datamember > > & get_datamembers() const
Definition bpp_class.cpp:149
std::shared_ptr< bpp_datamember > get_datamember(const std::string &name, std::shared_ptr< bpp_entity > context)
Get a datamember by name.
Definition bpp_class.cpp:221
bool has_custom_toPrimitive
Definition bpp.h:473
void remove_default_toPrimitive()
Remove the default toPrimitive method.
Definition bpp_class.cpp:18
std::shared_ptr< bpp::bpp_class > get_parent()
Definition bpp_class.cpp:292
std::shared_ptr< bpp_method > get_method(const std::string &name, std::shared_ptr< bpp_entity > context)
Get a method by name.
Definition bpp_class.cpp:166
std::shared_ptr< bpp_method > get_method_UNSAFE(const std::string &name)
Get a method by name without checking the context.
Definition bpp_class.cpp:199
std::shared_ptr< bpp_datamember > get_datamember_UNSAFE(const std::string &name)
Definition bpp_class.cpp:244
std::weak_ptr< bpp_class > get_containing_class() override
Get the class which contains this entity.
Definition bpp_class.cpp:45
bool add_datamember(std::shared_ptr< bpp_datamember > datamember)
Add a datamember to the class.
Definition bpp_class.cpp:124
std::vector< std::shared_ptr< bpp_method > > methods
Definition bpp.h:471
An entity which can contain code.
Definition bpp.h:271
void set_requires_perfect_forwarding(bool require)
Definition bpp_code_entity.cpp:206
virtual void add_code_to_next_line(const std::string &code)
Add code to the code entity's post-code buffer.
Definition bpp_code_entity.cpp:57
std::shared_ptr< std::ostream > code
Definition bpp.h:273
std::string postline_buffer
Definition bpp.h:275
virtual void flush_code_buffers()
Definition bpp_code_entity.cpp:82
virtual void add_code_to_previous_line(const std::string &code)
Add code to the code entity's pre-code buffer.
Definition bpp_code_entity.cpp:49
virtual void flush_postline_buffer()
Definition bpp_code_entity.cpp:72
virtual std::string get_post_code() const
Return the contents of the post-code buffer as a string.
Definition bpp_code_entity.cpp:202
virtual std::string get_pre_code() const
Return the contents of the pre-code buffer as a string.
Definition bpp_code_entity.cpp:195
virtual void flush_nextline_buffer()
Definition bpp_code_entity.cpp:62
virtual void clear_all_buffers()
Definition bpp_code_entity.cpp:88
bool requires_perfect_forwarding
Signals to bash_command_sequence entities whether they should operate in perfect forwarding mode I....
Definition bpp.h:283
bool add_object(std::shared_ptr< bpp_object > object, bool make_local=false) override
Add an object to the code entity.
Definition bpp_code_entity.cpp:108
bool get_requires_perfect_forwarding() const
Definition bpp_code_entity.cpp:210
virtual void add_code(const std::string &code, bool add_newline=true)
Add code to the code entity.
Definition bpp_code_entity.cpp:22
virtual std::string get_code() const
Return the contents of the main code buffer as a string.
Definition bpp_code_entity.cpp:184
void adopt(std::shared_ptr< bpp_entity > entity)
Take ownership of all local objects in another entity, by moving them into this entity's local object...
Definition bpp_code_entity.cpp:222
std::string nextline_buffer
Definition bpp.h:274
bool buffers_flushed
Definition bpp.h:276
void destruct_local_objects(std::shared_ptr< bpp_program > program)
Destruct all local objects in the code entity.
Definition bpp_code_entity.cpp:173
A data member in a class.
Definition bpp.h:536
bool is_array() const
Definition bpp_datamember.cpp:35
bool array
Definition bpp.h:540
void set_scope(bpp_scope scope)
Definition bpp_datamember.cpp:15
std::string get_default_value() const
Definition bpp_datamember.cpp:27
void set_default_value(const std::string &default_value)
Definition bpp_datamember.cpp:11
std::string get_address() const override
Definition bpp_datamember.cpp:23
bpp_scope scope
Definition bpp.h:539
std::string default_value
Definition bpp.h:538
bpp_scope get_scope() const
Definition bpp_datamember.cpp:31
void set_array(bool is_array)
Definition bpp_datamember.cpp:19
A delete statement in Bash++.
Definition bpp.h:837
std::shared_ptr< bpp::bpp_object > get_object_to_delete() const
Definition bpp_delete_statement.cpp:15
void set_object_to_delete(std::shared_ptr< bpp::bpp_object > object)
Definition bpp_delete_statement.cpp:11
std::shared_ptr< bpp::bpp_object > object_to_delete
Definition bpp.h:839
A dynamic_cast statement in Bash++.
Definition bpp.h:856
void set_cast_to(const std::string &cast_to)
Definition bpp_dynamic_cast_statement.cpp:11
std::string get_cast_to() const
Definition bpp_dynamic_cast_statement.cpp:15
std::string cast_to
Definition bpp.h:858
The target of a dynamic_cast in Bash++.
Definition bpp.h:876
The base class for all entities in the Bash++ compiler.
Definition bpp.h:177
std::shared_ptr< bpp_class > get_parent() const
Definition bpp_entity.cpp:166
std::weak_ptr< bpp_class > type
Definition bpp.h:208
std::unordered_map< std::string, std::weak_ptr< bpp_class > > classes
A map of class names to class objects within this entity.
Definition bpp.h:184
virtual void set_name(const std::string &name)
Definition bpp_entity.cpp:46
std::unordered_map< std::string, std::shared_ptr< bpp_object > > local_objects
A map of objects that this entity owns These are objects that are instantiated within this entity,...
Definition bpp.h:207
virtual std::weak_ptr< bpp::bpp_class > get_containing_class()
Get the class which contains this entity.
Definition bpp_entity.cpp:59
std::string name
Definition bpp.h:179
virtual bool add_object(std::shared_ptr< bpp_object > object, bool make_local=false)
Add an object to this entity's list of objects.
Definition bpp_entity.cpp:30
const std::unordered_map< std::string, std::weak_ptr< bpp_class > > & get_classes() const
Definition bpp_entity.cpp:133
virtual ~bpp_entity()=default
bpp_entity & operator=(bpp_entity &&other) noexcept=default
const std::unordered_map< std::string, std::weak_ptr< bpp_object > > & get_foreign_objects() const
Definition bpp_entity.cpp:137
std::vector< std::weak_ptr< bpp_class > > parents
Definition bpp.h:211
void add_reference(const std::string &file, uint64_t line, uint64_t column)
Definition bpp_entity.cpp:81
bpp::SymbolPosition get_initial_definition() const
Definition bpp_entity.cpp:77
bpp_entity(const bpp_entity &other)=default
const std::unordered_map< std::string, std::shared_ptr< bpp_object > > & get_local_objects() const
Definition bpp_entity.cpp:141
std::weak_ptr< bpp_program > containing_program
Definition bpp.h:210
virtual std::weak_ptr< bpp_program > get_containing_program()
Definition bpp_entity.cpp:63
std::weak_ptr< bpp_method > overridden_method
Definition bpp.h:212
std::shared_ptr< bpp_object > get_object(const std::string &name)
Definition bpp_entity.cpp:154
virtual std::string get_address() const
Definition bpp_entity.cpp:42
std::list< bpp::SymbolPosition > references
Definition bpp.h:214
std::weak_ptr< bpp_class > containing_class
Definition bpp.h:209
virtual bool set_containing_class(std::weak_ptr< bpp::bpp_class > containing_class)
Definition bpp_entity.cpp:67
virtual std::string get_name() const
Definition bpp_entity.cpp:50
std::unordered_map< std::string, std::weak_ptr< bpp_object > > foreign_objects
A map of objects that this entity knows about, but does not own These are objects that are owned by p...
Definition bpp.h:194
std::list< bpp::SymbolPosition > get_references() const
Definition bpp_entity.cpp:92
void inherit(std::shared_ptr< bpp_entity > parent)
Inherit from a parent entity.
Definition bpp_entity.cpp:103
virtual bool add_class(std::shared_ptr< bpp_class > class_)
Add a class to this entity's list of classes.
Definition bpp_entity.cpp:16
void set_definition_position(const std::string &file, uint64_t line, uint64_t column)
Definition bpp_entity.cpp:72
bpp_entity(bpp_entity &&other) noexcept=default
bpp_entity & operator=(const bpp_entity &other)=default
virtual std::shared_ptr< bpp_class > get_class()
Definition bpp_entity.cpp:38
bpp::SymbolPosition initial_definition
Definition bpp.h:213
A parameter in a method.
Definition bpp.h:457
void set_class(std::shared_ptr< bpp_class >)
Definition bpp_method_parameter.cpp:15
A method in a class.
Definition bpp.h:425
bool inherited
Definition bpp.h:431
void set_last_override(const std::string &class_name)
Definition bpp_method.cpp:95
bool add_object(std::shared_ptr< bpp_object > object, bool make_local) override
Add an object to the code entity.
Definition bpp_method.cpp:127
bool add_object_as_parameter(std::shared_ptr< bpp_object > object)
Add a pointer to a non-primitive object as a parameter to the method.
Definition bpp_method.cpp:18
virtual bool add_parameter(std::shared_ptr< bpp_method_parameter > parameter)
Add a parameter to the method.
Definition bpp_method.cpp:49
bool is_virtual() const
Definition bpp_method.cpp:111
void set_scope(bpp_scope scope)
Definition bpp_method.cpp:78
bpp_scope scope
Definition bpp.h:428
void set_overridden_method(std::weak_ptr< bpp_method > method)
Definition bpp_method.cpp:99
bool m_is_overridable
Definition bpp.h:430
std::vector< std::shared_ptr< bpp_method_parameter > > get_parameters() const
Definition bpp_method.cpp:103
std::string last_override
Definition bpp.h:433
std::string get_last_override() const
Definition bpp_method.cpp:123
void set_virtual(bool is_virtual)
Definition bpp_method.cpp:82
bpp_scope get_scope() const
Definition bpp_method.cpp:107
void set_inherited(bool is_inherited)
Definition bpp_method.cpp:91
std::vector< std::shared_ptr< bpp_method_parameter > > parameters
Definition bpp.h:427
void set_overridable(bool is_overridable)
Definition bpp_method.cpp:87
bool is_inherited() const
Definition bpp_method.cpp:119
bool m_is_virtual
Definition bpp.h:429
bool is_overridable() const
Definition bpp_method.cpp:115
An object assignment statement in Bash++.
Definition bpp.h:914
void set_rvalue_array(bool is_array)
Definition bpp_object_assignment.cpp:39
bool rvalue_array
Definition bpp.h:923
bool rvalue_is_array() const
Definition bpp_object_assignment.cpp:71
void set_adding(bool is_adding)
Definition bpp_object_assignment.cpp:35
bool adding
Definition bpp.h:922
std::shared_ptr< bpp_entity > lvalue_object
Definition bpp.h:920
void set_rvalue_nonprimitive(bool is_nonprimitive)
Definition bpp_object_assignment.cpp:23
bool rvalue_nonprimitive
Definition bpp.h:919
std::shared_ptr< bpp_entity > get_lvalue_object() const
Definition bpp_object_assignment.cpp:59
void set_lvalue(const std::string &lvalue)
Definition bpp_object_assignment.cpp:11
bool rvalue_is_nonprimitive() const
Definition bpp_object_assignment.cpp:55
void set_lvalue_object(std::shared_ptr< bpp_entity > object)
Definition bpp_object_assignment.cpp:27
std::string get_rvalue() const
Definition bpp_object_assignment.cpp:47
std::string get_lvalue() const
Definition bpp_object_assignment.cpp:43
void set_lvalue_nonprimitive(bool is_nonprimitive)
Definition bpp_object_assignment.cpp:19
void set_rvalue(const std::string &rvalue)
Definition bpp_object_assignment.cpp:15
std::shared_ptr< bpp_entity > rvalue_object
Definition bpp.h:921
std::string lvalue
Definition bpp.h:916
bool lvalue_is_nonprimitive() const
Definition bpp_object_assignment.cpp:51
std::string rvalue
Definition bpp.h:917
bool lvalue_nonprimitive
Definition bpp.h:918
bool is_adding() const
Definition bpp_object_assignment.cpp:67
std::shared_ptr< bpp_entity > get_rvalue_object() const
Definition bpp_object_assignment.cpp:63
void set_rvalue_object(std::shared_ptr< bpp_entity > object)
Definition bpp_object_assignment.cpp:31
An object reference in Bash++.
Definition bpp.h:951
void set_array_index(const std::string &array_index)
Definition bpp_object_reference.cpp:15
bool has_array_index() const
Definition bpp_object_reference.cpp:27
bpp::reference_type get_reference_type() const
Definition bpp_object_reference.cpp:19
std::string array_index
Definition bpp.h:954
std::string get_array_index() const
Definition bpp_object_reference.cpp:23
void set_reference_type(bpp::reference_type reference_type)
Definition bpp_object_reference.cpp:11
An object in Bash++.
Definition bpp.h:505
std::string get_pre_access_code() const
Definition bpp_object.cpp:49
bool is_pointer() const
Definition bpp_object.cpp:57
void set_pre_access_code(const std::string &pre_access_code)
Definition bpp_object.cpp:27
void set_pointer(bool is_pointer)
Definition bpp_object.cpp:15
void set_address(const std::string &address)
Definition bpp_object.cpp:19
std::string address
Definition bpp.h:507
void set_post_access_code(const std::string &post_access_code)
Definition bpp_object.cpp:31
std::string get_post_access_code() const
Definition bpp_object.cpp:53
std::string get_assignment_value() const
Definition bpp_object.cpp:45
void set_assignment_value(const std::string &assignment_value)
Definition bpp_object.cpp:23
std::string pre_access_code
Definition bpp.h:509
void set_nullptr()
Definition bpp_object.cpp:35
std::string post_access_code
Definition bpp.h:510
bool m_is_pointer
Definition bpp.h:511
std::string assignment_value
Definition bpp.h:508
std::shared_ptr< bpp::bpp_object > get_copy_from() const
Definition bpp_object.cpp:61
std::string get_address() const override
Definition bpp_object.cpp:41
void set_class(std::shared_ptr< bpp_class > object_class)
Definition bpp_object.cpp:11
std::shared_ptr< bpp::bpp_object > copy_from
Definition bpp.h:512
The main program.
Definition bpp.h:557
uint64_t get_dynamic_cast_counter() const
Definition bpp_program.cpp:176
std::vector< std::string > get_source_files() const
Definition bpp_program.cpp:239
void add_diagnostic(const std::string &file, diagnostic_type type, const std::string &message, uint32_t start_line, uint32_t start_column, uint32_t end_line, uint32_t end_column)
Definition bpp_program.cpp:279
uint64_t assignment_counter
Definition bpp.h:561
std::shared_ptr< bpp_class > primitive_class
Definition bpp.h:559
uint64_t dynamic_cast_counter
Definition bpp.h:563
void set_main_source_file(const std::string &file)
Definition bpp_program.cpp:252
std::unordered_map< std::string, std::shared_ptr< bpp::bpp_class > > owned_classes
Definition bpp.h:573
std::weak_ptr< bpp_program > get_containing_program() override
Definition bpp_program.cpp:32
bool set_containing_class(std::weak_ptr< bpp_class > containing_class) override
Definition bpp_program.cpp:20
uint64_t get_supershell_counter() const
Definition bpp_program.cpp:140
std::string get_main_source_file() const
Definition bpp_program.cpp:248
void increment_typeof_counter()
Definition bpp_program.cpp:180
std::shared_ptr< AST::Program > get_source_file_ast(const std::string &file) const
Definition bpp_program.cpp:271
void increment_function_counter()
Definition bpp_program.cpp:152
std::unordered_map< std::string, EntityMap > entity_maps
Definition bpp.h:580
std::string main_source_file
Definition bpp.h:569
uint64_t get_typeof_counter() const
Definition bpp_program.cpp:190
uint64_t get_assignment_counter() const
Definition bpp_program.cpp:148
uint64_t object_counter
Definition bpp.h:565
std::shared_ptr< bpp_class > get_primitive_class() const
Definition bpp_program.cpp:28
std::shared_ptr< bpp::bpp_entity > get_active_entity(const std::string &file, uint32_t line, uint32_t column)
Definition bpp_program.cpp:221
uint64_t supershell_counter
Definition bpp.h:560
std::vector< bpp::diagnostic > get_diagnostics(const std::string &file) const
Definition bpp_program.cpp:296
std::shared_ptr< std::vector< std::string > > get_include_paths() const
Definition bpp_program.cpp:123
uint64_t get_function_counter() const
Definition bpp_program.cpp:162
std::unordered_map< std::string, std::vector< bpp::diagnostic > > diagnostics
Definition bpp.h:585
uint64_t typeof_counter
Definition bpp.h:564
uint64_t function_counter
Definition bpp.h:562
bool add_class(std::shared_ptr< bpp_class > class_) override
Add a class to the program.
Definition bpp_program.cpp:61
void set_target_bash_version(BashVersion target_bash_version)
Definition bpp_program.cpp:202
bpp_program(bpp_program &&other) noexcept=default
uint64_t get_object_counter() const
Definition bpp_program.cpp:198
void increment_dynamic_cast_counter()
Definition bpp_program.cpp:166
bpp_program()
Definition bpp_program.cpp:14
BashVersion get_target_bash_version() const
Definition bpp_program.cpp:206
bool prepare_class(std::shared_ptr< bpp_class > class_)
Prepare a class for addition to the program by adding it to the classes map.
Definition bpp_program.cpp:46
void add_source_file(const std::string &file)
Definition bpp_program.cpp:260
bpp_program(const bpp_program &other)=default
void increment_supershell_counter()
Definition bpp_program.cpp:127
bpp_program & operator=(const bpp_program &other)=default
~bpp_program() override=default
std::shared_ptr< std::vector< std::string > > include_paths
Definition bpp.h:589
void increment_assignment_counter()
Definition bpp_program.cpp:144
void mark_entity(const std::string &file, uint32_t start_line, uint32_t start_column, uint32_t end_line, uint32_t end_column, std::shared_ptr< bpp::bpp_entity > entity)
Definition bpp_program.cpp:210
void set_source_file_ast(const std::string &file, std::shared_ptr< AST::Program > ast)
Definition bpp_program.cpp:267
BashVersion target_bash_version
Definition bpp.h:567
void set_output_stream(std::shared_ptr< std::ostream > output_stream)
Definition bpp_program.cpp:24
void increment_object_counter()
Definition bpp_program.cpp:194
bpp_program & operator=(bpp_program &&other) noexcept=default
void clear_diagnostics(const std::string &file)
Definition bpp_program.cpp:304
void set_include_paths(std::shared_ptr< std::vector< std::string > > paths)
Definition bpp_program.cpp:119
std::unordered_map< std::string, std::shared_ptr< AST::Program > > source_file_asts
Definition bpp.h:577
The practical difference between bpp_code_entity and bpp_string is how we handle the code buffers.
Definition bpp.h:370
std::string get_pre_code() const override
Return the contents of the pre-code buffer as a string.
Definition bpp_string.cpp:39
void add_code(const std::string &code, bool add_newline=true) override
Add code to the primary buffer.
Definition bpp_string.cpp:17
void add_code_to_previous_line(const std::string &code) override
Add code to the pre-code buffer.
Definition bpp_string.cpp:24
void add_code_to_next_line(const std::string &code) override
Add code to the post-code buffer.
Definition bpp_string.cpp:31
std::string get_code() const override
Return the contents of the main code buffer as a string.
Definition bpp_string.cpp:35
std::string get_post_code() const override
Return the contents of the post-code buffer as a string.
Definition bpp_string.cpp:47
A value assignment statement in Bash++.
Definition bpp.h:886
bool is_array_assignment() const
Definition bpp_value_assignment.cpp:43
std::shared_ptr< bpp_entity > nonprimitive_object
Definition bpp.h:889
bool nonprimitive_assignment
Definition bpp.h:888
bool is_nonprimitive_assignment() const
Definition bpp_value_assignment.cpp:31
bool array_assignment
Definition bpp.h:891
std::shared_ptr< bpp_entity > get_nonprimitive_object() const
Definition bpp_value_assignment.cpp:35
bool lvalue_nonprimitive
Definition bpp.h:890
void set_adding(bool is_adding)
Definition bpp_value_assignment.cpp:27
void set_lvalue_nonprimitive(bool is_nonprimitive)
Definition bpp_value_assignment.cpp:19
void set_array_assignment(bool is_array)
Definition bpp_value_assignment.cpp:23
void set_nonprimitive_assignment(bool is_nonprimitive)
Definition bpp_value_assignment.cpp:11
bool lvalue_is_nonprimitive() const
Definition bpp_value_assignment.cpp:39
bool is_adding() const
Definition bpp_value_assignment.cpp:47
void set_nonprimitive_object(std::shared_ptr< bpp_entity > object)
Definition bpp_value_assignment.cpp:15
bool adding
Definition bpp.h:892
Definition bash_case.cpp:9
bpp_scope
Definition bpp.h:22
const std::shared_ptr< bpp_method > inaccessible_method
A placeholder for an inaccessible method of a class (scope handling)
Definition bpp.h:103
const std::shared_ptr< bpp_datamember > inaccessible_datamember
A placeholder for an inaccessible data member of a class (scope handling)
Definition bpp.h:97
static const char bpp_nullptr[]
The secret internal value of '@nullptr' in Bash++.
Definition bpp.h:109
const std::shared_ptr< bpp_entity > inaccessible_entity
A placeholder for an inaccessible entity (scope handling)
Definition bpp.h:91
bool is_valid_identifier(const std::string &identifier)
Check if a string is a valid identifier in Bash++.
Definition bpp.h:136
bool is_protected_keyword(const std::string &keyword)
Check if a string matches any of our protected keywords.
Definition bpp.h:127
constexpr std::array< std::string_view, 19 > protected_keywords
A list of keywords that are reserved and cannot be used as identifiers in Bash++.
Definition bpp.h:115
reference_type
Definition bpp.h:29
diagnostic_type
Definition bpp.h:35
Represents a Bash version to target for code generation.
Definition BashVersion.h:23
std::string file
Definition bpp.h:161
uint64_t column
Definition bpp.h:163
SymbolPosition(const std::string &file, uint64_t line, uint64_t column)
Definition bpp.h:166
uint64_t line
Definition bpp.h:162
Represents a diagnostic message (error, warning, info, hint)
Definition bpp.h:49
uint32_t start_line
Definition bpp.h:52
uint32_t end_line
Definition bpp.h:54
diagnostic_type type
Definition bpp.h:50
std::string message
Definition bpp.h:51
uint32_t end_column
Definition bpp.h:55
uint32_t start_column
Definition bpp.h:53