#ifndef PORYGONLANG_USERDATARETURNVALUE_HPP #define PORYGONLANG_USERDATARETURNVALUE_HPP #include "../Evaluator/EvalValues/EvalValue.hpp" extern "C" { namespace Porygon::UserData { struct UserDataReturnValue { bool _success; union { const char *_message; const Evaluation::EvalValue *_value; }; public: UserDataReturnValue(Evaluation::EvalValue *value) : _success(true), _value(value) {} UserDataReturnValue(const Evaluation::EvalValue *value) : _success(true), _value(value) {} UserDataReturnValue(const char *message) : _success(false), _message(message) {} inline const Evaluation::EvalValue *Evaluate() const{ if (_success) { return _value; } throw Evaluation::EvaluationException(_message); } }; } } #endif //PORYGONLANG_USERDATARETURNVALUE_HPP