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.
This commit is contained in:
Linus Groh 2023-03-05 21:55:22 +00:00
parent cc1e8a4e9f
commit 725a758c66
Notes: sideshowbarker 2024-07-17 01:04:03 +09:00
2 changed files with 7 additions and 1 deletions

View file

@ -298,6 +298,12 @@ Vector<Parameter> 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();

View file

@ -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);
};