From 725a758c66f411a7142da574bcb60764f165e0ae Mon Sep 17 00:00:00 2001 From: Linus Groh Date: Sun, 5 Mar 2023 21:55:22 +0000 Subject: [PATCH] LibIDL: Also parse extended attributes after 'optional' From the WebIDL grammar: (https://webidl.spec.whatwg.org/#prod-Argument) Argument :: ExtendedAttributeList ArgumentRest ArgumentRest :: optional TypeWithExtendedAttributes ArgumentName Default TypeWithExtendedAttributes :: ExtendedAttributeList Type One IDL file has been updated to match the spec literally, as it can now be parsed properly. --- Userland/Libraries/LibIDL/IDLParser.cpp | 6 ++++++ Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.idl | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibIDL/IDLParser.cpp b/Userland/Libraries/LibIDL/IDLParser.cpp index 7f12d0b313..87adc465bc 100644 --- a/Userland/Libraries/LibIDL/IDLParser.cpp +++ b/Userland/Libraries/LibIDL/IDLParser.cpp @@ -298,6 +298,12 @@ Vector Parser::parse_parameters() bool optional = lexer.consume_specific("optional"); if (optional) consume_whitespace(); + if (lexer.consume_specific('[')) { + // Not explicitly forbidden by the grammar but unlikely to happen in practice - if it does, + // we'll have to teach the parser how to merge two sets of extended attributes. + VERIFY(extended_attributes.is_empty()); + extended_attributes = parse_extended_attributes(); + } auto type = parse_type(); bool variadic = lexer.consume_specific("..."sv); consume_whitespace(); diff --git a/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.idl b/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.idl index 02dbc94f5e..725ca646bc 100644 --- a/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.idl +++ b/Userland/Libraries/LibWeb/CSS/CSSStyleDeclaration.idl @@ -10,7 +10,7 @@ interface CSSStyleDeclaration { CSSOMString getPropertyValue(CSSOMString property); CSSOMString getPropertyPriority(CSSOMString property); - [CEReactions] undefined setProperty(CSSOMString property, [LegacyNullToEmptyString] CSSOMString value, [LegacyNullToEmptyString] optional CSSOMString priority = ""); + [CEReactions] undefined setProperty(CSSOMString property, [LegacyNullToEmptyString] CSSOMString value, optional [LegacyNullToEmptyString] CSSOMString priority = ""); [CEReactions] CSSOMString removeProperty(CSSOMString property); };