Bash++
Bash++ compiler internal documentation
Public Member Functions | Private Attributes | List of all members
bpp::bash_if Class Reference

An if statement in Bash++. More...

#include <bpp.h>

Inheritance diagram for bpp::bash_if:
Inheritance graph
[legend]
Collaboration diagram for bpp::bash_if:
Collaboration graph
[legend]

Public Member Functions

void new_branch ()
 
void add_condition_code (const std::string &condition_code)
 
void add_branch_code (const std::string &branch_code)
 
const std::vector< std::pair< std::string, std::string > > & get_conditional_branches () const
 
- Public Member Functions inherited from bpp::bpp_string
void add_code (const std::string &code, bool add_newline=true) override
 Add code to the primary buffer.
 
void add_code_to_previous_line (const std::string &code) override
 Add code to the pre-code buffer.
 
void add_code_to_next_line (const std::string &code) override
 Add code to the post-code buffer.
 
std::string get_code () const override
 Return the contents of the main code buffer as a string.
 
std::string get_pre_code () const override
 Return the contents of the pre-code buffer as a string.
 
std::string get_post_code () const override
 Return the contents of the post-code buffer as a string.
 
- Public Member Functions inherited from bpp::bpp_code_entity
bool add_object (std::shared_ptr< bpp_object > object, bool make_local=false) override
 Add an object to the code entity.
 
virtual void flush_nextline_buffer ()
 
virtual void flush_postline_buffer ()
 
virtual void flush_code_buffers ()
 
virtual void clear_all_buffers ()
 
void destruct_local_objects (std::shared_ptr< bpp_program > program)
 Destruct all local objects in the code entity.
 
void set_requires_perfect_forwarding (bool require)
 
bool get_requires_perfect_forwarding () const
 
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 map.
 
- Public Member Functions inherited from bpp::bpp_entity
 bpp_entity ()=default
 
virtual ~bpp_entity ()=default
 
 bpp_entity (const bpp_entity &other)=default
 
bpp_entityoperator= (const bpp_entity &other)=default
 
 bpp_entity (bpp_entity &&other) noexcept=default
 
bpp_entityoperator= (bpp_entity &&other) noexcept=default
 
virtual bool add_class (std::shared_ptr< bpp_class > class_)
 Add a class to this entity's list of classes.
 
virtual std::shared_ptr< bpp_classget_class ()
 
virtual std::string get_address () const
 
virtual void set_name (const std::string &name)
 
virtual std::string get_name () const
 
virtual std::weak_ptr< bpp::bpp_classget_containing_class ()
 Get the class which contains this entity.
 
virtual std::weak_ptr< bpp_programget_containing_program ()
 
virtual bool set_containing_class (std::weak_ptr< bpp::bpp_class > containing_class)
 
void inherit (std::shared_ptr< bpp_entity > parent)
 Inherit from a parent entity.
 
void inherit (std::shared_ptr< bpp_program > program)
 
virtual void inherit (std::shared_ptr< bpp_class > parent)
 
void set_definition_position (const std::string &file, uint64_t line, uint64_t column)
 
void add_reference (const std::string &file, uint64_t line, uint64_t column)
 
bpp::SymbolPosition get_initial_definition () const
 
std::list< bpp::SymbolPositionget_references () const
 
const std::unordered_map< std::string, std::weak_ptr< bpp_class > > & get_classes () const
 
const std::unordered_map< std::string, std::weak_ptr< bpp_object > > & get_foreign_objects () const
 
const std::unordered_map< std::string, std::shared_ptr< bpp_object > > & get_local_objects () const
 
std::shared_ptr< bpp_classget_class (const std::string &name)
 
std::shared_ptr< bpp_objectget_object (const std::string &name)
 
std::shared_ptr< bpp_classget_parent () const
 

Private Attributes

std::vector< std::pair< std::string, std::string > > conditional_branches
 

Additional Inherited Members

- Protected Attributes inherited from bpp::bpp_code_entity
std::shared_ptr< std::ostream > code = std::make_shared<std::ostringstream>()
 
std::string nextline_buffer
 
std::string postline_buffer
 
bool buffers_flushed = false
 
bool requires_perfect_forwarding = false
 Signals to bash_command_sequence entities whether they should operate in perfect forwarding mode I.e., whether this entity has special need to separate its pre- and post-code from its main code.
 
- Protected Attributes inherited from bpp::bpp_entity
std::string name
 
std::unordered_map< std::string, std::weak_ptr< bpp_class > > classes
 A map of class names to class objects within this entity.
 
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 parent entities, and are accessible from this entity due to inheritance.
 
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, and are not accessible from parent entities, but will be inherited by child entities.
 
std::weak_ptr< bpp_classtype
 
std::weak_ptr< bpp_classcontaining_class
 
std::weak_ptr< bpp_programcontaining_program
 
std::vector< std::weak_ptr< bpp_class > > parents
 
std::weak_ptr< bpp_methodoverridden_method
 
bpp::SymbolPosition initial_definition
 
std::list< bpp::SymbolPositionreferences
 

Detailed Description

An if statement in Bash++.

This entity gets pushed onto the entity stack when an if statement is encountered in Bash++ code. It contains a vector of conditional branches, each of which contains a condition and a branch of code

The reason this requires its own entity type is similar to the reason for bash_while_or_until_loop: The conditions for the if statement may contain references which need to be resolved, And the pre- and post-code for those references need to be added in specific places in the compiled code.

In the case of 'if' statements, the pre- and post-code is added before and after the entire if statement. If these were parsed without their own entity type (e.g., just using a bpp_code_entity), the pre- and post-code would be added before and after each individual conditional branch, which is incorrect.

The 'bash_' prefix signifies that this is used to parse ordinary Bash code, not anything specific to Bash++

Member Function Documentation

◆ add_branch_code()

void bpp::bash_if::add_branch_code ( const std::string &  branch_code)

◆ add_condition_code()

void bpp::bash_if::add_condition_code ( const std::string &  condition_code)

◆ get_conditional_branches()

const std::vector< std::pair< std::string, std::string > > & bpp::bash_if::get_conditional_branches ( ) const

◆ new_branch()

void bpp::bash_if::new_branch ( )

Member Data Documentation

◆ conditional_branches

std::vector<std::pair<std::string, std::string> > bpp::bash_if::conditional_branches
private

The documentation for this class was generated from the following files: