summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibIDL
diff options
context:
space:
mode:
authorAndrew Kaster <akaster@serenityos.org>2022-10-08 16:47:08 -0600
committerAndreas Kling <kling@serenityos.org>2022-10-09 10:14:57 +0200
commit2341294c205e826ce87db3c47be94ba69e030dc3 (patch)
treefeb81d65d093b61c623809836e5b7f9a7850d041 /Userland/Libraries/LibIDL
parent67ceba2e6a98c280eb685dfa7559beef09a35409 (diff)
downloadserenity-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.cpp12
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, {});