polserver/pol-core/bscript/compiler/model/FlowControlLabel.cpp
Eric Swanson 95e604e417
Add support for if-then-else statements (#259)
Adds:
- ast/Block: a block scope that allows declaring local variables
- ast/IfThenElseStatement: AST node for if..elseif..else..endif statements
- model/FlowControlLabel: provides an anchor for jumps or calls.
  - Function calls, break statements, continue statements, and loops will all use these.
2020-08-30 17:03:26 -07:00

36 lines
860 B
C++

#include "FlowControlLabel.h"
#include <stdexcept>
namespace Pol::Bscript::Compiler
{
FlowControlLabel::FlowControlLabel() : maybe_address(), referencing_instruction_addresses() {}
bool FlowControlLabel::has_address() const
{
return maybe_address.has_value();
}
unsigned FlowControlLabel::address() const
{
return maybe_address.value();
}
const std::vector<unsigned>& FlowControlLabel::get_referencing_instruction_addresses() const
{
return referencing_instruction_addresses;
}
void FlowControlLabel::assign_address( unsigned address )
{
if ( maybe_address.has_value() )
throw std::runtime_error( "Label address assigned twice" );
maybe_address = address;
}
void FlowControlLabel::add_referencing_instruction_address( unsigned address )
{
referencing_instruction_addresses.push_back( address );
}
} // namespace Pol::Bscript::Compiler