LibWeb: Use single shared instance of Inherit/InitialStyleValue

These are always the same, so we can avoid allocating them repeatedly
and just use a single instance of each. :^)
This commit is contained in:
Sam Atkins 2021-08-20 12:08:53 +01:00 committed by Andreas Kling
parent d2342caf42
commit 6d39f4342d
Notes: sideshowbarker 2024-07-18 05:18:39 +09:00
2 changed files with 13 additions and 5 deletions

View File

@ -1404,9 +1404,9 @@ RefPtr<StyleValue> Parser::parse_builtin_value(ParsingContext const&, StyleCompo
if (component_value.is(Token::Type::Ident)) {
auto ident = component_value.token().ident();
if (ident.equals_ignoring_case("inherit"))
return InheritStyleValue::create();
return InheritStyleValue::the();
if (ident.equals_ignoring_case("initial"))
return InitialStyleValue::create();
return InitialStyleValue::the();
// FIXME: Implement `unset` keyword
}
@ -2738,7 +2738,7 @@ RefPtr<StyleValue> Parser::parse_text_decoration_value(ParsingContext const& con
decoration_style = IdentifierStyleValue::create(ValueID::Solid);
// FIXME: Should default to 'currentcolor' special value: https://www.w3.org/TR/css-color-3/#currentcolor
if (!decoration_color)
decoration_color = InitialStyleValue::create();
decoration_color = InitialStyleValue::the();
return TextDecorationStyleValue::create(decoration_line.release_nonnull(), decoration_style.release_nonnull(), decoration_color.release_nonnull());
}

View File

@ -534,7 +534,11 @@ private:
class InitialStyleValue final : public StyleValue {
public:
static NonnullRefPtr<InitialStyleValue> create() { return adopt_ref(*new InitialStyleValue); }
static NonnullRefPtr<InitialStyleValue> the()
{
static NonnullRefPtr<InitialStyleValue> instance = adopt_ref(*new InitialStyleValue);
return instance;
}
virtual ~InitialStyleValue() override { }
String to_string() const override { return "initial"; }
@ -548,7 +552,11 @@ private:
class InheritStyleValue final : public StyleValue {
public:
static NonnullRefPtr<InheritStyleValue> create() { return adopt_ref(*new InheritStyleValue); }
static NonnullRefPtr<InheritStyleValue> the()
{
static NonnullRefPtr<InheritStyleValue> instance = adopt_ref(*new InheritStyleValue);
return instance;
}
virtual ~InheritStyleValue() override { }
String to_string() const override { return "inherit"; }