From 3413eb141653f91b31a64b901c213872259d2c03 Mon Sep 17 00:00:00 2001 From: stelar7 Date: Mon, 9 May 2022 22:25:42 +0200 Subject: [PATCH] LibWeb: Teach IDLParser about `long long` --- .../LibWeb/WrapperGenerator/IDLGenerators.cpp | 14 ++++++++++++++ .../LibWeb/WrapperGenerator/IDLParser.cpp | 7 +++++++ 2 files changed, 21 insertions(+) diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator/IDLGenerators.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator/IDLGenerators.cpp index 32865a191b..b018becb36 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator/IDLGenerators.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator/IDLGenerators.cpp @@ -90,6 +90,12 @@ CppType idl_type_name_to_cpp_type(Type const& type, Interface const& interface) if (type.name == "unsigned short" && !type.nullable) return { .name = "u16", .sequence_storage_type = SequenceStorageType::Vector }; + if (type.name == "long long" && !type.nullable) + return { .name = "i64", .sequence_storage_type = SequenceStorageType::Vector }; + + if (type.name == "unsigned long long" && !type.nullable) + return { .name = "u64", .sequence_storage_type = SequenceStorageType::Vector }; + if (type.name == "long" && !type.nullable) return { .name = "i32", .sequence_storage_type = SequenceStorageType::Vector }; @@ -1345,6 +1351,14 @@ static void generate_wrap_statement(SourceGenerator& generator, String const& va } else if (type.name == "unsigned long") { scoped_generator.append(R"~~~( @result_expression@ JS::Value((u32)@value@); +)~~~"); + } else if (type.name == "long long") { + scoped_generator.append(R"~~~( + @result_expression@ JS::Value((double)@value@); +)~~~"); + } else if (type.name == "unsigned long long") { + scoped_generator.append(R"~~~( + @result_expression@ JS::Value((double)@value@); )~~~"); } else if (type.name == "Location" || type.name == "Promise" || type.name == "Uint8Array" || type.name == "Uint8ClampedArray" || type.name == "any") { scoped_generator.append(R"~~~( diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator/IDLParser.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator/IDLParser.cpp index 8171319598..623df632c6 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator/IDLParser.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator/IDLParser.cpp @@ -181,6 +181,13 @@ NonnullRefPtr Parser::parse_type() consume_whitespace(); auto name = lexer.consume_until([](auto ch) { return !is_ascii_alphanumeric(ch) && ch != '_'; }); + + if (name.equals_ignoring_case("long"sv)) { + consume_whitespace(); + if (lexer.consume_specific("long"sv)) + name = "long long"; + } + NonnullRefPtrVector parameters; bool is_parameterized_type = false; if (lexer.consume_specific('<')) {