polserver/pol-core/bscript/compiler/model/FlowControlLabel.cpp
Kevin Eady a953a37fa7 Support function reference calls with default parameters (#710)
* Support default args in funcref calls
- Simplify BFunctionRef by using funcref index
- Emit default args when visiting function reference

* Move default args gen to second-pass visit

* Better error message on param count errors

* Check for constructor in MTH_NEW

* Address self-review comments
- Update code comments

* Introduce ResourceManager to pol testsuite
- Create a new class-based resource manager for deleting resources
(item NPCs, multis) after each test.
- Migrate house_set_multiid test to use new ResourceManager.

* Move resource cleanup
2024-10-10 18:06:04 +02:00

45 lines
1.2 KiB
C++

#include "FlowControlLabel.h"
#include <stdexcept>
#include "bscript/compiler/ast/FunctionParameterDeclaration.h"
#include "bscript/compiler/ast/UserFunction.h"
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 );
}
std::string FlowControlLabel::label_for_user_function_default_argument(
const UserFunction& uf, const FunctionParameterDeclaration& param )
{
return fmt::format( "{}#{}", uf.scoped_name(), param.name.string() );
}
} // namespace Pol::Bscript::Compiler