mirror of
https://github.com/RGBCube/serenity
synced 2025-05-15 04:34:59 +00:00
AK: Remove fallible SourceGenerator::try_append()
And fall back to the infallible append().
This commit is contained in:
parent
a1d694ccdc
commit
244516142a
9 changed files with 293 additions and 297 deletions
|
@ -43,7 +43,7 @@ ErrorOr<void> generate_header_file(JsonObject& functions_data, Core::File& file)
|
|||
StringBuilder builder;
|
||||
SourceGenerator generator { builder };
|
||||
|
||||
TRY(generator.try_append(R"~~~(
|
||||
generator.append(R"~~~(
|
||||
// This file is generated by GenerateCSSMathFunctions.cpp
|
||||
|
||||
#pragma once
|
||||
|
@ -51,7 +51,7 @@ ErrorOr<void> generate_header_file(JsonObject& functions_data, Core::File& file)
|
|||
namespace Web::CSS {
|
||||
|
||||
enum class MathFunction {
|
||||
)~~~"));
|
||||
)~~~");
|
||||
|
||||
TRY(functions_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr<void> {
|
||||
auto member_generator = TRY(generator.fork());
|
||||
|
@ -60,11 +60,11 @@ enum class MathFunction {
|
|||
return {};
|
||||
}));
|
||||
|
||||
TRY(generator.try_append(R"~~~(
|
||||
generator.append(R"~~~(
|
||||
};
|
||||
|
||||
}
|
||||
)~~~"));
|
||||
)~~~");
|
||||
|
||||
TRY(file.write_until_depleted(generator.as_string_view().bytes()));
|
||||
return {};
|
||||
|
@ -77,7 +77,7 @@ ErrorOr<String> generate_calculation_type_check(StringView calculation_variable_
|
|||
bool first_type_check = true;
|
||||
for (auto const& allowed_type_name : allowed_types) {
|
||||
if (!first_type_check)
|
||||
TRY(builder.try_append(" || "sv));
|
||||
builder.append(" || "sv);
|
||||
first_type_check = false;
|
||||
|
||||
if (allowed_type_name == "<angle>"sv) {
|
||||
|
@ -111,7 +111,7 @@ ErrorOr<void> generate_implementation_file(JsonObject& functions_data, Core::Fil
|
|||
StringBuilder builder;
|
||||
SourceGenerator generator { builder };
|
||||
|
||||
TRY(generator.try_append(R"~~~(
|
||||
generator.append(R"~~~(
|
||||
// This file is generated by GenerateCSSMathFunctions.cpp
|
||||
|
||||
#include <AK/Debug.h>
|
||||
|
@ -148,7 +148,7 @@ OwnPtr<CalculationNode> Parser::parse_math_function(PropertyID property_id, Func
|
|||
{
|
||||
TokenStream stream { function.values() };
|
||||
auto arguments = parse_a_comma_separated_list_of_component_values(stream);
|
||||
)~~~"));
|
||||
)~~~");
|
||||
|
||||
TRY(functions_data.try_for_each_member([&](auto& name, JsonValue const& value) -> ErrorOr<void> {
|
||||
auto& function_data = value.as_object();
|
||||
|
@ -160,7 +160,7 @@ OwnPtr<CalculationNode> Parser::parse_math_function(PropertyID property_id, Func
|
|||
function_generator.appendln(" if (function.name().equals_ignoring_ascii_case(\"@name:lowercase@\"sv)) {");
|
||||
if (function_data.get_bool("is-variadic"sv).value_or(false)) {
|
||||
// Variadic function
|
||||
TRY(function_generator.try_append(R"~~~(
|
||||
function_generator.append(R"~~~(
|
||||
CSSNumericType determined_argument_type;
|
||||
Vector<NonnullOwnPtr<CalculationNode>> parsed_arguments;
|
||||
parsed_arguments.ensure_capacity(arguments.size());
|
||||
|
@ -179,13 +179,13 @@ OwnPtr<CalculationNode> Parser::parse_math_function(PropertyID property_id, Func
|
|||
}
|
||||
auto argument_type = maybe_argument_type.release_value();
|
||||
|
||||
)~~~"));
|
||||
)~~~");
|
||||
// Generate some type checks
|
||||
VERIFY(parameters.size() == 1);
|
||||
auto& parameter_data = parameters[0].as_object();
|
||||
auto parameter_type_string = parameter_data.get_deprecated_string("type"sv).value();
|
||||
function_generator.set("type_check", TRY(generate_calculation_type_check("argument_type"sv, parameter_type_string)));
|
||||
TRY(function_generator.try_append(R"~~~(
|
||||
function_generator.append(R"~~~(
|
||||
if (!(@type_check@)) {
|
||||
dbgln_if(CSS_PARSER_DEBUG, "@name:lowercase@() argument #{} type ({}) is not an accepted type", parsed_arguments.size(), MUST(argument_type.dump()));
|
||||
return nullptr;
|
||||
|
@ -205,7 +205,7 @@ OwnPtr<CalculationNode> Parser::parse_math_function(PropertyID property_id, Func
|
|||
|
||||
return @name:titlecase@CalculationNode::create(move(parsed_arguments));
|
||||
}
|
||||
)~~~"));
|
||||
)~~~");
|
||||
|
||||
} else {
|
||||
// Function with specified parameters.
|
||||
|
@ -219,14 +219,14 @@ OwnPtr<CalculationNode> Parser::parse_math_function(PropertyID property_id, Func
|
|||
function_generator.set("min_argument_count", TRY(String::number(min_argument_count)));
|
||||
function_generator.set("max_argument_count", TRY(String::number(max_argument_count)));
|
||||
|
||||
TRY(function_generator.try_append(R"~~~(
|
||||
function_generator.append(R"~~~(
|
||||
if (arguments.size() < @min_argument_count@ || arguments.size() > @max_argument_count@) {
|
||||
dbgln_if(CSS_PARSER_DEBUG, "@name:lowercase@() has wrong number of arguments {}, expected between @min_argument_count@ and @max_argument_count@ inclusive", arguments.size());
|
||||
return nullptr;
|
||||
}
|
||||
size_t argument_index = 0;
|
||||
[[maybe_unused]] CSSNumericType previous_argument_type;
|
||||
)~~~"));
|
||||
)~~~");
|
||||
|
||||
size_t parameter_index = 0;
|
||||
StringView previous_parameter_type_string;
|
||||
|
@ -268,45 +268,45 @@ OwnPtr<CalculationNode> Parser::parse_math_function(PropertyID property_id, Func
|
|||
}
|
||||
}
|
||||
|
||||
TRY(parameter_generator.try_append(R"~~~(
|
||||
parameter_generator.append(R"~~~(
|
||||
@parameter_type@ parameter_@parameter_index@@parameter_default@;
|
||||
)~~~"));
|
||||
)~~~");
|
||||
|
||||
if (parameter_required) {
|
||||
TRY(parameter_generator.try_append(R"~~~(
|
||||
parameter_generator.append(R"~~~(
|
||||
if (argument_index >= arguments.size()) {
|
||||
dbgln_if(CSS_PARSER_DEBUG, "@name:lowercase@() missing required argument '@parameter_name@'");
|
||||
return nullptr;
|
||||
} else {
|
||||
)~~~"));
|
||||
)~~~");
|
||||
} else {
|
||||
TRY(parameter_generator.try_append(R"~~~(
|
||||
parameter_generator.append(R"~~~(
|
||||
if (argument_index < arguments.size()) {
|
||||
)~~~"));
|
||||
)~~~");
|
||||
}
|
||||
|
||||
TRY(parameter_generator.try_append(R"~~~(
|
||||
parameter_generator.append(R"~~~(
|
||||
auto maybe_parsed_argument_@parameter_index@ = @parse_function@;
|
||||
if (maybe_parsed_argument_@parameter_index@@check_function@) {
|
||||
parameter_@parameter_index@ = maybe_parsed_argument_@parameter_index@@release_function@;
|
||||
argument_index++;
|
||||
)~~~"));
|
||||
)~~~");
|
||||
if (parameter_required) {
|
||||
TRY(parameter_generator.try_append(R"~~~(
|
||||
parameter_generator.append(R"~~~(
|
||||
} else {
|
||||
dbgln_if(CSS_PARSER_DEBUG, "@name:lowercase@() required argument '@parameter_name@' failed to parse");
|
||||
return nullptr;
|
||||
)~~~"));
|
||||
)~~~");
|
||||
}
|
||||
TRY(parameter_generator.try_append(R"~~~(
|
||||
parameter_generator.append(R"~~~(
|
||||
}
|
||||
}
|
||||
)~~~"));
|
||||
)~~~");
|
||||
|
||||
if (parameter_is_calculation) {
|
||||
auto parameter_type_variable = TRY(String::formatted("argument_type_{}", parameter_index));
|
||||
parameter_generator.set("type_check", TRY(generate_calculation_type_check(parameter_type_variable, parameter_type_string)));
|
||||
TRY(parameter_generator.try_append(R"~~~(
|
||||
parameter_generator.append(R"~~~(
|
||||
auto maybe_argument_type_@parameter_index@ = parameter_@parameter_index@->determine_type(property_id);
|
||||
if (!maybe_argument_type_@parameter_index@.has_value()) {
|
||||
dbgln_if(CSS_PARSER_DEBUG, "@name:lowercase@() argument '@parameter_name@' couldn't determine its type");
|
||||
|
@ -318,21 +318,21 @@ OwnPtr<CalculationNode> Parser::parse_math_function(PropertyID property_id, Func
|
|||
dbgln_if(CSS_PARSER_DEBUG, "@name:lowercase@() argument '@parameter_name@' type ({}) is not an accepted type", MUST(argument_type_@parameter_index@.dump()));
|
||||
return nullptr;
|
||||
}
|
||||
)~~~"));
|
||||
)~~~");
|
||||
|
||||
// NOTE: In all current cases, the parameters that take the same types must resolve to the same CSSNumericType.
|
||||
// This is a bit of a hack, but serves our needs for now.
|
||||
if (previous_parameter_type_string == parameter_type_string) {
|
||||
TRY(parameter_generator.try_append(R"~~~(
|
||||
parameter_generator.append(R"~~~(
|
||||
if (argument_type_@parameter_index@ != previous_argument_type) {
|
||||
dbgln_if(CSS_PARSER_DEBUG, "@name:lowercase@() argument '@parameter_name@' type ({}) doesn't match type of previous arguments ({})", MUST(argument_type_@parameter_index@.dump()), MUST(previous_argument_type.dump()));
|
||||
return nullptr;
|
||||
}
|
||||
)~~~"));
|
||||
)~~~");
|
||||
}
|
||||
TRY(parameter_generator.try_append(R"~~~(
|
||||
parameter_generator.append(R"~~~(
|
||||
previous_argument_type = argument_type_@parameter_index@;
|
||||
)~~~"));
|
||||
)~~~");
|
||||
}
|
||||
|
||||
parameter_index++;
|
||||
|
@ -341,7 +341,7 @@ OwnPtr<CalculationNode> Parser::parse_math_function(PropertyID property_id, Func
|
|||
}));
|
||||
|
||||
// Generate the call to the constructor
|
||||
TRY(function_generator.try_append(" return @name:titlecase@CalculationNode::create("sv));
|
||||
function_generator.append(" return @name:titlecase@CalculationNode::create("sv);
|
||||
parameter_index = 0;
|
||||
TRY(parameters.try_for_each([&](JsonValue const& parameter_value) -> ErrorOr<void> {
|
||||
auto& parameter = parameter_value.as_object();
|
||||
|
@ -358,26 +358,26 @@ OwnPtr<CalculationNode> Parser::parse_math_function(PropertyID property_id, Func
|
|||
}
|
||||
|
||||
if (parameter_index == 0) {
|
||||
TRY(parameter_generator.try_append("parameter_@parameter_index@@release_value@"sv));
|
||||
parameter_generator.append("parameter_@parameter_index@@release_value@"sv);
|
||||
} else {
|
||||
TRY(parameter_generator.try_append(", parameter_@parameter_index@@release_value@"sv));
|
||||
parameter_generator.append(", parameter_@parameter_index@@release_value@"sv);
|
||||
}
|
||||
parameter_index++;
|
||||
return {};
|
||||
}));
|
||||
TRY(function_generator.try_append(R"~~~();
|
||||
function_generator.append(R"~~~();
|
||||
}
|
||||
)~~~"));
|
||||
)~~~");
|
||||
}
|
||||
return {};
|
||||
}));
|
||||
|
||||
TRY(generator.try_append(R"~~~(
|
||||
generator.append(R"~~~(
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
}
|
||||
)~~~"));
|
||||
)~~~");
|
||||
|
||||
TRY(file.write_until_depleted(generator.as_string_view().bytes()));
|
||||
return {};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue