Skip to content

Commit 27d2ffe

Browse files
authored
Suffix errors with Error (#5)
Signed-off-by: Juan Cruz Viotti <jv@jviotti.com>
1 parent 9b543dd commit 27d2ffe

File tree

3 files changed

+73
-68
lines changed

3 files changed

+73
-68
lines changed

contrib/typescript.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ auto main(int argc, char *argv[]) -> int {
4040

4141
sourcemeta::codegen::generate<sourcemeta::codegen::TypeScript>(
4242
std::cout, result, prefix);
43-
} catch (const sourcemeta::codegen::UnsupportedKeyword &error) {
43+
} catch (const sourcemeta::codegen::UnsupportedKeywordError &error) {
4444
std::ostringstream pointer;
4545
sourcemeta::core::stringify(error.pointer(), pointer);
4646
std::cerr << "error: " << error.what() << "\n";
@@ -50,7 +50,7 @@ auto main(int argc, char *argv[]) -> int {
5050
sourcemeta::core::prettify(error.json(), std::cerr);
5151
std::cerr << "\n";
5252
return EXIT_FAILURE;
53-
} catch (const sourcemeta::codegen::UnsupportedKeywordValue &error) {
53+
} catch (const sourcemeta::codegen::UnsupportedKeywordValueError &error) {
5454
std::ostringstream pointer;
5555
sourcemeta::core::stringify(error.pointer(), pointer);
5656
std::cerr << "error: " << error.what() << "\n";
@@ -60,7 +60,7 @@ auto main(int argc, char *argv[]) -> int {
6060
sourcemeta::core::prettify(error.json(), std::cerr);
6161
std::cerr << "\n";
6262
return EXIT_FAILURE;
63-
} catch (const sourcemeta::codegen::UnexpectedSchema &error) {
63+
} catch (const sourcemeta::codegen::UnexpectedSchemaError &error) {
6464
std::ostringstream pointer;
6565
sourcemeta::core::stringify(error.pointer(), pointer);
6666
std::cerr << "error: " << error.what() << "\n";

src/ir/include/sourcemeta/codegen/ir_error.h

Lines changed: 61 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
#include <sourcemeta/core/jsonpointer.h>
1010

1111
#include <exception> // std::exception
12-
#include <functional> // std::reference_wrapper
1312
#include <string> // std::string
1413
#include <string_view> // std::string_view
1514
#include <utility> // std::move
@@ -25,28 +24,30 @@ namespace sourcemeta::codegen {
2524

2625
/// @ingroup ir
2726
/// An error that represents an unsupported keyword during IR compilation
28-
class SOURCEMETA_CODEGEN_IR_EXPORT UnsupportedKeyword : public std::exception {
27+
class SOURCEMETA_CODEGEN_IR_EXPORT UnsupportedKeywordError
28+
: public std::exception {
2929
public:
30-
UnsupportedKeyword(sourcemeta::core::JSON json,
31-
sourcemeta::core::Pointer pointer, std::string keyword,
32-
const char *message)
30+
UnsupportedKeywordError(sourcemeta::core::JSON json,
31+
sourcemeta::core::Pointer pointer,
32+
std::string keyword, const char *message)
3333
: json_{std::move(json)}, pointer_{std::move(pointer)},
3434
keyword_{std::move(keyword)}, message_{message} {}
35-
UnsupportedKeyword(sourcemeta::core::JSON json,
36-
const sourcemeta::core::WeakPointer &pointer,
37-
std::string keyword, const char *message)
38-
: UnsupportedKeyword{std::move(json),
39-
sourcemeta::core::to_pointer(pointer),
40-
std::move(keyword), message} {}
41-
UnsupportedKeyword(sourcemeta::core::JSON json,
42-
sourcemeta::core::Pointer pointer, std::string keyword,
43-
std::string message) = delete;
44-
UnsupportedKeyword(sourcemeta::core::JSON json,
45-
sourcemeta::core::Pointer pointer, std::string keyword,
46-
std::string &&message) = delete;
47-
UnsupportedKeyword(sourcemeta::core::JSON json,
48-
sourcemeta::core::Pointer pointer, std::string keyword,
49-
std::string_view message) = delete;
35+
UnsupportedKeywordError(sourcemeta::core::JSON json,
36+
const sourcemeta::core::WeakPointer &pointer,
37+
std::string keyword, const char *message)
38+
: UnsupportedKeywordError{std::move(json),
39+
sourcemeta::core::to_pointer(pointer),
40+
std::move(keyword), message} {}
41+
UnsupportedKeywordError(sourcemeta::core::JSON json,
42+
sourcemeta::core::Pointer pointer,
43+
std::string keyword, std::string message) = delete;
44+
UnsupportedKeywordError(sourcemeta::core::JSON json,
45+
sourcemeta::core::Pointer pointer,
46+
std::string keyword, std::string &&message) = delete;
47+
UnsupportedKeywordError(sourcemeta::core::JSON json,
48+
sourcemeta::core::Pointer pointer,
49+
std::string keyword,
50+
std::string_view message) = delete;
5051

5152
[[nodiscard]] auto what() const noexcept -> const char * override {
5253
return this->message_;
@@ -74,30 +75,32 @@ class SOURCEMETA_CODEGEN_IR_EXPORT UnsupportedKeyword : public std::exception {
7475

7576
/// @ingroup ir
7677
/// An error that represents an unsupported keyword value during IR compilation
77-
class SOURCEMETA_CODEGEN_IR_EXPORT UnsupportedKeywordValue
78+
class SOURCEMETA_CODEGEN_IR_EXPORT UnsupportedKeywordValueError
7879
: public std::exception {
7980
public:
80-
UnsupportedKeywordValue(sourcemeta::core::JSON json,
81-
sourcemeta::core::Pointer pointer,
82-
std::string keyword, const char *message)
81+
UnsupportedKeywordValueError(sourcemeta::core::JSON json,
82+
sourcemeta::core::Pointer pointer,
83+
std::string keyword, const char *message)
8384
: json_{std::move(json)}, pointer_{std::move(pointer)},
8485
keyword_{std::move(keyword)}, message_{message} {}
85-
UnsupportedKeywordValue(sourcemeta::core::JSON json,
86-
const sourcemeta::core::WeakPointer &pointer,
87-
std::string keyword, const char *message)
88-
: UnsupportedKeywordValue{std::move(json),
89-
sourcemeta::core::to_pointer(pointer),
90-
std::move(keyword), message} {}
91-
UnsupportedKeywordValue(sourcemeta::core::JSON json,
92-
sourcemeta::core::Pointer pointer,
93-
std::string keyword, std::string message) = delete;
94-
UnsupportedKeywordValue(sourcemeta::core::JSON json,
95-
sourcemeta::core::Pointer pointer,
96-
std::string keyword, std::string &&message) = delete;
97-
UnsupportedKeywordValue(sourcemeta::core::JSON json,
98-
sourcemeta::core::Pointer pointer,
99-
std::string keyword,
100-
std::string_view message) = delete;
86+
UnsupportedKeywordValueError(sourcemeta::core::JSON json,
87+
const sourcemeta::core::WeakPointer &pointer,
88+
std::string keyword, const char *message)
89+
: UnsupportedKeywordValueError{std::move(json),
90+
sourcemeta::core::to_pointer(pointer),
91+
std::move(keyword), message} {}
92+
UnsupportedKeywordValueError(sourcemeta::core::JSON json,
93+
sourcemeta::core::Pointer pointer,
94+
std::string keyword,
95+
std::string message) = delete;
96+
UnsupportedKeywordValueError(sourcemeta::core::JSON json,
97+
sourcemeta::core::Pointer pointer,
98+
std::string keyword,
99+
std::string &&message) = delete;
100+
UnsupportedKeywordValueError(sourcemeta::core::JSON json,
101+
sourcemeta::core::Pointer pointer,
102+
std::string keyword,
103+
std::string_view message) = delete;
101104

102105
[[nodiscard]] auto what() const noexcept -> const char * override {
103106
return this->message_;
@@ -125,26 +128,27 @@ class SOURCEMETA_CODEGEN_IR_EXPORT UnsupportedKeywordValue
125128

126129
/// @ingroup ir
127130
/// An error that represents an unexpected schema during IR compilation
128-
class SOURCEMETA_CODEGEN_IR_EXPORT UnexpectedSchema : public std::exception {
131+
class SOURCEMETA_CODEGEN_IR_EXPORT UnexpectedSchemaError
132+
: public std::exception {
129133
public:
130-
UnexpectedSchema(sourcemeta::core::JSON json,
131-
sourcemeta::core::Pointer pointer, const char *message)
134+
UnexpectedSchemaError(sourcemeta::core::JSON json,
135+
sourcemeta::core::Pointer pointer, const char *message)
132136
: json_{std::move(json)}, pointer_{std::move(pointer)},
133137
message_{message} {}
134-
UnexpectedSchema(sourcemeta::core::JSON json,
135-
const sourcemeta::core::WeakPointer &pointer,
136-
const char *message)
137-
: UnexpectedSchema{std::move(json), sourcemeta::core::to_pointer(pointer),
138-
message} {}
139-
UnexpectedSchema(sourcemeta::core::JSON json,
140-
sourcemeta::core::Pointer pointer,
141-
std::string message) = delete;
142-
UnexpectedSchema(sourcemeta::core::JSON json,
143-
sourcemeta::core::Pointer pointer,
144-
std::string &&message) = delete;
145-
UnexpectedSchema(sourcemeta::core::JSON json,
146-
sourcemeta::core::Pointer pointer,
147-
std::string_view message) = delete;
138+
UnexpectedSchemaError(sourcemeta::core::JSON json,
139+
const sourcemeta::core::WeakPointer &pointer,
140+
const char *message)
141+
: UnexpectedSchemaError{std::move(json),
142+
sourcemeta::core::to_pointer(pointer), message} {}
143+
UnexpectedSchemaError(sourcemeta::core::JSON json,
144+
sourcemeta::core::Pointer pointer,
145+
std::string message) = delete;
146+
UnexpectedSchemaError(sourcemeta::core::JSON json,
147+
sourcemeta::core::Pointer pointer,
148+
std::string &&message) = delete;
149+
UnexpectedSchemaError(sourcemeta::core::JSON json,
150+
sourcemeta::core::Pointer pointer,
151+
std::string_view message) = delete;
148152

149153
[[nodiscard]] auto what() const noexcept -> const char * override {
150154
return this->message_;

src/ir/ir_default_compiler.h

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
static const std::unordered_set<std::string_view> allowed{__VA_ARGS__}; \
1818
for (const auto &entry : (subschema).as_object()) { \
1919
if (!allowed.contains(entry.first)) { \
20-
throw sourcemeta::codegen::UnsupportedKeyword( \
20+
throw sourcemeta::codegen::UnsupportedKeywordError( \
2121
(schema), (pointer), entry.first, \
2222
"Unexpected keyword in subschema"); \
2323
} \
@@ -304,8 +304,8 @@ auto handle_ref(const sourcemeta::core::JSON &schema,
304304
const auto &destination{reference->second.destination};
305305
const auto target{frame.traverse(destination)};
306306
if (!target.has_value()) {
307-
throw UnexpectedSchema(schema, location.pointer,
308-
"Could not resolve reference destination");
307+
throw UnexpectedSchemaError(schema, location.pointer,
308+
"Could not resolve reference destination");
309309
}
310310

311311
const auto &target_location{target.value().get()};
@@ -356,8 +356,8 @@ auto default_compiler(const sourcemeta::core::JSON &schema,
356356
} else if (subschema.defines("type")) {
357357
const auto &type_value{subschema.at("type")};
358358
if (!type_value.is_string()) {
359-
throw UnsupportedKeywordValue(schema, location.pointer, "type",
360-
"Expected a string value");
359+
throw UnsupportedKeywordValueError(schema, location.pointer, "type",
360+
"Expected a string value");
361361
}
362362

363363
const auto &type_string{type_value.to_string()};
@@ -379,8 +379,8 @@ auto default_compiler(const sourcemeta::core::JSON &schema,
379379
return handle_array(schema, frame, location, vocabularies, resolver,
380380
subschema);
381381
} else {
382-
throw UnsupportedKeywordValue(schema, location.pointer, "type",
383-
"Unsupported type value");
382+
throw UnsupportedKeywordValueError(schema, location.pointer, "type",
383+
"Unsupported type value");
384384
}
385385
} else if (subschema.defines("enum")) {
386386
return handle_enum(schema, frame, location, vocabularies, resolver,
@@ -392,7 +392,8 @@ auto default_compiler(const sourcemeta::core::JSON &schema,
392392
return handle_ref(schema, frame, location, vocabularies, resolver,
393393
subschema);
394394
} else {
395-
throw UnexpectedSchema(schema, location.pointer, "Unsupported subschema");
395+
throw UnexpectedSchemaError(schema, location.pointer,
396+
"Unsupported subschema");
396397
}
397398
}
398399

0 commit comments

Comments
 (0)