Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2336)

Unified Diff: core/inspector/CodeGeneratorInspector.py

Issue 19605006: Roll IDL to multivm@1316 (Closed) Base URL: https://dart.googlecode.com/svn/third_party/WebCore
Patch Set: Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « core/html/track/TextTrackRegion.idl ('k') | core/inspector/CodeGeneratorInspectorStrings.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: core/inspector/CodeGeneratorInspector.py
diff --git a/core/inspector/CodeGeneratorInspector.py b/core/inspector/CodeGeneratorInspector.py
index 481682bcfeca44359f3c2c621361b87cc2f1774f..4c817968f7c51a01b16ec31025e60e8eeba77f83 100755
--- a/core/inspector/CodeGeneratorInspector.py
+++ b/core/inspector/CodeGeneratorInspector.py
@@ -226,7 +226,11 @@ class RawTypes(object):
@classmethod
def get_raw_validator_call_text(cls):
- return "RuntimeCastHelper::assertType<InspectorValue::Type%s>" % cls.get_validate_method_params().template_type
+ return "RuntimeCastHelper::assertType<JSONValue::Type%s>" % cls.get_validate_method_params().template_type
+
+ @staticmethod
+ def get_validate_method_params():
+ raise Exception("Abstract method")
class String(BaseType):
@staticmethod
@@ -236,6 +240,10 @@ class RawTypes(object):
get_setter_name = get_getter_name
@staticmethod
+ def get_constructor_pattern():
+ return "InspectorString::create(%s)"
+
+ @staticmethod
def get_c_initializer():
return "\"\""
@@ -271,6 +279,10 @@ class RawTypes(object):
return "Number"
@staticmethod
+ def get_constructor_pattern():
+ return "InspectorBasicValue::create(%s)"
+
+ @staticmethod
def get_c_initializer():
return "0"
@@ -304,6 +316,10 @@ class RawTypes(object):
return "Number"
@staticmethod
+ def get_constructor_pattern():
+ return "InspectorBasicValue::create(%s)"
+
+ @staticmethod
def get_c_initializer():
return "0"
@@ -337,6 +353,10 @@ class RawTypes(object):
get_setter_name = get_getter_name
@staticmethod
+ def get_constructor_pattern():
+ return "InspectorBasicValue::create(%s)"
+
+ @staticmethod
def get_c_initializer():
return "false"
@@ -372,8 +392,12 @@ class RawTypes(object):
return "Value"
@staticmethod
+ def get_constructor_pattern():
+ return "%s"
+
+ @staticmethod
def get_c_initializer():
- return "InspectorObject::create()"
+ return "JSONObject::create()"
@staticmethod
def get_output_argument_prefix():
@@ -395,7 +419,7 @@ class RawTypes(object):
@staticmethod
def get_array_item_raw_c_type_text():
- return "InspectorObject"
+ return "JSONObject"
@staticmethod
def get_raw_type_model():
@@ -413,6 +437,10 @@ class RawTypes(object):
raise Exception("Unsupported")
@staticmethod
+ def get_constructor_pattern():
+ raise Exception("Unsupported")
+
+ @staticmethod
def get_raw_validator_call_text():
return "RuntimeCastHelper::assertAny"
@@ -426,7 +454,7 @@ class RawTypes(object):
@staticmethod
def get_array_item_raw_c_type_text():
- return "InspectorValue"
+ return "JSONValue"
@staticmethod
def get_raw_type_model():
@@ -442,8 +470,12 @@ class RawTypes(object):
return "Value"
@staticmethod
+ def get_constructor_pattern():
+ return "%s"
+
+ @staticmethod
def get_c_initializer():
- return "InspectorArray::create()"
+ return "JSONArray::create()"
@staticmethod
def get_output_argument_prefix():
@@ -465,7 +497,7 @@ class RawTypes(object):
@staticmethod
def get_array_item_raw_c_type_text():
- return "InspectorArray"
+ return "JSONArray"
@staticmethod
def get_raw_type_model():
@@ -662,14 +694,14 @@ class TypeModel:
cls.Int = cls.ValueType("int", False)
cls.Number = cls.ValueType("double", False)
cls.String = cls.ValueType("String", True,)
- cls.Object = cls.RefPtrBased("InspectorObject")
- cls.Array = cls.RefPtrBased("InspectorArray")
- cls.Any = cls.RefPtrBased("InspectorValue")
+ cls.Object = cls.RefPtrBased("JSONObject")
+ cls.Array = cls.RefPtrBased("JSONArray")
+ cls.Any = cls.RefPtrBased("JSONValue")
TypeModel.init_class()
-# Collection of InspectorObject class methods that are likely to be overloaded in generated class.
+# Collection of JSONObject class methods that are likely to be overloaded in generated class.
# We must explicitly import all overloaded methods or they won't be available to user.
INSPECTOR_OBJECT_SETTER_NAMES = frozenset(["setValue", "setBoolean", "setNumber", "setString", "setValue", "setObject", "setArray"])
@@ -865,14 +897,14 @@ class TypeBindings:
if enum_binding_cls.need_internal_runtime_cast_:
writer.append("#if %s\n" % VALIDATOR_IFDEF_NAME)
- writer.newline(" static void assertCorrectValue(InspectorValue* value);\n")
+ writer.newline(" static void assertCorrectValue(JSONValue* value);\n")
writer.append("#endif // %s\n" % VALIDATOR_IFDEF_NAME)
validator_writer = generate_context.validator_writer
domain_fixes = DomainNameFixes.get_fixed_data(context_domain_name)
- validator_writer.newline("void %s%s::assertCorrectValue(InspectorValue* value)\n" % (helper.full_name_prefix_for_impl, enum_name))
+ validator_writer.newline("void %s%s::assertCorrectValue(JSONValue* value)\n" % (helper.full_name_prefix_for_impl, enum_name))
validator_writer.newline("{\n")
validator_writer.newline(" WTF::String s;\n")
validator_writer.newline(" bool cast_res = value->asString(&s);\n")
@@ -1018,7 +1050,7 @@ class TypeBindings:
@classmethod
def get_array_item_c_type_text(cls):
- return "const %s%s&" % (helper.full_name_prefix_for_use, fixed_type_name.class_name)
+ return "%s%s" % (helper.full_name_prefix_for_use, fixed_type_name.class_name)
return TypedefString
@@ -1103,9 +1135,9 @@ class TypeBindings:
writer.append(class_name)
writer.append(" : public ")
if is_open_type:
- writer.append("InspectorObject")
+ writer.append("JSONObject")
else:
- writer.append("InspectorObjectBase")
+ writer.append("JSONObjectBase")
writer.append(" {\n")
writer.newline("public:\n")
ad_hoc_type_writer = writer.insert_writer(" ")
@@ -1182,25 +1214,25 @@ class TypeBindings:
if setter_name in INSPECTOR_OBJECT_SETTER_NAMES:
- writer.newline(" using InspectorObjectBase::%s;\n\n" % setter_name)
+ writer.newline(" using JSONObjectBase::%s;\n\n" % setter_name)
if class_binding_cls.need_user_runtime_cast_:
- writer.newline(" static PassRefPtr<%s> runtimeCast(PassRefPtr<InspectorValue> value)\n" % class_name)
+ writer.newline(" static PassRefPtr<%s> runtimeCast(PassRefPtr<JSONValue> value)\n" % class_name)
writer.newline(" {\n")
- writer.newline(" RefPtr<InspectorObject> object;\n")
+ writer.newline(" RefPtr<JSONObject> object;\n")
writer.newline(" bool castRes = value->asObject(&object);\n")
writer.newline(" ASSERT_UNUSED(castRes, castRes);\n")
writer.append("#if %s\n" % VALIDATOR_IFDEF_NAME)
writer.newline(" assertCorrectValue(object.get());\n")
writer.append("#endif // %s\n" % VALIDATOR_IFDEF_NAME)
- writer.newline(" COMPILE_ASSERT(sizeof(%s) == sizeof(InspectorObjectBase), type_cast_problem);\n" % class_name)
- writer.newline(" return static_cast<%s*>(static_cast<InspectorObjectBase*>(object.get()));\n" % class_name)
+ writer.newline(" COMPILE_ASSERT(sizeof(%s) == sizeof(JSONObjectBase), type_cast_problem);\n" % class_name)
+ writer.newline(" return static_cast<%s*>(static_cast<JSONObjectBase*>(object.get()));\n" % class_name)
writer.newline(" }\n")
writer.append("\n")
if class_binding_cls.need_internal_runtime_cast_:
writer.append("#if %s\n" % VALIDATOR_IFDEF_NAME)
- writer.newline(" static void assertCorrectValue(InspectorValue* value);\n")
+ writer.newline(" static void assertCorrectValue(JSONValue* value);\n")
writer.append("#endif // %s\n" % VALIDATOR_IFDEF_NAME)
closed_field_set = (context_domain_name + "." + class_name) not in TYPES_WITH_OPEN_FIELD_LIST_SET
@@ -1209,15 +1241,15 @@ class TypeBindings:
domain_fixes = DomainNameFixes.get_fixed_data(context_domain_name)
- validator_writer.newline("void %s%s::assertCorrectValue(InspectorValue* value)\n" % (helper.full_name_prefix_for_impl, class_name))
+ validator_writer.newline("void %s%s::assertCorrectValue(JSONValue* value)\n" % (helper.full_name_prefix_for_impl, class_name))
validator_writer.newline("{\n")
- validator_writer.newline(" RefPtr<InspectorObject> object;\n")
+ validator_writer.newline(" RefPtr<JSONObject> object;\n")
validator_writer.newline(" bool castRes = value->asObject(&object);\n")
validator_writer.newline(" ASSERT_UNUSED(castRes, castRes);\n")
for prop_data in resolve_data.main_properties:
validator_writer.newline(" {\n")
it_name = "%sPos" % prop_data.p["name"]
- validator_writer.newline(" InspectorObject::iterator %s;\n" % it_name)
+ validator_writer.newline(" JSONObject::iterator %s;\n" % it_name)
validator_writer.newline(" %s = object->find(\"%s\");\n" % (it_name, prop_data.p["name"]))
validator_writer.newline(" ASSERT(%s != object->end());\n" % it_name)
validator_writer.newline(" %s(%s->value.get());\n" % (prop_data.param_type_binding.get_validator_call_text(), it_name))
@@ -1229,7 +1261,7 @@ class TypeBindings:
for prop_data in resolve_data.optional_properties:
validator_writer.newline(" {\n")
it_name = "%sPos" % prop_data.p["name"]
- validator_writer.newline(" InspectorObject::iterator %s;\n" % it_name)
+ validator_writer.newline(" JSONObject::iterator %s;\n" % it_name)
validator_writer.newline(" %s = object->find(\"%s\");\n" % (it_name, prop_data.p["name"]))
validator_writer.newline(" if (%s != object->end()) {\n" % it_name)
validator_writer.newline(" %s(%s->value.get());\n" % (prop_data.param_type_binding.get_validator_call_text(), it_name))
@@ -1340,7 +1372,7 @@ class TypeBindings:
@staticmethod
def get_validator_call_text():
- return "RuntimeCastHelper::assertType<InspectorValue::TypeObject>"
+ return "RuntimeCastHelper::assertType<JSONValue::TypeObject>"
@classmethod
def get_array_item_c_type_text(cls):
@@ -1650,7 +1682,8 @@ class Templates:
frontend_domain_class = string.Template(CodeGeneratorInspectorStrings.frontend_domain_class)
backend_method = string.Template(CodeGeneratorInspectorStrings.backend_method)
frontend_method = string.Template(CodeGeneratorInspectorStrings.frontend_method)
- callback_method = string.Template(CodeGeneratorInspectorStrings.callback_method)
+ callback_main_methods = string.Template(CodeGeneratorInspectorStrings.callback_main_methods)
+ callback_failure_method = string.Template(CodeGeneratorInspectorStrings.callback_failure_method)
frontend_h = string.Template(file_header_ + CodeGeneratorInspectorStrings.frontend_h)
backend_h = string.Template(file_header_ + CodeGeneratorInspectorStrings.backend_h)
backend_cpp = string.Template(file_header_ + CodeGeneratorInspectorStrings.backend_cpp)
@@ -1839,7 +1872,7 @@ class Generator:
class EventMethodStructTemplate:
@staticmethod
def append_prolog(line_list):
- line_list.append(" RefPtr<InspectorObject> paramsObject = InspectorObject::create();\n")
+ line_list.append(" RefPtr<JSONObject> paramsObject = JSONObject::create();\n")
@staticmethod
def append_epilog(line_list):
@@ -1855,7 +1888,7 @@ class Generator:
Generator.method_name_enum_list.append(" %s," % cmd_enum_name)
Generator.method_handler_list.append(" &InspectorBackendDispatcherImpl::%s_%s," % (domain_name, json_command_name))
- Generator.backend_method_declaration_list.append(" void %s_%s(long callId, InspectorObject* requestMessageObject);" % (domain_name, json_command_name))
+ Generator.backend_method_declaration_list.append(" void %s_%s(long callId, JSONObject* requestMessageObject);" % (domain_name, json_command_name))
ad_hoc_type_output = []
Generator.backend_agent_interface_list.append(ad_hoc_type_output)
@@ -1866,13 +1899,34 @@ class Generator:
method_in_code = ""
method_out_code = ""
agent_call_param_list = []
- response_cook_list = []
request_message_param = ""
+ normal_response_cook_text = ""
+ error_response_cook_text = ""
+ error_type_binding = None
+ if "error" in json_command:
+ json_error = json_command["error"]
+ error_type_binding = Generator.resolve_type_and_generate_ad_hoc(json_error, json_command_name + "Error", json_command_name, domain_name, ad_hoc_type_writer, agent_interface_name + "::")
+ error_type_model = error_type_binding.get_type_model().get_optional()
+ error_annotated_type = error_type_model.get_command_return_pass_model().get_output_parameter_type()
+ agent_call_param_list.append(", %serrorData" % error_type_model.get_command_return_pass_model().get_output_argument_prefix())
+ Generator.backend_agent_interface_list.append(", %s errorData" % error_annotated_type)
+ method_in_code += " %s errorData;\n" % error_type_model.get_command_return_pass_model().get_return_var_type()
+
+ setter_argument = error_type_model.get_command_return_pass_model().get_output_to_raw_expression() % "errorData"
+ if error_type_binding.get_setter_value_expression_pattern():
+ setter_argument = error_type_binding.get_setter_value_expression_pattern() % setter_argument
+ error_assigment_value = error_type_binding.reduce_to_raw_type().get_constructor_pattern() % setter_argument
+
+ cook = " resultErrorData = %s;\n" % error_assigment_value
+
+ error_condition_pattern = error_type_model.get_command_return_pass_model().get_set_return_condition()
+ cook = (" if (%s)\n " % (error_condition_pattern % "errorData")) + cook
+ error_response_cook_text = " if (error.length()) {\n" + cook + " }\n"
+
if "parameters" in json_command:
json_params = json_command["parameters"]
method_in_code += Templates.param_container_access_code
request_message_param = " requestMessageObject"
- js_param_list = []
for json_parameter in json_params:
json_param_name = json_parameter["name"]
@@ -1909,7 +1963,6 @@ class Generator:
agent_call_param_list.append(param)
Generator.backend_agent_interface_list.append(", %s in_%s" % (formal_param_type_pattern % non_optional_type_model.get_command_return_pass_model().get_return_var_type(), json_param_name))
- response_cook_text = ""
if json_command.get("async") == True:
callback_name = Capitalizer.lower_camel_case_to_upper(json_command_name) + "Callback"
@@ -1920,33 +1973,51 @@ class Generator:
Generator.generate_send_method(json_command.get("returns"), json_command_name, domain_name, ad_hoc_type_writer,
decl_parameter_list,
Generator.CallbackMethodStructTemplate,
- Generator.backend_method_implementation_list, Templates.callback_method,
+ Generator.backend_method_implementation_list, Templates.callback_main_methods,
{"callbackName": callback_name, "agentName": agent_interface_name})
callback_writer.newline("class " + callback_name + " : public CallbackBase {\n")
callback_writer.newline("public:\n")
callback_writer.newline(" " + callback_name + "(PassRefPtr<InspectorBackendDispatcherImpl>, int id);\n")
callback_writer.newline(" void sendSuccess(" + ", ".join(decl_parameter_list) + ");\n")
+ error_part_writer = callback_writer.insert_writer("")
callback_writer.newline("};\n")
+ if error_type_binding:
+ annotated_type = error_type_model.get_input_param_type_text()
+ error_part_writer.newline(" void sendFailure(const ErrorString&, %s);\n" % annotated_type)
+ error_part_writer.newline(" using CallbackBase::sendFailure;\n")
+
+ assigment_value = error_type_model.get_event_setter_expression_pattern() % "errorData"
+ assigment_value = error_type_binding.reduce_to_raw_type().get_constructor_pattern() % assigment_value
+
+ Generator.backend_method_implementation_list.append(Templates.callback_failure_method.substitute(None,
+ agentName=agent_interface_name,
+ callbackName=callback_name,
+ parameter=annotated_type + " errorData",
+ argument=assigment_value))
+
+
+
ad_hoc_type_output.append(callback_output)
method_out_code += " RefPtr<" + agent_interface_name + "::" + callback_name + "> callback = adoptRef(new " + agent_interface_name + "::" + callback_name + "(this, callId));\n"
agent_call_param_list.append(", callback")
- response_cook_text += " if (!error.length()) \n"
- response_cook_text += " return;\n"
- response_cook_text += " callback->disable();\n"
+ normal_response_cook_text += " if (!error.length()) \n"
+ normal_response_cook_text += " return;\n"
+ normal_response_cook_text += " callback->disable();\n"
Generator.backend_agent_interface_list.append(", PassRefPtr<%s> callback" % callback_name)
else:
if "returns" in json_command:
method_out_code += "\n"
+ response_cook_list = []
for json_return in json_command["returns"]:
json_return_name = json_return["name"]
optional = bool(json_return.get("optional"))
- return_type_binding = Generator.resolve_type_and_generate_ad_hoc(json_return, json_command_name, domain_name, ad_hoc_type_writer, agent_interface_name + "::")
+ return_type_binding = Generator.resolve_param_type_and_generate_ad_hoc(json_return, json_command_name, domain_name, ad_hoc_type_writer, agent_interface_name + "::")
raw_type = return_type_binding.reduce_to_raw_type()
setter_type = raw_type.get_setter_name()
@@ -1971,7 +2042,7 @@ class Generator:
cook = (" if (%s)\n " % (set_condition_pattern % var_name)) + cook
annotated_type = type_model.get_command_return_pass_model().get_output_parameter_type()
- param_name = "out_%s" % json_return_name
+ param_name = var_name
if optional:
param_name = "opt_" + param_name
@@ -1981,10 +2052,10 @@ class Generator:
method_out_code += code
agent_call_param_list.append(param)
- response_cook_text = "".join(response_cook_list)
+ normal_response_cook_text += "".join(response_cook_list)
- if len(response_cook_text) != 0:
- response_cook_text = " if (!error.length()) {\n" + response_cook_text + " }"
+ if len(normal_response_cook_text) != 0:
+ normal_response_cook_text = " if (!error.length()) {\n" + normal_response_cook_text + " }"
Generator.backend_method_implementation_list.append(Templates.backend_method.substitute(None,
domainName=domain_name, methodName=json_command_name,
@@ -1993,7 +2064,8 @@ class Generator:
methodOutCode=method_out_code,
agentCallParams="".join(agent_call_param_list),
requestMessageObject=request_message_param,
- responseCook=response_cook_text,
+ responseCook=normal_response_cook_text,
+ errorCook=error_response_cook_text,
commandNameIndex=cmd_enum_name))
Generator.backend_method_name_declaration_list.append(" \"%s.%s\"," % (domain_name, json_command_name))
@@ -2021,7 +2093,7 @@ class Generator:
for json_parameter in parameters:
parameter_name = json_parameter["name"]
- param_type_binding = Generator.resolve_type_and_generate_ad_hoc(json_parameter, event_name, domain_name, ad_hoc_type_writer, "")
+ param_type_binding = Generator.resolve_param_type_and_generate_ad_hoc(json_parameter, event_name, domain_name, ad_hoc_type_writer, "")
raw_type = param_type_binding.reduce_to_raw_type()
raw_type_binding = RawTypeBinding(raw_type)
@@ -2057,9 +2129,13 @@ class Generator:
parameters=", ".join(decl_parameter_list),
code="".join(method_line_list), **template_params))
- @staticmethod
- def resolve_type_and_generate_ad_hoc(json_param, method_name, domain_name, ad_hoc_type_writer, container_relative_name_prefix_param):
+ @classmethod
+ def resolve_param_type_and_generate_ad_hoc(cls, json_param, method_name, domain_name, ad_hoc_type_writer, container_relative_name_prefix_param):
param_name = json_param["name"]
+ return cls.resolve_type_and_generate_ad_hoc(json_param, param_name, method_name, domain_name, ad_hoc_type_writer, container_relative_name_prefix_param)
+
+ @staticmethod
+ def resolve_type_and_generate_ad_hoc(typable_element, element_name, method_name, domain_name, ad_hoc_type_writer, container_relative_name_prefix_param):
ad_hoc_type_list = []
class AdHocTypeContext:
@@ -2069,11 +2145,11 @@ class Generator:
@staticmethod
def get_type_name_fix():
class NameFix:
- class_name = Capitalizer.lower_camel_case_to_upper(param_name)
+ class_name = Capitalizer.lower_camel_case_to_upper(element_name)
@staticmethod
def output_comment(writer):
- writer.newline("// Named after parameter '%s' while generating command/event %s.\n" % (param_name, method_name))
+ writer.newline("// Named after parameter '%s' while generating command/event %s.\n" % (element_name, method_name))
return NameFix
@@ -2081,7 +2157,7 @@ class Generator:
def add_type(binding):
ad_hoc_type_list.append(binding)
- type_binding = resolve_param_type(json_param, domain_name, AdHocTypeContext)
+ type_binding = resolve_param_type(typable_element, domain_name, AdHocTypeContext)
class InterfaceForwardListener:
@staticmethod
« no previous file with comments | « core/html/track/TextTrackRegion.idl ('k') | core/inspector/CodeGeneratorInspectorStrings.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698