Skip to content

Commit

Permalink
AK: Make "foo"_string infallible
Browse files Browse the repository at this point in the history
Stop worrying about tiny OOMs.

Work towards SerenityOS#20405.
  • Loading branch information
awesomekling committed Aug 7, 2023
1 parent db2a872 commit 3434412
Show file tree
Hide file tree
Showing 181 changed files with 626 additions and 630 deletions.
4 changes: 2 additions & 2 deletions AK/String.h
Original file line number Diff line number Diff line change
Expand Up @@ -280,9 +280,9 @@ struct Formatter<String> : Formatter<StringView> {

}

[[nodiscard]] ALWAYS_INLINE AK::ErrorOr<AK::String> operator""_string(char const* cstring, size_t length)
[[nodiscard]] ALWAYS_INLINE AK::String operator""_string(char const* cstring, size_t length)
{
return AK::String::from_utf8(AK::StringView(cstring, length));
return AK::String::from_utf8(AK::StringView(cstring, length)).release_value();
}

[[nodiscard]] ALWAYS_INLINE AK_SHORT_STRING_CONSTEVAL AK::String operator""_short_string(char const* cstring, size_t length)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -242,10 +242,10 @@ ErrorOr<OwnPtr<CalculationNode>> Parser::parse_math_function(PropertyID property
bool parameter_is_calculation;
if (parameter_type_string == "<rounding-strategy>") {
parameter_is_calculation = false;
TRY(parameter_generator.set("parameter_type", TRY("RoundingStrategy"_string)));
TRY(parameter_generator.set("parse_function", TRY("parse_rounding_strategy(arguments[argument_index])"_string)));
TRY(parameter_generator.set("check_function", TRY(".has_value()"_string)));
TRY(parameter_generator.set("release_function", TRY(".release_value()"_string)));
TRY(parameter_generator.set("parameter_type", "RoundingStrategy"_string));
TRY(parameter_generator.set("parse_function", "parse_rounding_strategy(arguments[argument_index])"_string));
TRY(parameter_generator.set("check_function", ".has_value()"_string));
TRY(parameter_generator.set("release_function", ".release_value()"_string));
if (auto default_value = parameter.get_deprecated_string("default"sv); default_value.has_value()) {
TRY(parameter_generator.set("parameter_default", TRY(String::formatted(" = RoundingStrategy::{}", TRY(title_casify(default_value.value()))))));
} else {
Expand All @@ -254,10 +254,10 @@ ErrorOr<OwnPtr<CalculationNode>> Parser::parse_math_function(PropertyID property
} else {
// NOTE: This assumes everything not handled above is a calculation node of some kind.
parameter_is_calculation = true;
TRY(parameter_generator.set("parameter_type", TRY("OwnPtr<CalculationNode>"_string)));
TRY(parameter_generator.set("parse_function", TRY("TRY(parse_a_calculation(arguments[argument_index]))"_string)));
TRY(parameter_generator.set("check_function", TRY(" != nullptr"_string)));
TRY(parameter_generator.set("release_function", TRY(".release_nonnull()"_string)));
TRY(parameter_generator.set("parameter_type", "OwnPtr<CalculationNode>"_string));
TRY(parameter_generator.set("parse_function", "TRY(parse_a_calculation(arguments[argument_index]))"_string));
TRY(parameter_generator.set("check_function", " != nullptr"_string));
TRY(parameter_generator.set("release_function", ".release_nonnull()"_string));

// NOTE: We have exactly one default value in the data right now, and it's a `<calc-constant>`,
// so that's all we handle.
Expand Down Expand Up @@ -354,7 +354,7 @@ ErrorOr<OwnPtr<CalculationNode>> Parser::parse_math_function(PropertyID property
TRY(parameter_generator.set("release_value"sv, ""_short_string));
} else {
// NOTE: This assumes everything not handled above is a calculation node of some kind.
TRY(parameter_generator.set("release_value"sv, TRY(".release_nonnull()"_string)));
TRY(parameter_generator.set("release_value"sv, ".release_nonnull()"_string));
}

if (parameter_index == 0) {
Expand Down
16 changes: 8 additions & 8 deletions Tests/AK/TestFlyString.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,13 @@ TEST_CASE(empty_string)

TEST_CASE(short_string)
{
FlyString fly1 { MUST("foo"_string) };
FlyString fly1 { "foo"_string };
EXPECT_EQ(fly1, "foo"sv);

FlyString fly2 { MUST("foo"_string) };
FlyString fly2 { "foo"_string };
EXPECT_EQ(fly2, "foo"sv);

FlyString fly3 { MUST("bar"_string) };
FlyString fly3 { "bar"_string };
EXPECT_EQ(fly3, "bar"sv);

EXPECT_EQ(fly1, fly2);
Expand All @@ -45,15 +45,15 @@ TEST_CASE(short_string)

TEST_CASE(long_string)
{
FlyString fly1 { MUST("thisisdefinitelymorethan7bytes"_string) };
FlyString fly1 { "thisisdefinitelymorethan7bytes"_string };
EXPECT_EQ(fly1, "thisisdefinitelymorethan7bytes"sv);
EXPECT_EQ(FlyString::number_of_fly_strings(), 1u);

FlyString fly2 { MUST("thisisdefinitelymorethan7bytes"_string) };
FlyString fly2 { "thisisdefinitelymorethan7bytes"_string };
EXPECT_EQ(fly2, "thisisdefinitelymorethan7bytes"sv);
EXPECT_EQ(FlyString::number_of_fly_strings(), 1u);

FlyString fly3 { MUST("thisisalsoforsuremorethan7bytes"_string) };
FlyString fly3 { "thisisalsoforsuremorethan7bytes"_string };
EXPECT_EQ(fly3, "thisisalsoforsuremorethan7bytes"sv);
EXPECT_EQ(FlyString::number_of_fly_strings(), 2u);

Expand Down Expand Up @@ -91,7 +91,7 @@ TEST_CASE(fly_string_keep_string_data_alive)
{
FlyString fly {};
{
auto string = MUST("thisisdefinitelymorethan7bytes"_string);
auto string = "thisisdefinitelymorethan7bytes"_string;
fly = FlyString { string };
EXPECT_EQ(FlyString::number_of_fly_strings(), 1u);
}
Expand All @@ -108,7 +108,7 @@ TEST_CASE(moved_fly_string_becomes_empty)
FlyString fly1 {};
EXPECT(fly1.is_empty());

FlyString fly2 { MUST("thisisdefinitelymorethan7bytes"_string) };
FlyString fly2 { "thisisdefinitelymorethan7bytes"_string };
EXPECT_EQ(fly2, "thisisdefinitelymorethan7bytes"sv);
EXPECT_EQ(FlyString::number_of_fly_strings(), 1u);

Expand Down
Loading

0 comments on commit 3434412

Please sign in to comment.