PorygonLang/src/UserData/UserDataReturnValue.hpp

34 lines
939 B
C++

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