Implements support for functions with the same name, but different parameters
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
@@ -32,19 +32,28 @@ namespace Porygon::StandardLibraries{
|
||||
static void RegisterVariables(std::map<Utilities::HashedString, Binder::BoundVariable *>* bound,
|
||||
std::map<Utilities::HashedString, shared_ptr<Evaluation::EvalValue>>* values){
|
||||
// Register error function
|
||||
auto errorFuncType = make_shared<UserData::UserDataFunctionType>(
|
||||
auto errorFuncTypeOption = new UserData::UserDataFunctionOption(
|
||||
make_shared<ScriptType>(TypeClass::Nil),
|
||||
vector<shared_ptr<ScriptType>>{make_shared<StringScriptType>(false, 0)});
|
||||
auto errorFunc = make_shared<UserData::UserDataFunction>(_error, nullptr);
|
||||
auto errorFuncType = make_shared<GenericFunctionScriptType>();
|
||||
errorFuncType->RegisterFunctionOption(errorFuncTypeOption);
|
||||
auto errorFuncOption = new UserData::UserDataFunction(_error, nullptr);
|
||||
auto errorFunc = make_shared<Evaluation::GenericFunctionEvalValue>(errorFuncType, rand());
|
||||
errorFunc->RegisterOption(errorFuncOption);
|
||||
auto errorLookup = Utilities::HashedString::CreateLookup(u"error");
|
||||
bound->insert({errorLookup, new Binder::BoundVariable(errorFuncType)});
|
||||
values->insert({errorLookup, errorFunc});
|
||||
|
||||
// Register assert function
|
||||
auto assertFuncType = make_shared<UserData::UserDataFunctionType>(
|
||||
auto assertFuncTypeOption = new UserData::UserDataFunctionOption(
|
||||
make_shared<ScriptType>(TypeClass::Bool),
|
||||
vector<shared_ptr<ScriptType>>{make_shared<ScriptType>(TypeClass::Bool)});
|
||||
auto assertFunc = make_shared<UserData::UserDataFunction>(_assert, nullptr);
|
||||
auto assertFuncType = make_shared<GenericFunctionScriptType>();
|
||||
assertFuncType->RegisterFunctionOption(assertFuncTypeOption);
|
||||
auto assertFuncOption = new UserData::UserDataFunction(_assert, nullptr);
|
||||
auto assertFunc = make_shared<Evaluation::GenericFunctionEvalValue>(assertFuncType, rand());
|
||||
assertFunc->RegisterOption(assertFuncOption);
|
||||
|
||||
auto assertLookup = Utilities::HashedString::CreateLookup(u"assert");
|
||||
bound->insert({assertLookup, new Binder::BoundVariable(assertFuncType)});
|
||||
values->insert({assertLookup, assertFunc});
|
||||
|
||||
@@ -24,6 +24,12 @@ namespace Porygon::StandardLibraries{
|
||||
InternalScope(){
|
||||
BasicLibrary::RegisterVariables(&_boundVariables, &_variables);
|
||||
}
|
||||
|
||||
~InternalScope(){
|
||||
for (const auto& b: _boundVariables){
|
||||
delete b.second;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
static InternalScope _internal;
|
||||
|
||||
Reference in New Issue
Block a user