6 #ifndef SRC_BPP_INCLUDE_BPP_H_
7 #define SRC_BPP_INCLUDE_BPP_H_
12 #include <unordered_map>
35 class bpp_code_entity;
38 class bpp_method_parameter;
45 class bash_while_loop;
46 class bash_while_condition;
50 class bash_case_pattern;
53 class bpp_delete_statement;
54 class bpp_dynamic_cast_statement;
55 class bpp_pointer_dereference;
56 class bpp_value_assignment;
57 class bpp_object_assignment;
58 class bpp_object_reference;
59 class bpp_object_address;
98 std::unordered_map<std::string, std::shared_ptr<bpp_class>>
classes;
104 std::unordered_map<std::string, std::shared_ptr<bpp_object>>
objects;
111 std::shared_ptr<bpp_class>
type =
nullptr;
113 std::vector<std::shared_ptr<bpp_class>>
parents;
116 virtual bool add_class(std::shared_ptr<bpp_class> class_);
117 virtual bool add_object(std::shared_ptr<bpp_object>
object,
bool make_local =
false);
119 virtual std::shared_ptr<bpp_class>
get_class()
const;
121 virtual std::string
get_name()
const;
125 virtual void inherit(std::shared_ptr<bpp_entity> parent);
126 virtual void inherit(std::shared_ptr<bpp_class> parent);
128 virtual std::unordered_map<std::string, std::shared_ptr<bpp_class>>
get_classes()
const;
129 virtual std::unordered_map<std::string, std::shared_ptr<bpp_object>>
get_objects()
const;
130 virtual std::shared_ptr<bpp_class>
get_class(
const std::string& name);
131 virtual std::shared_ptr<bpp_object>
get_object(
const std::string& name);
153 std::shared_ptr<std::ostream>
code = std::make_shared<std::ostringstream>();
160 virtual void add_code(
const std::string&
code,
bool add_newline =
true);
164 bool add_object(std::shared_ptr<bpp_object>
object,
bool make_local =
false)
override;
172 virtual std::string
get_code()
const;
242 void add_code(
const std::string&
code,
bool add_newline =
true)
override;
246 std::string
get_code()
const override;
259 std::vector<std::shared_ptr<bpp_method_parameter>>
parameters;
269 virtual bool add_parameter(std::shared_ptr<bpp_method_parameter> parameter);
274 bool add_object(std::shared_ptr<bpp_object>
object,
bool make_local)
override;
276 std::string
get_name()
const override;
277 std::vector<std::shared_ptr<bpp_method_parameter>>
get_parameters()
const;
296 void set_type(std::shared_ptr<bpp_class>);
298 std::string
get_name()
const override;
299 std::shared_ptr<bpp_class>
get_type()
const;
310 std::vector<std::shared_ptr<bpp_method>>
methods;
327 std::shared_ptr<bpp_class>
get_class()
const override;
330 bool add_method(std::shared_ptr<bpp_method> method);
333 std::string
get_name()
const override;
334 std::vector<std::shared_ptr<bpp_method>>
get_methods()
const;
337 std::shared_ptr<bpp_method>
get_method(
const std::string&
name, std::shared_ptr<bpp_entity> context);
339 std::shared_ptr<bpp_datamember>
get_datamember(
const std::string&
name, std::shared_ptr<bpp_entity> context);
341 void inherit(std::shared_ptr<bpp_class> parent)
override;
344 void finalize(std::shared_ptr<bpp_program> program);
366 void set_class(std::shared_ptr<bpp_class> object_class);
375 std::string
get_name()
const override;
378 std::shared_ptr<bpp_class>
get_class()
const override;
428 bool add_class(std::shared_ptr<bpp_class> class_)
override;
471 std::string
get_code()
const override;
550 std::string
get_code()
const override;
570 void add_case(
const std::string& case_);
631 std::string
get_name()
const override;
678 std::shared_ptr<bpp::bpp_class>
get_cast_to()
const;
A pattern for a case statement in Bash++.
Definition: bpp.h:584
std::string pattern
Definition: bpp.h:586
void set_containing_case(std::shared_ptr< bpp::bash_case > containing_case)
Definition: bash_case_pattern.cpp:19
const std::string & get_pattern() const
Definition: bash_case_pattern.cpp:23
void set_pattern(const std::string &pattern)
Definition: bash_case_pattern.cpp:15
bash_case_pattern()
Definition: bash_case_pattern.cpp:13
std::shared_ptr< bpp::bash_case > containing_case
Definition: bpp.h:587
std::shared_ptr< bpp::bash_case > get_containing_case() const
Definition: bash_case_pattern.cpp:27
A case statement in Bash++.
Definition: bpp.h:564
std::string cases
Definition: bpp.h:566
bash_case()
Definition: bash_case.cpp:13
const std::string & get_cases() const
Definition: bash_case.cpp:19
void add_case(const std::string &case_)
Definition: bash_case.cpp:15
A for loop in Bash++.
Definition: bpp.h:607
const std::string & get_header_post_code() const
Definition: bash_for.cpp:31
bash_for()
Definition: bash_for.cpp:13
void set_header_post_code(const std::string &post_code)
Definition: bash_for.cpp:19
const std::string & get_header_pre_code() const
Definition: bash_for.cpp:27
void set_header_code(const std::string &code)
Definition: bash_for.cpp:23
std::string header_code
Definition: bpp.h:611
std::string header_pre_code
Definition: bpp.h:609
void set_header_pre_code(const std::string &pre_code)
Definition: bash_for.cpp:15
std::string header_post_code
Definition: bpp.h:610
const std::string & get_header_code() const
Definition: bash_for.cpp:35
void set_name(const std::string &name)
Definition: bash_function.cpp:15
bash_function()
Definition: bash_function.cpp:13
std::string get_name() const override
Definition: bash_function.cpp:19
std::string name
Definition: bpp.h:626
A branch of an if statement in Bash++.
Definition: bpp.h:541
void set_if_statement(std::shared_ptr< bpp::bash_if > if_statement)
Definition: bash_if_branch.cpp:15
std::shared_ptr< bpp::bash_if > get_if_statement() const
Definition: bash_if_branch.cpp:19
bash_if_branch()
Definition: bash_if_branch.cpp:13
std::string get_pre_code() const override
Return the contents of the pre-code buffer as a string.
Definition: bash_if_branch.cpp:27
std::string get_post_code() const override
Return the contents of the post-code buffer as a string.
Definition: bash_if_branch.cpp:35
std::string get_code() const override
Return the contents of the main code buffer as a string.
Definition: bash_if_branch.cpp:23
std::shared_ptr< bpp::bash_if > if_statement
Definition: bpp.h:543
An if statement in Bash++.
Definition: bpp.h:513
std::vector< std::pair< std::string, std::string > > conditional_branches
Definition: bpp.h:517
void add_conditional_branch_post_code(const std::string &post_code)
Definition: bash_if.cpp:19
void new_branch()
Definition: bash_if.cpp:23
std::string conditional_branch_pre_code
Definition: bpp.h:515
void add_branch_code(const std::string &branch_code)
Definition: bash_if.cpp:31
void add_condition_code(const std::string &condition_code)
Definition: bash_if.cpp:27
std::string get_conditional_branch_post_code() const
Definition: bash_if.cpp:39
bash_if()
Definition: bash_if.cpp:13
const std::vector< std::pair< std::string, std::string > > & get_conditional_branches() const
Definition: bash_if.cpp:43
std::string conditional_branch_post_code
Definition: bpp.h:516
void add_conditional_branch_pre_code(const std::string &pre_code)
Definition: bash_if.cpp:15
std::string get_conditional_branch_pre_code() const
Definition: bash_if.cpp:35
The condition for a while loop in Bash++.
Definition: bpp.h:483
bash_while_condition()
Definition: bash_while_condition.cpp:13
std::vector< std::string > supershell_function_calls
Definition: bpp.h:486
int supershell_count
Definition: bpp.h:485
void increment_supershell_count()
Definition: bash_while_condition.cpp:15
std::vector< std::string > get_supershell_function_calls() const
Definition: bash_while_condition.cpp:23
void add_supershell_function_call(const std::string &function_call)
Definition: bash_while_condition.cpp:19
A while loop in Bash++.
Definition: bpp.h:462
std::string get_post_code() const override
Return the contents of the post-code buffer as a string.
Definition: bash_while_loop.cpp:35
void set_while_condition(std::shared_ptr< bpp::bash_while_condition > while_condition)
Definition: bash_while_loop.cpp:15
std::shared_ptr< bpp::bash_while_condition > while_condition
Definition: bpp.h:464
std::string get_code() const override
Return the contents of the main code buffer as a string.
Definition: bash_while_loop.cpp:23
bash_while_loop()
Definition: bash_while_loop.cpp:13
std::string get_pre_code() const override
Return the contents of the pre-code buffer as a string.
Definition: bash_while_loop.cpp:27
std::shared_ptr< bpp::bash_while_condition > get_while_condition() const
Definition: bash_while_loop.cpp:19
A class in Bash++.
Definition: bpp.h:307
void set_name(const std::string &name)
Definition: bpp_class.cpp:100
bool set_containing_class(std::weak_ptr< bpp::bpp_class > containing_class) override
Definition: bpp_class.cpp:96
bool has_custom_destructor
Definition: bpp.h:313
bpp_class()
Definition: bpp_class.cpp:14
std::string name
Definition: bpp.h:309
void add_default_destructor()
Add the default destructor method.
Definition: bpp_class.cpp:77
void inherit(std::shared_ptr< bpp_class > parent) override
Inherit from a parent class.
Definition: bpp_class.cpp:284
bool add_method(std::shared_ptr< bpp_method > method)
Add a method to the class.
Definition: bpp_class.cpp:109
std::weak_ptr< bpp_class > get_containing_class() const override
Get the class which contains this entity.
Definition: bpp_class.cpp:88
std::vector< std::shared_ptr< bpp_datamember > > get_datamembers() const
Definition: bpp_class.cpp:182
void add_default_toPrimitive()
Add the default toPrimitive method.
Definition: bpp_class.cpp:42
void finalize(std::shared_ptr< bpp_program > program)
Finalize the class.
Definition: bpp_class.cpp:343
bool finalized
Definition: bpp.h:320
std::vector< std::shared_ptr< bpp_datamember > > datamembers
Definition: bpp.h:311
std::shared_ptr< bpp_class > get_class() const override
Definition: bpp_class.cpp:92
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:254
bool has_custom_toPrimitive
Definition: bpp.h:312
void remove_default_toPrimitive()
Remove the default toPrimitive method.
Definition: bpp_class.cpp:24
std::shared_ptr< bpp::bpp_class > get_parent()
Definition: bpp_class.cpp:328
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:199
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:232
std::vector< std::shared_ptr< bpp_method > > get_methods() const
Definition: bpp_class.cpp:178
std::string get_name() const override
Definition: bpp_class.cpp:174
bool add_datamember(std::shared_ptr< bpp_datamember > datamember)
Add a datamember to the class.
Definition: bpp_class.cpp:155
void remove_default_destructor()
Remove the default destructor method.
Definition: bpp_class.cpp:58
std::vector< std::shared_ptr< bpp_method > > methods
Definition: bpp.h:310
An entity which can contain code.
Definition: bpp.h:151
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:60
bpp_code_entity()
Definition: bpp_code_entity.cpp:13
std::shared_ptr< std::ostream > code
Definition: bpp.h:153
std::string postline_buffer
Definition: bpp.h:155
virtual void flush_code_buffers()
Definition: bpp_code_entity.cpp:85
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:52
virtual void flush_postline_buffer()
Definition: bpp_code_entity.cpp:75
virtual std::string get_post_code() const
Return the contents of the post-code buffer as a string.
Definition: bpp_code_entity.cpp:171
virtual std::string get_pre_code() const
Return the contents of the pre-code buffer as a string.
Definition: bpp_code_entity.cpp:164
virtual void flush_nextline_buffer()
Definition: bpp_code_entity.cpp:65
virtual void clear_all_buffers()
Definition: bpp_code_entity.cpp:91
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:111
virtual void add_code(const std::string &code, bool add_newline=true)
Add code to the code entity.
Definition: bpp_code_entity.cpp:25
virtual std::string get_code() const
Return the contents of the main code buffer as a string.
Definition: bpp_code_entity.cpp:153
std::string nextline_buffer
Definition: bpp.h:154
bool buffers_flushed
Definition: bpp.h:156
A data member in a class.
Definition: bpp.h:391
bool is_array() const
Definition: bpp_datamember.cpp:39
bool array
Definition: bpp.h:395
void set_scope(bpp_scope scope)
Definition: bpp_datamember.cpp:19
std::string get_default_value() const
Definition: bpp_datamember.cpp:31
void set_default_value(const std::string &default_value)
Definition: bpp_datamember.cpp:15
std::string get_address() const override
Definition: bpp_datamember.cpp:27
bpp_scope scope
Definition: bpp.h:394
std::string default_value
Definition: bpp.h:393
bpp_scope get_scope() const
Definition: bpp_datamember.cpp:35
bpp_datamember()
Definition: bpp_datamember.cpp:13
void set_array(bool is_array)
Definition: bpp_datamember.cpp:23
A delete statement in Bash++.
Definition: bpp.h:645
std::shared_ptr< bpp::bpp_object > get_object_to_delete() const
Definition: bpp_delete_statement.cpp:21
void set_force_pointer(bool force_pointer)
Definition: bpp_delete_statement.cpp:17
void set_object_to_delete(std::shared_ptr< bpp::bpp_object > object)
Definition: bpp_delete_statement.cpp:13
bool force_pointer() const
Definition: bpp_delete_statement.cpp:25
bool force_ptr
Definition: bpp.h:648
std::shared_ptr< bpp::bpp_object > object_to_delete
Definition: bpp.h:647
bpp_delete_statement()=default
A dynamic_cast statement in Bash++.
Definition: bpp.h:669
std::string cast_address
Definition: bpp.h:672
std::shared_ptr< bpp::bpp_class > get_cast_to() const
Definition: bpp_dynamic_cast_statement.cpp:23
void set_cast_address(const std::string &cast_address)
Definition: bpp_dynamic_cast_statement.cpp:19
bpp_dynamic_cast_statement()
Definition: bpp_dynamic_cast_statement.cpp:13
std::shared_ptr< bpp::bpp_class > cast_to
Definition: bpp.h:671
void set_cast_to(std::shared_ptr< bpp::bpp_class > cast_to)
Definition: bpp_dynamic_cast_statement.cpp:15
std::string get_cast_address() const
Definition: bpp_dynamic_cast_statement.cpp:27
The base class for all entities in the Bash++ compiler.
Definition: bpp.h:92
virtual std::unordered_map< std::string, std::shared_ptr< bpp_object > > get_objects() const
Definition: bpp_entity.cpp:103
virtual std::shared_ptr< bpp_class > get_class() const
Definition: bpp_entity.cpp:48
std::unordered_map< std::string, std::shared_ptr< bpp_class > > classes
A map of class names to class objects within this entity.
Definition: bpp.h:98
std::unordered_map< std::string, std::shared_ptr< bpp_object > > local_objects
Like objects, but only for objects whose scope is local to this entity.
Definition: bpp.h:110
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:32
virtual ~bpp_entity()=default
virtual std::unordered_map< std::string, std::shared_ptr< bpp_class > > get_classes() const
Definition: bpp_entity.cpp:99
std::vector< std::shared_ptr< bpp_class > > parents
Definition: bpp.h:113
virtual std::shared_ptr< bpp_object > get_object(const std::string &name)
Definition: bpp_entity.cpp:118
std::shared_ptr< bpp_class > type
Definition: bpp.h:111
virtual std::string get_address() const
Definition: bpp_entity.cpp:52
virtual std::weak_ptr< bpp::bpp_class > get_containing_class() const
Get the class which contains this entity.
Definition: bpp_entity.cpp:65
std::unordered_map< std::string, std::shared_ptr< bpp_object > > objects
A map of object names to bpp_objects within this entity.
Definition: bpp.h:104
std::weak_ptr< bpp_class > containing_class
Definition: bpp.h:112
virtual bool set_containing_class(std::weak_ptr< bpp::bpp_class > containing_class)
Definition: bpp_entity.cpp:69
virtual std::string get_name() const
Definition: bpp_entity.cpp:56
virtual void inherit(std::shared_ptr< bpp_entity > parent)
Inherit from a parent entity.
Definition: bpp_entity.cpp:81
virtual bool add_class(std::shared_ptr< bpp_class > class_)
Add a class to this entity's list of classes.
Definition: bpp_entity.cpp:18
A parameter in a method.
Definition: bpp.h:290
std::shared_ptr< bpp_class > get_type() const
Definition: bpp_method_parameter.cpp:23
bpp_method_parameter(const std::string &name)
Definition: bpp_method_parameter.cpp:13
void set_type(std::shared_ptr< bpp_class >)
Definition: bpp_method_parameter.cpp:15
std::string name
Definition: bpp.h:292
std::string get_name() const override
Definition: bpp_method_parameter.cpp:19
A method in a class.
Definition: bpp.h:256
bool inherited
Definition: bpp.h:262
bool add_object(std::shared_ptr< bpp_object > object, bool make_local) override
Add an object to the code entity.
Definition: bpp_method.cpp:128
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:24
bpp_method(const std::string &name, bool is_virtual)
virtual bool add_parameter(std::shared_ptr< bpp_method_parameter > parameter)
Add a parameter to the method.
Definition: bpp_method.cpp:48
bool is_virtual() const
Definition: bpp_method.cpp:99
std::string name
Definition: bpp.h:258
void set_scope(bpp_scope scope)
Definition: bpp_method.cpp:75
bpp_scope scope
Definition: bpp.h:260
std::vector< std::shared_ptr< bpp_method_parameter > > get_parameters() const
Definition: bpp_method.cpp:91
bpp_method()
Definition: bpp_method.cpp:14
void set_virtual(bool is_virtual)
Definition: bpp_method.cpp:79
bpp_scope get_scope() const
Definition: bpp_method.cpp:95
void set_inherited(bool is_inherited)
Definition: bpp_method.cpp:83
void destruct_local_objects(std::shared_ptr< bpp_program > program)
Destruct all local objects.
Definition: bpp_method.cpp:114
void set_name(const std::string &name)
Definition: bpp_method.cpp:71
std::vector< std::shared_ptr< bpp_method_parameter > > parameters
Definition: bpp.h:259
bool is_inherited() const
Definition: bpp_method.cpp:103
bool m_is_virtual
Definition: bpp.h:261
std::string get_name() const override
Definition: bpp_method.cpp:87
A statement which takes the address of an object in Bash++.
Definition: bpp.h:795
bpp_object_address()=default
An object assignment statement in Bash++.
Definition: bpp.h:736
void set_rvalue_array(bool is_array)
Definition: bpp_object_assignment.cpp:43
bool rvalue_array
Definition: bpp.h:745
bool rvalue_is_array() const
Definition: bpp_object_assignment.cpp:75
void set_adding(bool is_adding)
Definition: bpp_object_assignment.cpp:39
bool adding
Definition: bpp.h:744
std::shared_ptr< bpp_entity > lvalue_object
Definition: bpp.h:742
void set_rvalue_nonprimitive(bool is_nonprimitive)
Definition: bpp_object_assignment.cpp:27
bool rvalue_nonprimitive
Definition: bpp.h:741
bpp_object_assignment()
Definition: bpp_object_assignment.cpp:13
std::shared_ptr< bpp_entity > get_lvalue_object() const
Definition: bpp_object_assignment.cpp:63
void set_lvalue(const std::string &lvalue)
Definition: bpp_object_assignment.cpp:15
bool rvalue_is_nonprimitive() const
Definition: bpp_object_assignment.cpp:59
void set_lvalue_object(std::shared_ptr< bpp_entity > object)
Definition: bpp_object_assignment.cpp:31
std::string get_rvalue() const
Definition: bpp_object_assignment.cpp:51
std::string get_lvalue() const
Definition: bpp_object_assignment.cpp:47
void set_lvalue_nonprimitive(bool is_nonprimitive)
Definition: bpp_object_assignment.cpp:23
void set_rvalue(const std::string &rvalue)
Definition: bpp_object_assignment.cpp:19
std::shared_ptr< bpp_entity > rvalue_object
Definition: bpp.h:743
std::string lvalue
Definition: bpp.h:738
bool lvalue_is_nonprimitive() const
Definition: bpp_object_assignment.cpp:55
std::string rvalue
Definition: bpp.h:739
bool lvalue_nonprimitive
Definition: bpp.h:740
bool is_adding() const
Definition: bpp_object_assignment.cpp:71
std::shared_ptr< bpp_entity > get_rvalue_object() const
Definition: bpp_object_assignment.cpp:67
void set_rvalue_object(std::shared_ptr< bpp_entity > object)
Definition: bpp_object_assignment.cpp:35
An object reference in Bash++.
Definition: bpp.h:775
void set_array_index(const std::string &array_index)
Definition: bpp_object_reference.cpp:19
bpp::reference_type get_reference_type() const
Definition: bpp_object_reference.cpp:23
bpp::reference_type reference_type
Definition: bpp.h:777
bpp_object_reference()
Definition: bpp_object_reference.cpp:13
std::string array_index
Definition: bpp.h:778
std::string get_array_index() const
Definition: bpp_object_reference.cpp:27
void set_reference_type(bpp::reference_type reference_type)
Definition: bpp_object_reference.cpp:15
An object in Bash++.
Definition: bpp.h:352
std::string get_pre_access_code() const
Definition: bpp_object.cpp:69
bool is_pointer() const
Definition: bpp_object.cpp:77
void set_pre_access_code(const std::string &pre_access_code)
Definition: bpp_object.cpp:39
void set_pointer(bool is_pointer)
Definition: bpp_object.cpp:23
void set_address(const std::string &address)
Definition: bpp_object.cpp:31
std::string address
Definition: bpp.h:355
void set_post_access_code(const std::string &post_access_code)
Definition: bpp_object.cpp:43
std::string get_post_access_code() const
Definition: bpp_object.cpp:73
std::string get_assignment_value() const
Definition: bpp_object.cpp:61
void set_assignment_value(const std::string &assignment_value)
Definition: bpp_object.cpp:35
std::string pre_access_code
Definition: bpp.h:357
void set_nullptr()
Definition: bpp_object.cpp:47
std::string post_access_code
Definition: bpp.h:358
bpp_object()
Definition: bpp_object.cpp:13
bool m_is_pointer
Definition: bpp.h:359
std::string assignment_value
Definition: bpp.h:356
std::string get_name() const override
Definition: bpp_object.cpp:53
std::shared_ptr< bpp::bpp_object > get_copy_from() const
Definition: bpp_object.cpp:81
std::string get_address() const override
Definition: bpp_object.cpp:57
std::shared_ptr< bpp_class > get_class() const override
Definition: bpp_object.cpp:65
void set_name(const std::string &name)
Definition: bpp_object.cpp:27
std::string name
Definition: bpp.h:354
void set_class(std::shared_ptr< bpp_class > object_class)
Definition: bpp_object.cpp:19
std::shared_ptr< bpp::bpp_object > copy_from
Definition: bpp.h:360
A pointer dereference in Bash++.
Definition: bpp.h:689
bpp_pointer_dereference()
Definition: bpp_pointer_dereference.cpp:13
std::shared_ptr< bpp::bpp_value_assignment > value_assignment
Definition: bpp.h:691
std::shared_ptr< bpp::bpp_value_assignment > get_value_assignment() const
Definition: bpp_pointer_dereference.cpp:19
void set_value_assignment(std::shared_ptr< bpp::bpp_value_assignment > value_assignment)
Definition: bpp_pointer_dereference.cpp:15
The main program.
Definition: bpp.h:414
uint64_t get_dynamic_cast_counter() const
Definition: bpp_program.cpp:191
uint64_t assignment_counter
Definition: bpp.h:418
std::shared_ptr< bpp_class > primitive_class
Definition: bpp.h:416
uint64_t dynamic_cast_counter
Definition: bpp.h:420
bool set_containing_class(std::weak_ptr< bpp_class > containing_class) override
Definition: bpp_program.cpp:27
uint64_t get_supershell_counter() const
Definition: bpp_program.cpp:155
void increment_function_counter()
Definition: bpp_program.cpp:167
uint64_t get_assignment_counter() const
Definition: bpp_program.cpp:163
uint64_t object_counter
Definition: bpp.h:421
std::shared_ptr< bpp_class > get_primitive_class() const
Definition: bpp_program.cpp:35
uint64_t supershell_counter
Definition: bpp.h:417
uint64_t get_function_counter() const
Definition: bpp_program.cpp:177
uint64_t function_counter
Definition: bpp.h:419
bool add_class(std::shared_ptr< bpp_class > class_) override
Add a class to the program.
Definition: bpp_program.cpp:44
uint64_t get_object_counter() const
Definition: bpp_program.cpp:199
void increment_dynamic_cast_counter()
Definition: bpp_program.cpp:181
bpp_program()
Definition: bpp_program.cpp:15
void increment_supershell_counter()
Definition: bpp_program.cpp:146
void increment_assignment_counter()
Definition: bpp_program.cpp:159
void set_output_stream(std::shared_ptr< std::ostream > output_stream)
Definition: bpp_program.cpp:31
void increment_object_counter()
Definition: bpp_program.cpp:195
The practical difference between bpp_code_entity and bpp_string is how we handle the code buffers.
Definition: bpp.h:238
std::string get_pre_code() const override
Return the contents of the pre-code buffer as a string.
Definition: bpp_string.cpp:43
void add_code(const std::string &code, bool add_newline=true) override
Add code to the primary buffer.
Definition: bpp_string.cpp:21
void add_code_to_previous_line(const std::string &code) override
Add code to the pre-code buffer.
Definition: bpp_string.cpp:28
void add_code_to_next_line(const std::string &code) override
Add code to the post-code buffer.
Definition: bpp_string.cpp:35
bpp_string()
Definition: bpp_string.cpp:13
std::string get_code() const override
Return the contents of the main code buffer as a string.
Definition: bpp_string.cpp:39
std::string get_post_code() const override
Return the contents of the post-code buffer as a string.
Definition: bpp_string.cpp:51
A value assignment statement in Bash++.
Definition: bpp.h:706
bool is_array_assignment() const
Definition: bpp_value_assignment.cpp:47
std::shared_ptr< bpp_entity > nonprimitive_object
Definition: bpp.h:709
bool nonprimitive_assignment
Definition: bpp.h:708
bool is_nonprimitive_assignment() const
Definition: bpp_value_assignment.cpp:35
bpp_value_assignment()
Definition: bpp_value_assignment.cpp:13
bool array_assignment
Definition: bpp.h:711
std::shared_ptr< bpp_entity > get_nonprimitive_object() const
Definition: bpp_value_assignment.cpp:39
bool lvalue_nonprimitive
Definition: bpp.h:710
void set_adding(bool is_adding)
Definition: bpp_value_assignment.cpp:31
void set_lvalue_nonprimitive(bool is_nonprimitive)
Definition: bpp_value_assignment.cpp:23
void set_array_assignment(bool is_array)
Definition: bpp_value_assignment.cpp:27
void set_nonprimitive_assignment(bool is_nonprimitive)
Definition: bpp_value_assignment.cpp:15
bool lvalue_is_nonprimitive() const
Definition: bpp_value_assignment.cpp:43
bool is_adding() const
Definition: bpp_value_assignment.cpp:51
void set_nonprimitive_object(std::shared_ptr< bpp_entity > object)
Definition: bpp_value_assignment.cpp:19
bool adding
Definition: bpp.h:712
Definition: bash_case.cpp:11
static const std::shared_ptr< bpp_method > inaccessible_method
A placeholder for an inaccessible method of a class (scope handling)
Definition: bpp.h:77
static const std::shared_ptr< bpp_datamember > inaccessible_datamember
A placeholder for an inaccessible data member of a class (scope handling)
Definition: bpp.h:71
static const char bpp_nullptr[]
The secret internal value of '@nullptr' in Bash++.
Definition: bpp.h:83
static const std::shared_ptr< bpp_entity > inaccessible_entity
A placeholder for an inaccessible entity (scope handling)
Definition: bpp.h:65
bpp_scope
Definition: bpp.h:19
@ SCOPE_PUBLIC
Definition: bpp.h:20
@ SCOPE_INACCESSIBLE
Definition: bpp.h:23
@ SCOPE_PRIVATE
Definition: bpp.h:22
@ SCOPE_PROTECTED
Definition: bpp.h:21
reference_type
Definition: bpp.h:26
@ ref_method
Definition: bpp.h:28
@ ref_object
Definition: bpp.h:29
@ ref_primitive
Definition: bpp.h:27