36 lines
1.4 KiB
C++
36 lines
1.4 KiB
C++
#include "evaluate.h"
|
|
#include "../../defs/defs.h"
|
|
#include "../../executor/executor.h"
|
|
#include "../../data/data.h"
|
|
|
|
Value evaluate(Value val) {
|
|
if (val.valtype == ValueType::Processed) {
|
|
if (val.processed) {
|
|
return execute(*val.processed);
|
|
}
|
|
} else if (val.valtype == ValueType::Variable) {
|
|
return data::getValue(val.varName.key);
|
|
} else if (val.valtype == ValueType::Identifier) {
|
|
// Check if it's a variable that doesn't start with $
|
|
for (auto it = data::scopes.rbegin(); it != data::scopes.rend(); ++it) {
|
|
if (it->count(val.string_val)) {
|
|
return (*it)[val.string_val];
|
|
}
|
|
}
|
|
} else if (val.valtype == ValueType::TypePlaceholder) {
|
|
if (val.type_placeholder_name == "String") {
|
|
return Value("");
|
|
} else if (val.type_placeholder_name == "List") {
|
|
return Value(std::vector<Value>());
|
|
} else if (val.type_placeholder_name == "Int") {
|
|
return Value((long long)0);
|
|
} else if (val.type_placeholder_name == "Double") {
|
|
return Value((double)0.0);
|
|
} else if (val.type_placeholder_name == "Bool") {
|
|
return Value("false");
|
|
} else if (val.type_placeholder_name == "Any") {
|
|
return Value(""); // Default for Any is an empty string
|
|
}
|
|
}
|
|
return val;
|
|
} |