From f902d4d5e7fdaf7686226189e7f1490f9719ffee Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Sat, 17 Jun 2023 14:56:03 +0100 Subject: [PATCH] AK: Introduce fallible SourceGenerator API --- AK/SourceGenerator.h | 50 +++++++++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/AK/SourceGenerator.h b/AK/SourceGenerator.h index 63849901d5..6966a78255 100644 --- a/AK/SourceGenerator.h +++ b/AK/SourceGenerator.h @@ -49,11 +49,6 @@ public: return {}; } - void set(StringView key, DeprecatedString value) - { - MUST(set(key, MUST(String::from_deprecated_string(value)))); - } - String get(StringView key) const { auto result = m_mapping.get(key); @@ -66,12 +61,12 @@ public: StringView as_string_view() const { return m_builder.string_view(); } - void append(StringView pattern) + ErrorOr try_append(StringView pattern) { GenericLexer lexer { pattern }; while (!lexer.is_eof()) { - m_builder.append(lexer.consume_until(m_opening)); + TRY(m_builder.try_append(lexer.consume_until(m_opening))); if (lexer.consume_specific(m_opening)) { auto const placeholder = lexer.consume_until(m_closing); @@ -79,17 +74,19 @@ public: if (!lexer.consume_specific(m_closing)) VERIFY_NOT_REACHED(); - m_builder.append(get(placeholder)); + TRY(m_builder.try_append(get(placeholder))); } else { VERIFY(lexer.is_eof()); } } + return {}; } - void appendln(StringView pattern) + ErrorOr try_appendln(StringView pattern) { - append(pattern); - m_builder.append('\n'); + TRY(try_append(pattern)); + TRY(m_builder.try_append('\n')); + return {}; } template @@ -98,12 +95,6 @@ public: return get(StringView { key, N - 1 }); } - template - void set(char const (&key)[N], DeprecatedString value) - { - set(StringView { key, N - 1 }, value); - } - template ErrorOr set(char const (&key)[N], String value) { @@ -111,17 +102,34 @@ public: } template - void append(char const (&pattern)[N]) + ErrorOr try_append(char const (&pattern)[N]) { - append(StringView { pattern, N - 1 }); + return try_append(StringView { pattern, N - 1 }); } template - void appendln(char const (&pattern)[N]) + ErrorOr try_appendln(char const (&pattern)[N]) { - appendln(StringView { pattern, N - 1 }); + return try_appendln(StringView { pattern, N - 1 }); } + // FIXME: These are deprecated. + void set(StringView key, DeprecatedString value) + { + MUST(set(key, MUST(String::from_deprecated_string(value)))); + } + template + void set(char const (&key)[N], DeprecatedString value) + { + set(StringView { key, N - 1 }, value); + } + void append(StringView pattern) { MUST(try_append(pattern)); } + void appendln(StringView pattern) { MUST(try_appendln(pattern)); } + template + void append(char const (&pattern)[N]) { MUST(try_append(pattern)); } + template + void appendln(char const (&pattern)[N]) { MUST(try_appendln(pattern)); } + private: StringBuilder& m_builder; MappingType m_mapping;