Better handling of creating EvalValues in UserData templates
continuous-integration/drone/push Build is passing Details

This commit is contained in:
Deukhoofd 2019-06-28 18:31:24 +02:00
parent 70f2dea0ce
commit eda15e501d
Signed by: Deukhoofd
GPG Key ID: ADF2E9256009EDCE
4 changed files with 66 additions and 1 deletions

View File

@ -0,0 +1,60 @@
#include <utility>
#ifndef PORYGONLANG_EVALVALUEHELPER_HPP
#define PORYGONLANG_EVALVALUEHELPER_HPP
#include "EvalValue.hpp"
#include "NumericEvalValue.hpp"
#include "StringEvalValue.hpp"
namespace Porygon::Evaluation{
class EvalValueHelper{
public:
static EvalValue* Create(unsigned char i){
return new IntegerEvalValue((long)i);
}
static EvalValue* Create(signed char i){
return new IntegerEvalValue((long)i);
}
static EvalValue* Create(short int i){
return new IntegerEvalValue(i);
}
static EvalValue* Create(unsigned short int i){
return new IntegerEvalValue(i);
}
static EvalValue* Create(signed int i){
return new IntegerEvalValue(i);
}
static EvalValue* Create(unsigned int i){
return new IntegerEvalValue(i);
}
static EvalValue* Create(signed long l){
return new IntegerEvalValue(l);
}
static EvalValue* Create(unsigned long l){
return new IntegerEvalValue(l);
}
static EvalValue* Create(float f){
return new FloatEvalValue(f);
}
static EvalValue* Create(double f){
return new FloatEvalValue(f);
}
static EvalValue* Create(long double f){
return new FloatEvalValue(f);
}
static EvalValue* Create(bool b){
return new BooleanEvalValue(b);
}
static EvalValue* Create(const string& s){
return new StringEvalValue(Utilities::StringUtils::StringToU16String(s));
}
static EvalValue* Create(u16string s){
return new StringEvalValue(std::move(s));
}
};
}
#endif //PORYGONLANG_EVALVALUEHELPER_HPP

View File

@ -92,7 +92,7 @@
*/
#define PORYGON_PREPARE_FUNCTION(userDataTypeName, fieldName, returnType, ...) \
static Porygon::Evaluation::EvalValue* invoke__##fieldName(void* obj, Porygon::Evaluation::EvalValue* par[], int parameterCount){ \
return new returnType(((userDataTypeName*)obj)->fieldName( \
return Porygon::Evaluation::EvalValueHelper::Create(((userDataTypeName*)obj)->fieldName( \
__VA_ARGS__ \
));}

View File

@ -15,6 +15,10 @@ namespace Porygon::Utilities{
static std::u16string IntToString(long const &i) {
return conv.from_bytes(std::to_string(i));
}
static std::u16string StringToU16String(const std::string& s) {
return conv.from_bytes(s);
}
};
}

View File

@ -8,6 +8,7 @@
#include "../../src/UserData/UserDataFunction.hpp"
#include "../../src/UserData/UserDataFunctionType.hpp"
#include "../../src/UserData/UserDataTemplates.hpp"
#include "../../src/Evaluator/EvalValues/EvalValueHelper.hpp"
using namespace Porygon;
using namespace Porygon::UserData;