Index: third_party/WebKit/Source/build/scripts/make_computed_style_base.py |
diff --git a/third_party/WebKit/Source/build/scripts/make_computed_style_base.py b/third_party/WebKit/Source/build/scripts/make_computed_style_base.py |
index dd1dd2867930463b507693a7df43bfef1ed14867..f9773d2f7537984066a4d669f817979c83cb2518 100755 |
--- a/third_party/WebKit/Source/build/scripts/make_computed_style_base.py |
+++ b/third_party/WebKit/Source/build/scripts/make_computed_style_base.py |
@@ -73,6 +73,10 @@ class Group(object): |
# Recursively get all the fields in the subgroups as well |
self.all_fields = _flatten_list(subgroup.all_fields for subgroup in subgroups) + fields |
+ # Link group |
+ for field in fields: |
+ field.group = self |
+ |
class DiffGroup(object): |
"""Represents a group of expressions and subgroups that need to be diffed |
@@ -85,6 +89,7 @@ class DiffGroup(object): |
def __init__(self, group_name): |
self.group_name = group_name |
self.subgroups = [] |
+ self.fields = [] |
self.expressions = [] |
self.predicates = [] |
@@ -114,13 +119,12 @@ class Field(object): |
wrapper_pointer_name: Name of the pointer type that wraps this field (e.g. RefPtr). |
field_template: Determines the interface generated for the field. Can be one of: |
keyword, flag, or monotonic_flag. |
- field_group: The name of the group that this field is inside. |
size: Number of bits needed for storage. |
default_value: Default value for this field when it is first initialized. |
""" |
def __init__(self, field_role, name_for_methods, property_name, type_name, wrapper_pointer_name, |
- field_template, field_group, size, default_value, custom_copy, custom_compare, |
+ field_template, size, default_value, custom_copy, custom_compare, |
getter_method_name, setter_method_name, initial_method_name, **kwargs): |
"""Creates a new field.""" |
self.name = class_member_name(name_for_methods) |
@@ -129,12 +133,11 @@ class Field(object): |
self.wrapper_pointer_name = wrapper_pointer_name |
self.alignment_type = self.wrapper_pointer_name or self.type_name |
self.field_template = field_template |
- self.group_name = field_group |
- self.group_member_name = class_member_name(join_name(field_group, 'data')) if field_group else None |
self.size = size |
self.default_value = default_value |
self.custom_copy = custom_copy |
self.custom_compare = custom_compare |
+ self.group = None |
# Field role: one of these must be true |
self.is_property = field_role == 'property' |
@@ -158,10 +161,6 @@ class Field(object): |
self.internal_setter_method_name = method_name(join_name(setter_method_name, 'Internal')) |
self.initial_method_name = initial_method_name |
self.resetter_method_name = method_name(join_name('Reset', name_for_methods)) |
- if self.group_name: |
- self.getter_expression = self.group_member_name + '->' + class_member_name(self.name) |
- else: |
- self.getter_expression = class_member_name(self.name) |
# If the size of the field is not None, it means it is a bit field |
self.is_bit_field = self.size is not None |
@@ -179,11 +178,11 @@ def _get_include_paths(properties): |
return list(sorted(include_paths)) |
-def _group_fields(fields): |
+def _create_groups(properties): |
"""Groups a list of fields by their group_name and returns the root group.""" |
groups = defaultdict(list) |
- for field in fields: |
- groups[field.group_name].append(field) |
+ for property_ in properties: |
+ groups[property_['field_group']].extend(_create_fields(property_)) |
no_group = groups.pop(None) |
subgroups = [Group(group_name, [], _reorder_fields(fields)) for group_name, fields in groups.items()] |
@@ -214,7 +213,7 @@ def _create_diff_groups(fields_to_diff, methods_to_diff, predicates_to_test, roo |
for entry in fields_to_diff: |
for field in root_group.fields: |
if not field.is_inherited_flag and entry == field.property_name: |
- diff_group.expressions.append(field.getter_expression) |
+ diff_group.fields.append(field) |
for entry in methods_to_diff: |
for field in root_group.fields: |
if not field.is_inherited_flag and field.property_name in entry['field_dependencies']: |
@@ -296,7 +295,6 @@ def _create_property_field(property_): |
type_name=type_name, |
wrapper_pointer_name=property_['wrapper_pointer_name'], |
field_template=property_['field_template'], |
- field_group=property_['field_group'], |
size=size, |
default_value=default_value, |
custom_copy=property_['custom_copy'], |
@@ -320,7 +318,6 @@ def _create_inherited_flag_field(property_): |
type_name='bool', |
wrapper_pointer_name=None, |
field_template='primitive', |
- field_group=property_['field_group'], |
size=1, |
default_value='true', |
custom_copy=False, |
@@ -331,20 +328,19 @@ def _create_inherited_flag_field(property_): |
) |
-def _create_fields(properties): |
+def _create_fields(property_): |
""" |
- Create ComputedStyle fields from properties and return a list of Field objects. |
+ Create ComputedStyle fields from a property and return a list of Field objects. |
""" |
fields = [] |
- for property_ in properties: |
- # Only generate properties that have a field template |
- if property_['field_template'] is not None: |
- # If the property is independent, add the single-bit sized isInherited flag |
- # to the list of Fields as well. |
- if property_['independent']: |
- fields.append(_create_inherited_flag_field(property_)) |
+ # Only generate properties that have a field template |
+ if property_['field_template'] is not None: |
+ # If the property is independent, add the single-bit sized isInherited flag |
+ # to the list of Fields as well. |
+ if property_['independent']: |
+ fields.append(_create_inherited_flag_field(property_)) |
- fields.append(_create_property_field(property_)) |
+ fields.append(_create_property_field(property_)) |
return fields |
@@ -430,11 +426,9 @@ class ComputedStyleBaseWriter(make_style_builder.StyleBuilderWriter): |
self._generated_enums = _create_enums(all_properties) |
- all_fields = _create_fields(all_properties) |
- |
# Organise fields into a tree structure where the root group |
# is ComputedStyleBase. |
- self._root_group = _group_fields(all_fields) |
+ self._root_group = _create_groups(all_properties) |
self._diff_functions_map = _create_diff_groups_map(json5_generator.Json5File.load_from_files( |
[json5_file_paths[2]] |
).name_dictionaries, self._root_group) |