1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 17:17:44 +00:00

LibIDL: Avoid unnecessary copies of imported paths

This commit is contained in:
Ben Wiederhake 2023-06-06 23:21:33 +02:00 committed by Andreas Kling
parent fe9e09fa3a
commit 72756f09f4

View file

@ -942,21 +942,23 @@ Interface& Parser::parse()
top_level_resolved_imports().set(this_module, &interface); top_level_resolved_imports().set(this_module, &interface);
Vector<Interface&> imports; Vector<Interface&> imports;
HashTable<DeprecatedString> required_imported_paths; {
while (lexer.consume_specific("#import")) { HashTable<DeprecatedString> required_imported_paths;
consume_whitespace(); while (lexer.consume_specific("#import")) {
assert_specific('<'); consume_whitespace();
auto path = lexer.consume_until('>'); assert_specific('<');
lexer.ignore(); auto path = lexer.consume_until('>');
auto maybe_interface = resolve_import(path); lexer.ignore();
if (maybe_interface.has_value()) { auto maybe_interface = resolve_import(path);
for (auto& entry : maybe_interface.value().required_imported_paths) if (maybe_interface.has_value()) {
required_imported_paths.set(entry); for (auto& entry : maybe_interface.value().required_imported_paths)
imports.append(maybe_interface.release_value()); required_imported_paths.set(entry);
imports.append(maybe_interface.release_value());
}
consume_whitespace();
} }
consume_whitespace(); interface.required_imported_paths = move(required_imported_paths);
} }
interface.required_imported_paths = required_imported_paths;
parse_non_interface_entities(true, interface); parse_non_interface_entities(true, interface);