PorygonLang/src/UserData/UserDataFunctionType.hpp

37 lines
1.3 KiB
C++

#ifndef PORYGONLANG_USERDATAFUNCTIONTYPE_HPP
#define PORYGONLANG_USERDATAFUNCTIONTYPE_HPP
#include <utility>
#include "../ScriptTypes/ScriptType.hpp"
#include "../ScriptTypes/FunctionScriptType.hpp"
namespace Porygon::UserData{
class UserDataFunctionOption : public GenericFunctionOption{
public:
UserDataFunctionOption(std::shared_ptr<const ScriptType> returnType, vector<shared_ptr<const ScriptType>> parameterTypes)
: GenericFunctionOption(std::move(returnType), std::move(parameterTypes)) {
}
static UserDataFunctionOption* FromRawPointers(ScriptType* returnType, vector<ScriptType*> parameterTypes){
auto rt = shared_ptr<const ScriptType>(returnType);
auto p = vector<shared_ptr<const ScriptType>>(parameterTypes.size());
for (size_t i = 0; i < parameterTypes.size(); i++){
p[i] = shared_ptr<ScriptType>(parameterTypes[i]);
}
return new UserDataFunctionOption(rt, p);
}
inline static UserDataFunctionOption* FromRawPointers(ScriptType* returnType){
auto rt = shared_ptr<ScriptType>(returnType);
return new UserDataFunctionOption(rt, {});
}
[[nodiscard]] inline bool IsScriptFunction() const final{
return false;
}
};
}
#endif //PORYGONLANG_USERDATAFUNCTIONTYPE_HPP