From d667843a4d47a54fcadd3aeab36f417651975641 Mon Sep 17 00:00:00 2001 From: Christophe Coevoet Date: Wed, 6 Oct 2021 19:18:55 +0200 Subject: [PATCH] Fix the parsing of supports function in static imports (#1514) --- lib/src/parse/stylesheet.dart | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/lib/src/parse/stylesheet.dart b/lib/src/parse/stylesheet.dart index 5685f151c..3b44357d1 100644 --- a/lib/src/parse/stylesheet.dart +++ b/lib/src/parse/stylesheet.dart @@ -1150,11 +1150,30 @@ abstract class StylesheetParser extends Parser { } else if (scanner.peekChar() == $lparen) { supports = _supportsCondition(); } else { - var name = expression(); - scanner.expectChar($colon); - whitespace(); - var value = expression(); - supports = SupportsDeclaration(name, value, scanner.spanFrom(start)); + if (_lookingAtInterpolatedIdentifier()) { + var identifier = interpolatedIdentifier(); + if (identifier.asPlain?.toLowerCase() == "not") { + error('"not" is not a valid identifier here.', identifier.span); + } + + if (scanner.scanChar($lparen)) { + var arguments = _interpolatedDeclarationValue( + allowEmpty: true, allowSemicolon: true); + scanner.expectChar($rparen); + supports = SupportsFunction( + identifier, arguments, scanner.spanFrom(start)); + } else { + // Backtrack to parse a variable declaration + scanner.state = start; + } + } + if (supports == null) { + var name = expression(); + scanner.expectChar($colon); + whitespace(); + var value = expression(); + supports = SupportsDeclaration(name, value, scanner.spanFrom(start)); + } } scanner.expectChar($rparen); whitespace();