#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()); } 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; }