From e7b14b50244d51a9cda3d43a82476d8c20926a76 Mon Sep 17 00:00:00 2001 From: Alex Christensen Date: Wed, 25 Jan 2023 12:54:47 -0800 Subject: [PATCH] Allow using a = b in *.serialization.in files https://bugs.webkit.org/show_bug.cgi?id=251160 Reviewed by Chris Dumez. This fixes a shortcut I took in 259180@main. Expose the information to the IPC testing API as if b contained a, which is equivalent from the point of view of serialization. No actual serializers need to be generated. * Source/WebKit/Scripts/generate-serializers.py: (generate_serialized_type_info): (generate_serialized_type_info.in): (parse_serialized_types): (main): (main.in): * Source/WebKit/Scripts/webkit/tests/SerializedTypeInfo.cpp: (WebKit::allSerializedTypes): * Source/WebKit/Scripts/webkit/tests/TestSerializedType.serialization.in: * Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in: * Source/WebKit/UIProcess/VisitedLinkStore.messages.in: * Source/WebKit/WebProcess/WebPage/VisitedLinkTableController.messages.in: Canonical link: https://commits.webkit.org/259383@main --- Source/WebKit/Scripts/generate-serializers.py | 20 +++++++++++++++---- .../webkit/tests/SerializedTypeInfo.cpp | 3 +++ .../tests/TestSerializedType.serialization.in | 2 ++ .../WebCoreArgumentCoders.serialization.in | 2 ++ .../UIProcess/VisitedLinkStore.messages.in | 2 +- .../VisitedLinkTableController.messages.in | 2 +- 6 files changed, 25 insertions(+), 6 deletions(-) diff --git a/Source/WebKit/Scripts/generate-serializers.py b/Source/WebKit/Scripts/generate-serializers.py index f695cc211b9d..69f6e8b7fb84 100644 --- a/Source/WebKit/Scripts/generate-serializers.py +++ b/Source/WebKit/Scripts/generate-serializers.py @@ -596,7 +596,7 @@ def generate_impl(serialized_types, serialized_enums, headers): return '\n'.join(result) -def generate_serialized_type_info(serialized_types, serialized_enums, headers): +def generate_serialized_type_info(serialized_types, serialized_enums, headers, typedefs): result = [] result.append(_license_header) result.append('#include "config.h"') @@ -630,6 +630,10 @@ def generate_serialized_type_info(serialized_types, serialized_enums, headers): else: result.append(' }, {') result.append(' } },') + for typedef in typedefs: + result.append(' { "' + typedef[0] + '"_s, {') + result.append(' { "' + typedef[1] + '"_s, "alias"_s }') + result.append(' } },') result.append(' };') result.append('}') result.append('') @@ -665,6 +669,7 @@ def generate_serialized_type_info(serialized_types, serialized_enums, headers): def parse_serialized_types(file, file_name): serialized_types = [] serialized_enums = [] + typedefs = [] headers = [] attributes = None @@ -766,6 +771,10 @@ def parse_serialized_types(file, file_name): if match: struct_or_class, name = match.groups() continue + match = re.search(r'using (.*) = (.*)', line) + if match: + typedefs.append(match.groups()) + continue if underlying_type is not None: members.append(EnumMember(line.strip(' ,'), member_condition)) @@ -804,21 +813,24 @@ def parse_serialized_types(file, file_name): if match: member_type, member_name = match.groups() members.append(MemberVariable(member_type, member_name, member_condition, [])) - return [serialized_types, serialized_enums, headers] + return [serialized_types, serialized_enums, headers, typedefs] def main(argv): serialized_types = [] serialized_enums = [] + typedefs = [] headers = [] file_extension = argv[1] for i in range(3, len(argv)): with open(argv[2] + argv[i]) as file: - new_types, new_enums, new_headers = parse_serialized_types(file, argv[i]) + new_types, new_enums, new_headers, new_typedefs = parse_serialized_types(file, argv[i]) for type in new_types: serialized_types.append(type) for enum in new_enums: serialized_enums.append(enum) + for typedef in new_typedefs: + typedefs.append(typedef) for header in new_headers: headers.append(header) headers.sort() @@ -828,7 +840,7 @@ def main(argv): with open('GeneratedSerializers.%s' % file_extension, "w+") as output: output.write(generate_impl(serialized_types, serialized_enums, headers)) with open('SerializedTypeInfo.%s' % file_extension, "w+") as output: - output.write(generate_serialized_type_info(serialized_types, serialized_enums, headers)) + output.write(generate_serialized_type_info(serialized_types, serialized_enums, headers, typedefs)) return 0 diff --git a/Source/WebKit/Scripts/webkit/tests/SerializedTypeInfo.cpp b/Source/WebKit/Scripts/webkit/tests/SerializedTypeInfo.cpp index eb77f9f6e661..9926040c33ef 100644 --- a/Source/WebKit/Scripts/webkit/tests/SerializedTypeInfo.cpp +++ b/Source/WebKit/Scripts/webkit/tests/SerializedTypeInfo.cpp @@ -172,6 +172,9 @@ Vector allSerializedTypes() "secondMember"_s } } }, + { "WebCore::SharedStringHash"_s, { + { "uint32_t"_s, "alias"_s } + } }, }; } diff --git a/Source/WebKit/Scripts/webkit/tests/TestSerializedType.serialization.in b/Source/WebKit/Scripts/webkit/tests/TestSerializedType.serialization.in index 02241554b8b0..2c04ed325684 100644 --- a/Source/WebKit/Scripts/webkit/tests/TestSerializedType.serialization.in +++ b/Source/WebKit/Scripts/webkit/tests/TestSerializedType.serialization.in @@ -108,3 +108,5 @@ struct NullableSoftLinkedMember { WebCore::StepsTimingFunction, WebCore::SpringTimingFunction } + +using WebCore::SharedStringHash = uint32_t diff --git a/Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in b/Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in index 3ada7fbcd2e4..785ff3bca3d6 100644 --- a/Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in +++ b/Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in @@ -2892,3 +2892,5 @@ header: uint64_t index; WebCore::TextManipulationControllerManipulationFailure::Type type; }; + +using WebCore::SharedStringHash = uint32_t diff --git a/Source/WebKit/UIProcess/VisitedLinkStore.messages.in b/Source/WebKit/UIProcess/VisitedLinkStore.messages.in index ac7abf478335..6dc46939bbde 100644 --- a/Source/WebKit/UIProcess/VisitedLinkStore.messages.in +++ b/Source/WebKit/UIProcess/VisitedLinkStore.messages.in @@ -21,5 +21,5 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. messages -> VisitedLinkStore { - AddVisitedLinkHashFromPage(WebKit::WebPageProxyIdentifier pageProxyID, uint32_t linkHash) + AddVisitedLinkHashFromPage(WebKit::WebPageProxyIdentifier pageProxyID, WebCore::SharedStringHash linkHash) } diff --git a/Source/WebKit/WebProcess/WebPage/VisitedLinkTableController.messages.in b/Source/WebKit/WebProcess/WebPage/VisitedLinkTableController.messages.in index 512f667b159d..f916453e40e5 100644 --- a/Source/WebKit/WebProcess/WebPage/VisitedLinkTableController.messages.in +++ b/Source/WebKit/WebProcess/WebPage/VisitedLinkTableController.messages.in @@ -22,7 +22,7 @@ messages -> VisitedLinkTableController { SetVisitedLinkTable(WebKit::SharedMemory::Handle handle) - VisitedLinkStateChanged(Vector linkHashes) + VisitedLinkStateChanged(Vector linkHashes) AllVisitedLinkStateChanged() RemoveAllVisitedLinks() }