Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (210306 => 210307)
--- trunk/Source/_javascript_Core/ChangeLog 2017-01-05 01:10:11 UTC (rev 210306)
+++ trunk/Source/_javascript_Core/ChangeLog 2017-01-05 01:16:30 UTC (rev 210307)
@@ -1,3 +1,75 @@
+2017-01-03 Brian Burg <[email protected]>
+
+ Web Inspector: teach the protocol generator about platform-specific types, events, and commands
+ https://bugs.webkit.org/show_bug.cgi?id=166003
+ <rdar://problem/28718990>
+
+ Reviewed by Joseph Pecoraro.
+
+ Add a --platform argument to generate-inspector-protocol-bindings.py and propagate
+ the specified platform to each generator. This will be used in the next few patches
+ to exclude types, events, and commands that are unsupported by the backend platform.
+
+ Covert all subclasses of Generator to pass along their positional arguments so that we
+ can easily change base class arguments without editing all generator constructors.
+
+ * inspector/scripts/codegen/cpp_generator.py:
+ (CppGenerator.__init__):
+ * inspector/scripts/codegen/generate_cpp_alternate_backend_dispatcher_header.py:
+ (CppAlternateBackendDispatcherHeaderGenerator.__init__):
+ * inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:
+ (CppBackendDispatcherHeaderGenerator.__init__):
+ * inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:
+ (CppBackendDispatcherImplementationGenerator.__init__):
+ * inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py:
+ (CppFrontendDispatcherHeaderGenerator.__init__):
+ * inspector/scripts/codegen/generate_cpp_frontend_dispatcher_implementation.py:
+ (CppFrontendDispatcherImplementationGenerator.__init__):
+ * inspector/scripts/codegen/generate_cpp_protocol_types_header.py:
+ (CppProtocolTypesHeaderGenerator.__init__):
+ * inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py:
+ (CppProtocolTypesImplementationGenerator.__init__):
+ * inspector/scripts/codegen/generate_js_backend_commands.py:
+ (JSBackendCommandsGenerator.__init__):
+ * inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py:
+ (ObjCBackendDispatcherHeaderGenerator.__init__):
+ * inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py:
+ (ObjCConfigurationImplementationGenerator.__init__):
+ * inspector/scripts/codegen/generate_objc_configuration_header.py:
+ (ObjCConfigurationHeaderGenerator.__init__):
+ * inspector/scripts/codegen/generate_objc_configuration_implementation.py:
+ (ObjCBackendDispatcherImplementationGenerator.__init__):
+ * inspector/scripts/codegen/generate_objc_frontend_dispatcher_implementation.py:
+ (ObjCFrontendDispatcherImplementationGenerator.__init__):
+ * inspector/scripts/codegen/generate_objc_header.py:
+ (ObjCHeaderGenerator.__init__):
+ * inspector/scripts/codegen/generate_objc_internal_header.py:
+ (ObjCInternalHeaderGenerator.__init__):
+ * inspector/scripts/codegen/generate_objc_protocol_type_conversions_header.py:
+ (ObjCProtocolTypeConversionsHeaderGenerator.__init__):
+ * inspector/scripts/codegen/generate_objc_protocol_type_conversions_implementation.py:
+ (ObjCProtocolTypeConversionsImplementationGenerator.__init__):
+ * inspector/scripts/codegen/generate_objc_protocol_types_implementation.py:
+ (ObjCProtocolTypesImplementationGenerator.__init__):
+ Pass along *args instead of single positional arguments.
+
+ * inspector/scripts/codegen/generator.py:
+ (Generator.__init__):
+ Save the target platform and add a getter.
+
+ * inspector/scripts/codegen/models.py:
+ (Platform):
+ (Platform.__init__):
+ (Platform.fromString):
+ (Platforms):
+ Define the allowed Platform instances (iOS, macOS, and Any).
+
+ * inspector/scripts/codegen/objc_generator.py:
+ (ObjCGenerator.and.__init__):
+ * inspector/scripts/generate-inspector-protocol-bindings.py:
+ (generate_from_specification):
+ Pass along *args instead of single positional arguments.
+
2017-01-04 JF Bastien <[email protected]>
WebAssembly JS API: add Module.sections
Modified: trunk/Source/_javascript_Core/inspector/scripts/codegen/cpp_generator.py (210306 => 210307)
--- trunk/Source/_javascript_Core/inspector/scripts/codegen/cpp_generator.py 2017-01-05 01:10:11 UTC (rev 210306)
+++ trunk/Source/_javascript_Core/inspector/scripts/codegen/cpp_generator.py 2017-01-05 01:16:30 UTC (rev 210307)
@@ -44,8 +44,8 @@
}
class CppGenerator(Generator):
- def __init__(self, model, input_filepath):
- Generator.__init__(self, model, input_filepath)
+ def __init__(self, *args, **kwargs):
+ Generator.__init__(self, *args, **kwargs)
def protocol_name(self):
return self.model().framework.setting('cpp_protocol_group', '')
Modified: trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_cpp_alternate_backend_dispatcher_header.py (210306 => 210307)
--- trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_cpp_alternate_backend_dispatcher_header.py 2017-01-05 01:10:11 UTC (rev 210306)
+++ trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_cpp_alternate_backend_dispatcher_header.py 2017-01-05 01:16:30 UTC (rev 210307)
@@ -37,8 +37,8 @@
class CppAlternateBackendDispatcherHeaderGenerator(CppGenerator):
- def __init__(self, model, input_filepath):
- CppGenerator.__init__(self, model, input_filepath)
+ def __init__(self, *args, **kwargs):
+ CppGenerator.__init__(self, *args, **kwargs)
def output_filename(self):
return '%sAlternateBackendDispatchers.h' % self.protocol_name()
Modified: trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py (210306 => 210307)
--- trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py 2017-01-05 01:10:11 UTC (rev 210306)
+++ trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py 2017-01-05 01:16:30 UTC (rev 210307)
@@ -39,8 +39,8 @@
class CppBackendDispatcherHeaderGenerator(CppGenerator):
- def __init__(self, model, input_filepath):
- CppGenerator.__init__(self, model, input_filepath)
+ def __init__(self, *args, **kwargs):
+ CppGenerator.__init__(self, *args, **kwargs)
def output_filename(self):
return "%sBackendDispatchers.h" % self.protocol_name()
Modified: trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py (210306 => 210307)
--- trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py 2017-01-05 01:10:11 UTC (rev 210306)
+++ trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py 2017-01-05 01:16:30 UTC (rev 210307)
@@ -38,8 +38,8 @@
class CppBackendDispatcherImplementationGenerator(CppGenerator):
- def __init__(self, model, input_filepath):
- CppGenerator.__init__(self, model, input_filepath)
+ def __init__(self, *args, **kwargs):
+ CppGenerator.__init__(self, *args, **kwargs)
def output_filename(self):
return "%sBackendDispatchers.cpp" % self.protocol_name()
Modified: trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py (210306 => 210307)
--- trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py 2017-01-05 01:10:11 UTC (rev 210306)
+++ trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py 2017-01-05 01:16:30 UTC (rev 210307)
@@ -39,8 +39,8 @@
class CppFrontendDispatcherHeaderGenerator(CppGenerator):
- def __init__(self, model, input_filepath):
- CppGenerator.__init__(self, model, input_filepath)
+ def __init__(self, *args, **kwargs):
+ CppGenerator.__init__(self, *args, **kwargs)
def output_filename(self):
return "%sFrontendDispatchers.h" % self.protocol_name()
Modified: trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_implementation.py (210306 => 210307)
--- trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_implementation.py 2017-01-05 01:10:11 UTC (rev 210306)
+++ trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_implementation.py 2017-01-05 01:16:30 UTC (rev 210307)
@@ -38,8 +38,8 @@
class CppFrontendDispatcherImplementationGenerator(CppGenerator):
- def __init__(self, model, input_filepath):
- CppGenerator.__init__(self, model, input_filepath)
+ def __init__(self, *args, **kwargs):
+ CppGenerator.__init__(self, *args, **kwargs)
def output_filename(self):
return "%sFrontendDispatchers.cpp" % self.protocol_name()
Modified: trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_cpp_protocol_types_header.py (210306 => 210307)
--- trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_cpp_protocol_types_header.py 2017-01-05 01:10:11 UTC (rev 210306)
+++ trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_cpp_protocol_types_header.py 2017-01-05 01:16:30 UTC (rev 210307)
@@ -40,8 +40,8 @@
class CppProtocolTypesHeaderGenerator(CppGenerator):
- def __init__(self, model, input_filepath):
- CppGenerator.__init__(self, model, input_filepath)
+ def __init__(self, *args, **kwargs):
+ CppGenerator.__init__(self, *args, **kwargs)
def output_filename(self):
return "%sProtocolObjects.h" % self.protocol_name()
Modified: trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py (210306 => 210307)
--- trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py 2017-01-05 01:10:11 UTC (rev 210306)
+++ trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py 2017-01-05 01:16:30 UTC (rev 210307)
@@ -39,8 +39,8 @@
class CppProtocolTypesImplementationGenerator(CppGenerator):
- def __init__(self, model, input_filepath):
- CppGenerator.__init__(self, model, input_filepath)
+ def __init__(self, *args, **kwargs):
+ CppGenerator.__init__(self, *args, **kwargs)
def output_filename(self):
return "%sProtocolObjects.cpp" % self.protocol_name()
Modified: trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_js_backend_commands.py (210306 => 210307)
--- trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_js_backend_commands.py 2017-01-05 01:10:11 UTC (rev 210306)
+++ trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_js_backend_commands.py 2017-01-05 01:16:30 UTC (rev 210307)
@@ -37,8 +37,8 @@
class JSBackendCommandsGenerator(Generator):
- def __init__(self, model, input_filepath):
- Generator.__init__(self, model, input_filepath)
+ def __init__(self, *args, **kwargs):
+ Generator.__init__(self, *args, **kwargs)
def output_filename(self):
return "InspectorBackendCommands.js"
Modified: trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py (210306 => 210307)
--- trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py 2017-01-05 01:10:11 UTC (rev 210306)
+++ trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py 2017-01-05 01:16:30 UTC (rev 210307)
@@ -40,8 +40,8 @@
class ObjCBackendDispatcherHeaderGenerator(ObjCGenerator):
- def __init__(self, model, input_filepath):
- ObjCGenerator.__init__(self, model, input_filepath)
+ def __init__(self, *args, **kwargs):
+ ObjCGenerator.__init__(self, *args, **kwargs)
def output_filename(self):
return '%sBackendDispatchers.h' % self.protocol_name()
Modified: trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py (210306 => 210307)
--- trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py 2017-01-05 01:10:11 UTC (rev 210306)
+++ trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py 2017-01-05 01:16:30 UTC (rev 210307)
@@ -40,8 +40,8 @@
class ObjCConfigurationImplementationGenerator(ObjCGenerator):
- def __init__(self, model, input_filepath):
- ObjCGenerator.__init__(self, model, input_filepath)
+ def __init__(self, *args, **kwargs):
+ ObjCGenerator.__init__(self, *args, **kwargs)
def output_filename(self):
return '%sBackendDispatchers.mm' % self.protocol_name()
Modified: trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_configuration_header.py (210306 => 210307)
--- trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_configuration_header.py 2017-01-05 01:10:11 UTC (rev 210306)
+++ trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_configuration_header.py 2017-01-05 01:16:30 UTC (rev 210307)
@@ -37,8 +37,8 @@
class ObjCConfigurationHeaderGenerator(ObjCGenerator):
- def __init__(self, model, input_filepath):
- ObjCGenerator.__init__(self, model, input_filepath)
+ def __init__(self, *args, **kwargs):
+ ObjCGenerator.__init__(self, *args, **kwargs)
def output_filename(self):
return '%sConfiguration.h' % self.protocol_name()
Modified: trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_configuration_implementation.py (210306 => 210307)
--- trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_configuration_implementation.py 2017-01-05 01:10:11 UTC (rev 210306)
+++ trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_configuration_implementation.py 2017-01-05 01:16:30 UTC (rev 210307)
@@ -37,8 +37,8 @@
class ObjCBackendDispatcherImplementationGenerator(ObjCGenerator):
- def __init__(self, model, input_filepath):
- ObjCGenerator.__init__(self, model, input_filepath)
+ def __init__(self, *args, **kwargs):
+ ObjCGenerator.__init__(self, *args, **kwargs)
def output_filename(self):
return '%sConfiguration.mm' % self.protocol_name()
Modified: trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_frontend_dispatcher_implementation.py (210306 => 210307)
--- trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_frontend_dispatcher_implementation.py 2017-01-05 01:10:11 UTC (rev 210306)
+++ trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_frontend_dispatcher_implementation.py 2017-01-05 01:16:30 UTC (rev 210307)
@@ -38,8 +38,8 @@
class ObjCFrontendDispatcherImplementationGenerator(ObjCGenerator):
- def __init__(self, model, input_filepath):
- ObjCGenerator.__init__(self, model, input_filepath)
+ def __init__(self, *args, **kwargs):
+ ObjCGenerator.__init__(self, *args, **kwargs)
def output_filename(self):
return '%sEventDispatchers.mm' % self.protocol_name()
Modified: trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_header.py (210306 => 210307)
--- trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_header.py 2017-01-05 01:10:11 UTC (rev 210306)
+++ trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_header.py 2017-01-05 01:16:30 UTC (rev 210307)
@@ -44,8 +44,8 @@
class ObjCHeaderGenerator(ObjCGenerator):
- def __init__(self, model, input_filepath):
- ObjCGenerator.__init__(self, model, input_filepath)
+ def __init__(self, *args, **kwargs):
+ ObjCGenerator.__init__(self, *args, **kwargs)
def output_filename(self):
return '%s.h' % self.protocol_name()
Modified: trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_internal_header.py (210306 => 210307)
--- trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_internal_header.py 2017-01-05 01:10:11 UTC (rev 210306)
+++ trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_internal_header.py 2017-01-05 01:16:30 UTC (rev 210307)
@@ -37,8 +37,8 @@
class ObjCInternalHeaderGenerator(ObjCGenerator):
- def __init__(self, model, input_filepath):
- ObjCGenerator.__init__(self, model, input_filepath)
+ def __init__(self, *args, **kwargs):
+ ObjCGenerator.__init__(self, *args, **kwargs)
def output_filename(self):
return '%sInternal.h' % self.protocol_name()
Modified: trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_protocol_type_conversions_header.py (210306 => 210307)
--- trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_protocol_type_conversions_header.py 2017-01-05 01:10:11 UTC (rev 210306)
+++ trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_protocol_type_conversions_header.py 2017-01-05 01:16:30 UTC (rev 210307)
@@ -44,8 +44,8 @@
class ObjCProtocolTypeConversionsHeaderGenerator(ObjCGenerator):
- def __init__(self, model, input_filepath):
- ObjCGenerator.__init__(self, model, input_filepath)
+ def __init__(self, *args, **kwargs):
+ ObjCGenerator.__init__(self, *args, **kwargs)
def output_filename(self):
return '%sTypeConversions.h' % self.protocol_name()
Modified: trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_protocol_type_conversions_implementation.py (210306 => 210307)
--- trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_protocol_type_conversions_implementation.py 2017-01-05 01:10:11 UTC (rev 210306)
+++ trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_protocol_type_conversions_implementation.py 2017-01-05 01:16:30 UTC (rev 210307)
@@ -43,8 +43,8 @@
class ObjCProtocolTypeConversionsImplementationGenerator(ObjCGenerator):
- def __init__(self, model, input_filepath):
- ObjCGenerator.__init__(self, model, input_filepath)
+ def __init__(self, *args, **kwargs):
+ ObjCGenerator.__init__(self, *args, **kwargs)
def output_filename(self):
return '%sTypeConversions.mm' % self.protocol_name()
Modified: trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_protocol_types_implementation.py (210306 => 210307)
--- trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_protocol_types_implementation.py 2017-01-05 01:10:11 UTC (rev 210306)
+++ trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_protocol_types_implementation.py 2017-01-05 01:16:30 UTC (rev 210307)
@@ -44,8 +44,8 @@
class ObjCProtocolTypesImplementationGenerator(ObjCGenerator):
- def __init__(self, model, input_filepath):
- ObjCGenerator.__init__(self, model, input_filepath)
+ def __init__(self, *args, **kwargs):
+ ObjCGenerator.__init__(self, *args, **kwargs)
def output_filename(self):
return '%sTypes.mm' % self.protocol_name()
Modified: trunk/Source/_javascript_Core/inspector/scripts/codegen/generator.py (210306 => 210307)
--- trunk/Source/_javascript_Core/inspector/scripts/codegen/generator.py 2017-01-05 01:10:11 UTC (rev 210306)
+++ trunk/Source/_javascript_Core/inspector/scripts/codegen/generator.py 2017-01-05 01:16:30 UTC (rev 210307)
@@ -76,8 +76,9 @@
class Generator:
- def __init__(self, model, input_filepath):
+ def __init__(self, model, platform, input_filepath):
self._model = model
+ self._platform = platform
self._input_filepath = input_filepath
self._settings = {}
@@ -84,6 +85,9 @@
def model(self):
return self._model
+ def platform(self):
+ return self._platform
+
def set_generator_setting(self, key, value):
self._settings[key] = value
Modified: trunk/Source/_javascript_Core/inspector/scripts/codegen/models.py (210306 => 210307)
--- trunk/Source/_javascript_Core/inspector/scripts/codegen/models.py 2017-01-05 01:10:11 UTC (rev 210306)
+++ trunk/Source/_javascript_Core/inspector/scripts/codegen/models.py 2017-01-05 01:16:30 UTC (rev 210307)
@@ -109,6 +109,35 @@
Test = Framework("Test")
+class Platform:
+ def __init__(self, name):
+ self.name = name
+
+ @staticmethod
+ def fromString(platformString):
+ platformString = platformString.lower()
+ if platformString == "ios":
+ return Platforms.iOS
+
+ if platformString == "macos":
+ return Platforms.macOS
+
+ if platformString == "all":
+ return Platforms.All
+
+ if platformString == "generic" or not platformString:
+ return Platforms.Generic
+
+ raise ParseException("Unknown platform: %s" % platformString)
+
+
+class Platforms:
+ All = Platform("All")
+ Generic = Platform("generic")
+ iOS = Platform("iOS")
+ macOS = Platform("macOS")
+
+
class TypeReference:
def __init__(self, type_kind, referenced_type_name, enum_values, array_items):
self.type_kind = type_kind
Modified: trunk/Source/_javascript_Core/inspector/scripts/codegen/objc_generator.py (210306 => 210307)
--- trunk/Source/_javascript_Core/inspector/scripts/codegen/objc_generator.py 2017-01-05 01:10:11 UTC (rev 210306)
+++ trunk/Source/_javascript_Core/inspector/scripts/codegen/objc_generator.py 2017-01-05 01:16:30 UTC (rev 210307)
@@ -89,8 +89,8 @@
OBJC_SHARED_PREFIX = 'Protocol'
OBJC_STATIC_PREFIX = '%s%s' % (OBJC_HELPER_PREFIX, OBJC_SHARED_PREFIX)
- def __init__(self, model, input_filepath):
- Generator.__init__(self, model, input_filepath)
+ def __init__(self, *args, **kwargs):
+ Generator.__init__(self, *args, **kwargs)
# The 'protocol name' is used to prefix filenames for a protocol group (a set of domains generated together).
def protocol_name(self):
Modified: trunk/Source/_javascript_Core/inspector/scripts/generate-inspector-protocol-bindings.py (210306 => 210307)
--- trunk/Source/_javascript_Core/inspector/scripts/generate-inspector-protocol-bindings.py 2017-01-05 01:10:11 UTC (rev 210306)
+++ trunk/Source/_javascript_Core/inspector/scripts/generate-inspector-protocol-bindings.py 2017-01-05 01:16:30 UTC (rev 210307)
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright (c) 2014 Apple Inc. All rights reserved.
+# Copyright (c) 2014, 2016 Apple Inc. All rights reserved.
# Copyright (c) 2014 University of Washington. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -114,6 +114,7 @@
output_dirpath=None,
force_output=False,
framework_name="",
+ platform_name="",
generate_frontend=True,
generate_backend=True):
@@ -125,6 +126,7 @@
except ValueError as e:
raise Exception("Error parsing valid JSON in file: " + filepath + "\nParse error: " + str(e))
+ platform = Platform.fromString(platform_name)
protocol = models.Protocol(framework_name)
for specification in supplemental_specification_filepaths:
load_specification(protocol, specification, isSupplemental=True)
@@ -132,59 +134,61 @@
protocol.resolve_types()
+ generator_arguments = [protocol, platform, primary_specification_filepath]
generators = []
+
if protocol.framework is Frameworks.Test:
- generators.append(JSBackendCommandsGenerator(protocol, primary_specification_filepath))
- generators.append(CppAlternateBackendDispatcherHeaderGenerator(protocol, primary_specification_filepath))
- generators.append(CppBackendDispatcherHeaderGenerator(protocol, primary_specification_filepath))
- generators.append(CppBackendDispatcherImplementationGenerator(protocol, primary_specification_filepath))
- generators.append(CppFrontendDispatcherHeaderGenerator(protocol, primary_specification_filepath))
- generators.append(CppFrontendDispatcherImplementationGenerator(protocol, primary_specification_filepath))
- generators.append(CppProtocolTypesHeaderGenerator(protocol, primary_specification_filepath))
- generators.append(CppProtocolTypesImplementationGenerator(protocol, primary_specification_filepath))
- generators.append(ObjCBackendDispatcherHeaderGenerator(protocol, primary_specification_filepath))
- generators.append(ObjCBackendDispatcherImplementationGenerator(protocol, primary_specification_filepath))
- generators.append(ObjCConfigurationHeaderGenerator(protocol, primary_specification_filepath))
- generators.append(ObjCConfigurationImplementationGenerator(protocol, primary_specification_filepath))
- generators.append(ObjCFrontendDispatcherImplementationGenerator(protocol, primary_specification_filepath))
- generators.append(ObjCHeaderGenerator(protocol, primary_specification_filepath))
- generators.append(ObjCInternalHeaderGenerator(protocol, primary_specification_filepath))
- generators.append(ObjCProtocolTypeConversionsHeaderGenerator(protocol, primary_specification_filepath))
- generators.append(ObjCProtocolTypeConversionsImplementationGenerator(protocol, primary_specification_filepath))
- generators.append(ObjCProtocolTypesImplementationGenerator(protocol, primary_specification_filepath))
+ generators.append(JSBackendCommandsGenerator(*generator_arguments))
+ generators.append(CppAlternateBackendDispatcherHeaderGenerator(*generator_arguments))
+ generators.append(CppBackendDispatcherHeaderGenerator(*generator_arguments))
+ generators.append(CppBackendDispatcherImplementationGenerator(*generator_arguments))
+ generators.append(CppFrontendDispatcherHeaderGenerator(*generator_arguments))
+ generators.append(CppFrontendDispatcherImplementationGenerator(*generator_arguments))
+ generators.append(CppProtocolTypesHeaderGenerator(*generator_arguments))
+ generators.append(CppProtocolTypesImplementationGenerator(*generator_arguments))
+ generators.append(ObjCBackendDispatcherHeaderGenerator(*generator_arguments))
+ generators.append(ObjCBackendDispatcherImplementationGenerator(*generator_arguments))
+ generators.append(ObjCConfigurationHeaderGenerator(*generator_arguments))
+ generators.append(ObjCConfigurationImplementationGenerator(*generator_arguments))
+ generators.append(ObjCFrontendDispatcherImplementationGenerator(*generator_arguments))
+ generators.append(ObjCHeaderGenerator(*generator_arguments))
+ generators.append(ObjCInternalHeaderGenerator(*generator_arguments))
+ generators.append(ObjCProtocolTypeConversionsHeaderGenerator(*generator_arguments))
+ generators.append(ObjCProtocolTypeConversionsImplementationGenerator(*generator_arguments))
+ generators.append(ObjCProtocolTypesImplementationGenerator(*generator_arguments))
elif protocol.framework is Frameworks._javascript_Core:
- generators.append(JSBackendCommandsGenerator(protocol, primary_specification_filepath))
- generators.append(CppAlternateBackendDispatcherHeaderGenerator(protocol, primary_specification_filepath))
- generators.append(CppBackendDispatcherHeaderGenerator(protocol, primary_specification_filepath))
- generators.append(CppBackendDispatcherImplementationGenerator(protocol, primary_specification_filepath))
- generators.append(CppFrontendDispatcherHeaderGenerator(protocol, primary_specification_filepath))
- generators.append(CppFrontendDispatcherImplementationGenerator(protocol, primary_specification_filepath))
- generators.append(CppProtocolTypesHeaderGenerator(protocol, primary_specification_filepath))
- generators.append(CppProtocolTypesImplementationGenerator(protocol, primary_specification_filepath))
+ generators.append(JSBackendCommandsGenerator(*generator_arguments))
+ generators.append(CppAlternateBackendDispatcherHeaderGenerator(*generator_arguments))
+ generators.append(CppBackendDispatcherHeaderGenerator(*generator_arguments))
+ generators.append(CppBackendDispatcherImplementationGenerator(*generator_arguments))
+ generators.append(CppFrontendDispatcherHeaderGenerator(*generator_arguments))
+ generators.append(CppFrontendDispatcherImplementationGenerator(*generator_arguments))
+ generators.append(CppProtocolTypesHeaderGenerator(*generator_arguments))
+ generators.append(CppProtocolTypesImplementationGenerator(*generator_arguments))
elif protocol.framework is Frameworks.WebKit and generate_backend:
- generators.append(CppBackendDispatcherHeaderGenerator(protocol, primary_specification_filepath))
- generators.append(CppBackendDispatcherImplementationGenerator(protocol, primary_specification_filepath))
- generators.append(CppProtocolTypesHeaderGenerator(protocol, primary_specification_filepath))
- generators.append(CppProtocolTypesImplementationGenerator(protocol, primary_specification_filepath))
+ generators.append(CppBackendDispatcherHeaderGenerator(*generator_arguments))
+ generators.append(CppBackendDispatcherImplementationGenerator(*generator_arguments))
+ generators.append(CppProtocolTypesHeaderGenerator(*generator_arguments))
+ generators.append(CppProtocolTypesImplementationGenerator(*generator_arguments))
elif protocol.framework is Frameworks.WebKit and generate_frontend:
- generators.append(ObjCHeaderGenerator(protocol, primary_specification_filepath))
- generators.append(ObjCProtocolTypeConversionsHeaderGenerator(protocol, primary_specification_filepath))
- generators.append(ObjCProtocolTypeConversionsImplementationGenerator(protocol, primary_specification_filepath))
- generators.append(ObjCProtocolTypesImplementationGenerator(protocol, primary_specification_filepath))
+ generators.append(ObjCHeaderGenerator(*generator_arguments))
+ generators.append(ObjCProtocolTypeConversionsHeaderGenerator(*generator_arguments))
+ generators.append(ObjCProtocolTypeConversionsImplementationGenerator(*generator_arguments))
+ generators.append(ObjCProtocolTypesImplementationGenerator(*generator_arguments))
elif protocol.framework is Frameworks.WebInspector:
- generators.append(ObjCBackendDispatcherHeaderGenerator(protocol, primary_specification_filepath))
- generators.append(ObjCBackendDispatcherImplementationGenerator(protocol, primary_specification_filepath))
- generators.append(ObjCConfigurationHeaderGenerator(protocol, primary_specification_filepath))
- generators.append(ObjCConfigurationImplementationGenerator(protocol, primary_specification_filepath))
- generators.append(ObjCFrontendDispatcherImplementationGenerator(protocol, primary_specification_filepath))
- generators.append(ObjCHeaderGenerator(protocol, primary_specification_filepath))
- generators.append(ObjCInternalHeaderGenerator(protocol, primary_specification_filepath))
- generators.append(ObjCProtocolTypeConversionsHeaderGenerator(protocol, primary_specification_filepath))
- generators.append(ObjCProtocolTypesImplementationGenerator(protocol, primary_specification_filepath))
+ generators.append(ObjCBackendDispatcherHeaderGenerator(*generator_arguments))
+ generators.append(ObjCBackendDispatcherImplementationGenerator(*generator_arguments))
+ generators.append(ObjCConfigurationHeaderGenerator(*generator_arguments))
+ generators.append(ObjCConfigurationImplementationGenerator(*generator_arguments))
+ generators.append(ObjCFrontendDispatcherImplementationGenerator(*generator_arguments))
+ generators.append(ObjCHeaderGenerator(*generator_arguments))
+ generators.append(ObjCInternalHeaderGenerator(*generator_arguments))
+ generators.append(ObjCProtocolTypeConversionsHeaderGenerator(*generator_arguments))
+ generators.append(ObjCProtocolTypesImplementationGenerator(*generator_arguments))
single_output_file_contents = []
@@ -216,6 +220,7 @@
if __name__ == '__main__':
allowed_framework_names = ['_javascript_Core', 'WebInspector', 'WebKit', 'Test']
+ allowed_platform_names = ['iOS', 'macOS', 'all', 'generic']
cli_parser = optparse.OptionParser(usage="usage: %prog [options] PrimaryProtocol.json [SupplementalProtocol.json ...]")
cli_parser.add_option("-o", "--outputDir", help="Directory where generated files should be written.")
cli_parser.add_option("--framework", type="choice", choices=allowed_framework_names, help="The framework that the primary specification belongs to.")
@@ -224,6 +229,7 @@
cli_parser.add_option("-t", "--test", action="" help="Enable test mode. Use unique output filenames created by prepending the input filename.")
cli_parser.add_option("--frontend", action="" help="Generate code for the frontend-side of the protocol only.")
cli_parser.add_option("--backend", action="" help="Generate code for the backend-side of the protocol only.")
+ cli_parser.add_option("--platform", default="generic", help="The platform of the backend being generated. For example, we compile WebKit2 for either macOS or iOS. This value is case-insensitive. Allowed values: %s" % ", ".join(allowed_platform_names))
options = None
arg_options, arg_values = cli_parser.parse_args()
@@ -249,6 +255,7 @@
'output_dirpath': arg_options.outputDir,
'concatenate_output': arg_options.test,
'framework_name': arg_options.framework,
+ 'platform_name': arg_options.platform,
'force_output': arg_options.force,
'generate_backend': generate_backend,
'generate_frontend': generate_frontend,