@@ -2415,10 +2415,7 @@ namespace Sass {
2415
2415
// these are very similar to media blocks
2416
2416
Supports_Block_Obj Parser::parse_supports_directive ()
2417
2417
{
2418
- Supports_Condition_Obj cond = parse_supports_condition ();
2419
- if (!cond) {
2420
- css_error (" Invalid CSS" , " after " , " : expected @supports condition (e.g. (display: flexbox)), was " , false );
2421
- }
2418
+ Supports_Condition_Obj cond = parse_supports_condition (/* top_level=*/ true );
2422
2419
// create the ast node object for the support queries
2423
2420
Supports_Block_Obj query = SASS_MEMORY_NEW (Supports_Block, pstate, cond);
2424
2421
// additional block is mandatory
@@ -2430,26 +2427,26 @@ namespace Sass {
2430
2427
2431
2428
// parse one query operation
2432
2429
// may encounter nested queries
2433
- Supports_Condition_Obj Parser::parse_supports_condition ()
2430
+ Supports_Condition_Obj Parser::parse_supports_condition (bool top_level )
2434
2431
{
2435
2432
lex < css_whitespace >();
2436
2433
Supports_Condition_Obj cond;
2437
2434
if ((cond = parse_supports_negation ())) return cond;
2438
- if ((cond = parse_supports_operator ())) return cond;
2435
+ if ((cond = parse_supports_operator (top_level ))) return cond;
2439
2436
if ((cond = parse_supports_interpolation ())) return cond;
2440
2437
return cond;
2441
2438
}
2442
2439
2443
2440
Supports_Condition_Obj Parser::parse_supports_negation ()
2444
2441
{
2445
2442
if (!lex < kwd_not >()) return {};
2446
- Supports_Condition_Obj cond = parse_supports_condition_in_parens ();
2443
+ Supports_Condition_Obj cond = parse_supports_condition_in_parens (/* parens_required= */ true );
2447
2444
return SASS_MEMORY_NEW (Supports_Negation, pstate, cond);
2448
2445
}
2449
2446
2450
- Supports_Condition_Obj Parser::parse_supports_operator ()
2447
+ Supports_Condition_Obj Parser::parse_supports_operator (bool top_level )
2451
2448
{
2452
- Supports_Condition_Obj cond = parse_supports_condition_in_parens ();
2449
+ Supports_Condition_Obj cond = parse_supports_condition_in_parens (/* parens_required= */ top_level );
2453
2450
if (cond.isNull ()) return {};
2454
2451
2455
2452
while (true ) {
@@ -2458,7 +2455,7 @@ namespace Sass {
2458
2455
else if (!lex < kwd_or >()) { break ; }
2459
2456
2460
2457
lex < css_whitespace >();
2461
- Supports_Condition_Obj right = parse_supports_condition_in_parens ();
2458
+ Supports_Condition_Obj right = parse_supports_condition_in_parens (/* parens_required= */ true );
2462
2459
2463
2460
// Supports_Condition* cc = SASS_MEMORY_NEW(Supports_Condition, *static_cast<Supports_Condition*>(cond));
2464
2461
cond = SASS_MEMORY_NEW (Supports_Operator, pstate, cond, right, op);
@@ -2496,21 +2493,24 @@ namespace Sass {
2496
2493
return cond;
2497
2494
}
2498
2495
2499
- Supports_Condition_Obj Parser::parse_supports_condition_in_parens ()
2496
+ Supports_Condition_Obj Parser::parse_supports_condition_in_parens (bool parens_required )
2500
2497
{
2501
2498
Supports_Condition_Obj interp = parse_supports_interpolation ();
2502
2499
if (interp != 0 ) return interp;
2503
2500
2504
- if (!lex < exactly <' (' > >()) return {};
2501
+ if (!lex < exactly <' (' > >()) {
2502
+ if (parens_required) {
2503
+ css_error (" Invalid CSS" , " after " , " : expected @supports condition (e.g. (display: flexbox)), was " , /* trim=*/ false );
2504
+ } else {
2505
+ return {};
2506
+ }
2507
+ }
2505
2508
lex < css_whitespace >();
2506
2509
2507
- Supports_Condition_Obj cond = parse_supports_condition ();
2508
- if (cond != 0 ) {
2509
- if (!lex < exactly <' )' > >()) error (" unclosed parenthesis in @supports declaration" );
2510
- } else {
2511
- cond = parse_supports_declaration ();
2512
- if (!lex < exactly <' )' > >()) error (" unclosed parenthesis in @supports declaration" );
2513
- }
2510
+ Supports_Condition_Obj cond = parse_supports_condition (/* top_level=*/ false );
2511
+ if (cond.isNull ()) cond = parse_supports_declaration ();
2512
+ if (!lex < exactly <' )' > >()) error (" unclosed parenthesis in @supports declaration" );
2513
+
2514
2514
lex < css_whitespace >();
2515
2515
return cond;
2516
2516
}
0 commit comments