Work to add C style entry points to library that allow most functionality

This commit is contained in:
2019-06-05 17:46:46 +02:00
parent 6206fef4c5
commit 43dede9ae2
14 changed files with 169 additions and 79 deletions

View File

@@ -0,0 +1,46 @@
#import "EvalValue.hpp"
#include <cstring>
extern "C" {
TypeClass GetEvalValueTypeClass(EvalValue* v){
return v->GetType().get()->GetClass();
}
ScriptType* GetEvalValueType(EvalValue* v){
return v->GetType().get();
}
int64_t EvaluateEvalValueInteger(EvalValue* v){
return v->EvaluateInteger();
}
double EvaluateEvalValueFloat(EvalValue* v){
return v->EvaluateFloat();
}
bool EvaluateEvalValueBool(EvalValue* v){
return v->EvaluateBool();
}
const char* EvaluateEvalValueString(EvalValue* v){
return v->EvaluateString() -> c_str();
}
}
#ifdef TESTS_BUILD
#include <catch.hpp>
#include "../src/Script.hpp"
TEST_CASE( "Evaluate String", "[integration]" ) {
auto script = Script::Create("\"foo bar\"");
REQUIRE(!script->Diagnostics -> HasErrors());
script->Evaluate();
auto lastValue = script->GetLastValue();
REQUIRE(std::strcmp(EvaluateEvalValueString(lastValue), "foo bar") == 0);
delete script;
}
#endif

View File

@@ -31,7 +31,7 @@ public:
virtual bool EvaluateBool(){
throw EvaluationException("Can't evaluate this EvalValue as bool.");
}
virtual std::string EvaluateString(){
virtual std::string* EvaluateString(){
throw EvaluationException("Can't evaluate this EvalValue as string.");
}
};
@@ -62,12 +62,6 @@ public:
return false;
return this->EvaluateBool() == b->EvaluateBool();
};
std::string EvaluateString() final{
std::ostringstream strs;
strs << _value;
return strs.str();
}
};
#endif //PORYGONLANG_EVALVALUE_HPP

View File

@@ -42,12 +42,6 @@ public:
return _value;
}
std::string EvaluateString() final{
std::ostringstream strs;
strs << _value;
return strs.str();
}
shared_ptr<EvalValue> Clone() final{
return make_shared<IntegerEvalValue>(_value);
}
@@ -70,12 +64,6 @@ public:
return _value;
}
std::string EvaluateString() final{
std::ostringstream strs;
strs << _value;
return strs.str();
}
shared_ptr<EvalValue> Clone() final{
return make_shared<FloatEvalValue>(_value);
}

View File

@@ -22,11 +22,11 @@ public:
bool operator ==(EvalValue* b) final{
if (b->GetType()->GetClass() != TypeClass::String)
return false;
return this->_value == b->EvaluateString();
return this->_value == *b->EvaluateString();
};
string EvaluateString() final{
return _value;
string* EvaluateString() final{
return &_value;
}
shared_ptr<EvalValue> Clone() final{