diff options
author | Andrew Kaster <akaster@serenityos.org> | 2022-10-08 16:47:08 -0600 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2022-10-09 10:14:57 +0200 |
commit | 2341294c205e826ce87db3c47be94ba69e030dc3 (patch) | |
tree | feb81d65d093b61c623809836e5b7f9a7850d041 /Userland/Libraries/LibIDL | |
parent | 67ceba2e6a98c280eb685dfa7559beef09a35409 (diff) | |
download | serenity-2341294c205e826ce87db3c47be94ba69e030dc3.zip |
LibIDL: Parse extended attributes that have () wrapped expressions
This includes things like Exposed and LegacyFactoryFunction.
Diffstat (limited to 'Userland/Libraries/LibIDL')
-rw-r--r-- | Userland/Libraries/LibIDL/IDLParser.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/Userland/Libraries/LibIDL/IDLParser.cpp b/Userland/Libraries/LibIDL/IDLParser.cpp index c576b0193d..6f840f9b29 100644 --- a/Userland/Libraries/LibIDL/IDLParser.cpp +++ b/Userland/Libraries/LibIDL/IDLParser.cpp @@ -114,7 +114,17 @@ HashMap<String, String> Parser::parse_extended_attributes() break; auto name = lexer.consume_until([](auto ch) { return ch == ']' || ch == '=' || ch == ','; }); if (lexer.consume_specific('=')) { - auto value = lexer.consume_until([](auto ch) { return ch == ']' || ch == ','; }); + bool did_open_paren = false; + auto value = lexer.consume_until( + [&did_open_paren](auto ch) mutable { + if (ch == '(') { + did_open_paren = true; + return false; + } + if (did_open_paren) + return ch == ')'; + return ch == ']' || ch == ','; + }); extended_attributes.set(name, value); } else { extended_attributes.set(name, {}); |