diff -Naur qtwebkit3/Source/cmake/OptionsQt.cmake qtwebkit/Source/cmake/OptionsQt.cmake --- qtwebkit3/Source/cmake/OptionsQt.cmake 2018-10-17 21:15:23.763961900 +0700 +++ qtwebkit/Source/cmake/OptionsQt.cmake 2018-10-18 01:39:41.785229600 +0700 @@ -848,6 +848,7 @@ # We do not use exceptions add_definitions(-D_HAS_EXCEPTIONS=0) add_compile_options(/EHa- /EHc- /EHs- /fp:except-) + add_compile_options(/D_ENABLE_EXTENDED_ALIGNED_STORAGE) # We have some very large object files that have to be linked add_compile_options(/analyze- /bigobj) diff -Naur qtwebkit3/Source/cmake/OptionsWin.cmake qtwebkit/Source/cmake/OptionsWin.cmake --- qtwebkit3/Source/cmake/OptionsWin.cmake 2018-10-17 21:15:23.763961900 +0700 +++ qtwebkit/Source/cmake/OptionsWin.cmake 2018-10-18 01:39:52.839954700 +0700 @@ -137,6 +137,7 @@ # We do not use exceptions add_definitions(-D_HAS_EXCEPTIONS=0) add_compile_options(/EHa- /EHc- /EHs- /fp:except-) + add_compile_options(/D_ENABLE_EXTENDED_ALIGNED_STORAGE) # We have some very large object files that have to be linked add_compile_options(/analyze- /bigobj) diff -Naur qtwebkit3/Source/WebKit2/Scripts/webkit/messages.py qtwebkit/Source/WebKit2/Scripts/webkit/messages.py --- qtwebkit3/Source/WebKit2/Scripts/webkit/messages.py 2018-10-17 21:15:23.196638600 +0700 +++ qtwebkit/Source/WebKit2/Scripts/webkit/messages.py 2018-10-18 01:32:43.591745700 +0700 @@ -177,38 +177,50 @@ non_template_wtf_types = frozenset([ 'String', ]) + for message in receiver.messages: if message.reply_parameters != None and message.has_attribute(DELAYED_ATTRIBUTE): headers.add('') types_by_namespace['IPC'].update([('class', 'Connection')]) + + type_conditions = {} + for parameter in receiver.iterparameters(): + if not parameter.type in type_conditions: + type_conditions[parameter.type] = [] + + if not parameter.condition in type_conditions[parameter.type]: + type_conditions[parameter.type].append(parameter.condition) + header_conditions = {} for parameter in receiver.iterparameters(): - kind = parameter.kind type = parameter.type - - if type.find('<') != -1: - # Don't forward declare class templates. - headers.update(headers_for_type(type)) - continue - - split = type.split('::') + conditions = type_conditions[type] # Handle WTF types even if the WTF:: prefix is not given - if split[0] in non_template_wtf_types: - split.insert(0, 'WTF') - - if len(split) == 2: - namespace = split[0] - inner_type = split[1] - types_by_namespace[namespace].add((kind, inner_type)) - elif len(split) > 2: - # We probably have a nested struct, which means we can't forward declare it. - # Include its header instead. - headers.update(headers_for_type(type)) + argument_encoder_headers = argument_coder_headers_for_type(type) + if argument_encoder_headers: + for header in argument_encoder_headers: + if header not in header_conditions: + header_conditions[header] = [] + header_conditions[header].extend(conditions) + + + type_headers = headers_for_type(type) + for header in type_headers: + if header not in header_conditions: + header_conditions[header] = [] + header_conditions[header].extend(conditions) forward_declarations = '\n'.join([forward_declarations_for_namespace(namespace, types) for (namespace, types) in sorted(types_by_namespace.items())]) headers = ['#include %s\n' % header for header in sorted(headers)] + for header in sorted(header_conditions): + if header_conditions[header] and not None in header_conditions[header]: + headers.append('#if %s\n' % ' || '.join(set(header_conditions[header]))) + headers += ['#include %s\n' % header] + headers.append('#endif\n') + else: + headers += ['#include %s\n' % header] return (forward_declarations, headers)