summaryrefslogtreecommitdiff
path: root/src/core/script/Variant.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/script/Variant.cpp')
-rw-r--r--src/core/script/Variant.cpp43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/core/script/Variant.cpp b/src/core/script/Variant.cpp
index a379735..b70f361 100644
--- a/src/core/script/Variant.cpp
+++ b/src/core/script/Variant.cpp
@@ -21,6 +21,49 @@
namespace ousia {
namespace script {
+/* Class VariantTypeException */
+
+static const char* getVariantTypeName(VariantType type)
+{
+ switch (type) {
+ case VariantType::null:
+ return "null";
+ case VariantType::boolean:
+ return "boolean";
+ case VariantType::integer:
+ return "integer";
+ case VariantType::number:
+ return "number";
+ case VariantType::string:
+ return "string";
+ case VariantType::array:
+ return "array";
+ case VariantType::map:
+ return "map";
+ case VariantType::function:
+ return "function";
+ case VariantType::object:
+ return "object";
+ case VariantType::buffer:
+ return "buffer";
+ }
+ return "unknown";
+}
+
+VariantTypeException::VariantTypeException(VariantType actualType,
+ VariantType requestedType) :
+ msg(std::string("Cannot get value of variant of type \"")
+ + getVariantTypeName(actualType)
+ + std::string("\" as \"") + getVariantTypeName(requestedType)),
+ actualType(actualType), requestedType(requestedType) {}
+
+const char* VariantTypeException::what() const noexcept
+{
+ return msg.c_str();
+}
+
+/* Global scope operator */
+
std::ostream& operator<< (std::ostream& os, const Variant &v)
{
switch (v.type) {