X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/4be4e30906bcb8ee30b4d189205cb70bad6707ce..81345200c95645a1b0d2635520f96ad55dfde63f:/inspector/scripts/CodeGeneratorInspector.py diff --git a/inspector/scripts/CodeGeneratorInspector.py b/inspector/scripts/CodeGeneratorInspector.py new file mode 100755 index 0000000..91fa8c9 --- /dev/null +++ b/inspector/scripts/CodeGeneratorInspector.py @@ -0,0 +1,2614 @@ +#!/usr/bin/env python +# Copyright (c) 2011 Google Inc. All rights reserved. +# Copyright (c) 2012 Intel Corporation. All rights reserved. +# Copyright (c) 2013 Apple Inc. All Rights Reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import os.path +import sys +import string +import optparse +import re +try: + import json +except ImportError: + import simplejson as json + +import CodeGeneratorInspectorStrings + + +DOMAIN_DEFINE_NAME_MAP = { + "Database": "SQL_DATABASE", + "IndexedDB": "INDEXED_DATABASE", + "Replay": "WEB_REPLAY", +} + + +# Manually-filled map of type name replacements. +TYPE_NAME_FIX_MAP = { + "RGBA": "Rgba", # RGBA is reported to be conflicting with a define name in Windows CE. + "": "Empty", +} + + +TYPES_WITH_RUNTIME_CAST_SET = frozenset(["Runtime.RemoteObject", "Runtime.PropertyDescriptor", "Runtime.InternalPropertyDescriptor", + "Debugger.FunctionDetails", "Debugger.CallFrame", + "Canvas.TraceLog", "Canvas.ResourceInfo", "Canvas.ResourceState", + # This should be a temporary hack. TimelineEvent should be created via generated C++ API. + "Timeline.TimelineEvent"]) + +TYPES_WITH_OPEN_FIELD_LIST_SET = frozenset(["Timeline.TimelineEvent", + # InspectorStyleSheet not only creates this property but wants to read it and modify it. + "CSS.CSSProperty", + # InspectorResourceAgent needs to update mime-type. + "Network.Response"]) + +EXACTLY_INT_SUPPORTED = False + +INSPECTOR_TYPES_GENERATOR_CONFIG_MAP = { + "JavaScript": { + "prefix": "JS", + "typebuilder_dependency": "", + "export_macro": "JS_EXPORT_PRIVATE", + }, + "Web": { + "prefix": "Web", + "typebuilder_dependency": "#include ", + "export_macro": "", + }, +} + +cmdline_parser = optparse.OptionParser(usage="usage: %prog [options] ") +cmdline_parser.add_option("--output_h_dir") +cmdline_parser.add_option("--output_cpp_dir") +cmdline_parser.add_option("--output_js_dir") +cmdline_parser.add_option("--output_type") # JavaScript, Web +cmdline_parser.add_option("--write_always", action="store_true") +cmdline_parser.add_option("--no_verification", action="store_true") + +try: + arg_options, arg_values = cmdline_parser.parse_args() + if (len(arg_values) < 1): + raise Exception("At least one plain argument expected") + + input_json_filename = arg_values[0] + dependency_json_filenames = arg_values[1:] + + output_header_dirname = arg_options.output_h_dir + output_cpp_dirname = arg_options.output_cpp_dir + output_js_dirname = arg_options.output_js_dir + output_type = arg_options.output_type + + write_always = arg_options.write_always + verification = not arg_options.no_verification + if not output_header_dirname: + raise Exception("Output .h directory must be specified") + if not output_cpp_dirname: + raise Exception("Output .cpp directory must be specified") + if not output_js_dirname: + raise Exception("Output .js directory must be specified") + if output_type not in INSPECTOR_TYPES_GENERATOR_CONFIG_MAP.keys(): + raise Exception("Unknown output type. Allowed types are: %s" % INSPECTOR_TYPES_GENERATOR_CONFIG_MAP.keys()) +except Exception: + # Work with python 2 and 3 http://docs.python.org/py3k/howto/pyporting.html + exc = sys.exc_info()[1] + sys.stderr.write("Failed to parse command-line arguments: %s\n\n" % exc) + sys.stderr.write("Usage: