Skip to content

Commit 43b06cb

Browse files
Calme1709AtkinsSJ
authored andcommitted
LibWeb: Propagate NaN through CSS sign() function
1 parent d32f99b commit 43b06cb

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

Libraries/LibWeb/CSS/StyleValues/CalculatedStyleValue.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1405,6 +1405,13 @@ Optional<CalculatedStyleValue::CalculationResult> SignCalculationNode::run_opera
14051405
[](Percentage const& percentage) { return percentage.as_fraction(); },
14061406
[](auto const& dimension) { return dimension.raw_value(); });
14071407

1408+
auto return_type = NumericType {}.made_consistent_with(numeric_child.numeric_type().value_or({}));
1409+
1410+
// https://drafts.csswg.org/css-values-4/#calc-ieee
1411+
// Any operation with at least one NaN argument produces NaN.
1412+
if (isnan(raw_value))
1413+
return CalculatedStyleValue::CalculationResult { AK::NaN<double>, return_type };
1414+
14081415
double sign = 0;
14091416
if (raw_value < 0) {
14101417
sign = -1;
@@ -1415,7 +1422,7 @@ Optional<CalculatedStyleValue::CalculationResult> SignCalculationNode::run_opera
14151422
sign = extractor.sign ? -0.0 : 0.0;
14161423
}
14171424

1418-
return CalculatedStyleValue::CalculationResult { sign, NumericType {}.made_consistent_with(numeric_child.numeric_type().value_or({})) };
1425+
return CalculatedStyleValue::CalculationResult { sign, return_type };
14191426
}
14201427

14211428
void SignCalculationNode::dump(StringBuilder& builder, int indent) const

Tests/LibWeb/Text/expected/wpt-import/css/css-values/signs-abs-serialize.txt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ Harness status: OK
22

33
Found 16 tests
44

5-
14 Pass
6-
2 Fail
5+
16 Pass
76
Pass 'scale(abs(1))' as a specified value should serialize as 'scale(calc(1))'.
87
Pass 'scale(sign(.1))' as a specified value should serialize as 'scale(calc(1))'.
98
Pass 'scale(abs(1 + 2 + 3))' as a specified value should serialize as 'scale(calc(6))'.
@@ -18,5 +17,5 @@ Pass 'scale(calc(sign(infinity)))' as a specified value should serialize as 'sca
1817
Pass 'scale(abs(infinity))' as a specified value should serialize as 'scale(calc(infinity))'.
1918
Pass 'scale(calc(abs(-infinity)))' as a specified value should serialize as 'scale(calc(infinity))'.
2019
Pass 'scale(calc(sign(-1 * infinity)))' as a specified value should serialize as 'scale(calc(-1))'.
21-
Fail 'scale(calc(sign(-1 * NaN)))' as a specified value should serialize as 'scale(calc(NaN))'.
22-
Fail 'scale(calc(sign(1 * NaN)))' as a specified value should serialize as 'scale(calc(NaN))'.
20+
Pass 'scale(calc(sign(-1 * NaN)))' as a specified value should serialize as 'scale(calc(NaN))'.
21+
Pass 'scale(calc(sign(1 * NaN)))' as a specified value should serialize as 'scale(calc(NaN))'.

0 commit comments

Comments
 (0)