Diff
Modified: trunk/Source/WebCore/ChangeLog (119584 => 119585)
--- trunk/Source/WebCore/ChangeLog 2012-06-06 11:34:45 UTC (rev 119584)
+++ trunk/Source/WebCore/ChangeLog 2012-06-06 11:37:02 UTC (rev 119585)
@@ -1,3 +1,23 @@
+2012-05-25 Vsevolod Vlasov <[email protected]>
+
+ Web Inspector: [Compiler] Remove compile-front-end.sh and fix InjectedScriptSource errors.
+ https://bugs.webkit.org/show_bug.cgi?id=87512
+
+ Reviewed by Yury Semikhatsky.
+
+ Removed compile-front-end.sh, compile-front-end.py should be used instead now.
+ Made generate_protocol_externs a python module to call it from compile-front-end.py.
+ Temporary copy of InjectedScriptSource.js is created and modified to
+ avoid "This code lacks side effects" warning.
+
+ * inspector/compile-front-end.py:
+ * inspector/compile-front-end.sh: Removed.
+ * inspector/generate-protocol-externs: Removed.
+ * inspector/generate_protocol_externs.py: Added.
+ (full_qualified_type_id):
+ (param_type):
+ (generate_protocol_externs):
+
2012-06-06 Zoltan Herczeg <[email protected]>
[Qt] REGRESSION(r118616): It made all tests crash in debug mode
Modified: trunk/Source/WebCore/inspector/compile-front-end.py (119584 => 119585)
--- trunk/Source/WebCore/inspector/compile-front-end.py 2012-06-06 11:34:45 UTC (rev 119584)
+++ trunk/Source/WebCore/inspector/compile-front-end.py 2012-06-06 11:37:02 UTC (rev 119585)
@@ -28,8 +28,14 @@
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import os
+import os.path
+import generate_protocol_externs
-inspector_frontend_path = "Source/WebCore/inspector/front-end"
+inspector_path = "Source/WebCore/inspector"
+inspector_frontend_path = inspector_path + "/front-end"
+
+generate_protocol_externs.generate_protocol_externs(inspector_frontend_path + "/protocol-externs.js", inspector_path + "/Inspector.json")
+
externs = ["externs.js", "protocol-externs.js"]
jsmodule_name_prefix = "jsmodule_"
modules = [
@@ -330,7 +336,9 @@
# _javascript_Formatter
# ScriptFormatterWorker
-command = "java -jar ~/closure/compiler.jar --summary_detail_level 3 --compilation_level SIMPLE_OPTIMIZATIONS --warning_level VERBOSE --language_in ECMASCRIPT5 --accept_const_keyword \\\n"
+compiler_command = "java -jar ~/closure/compiler.jar --summary_detail_level 3 --compilation_level SIMPLE_OPTIMIZATIONS --warning_level VERBOSE --language_in ECMASCRIPT5 --accept_const_keyword \\\n"
+
+command = compiler_command
for extern in externs:
command += " --externs " + inspector_frontend_path + "/" + extern
command += " \\\n"
@@ -350,5 +358,15 @@
command += " --js " + inspector_frontend_path + "/" + script
command += " \\\n"
command += "\n"
+os.system(command)
+print "Compiling InjectedScriptSource.js..."
+os.system("echo \"var injectedScriptValue = \" > " + inspector_path + "/" + "InjectedScriptSourceTmp.js")
+os.system("cat " + inspector_path + "/" + "InjectedScriptSource.js" + " >> " + inspector_path + "/" + "InjectedScriptSourceTmp.js")
+command = compiler_command
+command += " --externs " + inspector_path + "/" + "InjectedScriptExterns.js" + " \\\n"
+command += " --module " + jsmodule_name_prefix + "injected_script" + ":" + "1" + " \\\n"
+command += " --js " + inspector_path + "/" + "InjectedScriptSourceTmp.js" + " \\\n"
+command += "\n"
os.system(command)
+os.system("rm " + inspector_path + "/" + "InjectedScriptSourceTmp.js")
Deleted: trunk/Source/WebCore/inspector/compile-front-end.sh (119584 => 119585)
--- trunk/Source/WebCore/inspector/compile-front-end.sh 2012-06-06 11:34:45 UTC (rev 119584)
+++ trunk/Source/WebCore/inspector/compile-front-end.sh 2012-06-06 11:37:02 UTC (rev 119585)
@@ -1,44 +0,0 @@
-#!/bin/sh
-# Copyright (C) 2011 Google 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.
-#
-# Compiles WebKit Web Inspector front-end.
-
-python Source/WebCore/inspector/generate-protocol-externs -o Source/WebCore/inspector/front-end/protocol-externs.js Source/WebCore/inspector/Inspector.json
-python Source/WebCore/inspector/compile-front-end.py
-
-echo "Compiling InjectedScriptSource.js..."
-java -jar ~/closure/compiler.jar\
- --summary_detail_level 3\
- --compilation_level SIMPLE_OPTIMIZATIONS\
- --warning_level VERBOSE\
- --language_in ECMASCRIPT5\
- --accept_const_keyword\
- --module injected_script:1\
- --js Source/WebCore/inspector/InjectedScriptSource.js\
- --externs Source/WebCore/inspector/InjectedScriptExterns.js
Deleted: trunk/Source/WebCore/inspector/generate-protocol-externs (119584 => 119585)
--- trunk/Source/WebCore/inspector/generate-protocol-externs 2012-06-06 11:34:45 UTC (rev 119584)
+++ trunk/Source/WebCore/inspector/generate-protocol-externs 2012-06-06 11:37:02 UTC (rev 119585)
@@ -1,165 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 Google 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
-
-program_name = os.path.basename(__file__)
-if len(sys.argv) < 4 or sys.argv[1] != "-o":
- sys.stderr.write("Usage: %s -o OUTPUT_FILE INPUT_FILE\n" % program_name)
- exit(1)
-
-output_path = sys.argv[2]
-input_path = sys.argv[3]
-
-input_file = open(input_path, "r")
-json_string = input_file.read()
-json_string = json_string.replace(": true", ": True")
-json_string = json_string.replace(": false", ": False")
-json_api = eval(json_string)["domains"]
-
-output_file = open(output_path, "w")
-
-output_file.write("""
-var Protocol = {};
-/** @typedef {string}*/
-Protocol.Error;
-""")
-
-type_traits = {
- "any": "*",
- "string": "string",
- "integer": "number",
- "number": "number",
- "boolean": "boolean",
- "array": "Array.<*>",
- "object": "Object"
-}
-
-ref_types = {}
-
-def full_qualified_type_id(domain_name, type_id):
- if type_id.find(".") == -1:
- return "%s.%s" % (domain_name, type_id)
- return type_id
-
-def dash_to_camelcase(word):
- return "".join(x.capitalize() or "-" for x in word.split("-"))
-
-def param_type(domain_name, param):
- if "type" in param:
- if param["type"] == "array":
- items = param["items"]
- return "Array.<%s>" % param_type(domain_name, items)
- else:
- return type_traits[param["type"]]
- if "$ref" in param:
- type_id = full_qualified_type_id(domain_name, param["$ref"])
- if type_id in ref_types:
- return ref_types[type_id]
- else:
- print "Type not found: " + type_id
- return "!! Type not found: " + type_id
-
-for domain in json_api:
- domain_name = domain["domain"]
- if "types" in domain:
- for type in domain["types"]:
- type_id = full_qualified_type_id(domain_name, type["id"])
- ref_types[type_id] = "%sAgent.%s" % (domain_name, type["id"])
-
-for domain in json_api:
- domain_name = domain["domain"]
- output_file.write("\n\n\nvar %sAgent = {};\n" % domain_name)
- if "types" in domain:
- for type in domain["types"]:
- if type["type"] == "object":
- output_file.write("\n/** @constructor */\n")
- output_file.write("%sAgent.%s = function()\n{\n" % (domain_name, type["id"]))
- if "properties" in type:
- for property in type["properties"]:
- suffix = ""
- if ("optional" in property):
- suffix = "|undefined"
- output_file.write("/** @type {%s%s} */ this.%s;\n" % (param_type(domain_name, property), suffix, property["name"]))
- output_file.write("}\n")
- elif type["type"] == "array":
- suffix = ""
- if ("optional" in property):
- suffix = "|undefined"
- output_file.write("\n/** @typedef {Array.<%s>%s} */\n%sAgent.%s;\n" % (param_type(domain_name, type["items"]), suffix, domain_name, type["id"]))
- else:
- output_file.write("\n/** @typedef {%s} */\n%sAgent.%s;\n" % (type_traits[type["type"]], domain_name, type["id"]))
-
-
- if "commands" in domain:
- for command in domain["commands"]:
- output_file.write("\n/**\n")
- params = []
- if ("parameters" in command):
- for in_param in command["parameters"]:
- if ("optional" in in_param):
- params.append("opt_%s" % in_param["name"])
- output_file.write(" * @param {%s=} opt_%s\n" % (param_type(domain_name, in_param), in_param["name"]))
- else:
- params.append(in_param["name"])
- output_file.write(" * @param {%s} %s\n" % (param_type(domain_name, in_param), in_param["name"]))
- returns = ["?Protocol.Error"]
- if ("returns" in command):
- for out_param in command["returns"]:
- if ("optional" in out_param):
- returns.append("%s=" % param_type(domain_name, out_param))
- else:
- returns.append("%s" % param_type(domain_name, out_param))
- output_file.write(" * @param {function(%s):void=} opt_callback\n" % ", ".join(returns))
- output_file.write(" */\n")
- params.append("opt_callback");
- output_file.write("%sAgent.%s = function(%s) {}\n" % (domain_name, command["name"], ", ".join(params)))
- output_file.write("/** @param {function(%s):void=} opt_callback */\n" % ", ".join(returns))
- output_file.write("%sAgent.%s.invoke = function(obj, opt_callback) {}\n" % (domain_name, command["name"]))
-
- output_file.write("/** @interface */\n")
- output_file.write("%sAgent.Dispatcher = function() {};\n" % domain_name)
- if "events" in domain:
- for event in domain["events"]:
- params = []
- if ("parameters" in event):
- output_file.write("/**\n")
- for param in event["parameters"]:
- if ("optional" in param):
- params.append("opt_%s" % param["name"])
- output_file.write(" * @param {%s=} opt_%s\n" % (param_type(domain_name, param), param["name"]))
- else:
- params.append(param["name"])
- output_file.write(" * @param {%s} %s\n" % (param_type(domain_name, param), param["name"]))
- output_file.write(" */\n")
- output_file.write("%sAgent.Dispatcher.prototype.%s = function(%s) {};\n" % (domain_name, event["name"], ", ".join(params)));
- output_file.write("/**\n * @param {%sAgent.Dispatcher} dispatcher\n */\n" % domain_name)
- output_file.write("InspectorBackend.register%sDispatcher = function(dispatcher) {}\n" % domain_name);
-output_file.close()
Added: trunk/Source/WebCore/inspector/generate_protocol_externs.py (0 => 119585)
--- trunk/Source/WebCore/inspector/generate_protocol_externs.py (rev 0)
+++ trunk/Source/WebCore/inspector/generate_protocol_externs.py 2012-06-06 11:37:02 UTC (rev 119585)
@@ -0,0 +1,166 @@
+#!/usr/bin/env python
+# Copyright (c) 2011 Google 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.
+
+type_traits = {
+ "any": "*",
+ "string": "string",
+ "integer": "number",
+ "number": "number",
+ "boolean": "boolean",
+ "array": "Array.<*>",
+ "object": "Object",
+}
+
+ref_types = {}
+
+
+def full_qualified_type_id(domain_name, type_id):
+ if type_id.find(".") == -1:
+ return "%s.%s" % (domain_name, type_id)
+ return type_id
+
+
+def param_type(domain_name, param):
+ if "type" in param:
+ if param["type"] == "array":
+ items = param["items"]
+ return "Array.<%s>" % param_type(domain_name, items)
+ else:
+ return type_traits[param["type"]]
+ if "$ref" in param:
+ type_id = full_qualified_type_id(domain_name, param["$ref"])
+ if type_id in ref_types:
+ return ref_types[type_id]
+ else:
+ print "Type not found: " + type_id
+ return "!! Type not found: " + type_id
+
+
+def generate_protocol_externs(output_path, input_path):
+ input_file = open(input_path, "r")
+ json_string = input_file.read()
+ json_string = json_string.replace(": true", ": True")
+ json_string = json_string.replace(": false", ": False")
+ json_api = eval(json_string)["domains"]
+
+ output_file = open(output_path, "w")
+
+ output_file.write(
+"""
+var Protocol = {};
+/** @typedef {string}*/
+Protocol.Error;
+""")
+
+ for domain in json_api:
+ domain_name = domain["domain"]
+ if "types" in domain:
+ for type in domain["types"]:
+ type_id = full_qualified_type_id(domain_name, type["id"])
+ ref_types[type_id] = "%sAgent.%s" % (domain_name, type["id"])
+
+ for domain in json_api:
+ domain_name = domain["domain"]
+ output_file.write("\n\n\nvar %sAgent = {};\n" % domain_name)
+ if "types" in domain:
+ for type in domain["types"]:
+ if type["type"] == "object":
+ output_file.write("\n/** @constructor */\n")
+ output_file.write("%sAgent.%s = function()\n{\n" % (domain_name, type["id"]))
+ if "properties" in type:
+ for property in type["properties"]:
+ suffix = ""
+ if ("optional" in property):
+ suffix = "|undefined"
+ output_file.write("/** @type {%s%s} */ this.%s;\n" % (param_type(domain_name, property), suffix, property["name"]))
+ output_file.write("}\n")
+ elif type["type"] == "array":
+ suffix = ""
+ if ("optional" in property):
+ suffix = "|undefined"
+ output_file.write("\n/** @typedef {Array.<%s>%s} */\n%sAgent.%s;\n" % (param_type(domain_name, type["items"]), suffix, domain_name, type["id"]))
+ else:
+ output_file.write("\n/** @typedef {%s} */\n%sAgent.%s;\n" % (type_traits[type["type"]], domain_name, type["id"]))
+
+ if "commands" in domain:
+ for command in domain["commands"]:
+ output_file.write("\n/**\n")
+ params = []
+ if ("parameters" in command):
+ for in_param in command["parameters"]:
+ if ("optional" in in_param):
+ params.append("opt_%s" % in_param["name"])
+ output_file.write(" * @param {%s=} opt_%s\n" % (param_type(domain_name, in_param), in_param["name"]))
+ else:
+ params.append(in_param["name"])
+ output_file.write(" * @param {%s} %s\n" % (param_type(domain_name, in_param), in_param["name"]))
+ returns = ["?Protocol.Error"]
+ if ("returns" in command):
+ for out_param in command["returns"]:
+ if ("optional" in out_param):
+ returns.append("%s=" % param_type(domain_name, out_param))
+ else:
+ returns.append("%s" % param_type(domain_name, out_param))
+ output_file.write(" * @param {function(%s):void=} opt_callback\n" % ", ".join(returns))
+ output_file.write(" */\n")
+ params.append("opt_callback")
+ output_file.write("%sAgent.%s = function(%s) {}\n" % (domain_name, command["name"], ", ".join(params)))
+ output_file.write("/** @param {function(%s):void=} opt_callback */\n" % ", ".join(returns))
+ output_file.write("%sAgent.%s.invoke = function(obj, opt_callback) {}\n" % (domain_name, command["name"]))
+
+ output_file.write("/** @interface */\n")
+ output_file.write("%sAgent.Dispatcher = function() {};\n" % domain_name)
+ if "events" in domain:
+ for event in domain["events"]:
+ params = []
+ if ("parameters" in event):
+ output_file.write("/**\n")
+ for param in event["parameters"]:
+ if ("optional" in param):
+ params.append("opt_%s" % param["name"])
+ output_file.write(" * @param {%s=} opt_%s\n" % (param_type(domain_name, param), param["name"]))
+ else:
+ params.append(param["name"])
+ output_file.write(" * @param {%s} %s\n" % (param_type(domain_name, param), param["name"]))
+ output_file.write(" */\n")
+ output_file.write("%sAgent.Dispatcher.prototype.%s = function(%s) {};\n" % (domain_name, event["name"], ", ".join(params)))
+ output_file.write("/**\n * @param {%sAgent.Dispatcher} dispatcher\n */\n" % domain_name)
+ output_file.write("InspectorBackend.register%sDispatcher = function(dispatcher) {}\n" % domain_name)
+ output_file.close()
+
+if __name__ == "__main__":
+ import sys
+ import os.path
+ program_name = os.path.basename(__file__)
+ if len(sys.argv) < 4 or sys.argv[1] != "-o":
+ sys.stderr.write("Usage: %s -o OUTPUT_FILE INPUT_FILE\n" % program_name)
+ exit(1)
+ output_path = sys.argv[2]
+ input_path = sys.argv[3]
+ generate_protocol_externs(output_path, input_path)
Property changes on: trunk/Source/WebCore/inspector/generate_protocol_externs.py
___________________________________________________________________
Added: svn:executable
Added: svn:eol-style