mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 15:48:12 +00:00
LibWeb: Distinguish between Integer and Number calc() values
This commit is contained in:
parent
e4251f3327
commit
714832e705
3 changed files with 74 additions and 38 deletions
|
@ -4207,7 +4207,11 @@ Optional<CalculatedStyleValue::CalcValue> Parser::parse_calc_value(TokenStream<S
|
|||
}
|
||||
|
||||
if (current_token.is(Token::Type::Number))
|
||||
return CalculatedStyleValue::CalcValue { static_cast<float>(current_token.token().number_value()) };
|
||||
return CalculatedStyleValue::CalcValue {
|
||||
CalculatedStyleValue::Number {
|
||||
.is_integer = current_token.token().number_type() == Token::NumberType::Integer,
|
||||
.value = static_cast<float>(current_token.token().number_value()) }
|
||||
};
|
||||
|
||||
if (current_token.is(Token::Type::Dimension) || current_token.is(Token::Type::Percentage)) {
|
||||
auto maybe_dimension = parse_dimension(current_token);
|
||||
|
@ -4230,7 +4234,7 @@ OwnPtr<CalculatedStyleValue::CalcProductPartWithOperator> Parser::parse_calc_pro
|
|||
// Note: The default value is not used or passed around.
|
||||
auto product_with_operator = make<CalculatedStyleValue::CalcProductPartWithOperator>(
|
||||
CalculatedStyleValue::ProductOperation::Multiply,
|
||||
CalculatedStyleValue::CalcNumberValue { 0 });
|
||||
CalculatedStyleValue::CalcNumberValue { CalculatedStyleValue::Number { false, 0 } });
|
||||
|
||||
tokens.skip_whitespace();
|
||||
|
||||
|
@ -4249,6 +4253,7 @@ OwnPtr<CalculatedStyleValue::CalcProductPartWithOperator> Parser::parse_calc_pro
|
|||
product_with_operator->value = { parsed_calc_value.release_value() };
|
||||
|
||||
} else if (op == "/"sv) {
|
||||
// FIXME: Detect divide-by-zero if possible
|
||||
tokens.next_token();
|
||||
tokens.skip_whitespace();
|
||||
product_with_operator->op = CalculatedStyleValue::ProductOperation::Divide;
|
||||
|
@ -4268,7 +4273,7 @@ OwnPtr<CalculatedStyleValue::CalcNumberProductPartWithOperator> Parser::parse_ca
|
|||
// Note: The default value is not used or passed around.
|
||||
auto number_product_with_operator = make<CalculatedStyleValue::CalcNumberProductPartWithOperator>(
|
||||
CalculatedStyleValue::ProductOperation::Multiply,
|
||||
CalculatedStyleValue::CalcNumberValue { 0 });
|
||||
CalculatedStyleValue::CalcNumberValue { CalculatedStyleValue::Number { false, 0 } });
|
||||
|
||||
tokens.skip_whitespace();
|
||||
|
||||
|
@ -4282,6 +4287,7 @@ OwnPtr<CalculatedStyleValue::CalcNumberProductPartWithOperator> Parser::parse_ca
|
|||
tokens.skip_whitespace();
|
||||
number_product_with_operator->op = CalculatedStyleValue::ProductOperation::Multiply;
|
||||
} else if (op == "/"sv) {
|
||||
// FIXME: Detect divide-by-zero if possible
|
||||
tokens.next_token();
|
||||
tokens.skip_whitespace();
|
||||
number_product_with_operator->op = CalculatedStyleValue::ProductOperation::Divide;
|
||||
|
@ -4300,7 +4306,7 @@ OwnPtr<CalculatedStyleValue::CalcNumberProductPartWithOperator> Parser::parse_ca
|
|||
OwnPtr<CalculatedStyleValue::CalcNumberProduct> Parser::parse_calc_number_product(TokenStream<StyleComponentValueRule>& tokens)
|
||||
{
|
||||
auto calc_number_product = make<CalculatedStyleValue::CalcNumberProduct>(
|
||||
CalculatedStyleValue::CalcNumberValue { 0 },
|
||||
CalculatedStyleValue::CalcNumberValue { CalculatedStyleValue::Number { false, 0 } },
|
||||
NonnullOwnPtrVector<CalculatedStyleValue::CalcNumberProductPartWithOperator> {});
|
||||
|
||||
auto first_calc_number_value_or_error = parse_calc_number_value(tokens);
|
||||
|
@ -4378,13 +4384,17 @@ Optional<CalculatedStyleValue::CalcNumberValue> Parser::parse_calc_number_value(
|
|||
return {};
|
||||
tokens.next_token();
|
||||
|
||||
return CalculatedStyleValue::CalcNumberValue { static_cast<float>(first.token().number_value()) };
|
||||
return CalculatedStyleValue::CalcNumberValue {
|
||||
CalculatedStyleValue::Number {
|
||||
.is_integer = first.token().number_type() == Token::NumberType::Integer,
|
||||
.value = static_cast<float>(first.token().number_value()) }
|
||||
};
|
||||
}
|
||||
|
||||
OwnPtr<CalculatedStyleValue::CalcProduct> Parser::parse_calc_product(TokenStream<StyleComponentValueRule>& tokens)
|
||||
{
|
||||
auto calc_product = make<CalculatedStyleValue::CalcProduct>(
|
||||
CalculatedStyleValue::CalcValue { 0 },
|
||||
CalculatedStyleValue::CalcValue { CalculatedStyleValue::Number { false, 0 } },
|
||||
NonnullOwnPtrVector<CalculatedStyleValue::CalcProductPartWithOperator> {});
|
||||
|
||||
auto first_calc_value_or_error = parse_calc_value(tokens);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue