aboutsummaryrefslogtreecommitdiffstats
path: root/nihil.ucl/type.ccm
diff options
context:
space:
mode:
Diffstat (limited to 'nihil.ucl/type.ccm')
-rw-r--r--nihil.ucl/type.ccm48
1 files changed, 4 insertions, 44 deletions
diff --git a/nihil.ucl/type.ccm b/nihil.ucl/type.ccm
index bf6c6bc..088d196 100644
--- a/nihil.ucl/type.ccm
+++ b/nihil.ucl/type.ccm
@@ -30,34 +30,7 @@ export enum struct object_type {
};
// Get the name of a type.
-export auto str(object_type type) -> std::string_view {
- using namespace std::literals;
-
- switch (type) {
- case object_type::object:
- return "object"sv;
- case object_type::array:
- return "array"sv;
- case object_type::integer:
- return "integer"sv;
- case object_type::real:
- return "real"sv;
- case object_type::string:
- return "string"sv;
- case object_type::boolean:
- return "boolean"sv;
- case object_type::time:
- return "time"sv;
- case object_type::userdata:
- return "userdata"sv;
- case object_type::null:
- return "null"sv;
- default:
- // Don't fail here, since UCL might add more types that we
- // don't know about.
- return "unknown"sv;
- }
-}
+export auto str(object_type type) -> std::string_view;
// Concept of a UCL data type.
export template<typename T>
@@ -69,25 +42,12 @@ concept datatype = requires(T o) {
// Exception thrown when a type assertion fails.
export struct type_mismatch : error {
- type_mismatch(object_type expected_type, object_type actual_type)
- : error(std::format("UCL type mismatch: expected type '{}' "
- "!= actual type '{}'",
- str(expected_type), str(actual_type)))
- , _expected_type(expected_type)
- , _actual_type(actual_type)
- {}
+ type_mismatch(object_type expected_type, object_type actual_type);
// The type we expected.
- auto expected_type(this type_mismatch const &self) -> object_type
- {
- return self._expected_type;
- }
-
+ auto expected_type(this type_mismatch const &self) -> object_type;
// The type we got.
- auto actual_type(this type_mismatch const &self) -> object_type
- {
- return self._actual_type;
- }
+ auto actual_type(this type_mismatch const &self) -> object_type;
private:
object_type _expected_type;