Index: core/inspector/CodeGeneratorInspector.py |
diff --git a/core/inspector/CodeGeneratorInspector.py b/core/inspector/CodeGeneratorInspector.py |
index 7d4be1842e639bec39a1c8cb1b33951a10340f73..5d02acf8e2cad8b486bbd87f7c6f48854d328a61 100755 |
--- a/core/inspector/CodeGeneratorInspector.py |
+++ b/core/inspector/CodeGeneratorInspector.py |
@@ -48,7 +48,7 @@ TYPE_NAME_FIX_MAP = { |
TYPES_WITH_RUNTIME_CAST_SET = frozenset(["Runtime.RemoteObject", "Runtime.PropertyDescriptor", "Runtime.InternalPropertyDescriptor", |
- "Debugger.FunctionDetails", "Debugger.CallFrame", "Debugger.Location", |
+ "Debugger.FunctionDetails", "Debugger.CollectionEntry", "Debugger.CallFrame", "Debugger.Location", |
"Canvas.TraceLog", "Canvas.ResourceState"]) |
TYPES_WITH_OPEN_FIELD_LIST_SET = frozenset([ |
@@ -57,8 +57,6 @@ TYPES_WITH_OPEN_FIELD_LIST_SET = frozenset([ |
# InspectorResourceAgent needs to update mime-type. |
"Network.Response"]) |
-EXACTLY_INT_SUPPORTED = False |
- |
cmdline_parser = optparse.OptionParser() |
cmdline_parser.add_option("--output_dir") |
@@ -117,58 +115,15 @@ class Capitalizer: |
str = possible_abbreviation.lower() + str[pos:] |
return str |
- @staticmethod |
- def camel_case_to_capitalized_with_underscores(str): |
- if len(str) == 0: |
- return str |
- output = Capitalizer.split_camel_case_(str) |
- return "_".join(output).upper() |
- |
- @staticmethod |
- def split_camel_case_(str): |
- output = [] |
- pos_being = 0 |
- pos = 1 |
- has_oneletter = False |
- while pos < len(str): |
- if str[pos].isupper(): |
- output.append(str[pos_being:pos].upper()) |
- if pos - pos_being == 1: |
- has_oneletter = True |
- pos_being = pos |
- pos += 1 |
- output.append(str[pos_being:]) |
- if has_oneletter: |
- array_pos = 0 |
- while array_pos < len(output) - 1: |
- if len(output[array_pos]) == 1: |
- array_pos_end = array_pos + 1 |
- while array_pos_end < len(output) and len(output[array_pos_end]) == 1: |
- array_pos_end += 1 |
- if array_pos_end - array_pos > 1: |
- possible_abbreviation = "".join(output[array_pos:array_pos_end]) |
- if possible_abbreviation.upper() in Capitalizer.ABBREVIATION: |
- output[array_pos:array_pos_end] = [possible_abbreviation] |
- else: |
- array_pos = array_pos_end - 1 |
- array_pos += 1 |
- return output |
- |
ABBREVIATION = frozenset(["XHR", "DOM", "CSS"]) |
VALIDATOR_IFDEF_NAME = "ENABLE(ASSERT)" |
class DomainNameFixes: |
- @classmethod |
- def get_fixed_data(cls, domain_name): |
- field_name_res = Capitalizer.upper_camel_case_to_lower(domain_name) + "Agent" |
- |
- class Res(object): |
- agent_field_name = field_name_res |
- |
- return Res |
- |
+ @staticmethod |
+ def get_fixed_data(domain_name): |
+ return Capitalizer.upper_camel_case_to_lower(domain_name) + "Agent" |
class RawTypes(object): |
@staticmethod |
@@ -190,41 +145,14 @@ class RawTypes(object): |
else: |
raise Exception("Unknown type: %s" % json_type) |
- # For output parameter all values are passed by pointer except RefPtr-based types. |
- class OutputPassModel: |
- class ByPointer: |
- @staticmethod |
- def get_argument_prefix(): |
- return "&" |
- |
- @staticmethod |
- def get_parameter_type_suffix(): |
- return "*" |
- |
- class ByReference: |
- @staticmethod |
- def get_argument_prefix(): |
- return "" |
- |
- @staticmethod |
- def get_parameter_type_suffix(): |
- return "&" |
- |
class BaseType(object): |
- need_internal_runtime_cast_ = False |
- |
- @classmethod |
- def request_raw_internal_runtime_cast(cls): |
- if not cls.need_internal_runtime_cast_: |
- cls.need_internal_runtime_cast_ = True |
- |
@classmethod |
def get_raw_validator_call_text(cls): |
- return "RuntimeCastHelper::assertType<JSONValue::Type%s>" % cls.get_validate_method_params().template_type |
+ return "RuntimeCastHelper::assertType<JSONValue::Type%s>" % cls.get_getter_name() |
@staticmethod |
- def get_validate_method_params(): |
- raise Exception("Abstract method") |
+ def get_getter_name(): |
+ raise Exception("Unsupported") |
class String(BaseType): |
@staticmethod |
@@ -238,20 +166,6 @@ class RawTypes(object): |
return "InspectorString::create(%s)" |
@staticmethod |
- def get_c_initializer(): |
- return "\"\"" |
- |
- @staticmethod |
- def get_validate_method_params(): |
- class ValidateMethodParams: |
- template_type = "String" |
- return ValidateMethodParams |
- |
- @staticmethod |
- def get_output_pass_model(): |
- return RawTypes.OutputPassModel.ByPointer |
- |
- @staticmethod |
def is_heavy_value(): |
return True |
@@ -276,19 +190,11 @@ class RawTypes(object): |
def get_constructor_pattern(): |
return "InspectorBasicValue::create(%s)" |
- @staticmethod |
- def get_c_initializer(): |
- return "0" |
- |
@classmethod |
def get_raw_validator_call_text(cls): |
return "RuntimeCastHelper::assertInt" |
@staticmethod |
- def get_output_pass_model(): |
- return RawTypes.OutputPassModel.ByPointer |
- |
- @staticmethod |
def is_heavy_value(): |
return False |
@@ -314,18 +220,8 @@ class RawTypes(object): |
return "InspectorBasicValue::create(%s)" |
@staticmethod |
- def get_c_initializer(): |
- return "0" |
- |
- @staticmethod |
- def get_validate_method_params(): |
- class ValidateMethodParams: |
- template_type = "Number" |
- return ValidateMethodParams |
- |
- @staticmethod |
- def get_output_pass_model(): |
- return RawTypes.OutputPassModel.ByPointer |
+ def get_raw_validator_call_text(): |
+ return "RuntimeCastHelper::assertType<JSONValue::TypeNumber>" |
@staticmethod |
def is_heavy_value(): |
@@ -351,20 +247,6 @@ class RawTypes(object): |
return "InspectorBasicValue::create(%s)" |
@staticmethod |
- def get_c_initializer(): |
- return "false" |
- |
- @staticmethod |
- def get_validate_method_params(): |
- class ValidateMethodParams: |
- template_type = "Boolean" |
- return ValidateMethodParams |
- |
- @staticmethod |
- def get_output_pass_model(): |
- return RawTypes.OutputPassModel.ByPointer |
- |
- @staticmethod |
def is_heavy_value(): |
return False |
@@ -390,24 +272,10 @@ class RawTypes(object): |
return "%s" |
@staticmethod |
- def get_c_initializer(): |
- return "JSONObject::create()" |
- |
- @staticmethod |
def get_output_argument_prefix(): |
return "" |
@staticmethod |
- def get_validate_method_params(): |
- class ValidateMethodParams: |
- template_type = "Object" |
- return ValidateMethodParams |
- |
- @staticmethod |
- def get_output_pass_model(): |
- return RawTypes.OutputPassModel.ByReference |
- |
- @staticmethod |
def is_heavy_value(): |
return True |
@@ -427,10 +295,6 @@ class RawTypes(object): |
get_setter_name = get_getter_name |
@staticmethod |
- def get_c_initializer(): |
- raise Exception("Unsupported") |
- |
- @staticmethod |
def get_constructor_pattern(): |
raise Exception("Unsupported") |
@@ -439,10 +303,6 @@ class RawTypes(object): |
return "RuntimeCastHelper::assertAny" |
@staticmethod |
- def get_output_pass_model(): |
- return RawTypes.OutputPassModel.ByReference |
- |
- @staticmethod |
def is_heavy_value(): |
return True |
@@ -468,24 +328,10 @@ class RawTypes(object): |
return "%s" |
@staticmethod |
- def get_c_initializer(): |
- return "JSONArray::create()" |
- |
- @staticmethod |
def get_output_argument_prefix(): |
return "" |
@staticmethod |
- def get_validate_method_params(): |
- class ValidateMethodParams: |
- template_type = "Array" |
- return ValidateMethodParams |
- |
- @staticmethod |
- def get_output_pass_model(): |
- return RawTypes.OutputPassModel.ByReference |
- |
- @staticmethod |
def is_heavy_value(): |
return True |
@@ -669,23 +515,10 @@ class TypeModel: |
def get_event_setter_expression_pattern(): |
return "*%s" |
- class ExactlyInt(ValueType): |
- def __init__(self): |
- TypeModel.ValueType.__init__(self, "int", False) |
- |
- def get_input_param_type_text(self): |
- return "TypeBuilder::ExactlyInt" |
- |
- def get_opt_output_type_(self): |
- return "TypeBuilder::ExactlyInt" |
- |
@classmethod |
def init_class(cls): |
cls.Bool = cls.ValueType("bool", False) |
- if EXACTLY_INT_SUPPORTED: |
- cls.Int = cls.ExactlyInt() |
- else: |
- cls.Int = cls.ValueType("int", False) |
+ cls.Int = cls.ValueType("int", False) |
cls.Number = cls.ValueType("double", False) |
cls.String = cls.ValueType("String", True,) |
cls.Object = cls.RefPtrBased("JSONObject") |
@@ -754,9 +587,6 @@ class Writer: |
def get_indent(self): |
return self.indent |
- def get_indented(self, additional_indent): |
- return Writer(self.output, self.indent + additional_indent) |
- |
def insert_writer(self, additional_indent): |
new_output = [] |
self.output.append(new_output) |
@@ -859,8 +689,6 @@ class TypeBindings: |
@classmethod |
def get_code_generator(enum_binding_cls): |
- #FIXME: generate ad-hoc enums too once we figure out how to better implement them in C++. |
- comment_out = helper.is_ad_hoc |
class CodeGenerator: |
@staticmethod |
@@ -896,8 +724,6 @@ class TypeBindings: |
validator_writer = generate_context.validator_writer |
- domain_fixes = DomainNameFixes.get_fixed_data(context_domain_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") |
@@ -1003,7 +829,7 @@ class TypeBindings: |
@staticmethod |
def request_internal_runtime_cast(): |
- RawTypes.String.request_raw_internal_runtime_cast() |
+ pass |
@staticmethod |
def get_code_generator(): |
@@ -1196,7 +1022,6 @@ class TypeBindings: |
for prop_data in resolve_data.main_properties: |
prop_name = prop_data.p["name"] |
param_type_binding = prop_data.param_type_binding |
- raw_type = param_type_binding.reduce_to_raw_type() |
if isinstance(param_type_binding.get_type_model(), TypeModel.ValueType): |
writer.append_multiline("\n void %s" % prop_name) |
writer.append("(%s value)\n" % param_type_binding.get_type_model().get_command_return_pass_model().get_output_parameter_type()) |
@@ -1244,8 +1069,6 @@ class TypeBindings: |
validator_writer = generate_context.validator_writer |
- domain_fixes = DomainNameFixes.get_fixed_data(context_domain_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<JSONObject> object;\n") |
@@ -1369,7 +1192,7 @@ class TypeBindings: |
@staticmethod |
def request_internal_runtime_cast(): |
- RawTypes.Object.request_raw_internal_runtime_cast() |
+ pass |
@staticmethod |
def get_code_generator(): |
@@ -1516,7 +1339,7 @@ class RawTypeBinding: |
raise Exception("Unsupported") |
def request_internal_runtime_cast(self): |
- self.raw_type_.request_raw_internal_runtime_cast() |
+ pass |
def get_code_generator(self): |
return None |
@@ -1803,30 +1626,11 @@ class Generator: |
def go(): |
Generator.process_types(type_map) |
- first_cycle_guardable_list_list = [ |
- Generator.backend_method_declaration_list, |
- Generator.backend_method_implementation_list, |
- Generator.backend_method_name_declaration_list, |
- Generator.backend_method_name_declaration_index_list, |
- Generator.backend_agent_interface_list, |
- Generator.frontend_class_field_lines, |
- Generator.frontend_constructor_init_list, |
- Generator.frontend_domain_class_lines, |
- Generator.frontend_method_list, |
- Generator.method_handler_list, |
- Generator.method_name_enum_list, |
- Generator.backend_constructor_init_list, |
- Generator.backend_virtual_setters_list, |
- Generator.backend_setters_list, |
- Generator.backend_field_list] |
- |
for json_domain in json_api["domains"]: |
domain_name = json_domain["domain"] |
domain_name_lower = domain_name.lower() |
- domain_fixes = DomainNameFixes.get_fixed_data(domain_name) |
- |
- agent_field_name = domain_fixes.agent_field_name |
+ agent_field_name = DomainNameFixes.get_fixed_data(domain_name) |
frontend_method_declaration_lines = [] |
@@ -1914,7 +1718,6 @@ class Generator: |
method_in_code = "" |
method_out_code = "" |
- result_object_declaration = "" |
agent_call_param_list = ["&error"] |
agent_call_params_declaration_list = [" ErrorString error;"] |
send_response_call_params_list = ["error"] |
@@ -1947,10 +1750,6 @@ class Generator: |
optional = json_parameter.get("optional") |
non_optional_type_model = param_raw_type.get_raw_type_model() |
- if optional: |
- type_model = non_optional_type_model.get_optional() |
- else: |
- type_model = non_optional_type_model |
if optional: |
code = (" bool %s_valueFound = false;\n" |
@@ -1988,7 +1787,7 @@ class Generator: |
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(" " + callback_name + "(PassRefPtrWillBeRawPtr<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") |
@@ -2009,12 +1808,12 @@ class Generator: |
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" |
+ method_out_code += " RefPtrWillBeRawPtr<" + agent_interface_name + "::" + callback_name + "> callback = adoptRefWillBeNoop(new " + agent_interface_name + "::" + callback_name + "(this, callId));\n" |
agent_call_param_list.append("callback") |
normal_response_cook_text += " if (!error.length()) \n" |
normal_response_cook_text += " return;\n" |
normal_response_cook_text += " callback->disable();\n" |
- backend_agent_interface_list.append(", PassRefPtr<%s> callback" % callback_name) |
+ backend_agent_interface_list.append(", PassRefPtrWillBeRawPtr<%s> callback" % callback_name) |
else: |
if "returns" in json_command: |
method_out_code += "\n" |
@@ -2031,7 +1830,6 @@ class Generator: |
raw_type = return_type_binding.reduce_to_raw_type() |
setter_type = raw_type.get_setter_name() |
- initializer = raw_type.get_c_initializer() |
type_model = return_type_binding.get_type_model() |
if optional: |
@@ -2070,8 +1868,7 @@ class Generator: |
# Redirect to another agent's implementation. |
agent_field = "m_" + agent_field_name |
if "redirect" in json_command: |
- domain_fixes = DomainNameFixes.get_fixed_data(json_command.get("redirect")) |
- agent_field = "m_" + domain_fixes.agent_field_name |
+ agent_field = "m_" + DomainNameFixes.get_fixed_data(json_command.get("redirect")) |
Generator.backend_method_implementation_list.append(Templates.backend_method.substitute(None, |
domainName=domain_name, methodName=json_command_name, |
@@ -2211,8 +2008,6 @@ class Generator: |
def generate_all_domains_code(out, type_data_callback): |
writer = Writer(out, "") |
for domain_data in type_map.domains(): |
- domain_fixes = DomainNameFixes.get_fixed_data(domain_data.name()) |
- |
namespace_declared = [] |
def namespace_lazy_generator(): |
@@ -2272,40 +2067,8 @@ def flatten_list(input): |
fill_recursive(input) |
return res |
- |
-# A writer that only updates file if it actually changed to better support incremental build. |
-class SmartOutput: |
- def __init__(self, file_name): |
- self.file_name_ = file_name |
- self.output_ = "" |
- |
- def write(self, text): |
- self.output_ += text |
- |
- def close(self): |
- text_changed = True |
- |
- try: |
- read_file = open(self.file_name_, "r") |
- old_text = read_file.read() |
- read_file.close() |
- text_changed = old_text != self.output_ |
- except: |
- # Ignore, just overwrite by default |
- pass |
- |
- if text_changed: |
- out_file = open(self.file_name_, "w") |
- out_file.write(self.output_) |
- out_file.close() |
- |
- |
def output_file(file_name): |
- # For now, disable the incremental build optimisation in all cases. |
- if False: |
- return SmartOutput(file_name) |
- else: |
- return open(file_name, "w") |
+ return open(file_name, "w") |
Generator.go() |