Work on extern support for userdata functions
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2019-06-21 23:07:17 +02:00
parent 95c322ed2c
commit 694b0ac0c0
10 changed files with 42 additions and 12 deletions

View File

@@ -3,6 +3,7 @@
#include <utility>
#include "../Evaluator/EvalValues/ScriptFunctionEvalValue.hpp"
#include "UserDataFunctionType.hpp"
namespace Porygon::UserData{
class UserDataFunction : public Evaluation::GenericFunctionEvalValue {
@@ -15,14 +16,18 @@ namespace Porygon::UserData{
_obj = obj;
}
public:
UserDataFunction(Evaluation::EvalValue* (*call)(void* obj, EvalValue* parameters[], int parameterCount), void* obj,
shared_ptr<GenericFunctionScriptType> type) : GenericFunctionEvalValue(std::move(type), rand()){
UserDataFunction(Evaluation::EvalValue* (*call)(void* obj, EvalValue* parameters[], int parameterCount), void* obj) :
GenericFunctionEvalValue(make_shared<UserDataFunctionType>(nullptr, vector<shared_ptr<ScriptType>>{}), rand()){
_call = call;
_obj = obj;
}
EvalValue* Call(EvalValue* parameters[], int parameterCount){
return _call(_obj, parameters, parameterCount);
try{
return _call(_obj, parameters, parameterCount);
} catch (...){
throw Evaluation::EvaluationException("An error occurred while executing a userdata function.");
}
}
const shared_ptr<EvalValue> Clone() const final {