瀏覽代碼

LibWeb: Support non-interface top-level extended attributes

Idan Horowitz 3 年之前
父節點
當前提交
9ff79c9d54
共有 1 個文件被更改,包括 4 次插入3 次删除
  1. 4 3
      Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator/IDLParser.cpp

+ 4 - 3
Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator/IDLParser.cpp

@@ -725,6 +725,9 @@ void Parser::parse_interface_mixin(Interface& interface)
 void Parser::parse_non_interface_entities(bool allow_interface, Interface& interface)
 {
     while (!lexer.is_eof()) {
+        HashMap<String, String> extended_attributes;
+        if (lexer.consume_specific('['))
+            extended_attributes = parse_extended_attributes();
         if (lexer.next_is("dictionary")) {
             parse_dictionary(interface);
         } else if (lexer.next_is("enum")) {
@@ -748,6 +751,7 @@ void Parser::parse_non_interface_entities(bool allow_interface, Interface& inter
                 report_parsing_error("expected 'enum' or 'dictionary'", filename, input, current_offset);
             }
         } else {
+            interface.extended_attributes = move(extended_attributes);
             break;
         }
     }
@@ -811,9 +815,6 @@ NonnullOwnPtr<Interface> Parser::parse()
     interface->all_imported_paths = s_all_imported_paths;
     interface->required_imported_paths = required_imported_paths;
 
-    if (lexer.consume_specific('['))
-        interface->extended_attributes = parse_extended_attributes();
-
     parse_non_interface_entities(true, *interface);
 
     if (lexer.consume_specific("interface"))