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();
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 std::unordered_map<std::string, std::shared_ptr<bpp_class>>
get_classes()
const;
129 std::unordered_map<std::string, std::shared_ptr<bpp_object>>
get_objects()
const;
130 std::shared_ptr<bpp_class>
get_class(
const std::string& name);
131 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()
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()
override;
429 bool add_class(std::shared_ptr<bpp_class> class_)
override;
472 std::string
get_code()
const override;
551 std::string
get_code()
const override;
571 void add_case(
const std::string& case_);
632 std::string
get_name()
const override;
677 std::shared_ptr<bpp::bpp_class>
get_cast_to()
const;
A pattern for a case statement in Bash++.
Definition: bpp.h:585
std::string pattern
Definition: bpp.h:587
void set_containing_case(std::shared_ptr< bpp::bash_case > containing_case)
Definition: bash_case_pattern.cpp:16
const std::string & get_pattern() const
Definition: bash_case_pattern.cpp:20
void set_pattern(const std::string &pattern)
Definition: bash_case_pattern.cpp:12
bash_case_pattern()
Definition: bash_case_pattern.cpp:10
std::shared_ptr< bpp::bash_case > containing_case
Definition: bpp.h:588
std::shared_ptr< bpp::bash_case > get_containing_case() const
Definition: bash_case_pattern.cpp:24
A case statement in Bash++.
Definition: bpp.h:565
std::string cases
Definition: bpp.h:567
bash_case()
Definition: bash_case.cpp:10
const std::string & get_cases() const
Definition: bash_case.cpp:16
void add_case(const std::string &case_)
Definition: bash_case.cpp:12
A for loop in Bash++.
Definition: bpp.h:608
const std::string & get_header_post_code() const
Definition: bash_for.cpp:28
bash_for()
Definition: bash_for.cpp:10
void set_header_post_code(const std::string &post_code)
Definition: bash_for.cpp:16
const std::string & get_header_pre_code() const
Definition: bash_for.cpp:24
void set_header_code(const std::string &code)
Definition: bash_for.cpp:20
std::string header_code
Definition: bpp.h:612
std::string header_pre_code
Definition: bpp.h:610
void set_header_pre_code(const std::string &pre_code)
Definition: bash_for.cpp:12
std::string header_post_code
Definition: bpp.h:611
const std::string & get_header_code() const
Definition: bash_for.cpp:32
void set_name(const std::string &name)
Definition: bash_function.cpp:12
bash_function()
Definition: bash_function.cpp:10
std::string get_name() const override
Definition: bash_function.cpp:16
std::string name
Definition: bpp.h:627
A branch of an if statement in Bash++.
Definition: bpp.h:542
void set_if_statement(std::shared_ptr< bpp::bash_if > if_statement)
Definition: bash_if_branch.cpp:12
std::shared_ptr< bpp::bash_if > get_if_statement() const
Definition: bash_if_branch.cpp:16
bash_if_branch()
Definition: bash_if_branch.cpp:10
std::string get_pre_code() const override
Return the contents of the pre-code buffer as a string.
Definition: bash_if_branch.cpp:24
std::string get_post_code() const override
Return the contents of the post-code buffer as a string.
Definition: bash_if_branch.cpp:32
std::string get_code() const override
Return the contents of the main code buffer as a string.
Definition: bash_if_branch.cpp:20
std::shared_ptr< bpp::bash_if > if_statement
Definition: bpp.h:544
An if statement in Bash++.
Definition: bpp.h:514
std::vector< std::pair< std::string, std::string > > conditional_branches
Definition: bpp.h:518
void add_conditional_branch_post_code(const std::string &post_code)
Definition: bash_if.cpp:16
void new_branch()
Definition: bash_if.cpp:20
std::string conditional_branch_pre_code
Definition: bpp.h:516
void add_branch_code(const std::string &branch_code)
Definition: bash_if.cpp:28
void add_condition_code(const std::string &condition_code)
Definition: bash_if.cpp:24
std::string get_conditional_branch_post_code() const
Definition: bash_if.cpp:36
bash_if()
Definition: bash_if.cpp:10
const std::vector< std::pair< std::string, std::string > > & get_conditional_branches() const
Definition: bash_if.cpp:40
std::string conditional_branch_post_code
Definition: bpp.h:517
void add_conditional_branch_pre_code(const std::string &pre_code)
Definition: bash_if.cpp:12
std::string get_conditional_branch_pre_code() const
Definition: bash_if.cpp:32
The condition for a while loop in Bash++.
Definition: bpp.h:484
bash_while_condition()
Definition: bash_while_condition.cpp:10
std::vector< std::string > supershell_function_calls
Definition: bpp.h:487
int supershell_count
Definition: bpp.h:486
void increment_supershell_count()
Definition: bash_while_condition.cpp:12
std::vector< std::string > get_supershell_function_calls() const
Definition: bash_while_condition.cpp:20
void add_supershell_function_call(const std::string &function_call)
Definition: bash_while_condition.cpp:16
A while loop in Bash++.
Definition: bpp.h:463
std::string get_post_code() const override
Return the contents of the post-code buffer as a string.
Definition: bash_while_loop.cpp:32
void set_while_condition(std::shared_ptr< bpp::bash_while_condition > while_condition)
Definition: bash_while_loop.cpp:12
std::shared_ptr< bpp::bash_while_condition > while_condition
Definition: bpp.h:465
std::string get_code() const override
Return the contents of the main code buffer as a string.
Definition: bash_while_loop.cpp:20
bash_while_loop()
Definition: bash_while_loop.cpp:10
std::string get_pre_code() const override
Return the contents of the pre-code buffer as a string.
Definition: bash_while_loop.cpp:24
std::shared_ptr< bpp::bash_while_condition > get_while_condition() const
Definition: bash_while_loop.cpp:16
A class in Bash++.
Definition: bpp.h:307
void set_name(const std::string &name)
Definition: bpp_class.cpp:97
bool set_containing_class(std::weak_ptr< bpp::bpp_class > containing_class) override
Definition: bpp_class.cpp:93
bool has_custom_destructor
Definition: bpp.h:313
bpp_class()
Definition: bpp_class.cpp:11
std::string name
Definition: bpp.h:309
std::shared_ptr< bpp_class > get_class() override
Definition: bpp_class.cpp:89
void add_default_destructor()
Add the default destructor method.
Definition: bpp_class.cpp:74
void inherit(std::shared_ptr< bpp_class > parent) override
Inherit from a parent class.
Definition: bpp_class.cpp:281
bool add_method(std::shared_ptr< bpp_method > method)
Add a method to the class.
Definition: bpp_class.cpp:106
std::vector< std::shared_ptr< bpp_datamember > > get_datamembers() const
Definition: bpp_class.cpp:179
void add_default_toPrimitive()
Add the default toPrimitive method.
Definition: bpp_class.cpp:39
void finalize(std::shared_ptr< bpp_program > program)
Finalize the class.
Definition: bpp_class.cpp:340
bool finalized
Definition: bpp.h:320
std::vector< std::shared_ptr< bpp_datamember > > datamembers
Definition: bpp.h:311
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:251
bool has_custom_toPrimitive
Definition: bpp.h:312
void remove_default_toPrimitive()
Remove the default toPrimitive method.
Definition: bpp_class.cpp:21
std::shared_ptr< bpp::bpp_class > get_parent()
Definition: bpp_class.cpp:325
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:196
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:229
std::vector< std::shared_ptr< bpp_method > > get_methods() const
Definition: bpp_class.cpp:175
std::string get_name() const override
Definition: bpp_class.cpp:171
std::weak_ptr< bpp_class > get_containing_class() override
Get the class which contains this entity.
Definition: bpp_class.cpp:85
bool add_datamember(std::shared_ptr< bpp_datamember > datamember)
Add a datamember to the class.
Definition: bpp_class.cpp:152
void remove_default_destructor()
Remove the default destructor method.
Definition: bpp_class.cpp:55
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:57
bpp_code_entity()
Definition: bpp_code_entity.cpp:10
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: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:168
virtual std::string get_pre_code() const
Return the contents of the pre-code buffer as a string.
Definition: bpp_code_entity.cpp:161
virtual void flush_nextline_buffer()
Definition: bpp_code_entity.cpp:62
virtual void clear_all_buffers()
Definition: bpp_code_entity.cpp:88
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
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:150
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:36
bool array
Definition: bpp.h:395
void set_scope(bpp_scope scope)
Definition: bpp_datamember.cpp:16
std::string get_default_value() const
Definition: bpp_datamember.cpp:28
void set_default_value(const std::string &default_value)
Definition: bpp_datamember.cpp:12
std::string get_address() const override
Definition: bpp_datamember.cpp:24
bpp_scope scope
Definition: bpp.h:394
std::string default_value
Definition: bpp.h:393
bpp_scope get_scope() const
Definition: bpp_datamember.cpp:32
bpp_datamember()
Definition: bpp_datamember.cpp:10
void set_array(bool is_array)
Definition: bpp_datamember.cpp:20
A delete statement in Bash++.
Definition: bpp.h:646
std::shared_ptr< bpp::bpp_object > get_object_to_delete() const
Definition: bpp_delete_statement.cpp:18
void set_force_pointer(bool force_pointer)
Definition: bpp_delete_statement.cpp:14
void set_object_to_delete(std::shared_ptr< bpp::bpp_object > object)
Definition: bpp_delete_statement.cpp:10
bool force_pointer() const
Definition: bpp_delete_statement.cpp:22
bool force_ptr
Definition: bpp.h:649
std::shared_ptr< bpp::bpp_object > object_to_delete
Definition: bpp.h:648
bpp_delete_statement()=default
A dynamic_cast statement in Bash++.
Definition: bpp.h:670
std::shared_ptr< bpp::bpp_class > get_cast_to() const
Definition: bpp_dynamic_cast_statement.cpp:16
bpp_dynamic_cast_statement()
Definition: bpp_dynamic_cast_statement.cpp:10
std::shared_ptr< bpp::bpp_class > cast_to
Definition: bpp.h:672
void set_cast_to(std::shared_ptr< bpp::bpp_class > cast_to)
Definition: bpp_dynamic_cast_statement.cpp:12
The base class for all entities in the Bash++ compiler.
Definition: bpp.h:92
std::unordered_map< std::string, std::shared_ptr< bpp_object > > get_objects() const
Definition: bpp_entity.cpp:100
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 std::weak_ptr< bpp::bpp_class > get_containing_class()
Get the class which contains this entity.
Definition: bpp_entity.cpp:62
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:29
virtual ~bpp_entity()=default
std::unordered_map< std::string, std::shared_ptr< bpp_class > > get_classes() const
Definition: bpp_entity.cpp:96
std::vector< std::shared_ptr< bpp_class > > parents
Definition: bpp.h:113
std::shared_ptr< bpp_object > get_object(const std::string &name)
Definition: bpp_entity.cpp:117
std::shared_ptr< bpp_class > type
Definition: bpp.h:111
virtual std::string get_address() const
Definition: bpp_entity.cpp:49
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:66
virtual std::string get_name() const
Definition: bpp_entity.cpp:53
virtual void inherit(std::shared_ptr< bpp_entity > parent)
Inherit from a parent entity.
Definition: bpp_entity.cpp:78
virtual bool add_class(std::shared_ptr< bpp_class > class_)
Add a class to this entity's list of classes.
Definition: bpp_entity.cpp:15
virtual std::shared_ptr< bpp_class > get_class()
Definition: bpp_entity.cpp:45
A parameter in a method.
Definition: bpp.h:290
std::shared_ptr< bpp_class > get_type() const
Definition: bpp_method_parameter.cpp:20
bpp_method_parameter(const std::string &name)
Definition: bpp_method_parameter.cpp:10
void set_type(std::shared_ptr< bpp_class >)
Definition: bpp_method_parameter.cpp:12
std::string name
Definition: bpp.h:292
std::string get_name() const override
Definition: bpp_method_parameter.cpp:16
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:125
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:21
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:45
bool is_virtual() const
Definition: bpp_method.cpp:96
std::string name
Definition: bpp.h:258
void set_scope(bpp_scope scope)
Definition: bpp_method.cpp:72
bpp_scope scope
Definition: bpp.h:260
std::vector< std::shared_ptr< bpp_method_parameter > > get_parameters() const
Definition: bpp_method.cpp:88
bpp_method()
Definition: bpp_method.cpp:11
void set_virtual(bool is_virtual)
Definition: bpp_method.cpp:76
bpp_scope get_scope() const
Definition: bpp_method.cpp:92
void set_inherited(bool is_inherited)
Definition: bpp_method.cpp:80
void destruct_local_objects(std::shared_ptr< bpp_program > program)
Destruct all local objects.
Definition: bpp_method.cpp:111
void set_name(const std::string &name)
Definition: bpp_method.cpp:68
std::vector< std::shared_ptr< bpp_method_parameter > > parameters
Definition: bpp.h:259
bool is_inherited() const
Definition: bpp_method.cpp:100
bool m_is_virtual
Definition: bpp.h:261
std::string get_name() const override
Definition: bpp_method.cpp:84
A statement which takes the address of an object in Bash++.
Definition: bpp.h:793
bpp_object_address()=default
An object assignment statement in Bash++.
Definition: bpp.h:734
void set_rvalue_array(bool is_array)
Definition: bpp_object_assignment.cpp:40
bool rvalue_array
Definition: bpp.h:743
bool rvalue_is_array() const
Definition: bpp_object_assignment.cpp:72
void set_adding(bool is_adding)
Definition: bpp_object_assignment.cpp:36
bool adding
Definition: bpp.h:742
std::shared_ptr< bpp_entity > lvalue_object
Definition: bpp.h:740
void set_rvalue_nonprimitive(bool is_nonprimitive)
Definition: bpp_object_assignment.cpp:24
bool rvalue_nonprimitive
Definition: bpp.h:739
bpp_object_assignment()
Definition: bpp_object_assignment.cpp:10
std::shared_ptr< bpp_entity > get_lvalue_object() const
Definition: bpp_object_assignment.cpp:60
void set_lvalue(const std::string &lvalue)
Definition: bpp_object_assignment.cpp:12
bool rvalue_is_nonprimitive() const
Definition: bpp_object_assignment.cpp:56
void set_lvalue_object(std::shared_ptr< bpp_entity > object)
Definition: bpp_object_assignment.cpp:28
std::string get_rvalue() const
Definition: bpp_object_assignment.cpp:48
std::string get_lvalue() const
Definition: bpp_object_assignment.cpp:44
void set_lvalue_nonprimitive(bool is_nonprimitive)
Definition: bpp_object_assignment.cpp:20
void set_rvalue(const std::string &rvalue)
Definition: bpp_object_assignment.cpp:16
std::shared_ptr< bpp_entity > rvalue_object
Definition: bpp.h:741
std::string lvalue
Definition: bpp.h:736
bool lvalue_is_nonprimitive() const
Definition: bpp_object_assignment.cpp:52
std::string rvalue
Definition: bpp.h:737
bool lvalue_nonprimitive
Definition: bpp.h:738
bool is_adding() const
Definition: bpp_object_assignment.cpp:68
std::shared_ptr< bpp_entity > get_rvalue_object() const
Definition: bpp_object_assignment.cpp:64
void set_rvalue_object(std::shared_ptr< bpp_entity > object)
Definition: bpp_object_assignment.cpp:32
An object reference in Bash++.
Definition: bpp.h:773
void set_array_index(const std::string &array_index)
Definition: bpp_object_reference.cpp:16
bpp::reference_type get_reference_type() const
Definition: bpp_object_reference.cpp:20
bpp::reference_type reference_type
Definition: bpp.h:775
bpp_object_reference()
Definition: bpp_object_reference.cpp:10
std::string array_index
Definition: bpp.h:776
std::string get_array_index() const
Definition: bpp_object_reference.cpp:24
void set_reference_type(bpp::reference_type reference_type)
Definition: bpp_object_reference.cpp:12
An object in Bash++.
Definition: bpp.h:352
std::string get_pre_access_code() const
Definition: bpp_object.cpp:66
bool is_pointer() const
Definition: bpp_object.cpp:74
void set_pre_access_code(const std::string &pre_access_code)
Definition: bpp_object.cpp:36
void set_pointer(bool is_pointer)
Definition: bpp_object.cpp:20
void set_address(const std::string &address)
Definition: bpp_object.cpp:28
std::string address
Definition: bpp.h:355
void set_post_access_code(const std::string &post_access_code)
Definition: bpp_object.cpp:40
std::shared_ptr< bpp_class > get_class() override
Definition: bpp_object.cpp:62
std::string get_post_access_code() const
Definition: bpp_object.cpp:70
std::string get_assignment_value() const
Definition: bpp_object.cpp:58
void set_assignment_value(const std::string &assignment_value)
Definition: bpp_object.cpp:32
std::string pre_access_code
Definition: bpp.h:357
void set_nullptr()
Definition: bpp_object.cpp:44
std::string post_access_code
Definition: bpp.h:358
bpp_object()
Definition: bpp_object.cpp:10
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:50
std::shared_ptr< bpp::bpp_object > get_copy_from() const
Definition: bpp_object.cpp:78
std::string get_address() const override
Definition: bpp_object.cpp:54
void set_name(const std::string &name)
Definition: bpp_object.cpp:24
std::string name
Definition: bpp.h:354
void set_class(std::shared_ptr< bpp_class > object_class)
Definition: bpp_object.cpp:16
std::shared_ptr< bpp::bpp_object > copy_from
Definition: bpp.h:360
A pointer dereference in Bash++.
Definition: bpp.h:687
bpp_pointer_dereference()
Definition: bpp_pointer_dereference.cpp:10
std::shared_ptr< bpp::bpp_value_assignment > value_assignment
Definition: bpp.h:689
std::shared_ptr< bpp::bpp_value_assignment > get_value_assignment() const
Definition: bpp_pointer_dereference.cpp:16
void set_value_assignment(std::shared_ptr< bpp::bpp_value_assignment > value_assignment)
Definition: bpp_pointer_dereference.cpp:12
The main program.
Definition: bpp.h:414
uint64_t get_dynamic_cast_counter() const
Definition: bpp_program.cpp:208
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:24
uint64_t get_supershell_counter() const
Definition: bpp_program.cpp:172
void increment_function_counter()
Definition: bpp_program.cpp:184
uint64_t get_assignment_counter() const
Definition: bpp_program.cpp:180
uint64_t object_counter
Definition: bpp.h:421
std::shared_ptr< bpp_class > get_primitive_class() const
Definition: bpp_program.cpp:32
uint64_t supershell_counter
Definition: bpp.h:417
uint64_t get_function_counter() const
Definition: bpp_program.cpp:194
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:60
uint64_t get_object_counter() const
Definition: bpp_program.cpp:216
void increment_dynamic_cast_counter()
Definition: bpp_program.cpp:198
bpp_program()
Definition: bpp_program.cpp:12
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 increment_supershell_counter()
Definition: bpp_program.cpp:163
void increment_assignment_counter()
Definition: bpp_program.cpp:176
void set_output_stream(std::shared_ptr< std::ostream > output_stream)
Definition: bpp_program.cpp:28
void increment_object_counter()
Definition: bpp_program.cpp:212
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:40
void add_code(const std::string &code, bool add_newline=true) override
Add code to the primary buffer.
Definition: bpp_string.cpp:18
void add_code_to_previous_line(const std::string &code) override
Add code to the pre-code buffer.
Definition: bpp_string.cpp:25
void add_code_to_next_line(const std::string &code) override
Add code to the post-code buffer.
Definition: bpp_string.cpp:32
bpp_string()
Definition: bpp_string.cpp:10
std::string get_code() const override
Return the contents of the main code buffer as a string.
Definition: bpp_string.cpp:36
std::string get_post_code() const override
Return the contents of the post-code buffer as a string.
Definition: bpp_string.cpp:48
A value assignment statement in Bash++.
Definition: bpp.h:704
bool is_array_assignment() const
Definition: bpp_value_assignment.cpp:44
std::shared_ptr< bpp_entity > nonprimitive_object
Definition: bpp.h:707
bool nonprimitive_assignment
Definition: bpp.h:706
bool is_nonprimitive_assignment() const
Definition: bpp_value_assignment.cpp:32
bpp_value_assignment()
Definition: bpp_value_assignment.cpp:10
bool array_assignment
Definition: bpp.h:709
std::shared_ptr< bpp_entity > get_nonprimitive_object() const
Definition: bpp_value_assignment.cpp:36
bool lvalue_nonprimitive
Definition: bpp.h:708
void set_adding(bool is_adding)
Definition: bpp_value_assignment.cpp:28
void set_lvalue_nonprimitive(bool is_nonprimitive)
Definition: bpp_value_assignment.cpp:20
void set_array_assignment(bool is_array)
Definition: bpp_value_assignment.cpp:24
void set_nonprimitive_assignment(bool is_nonprimitive)
Definition: bpp_value_assignment.cpp:12
bool lvalue_is_nonprimitive() const
Definition: bpp_value_assignment.cpp:40
bool is_adding() const
Definition: bpp_value_assignment.cpp:48
void set_nonprimitive_object(std::shared_ptr< bpp_entity > object)
Definition: bpp_value_assignment.cpp:16
bool adding
Definition: bpp.h:710
Definition: bash_case.cpp:8
const std::shared_ptr< bpp_method > inaccessible_method
A placeholder for an inaccessible method of a class (scope handling)
Definition: bpp.h:77
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
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