Implements userdata function support
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
2
src/UserData/UserDataFunction.cpp
Normal file
2
src/UserData/UserDataFunction.cpp
Normal file
@@ -0,0 +1,2 @@
|
||||
|
||||
#include "UserDataFunction.hpp"
|
||||
36
src/UserData/UserDataFunction.hpp
Normal file
36
src/UserData/UserDataFunction.hpp
Normal file
@@ -0,0 +1,36 @@
|
||||
#ifndef PORYGONLANG_USERDATAFUNCTION_HPP
|
||||
#define PORYGONLANG_USERDATAFUNCTION_HPP
|
||||
|
||||
#include <utility>
|
||||
#include "../Evaluator/EvalValues/ScriptFunctionEvalValue.hpp"
|
||||
|
||||
namespace Porygon::UserData{
|
||||
class UserDataFunction : public Evaluation::GenericFunctionEvalValue {
|
||||
Evaluation::EvalValue* (*_call)(void* obj, EvalValue* parameters[], int parameterCount);
|
||||
void *_obj;
|
||||
|
||||
UserDataFunction(Evaluation::EvalValue* (*call)(void* obj, EvalValue* parameters[], int parameterCount), void* obj,
|
||||
shared_ptr<GenericFunctionScriptType> type, size_t hash) : GenericFunctionEvalValue(std::move(type), hash){
|
||||
_call = call;
|
||||
_obj = obj;
|
||||
}
|
||||
public:
|
||||
UserDataFunction(Evaluation::EvalValue* (*call)(void* obj, EvalValue* parameters[], int parameterCount), void* obj,
|
||||
shared_ptr<GenericFunctionScriptType> type) : GenericFunctionEvalValue(std::move(type), rand()){
|
||||
_call = call;
|
||||
_obj = obj;
|
||||
}
|
||||
|
||||
EvalValue* Call(EvalValue* parameters[], int parameterCount){
|
||||
return _call(_obj, parameters, parameterCount);
|
||||
}
|
||||
|
||||
const shared_ptr<EvalValue> Clone() const final {
|
||||
// We don't run make_shared here as it can't call private constructors
|
||||
return shared_ptr<UserDataFunction>(new UserDataFunction(_call, _obj, _type, _hash));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
#endif //PORYGONLANG_USERDATAFUNCTION_HPP
|
||||
2
src/UserData/UserDataFunctionType.cpp
Normal file
2
src/UserData/UserDataFunctionType.cpp
Normal file
@@ -0,0 +1,2 @@
|
||||
|
||||
#include "UserDataFunctionType.hpp"
|
||||
22
src/UserData/UserDataFunctionType.hpp
Normal file
22
src/UserData/UserDataFunctionType.hpp
Normal file
@@ -0,0 +1,22 @@
|
||||
#ifndef PORYGONLANG_USERDATAFUNCTIONTYPE_HPP
|
||||
#define PORYGONLANG_USERDATAFUNCTIONTYPE_HPP
|
||||
|
||||
#include <utility>
|
||||
#include "../ScriptType.hpp"
|
||||
|
||||
namespace Porygon::UserData{
|
||||
class UserDataFunctionType : public GenericFunctionScriptType{
|
||||
public:
|
||||
UserDataFunctionType(std::shared_ptr<ScriptType> returnType, vector<shared_ptr<ScriptType>> parameterTypes)
|
||||
: GenericFunctionScriptType(std::move(returnType), std::move(parameterTypes)){
|
||||
|
||||
}
|
||||
|
||||
const bool IsScriptFunction() const final{
|
||||
return false;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
#endif //PORYGONLANG_USERDATAFUNCTIONTYPE_HPP
|
||||
Reference in New Issue
Block a user