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

Side by Side Diff: third_party/WebKit/Source/build/scripts/make_computed_style_base.py

Issue 2563913002: Added functionality in ComputedStyleBase to use platform/ types (Closed)
Patch Set: Rebase Created 3 years, 11 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 unified diff | Download patch
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2016 The Chromium Authors. All rights reserved. 2 # Copyright 2016 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 import math 6 import math
7 import sys 7 import sys
8 8
9 import in_generator 9 import in_generator
10 import template_expander 10 import template_expander
(...skipping 17 matching lines...) Expand all
28 - 'enum', for fields that store the values of an enum 28 - 'enum', for fields that store the values of an enum
29 - 'inherited_flag', for single-bit flags that store whether a property is 29 - 'inherited_flag', for single-bit flags that store whether a property is
30 inherited by this style or set explicitly 30 inherited by this style or set explicitly
31 """ 31 """
32 def __init__(self, field_family, **kwargs): 32 def __init__(self, field_family, **kwargs):
33 # Values common to all fields 33 # Values common to all fields
34 # Name of field 34 # Name of field
35 self.name = kwargs.pop('name') 35 self.name = kwargs.pop('name')
36 # Name of property field is for 36 # Name of property field is for
37 self.property_name = kwargs.pop('property_name') 37 self.property_name = kwargs.pop('property_name')
38 # Internal field storage type 38 # Internal field storage type (storage_type_path can be None)
39 self.storage_type = kwargs.pop('storage_type') 39 self.storage_type = kwargs.pop('storage_type')
40 self.storage_type_path = kwargs.pop('storage_type_path')
40 # Bits needed for storage 41 # Bits needed for storage
41 self.size = kwargs.pop('size') 42 self.size = kwargs.pop('size')
42 # Default value for field 43 # Default value for field
43 self.default_value = kwargs.pop('default_value') 44 self.default_value = kwargs.pop('default_value')
44 # Method names 45 # Method names
45 self.getter_method_name = kwargs.pop('getter_method_name') 46 self.getter_method_name = kwargs.pop('getter_method_name')
46 self.setter_method_name = kwargs.pop('setter_method_name') 47 self.setter_method_name = kwargs.pop('setter_method_name')
47 self.initial_method_name = kwargs.pop('initial_method_name') 48 self.initial_method_name = kwargs.pop('initial_method_name')
48 self.resetter_method_name = kwargs.pop('resetter_method_name') 49 self.resetter_method_name = kwargs.pop('resetter_method_name')
49 50
(...skipping 21 matching lines...) Expand all
71 super(ComputedStyleBaseWriter, self).__init__(in_file_path) 72 super(ComputedStyleBaseWriter, self).__init__(in_file_path)
72 self._outputs = { 73 self._outputs = {
73 'ComputedStyleBase.h': self.generate_base_computed_style_h, 74 'ComputedStyleBase.h': self.generate_base_computed_style_h,
74 'ComputedStyleBase.cpp': self.generate_base_computed_style_cpp, 75 'ComputedStyleBase.cpp': self.generate_base_computed_style_cpp,
75 'ComputedStyleBaseConstants.h': self.generate_base_computed_style_co nstants, 76 'ComputedStyleBaseConstants.h': self.generate_base_computed_style_co nstants,
76 } 77 }
77 78
78 # A map of enum name -> list of enum values 79 # A map of enum name -> list of enum values
79 self._computed_enums = {} 80 self._computed_enums = {}
80 for property in self._properties.values(): 81 for property in self._properties.values():
81 if property['keyword_only']: 82 # Only generate enums for keyword properties that use the default fi eld_storage_type.
83 if property['keyword_only'] and property['field_storage_type'] is No ne:
82 enum_name = property['type_name'] 84 enum_name = property['type_name']
83 # From the Blink style guide: Enum members should use InterCaps with an initial capital letter. [names-enum-members] 85 # From the Blink style guide: Enum members should use InterCaps with an initial capital letter. [names-enum-members]
84 enum_values = [camel_case(k) for k in property['keywords']] 86 enum_values = [camel_case(k) for k in property['keywords']]
85 self._computed_enums[enum_name] = enum_values 87 self._computed_enums[enum_name] = enum_values
86 88
87 # A list of all the fields to be generated. 89 # A list of all the fields to be generated.
88 self._fields = [] 90 self._fields = []
89 for property in self._properties.values(): 91 for property in self._properties.values():
90 if property['keyword_only']: 92 if property['keyword_only']:
91 property_name = property['name_for_methods'] 93 property_name = property['name_for_methods']
92 property_name_lower = property_name[0].lower() + property_name[1 :] 94 property_name_lower = property_name[0].lower() + property_name[1 :]
93 95
94 # From the Blink style guide: Other data members should be prefi xed by "m_". [names-data-members] 96 # From the Blink style guide: Other data members should be prefi xed by "m_". [names-data-members]
95 field_name = 'm_' + property_name_lower 97 field_name = 'm_' + property_name_lower
96 bits_needed = math.log(len(property['keywords']), 2) 98 bits_needed = math.log(len(property['keywords']), 2)
99
100 # Separate the type path from the type name, if specified.
97 type_name = property['type_name'] 101 type_name = property['type_name']
102 type_path = None
103 if property['field_storage_type']:
104 type_path = property['field_storage_type']
105 type_name = type_path.split('/')[-1]
98 106
99 assert property['initial_keyword'] is not None, \ 107 assert property['initial_keyword'] is not None, \
100 ('MakeComputedStyleBase requires an initial keyword for keyw ord_only values, none specified ' 108 ('MakeComputedStyleBase requires an initial keyword for keyw ord_only values, none specified '
101 'for property ' + property['name']) 109 'for property ' + property['name'])
102 default_value = type_name + '::' + camel_case(property['initial_ keyword']) 110 default_value = type_name + '::' + camel_case(property['initial_ keyword'])
103 111
104 # If the property is independent, add the single-bit sized isInh erited flag 112 # If the property is independent, add the single-bit sized isInh erited flag
105 # to the list of Fields as well. 113 # to the list of Fields as well.
106 if property['independent']: 114 if property['independent']:
107 field_name_suffix_upper = property_name + 'IsInherited' 115 field_name_suffix_upper = property_name + 'IsInherited'
108 field_name_suffix_lower = property_name_lower + 'IsInherited ' 116 field_name_suffix_lower = property_name_lower + 'IsInherited '
109 self._fields.append(Field( 117 self._fields.append(Field(
110 'inherited_flag', 118 'inherited_flag',
111 name='m_' + field_name_suffix_lower, 119 name='m_' + field_name_suffix_lower,
112 property_name=property['name'], 120 property_name=property['name'],
113 storage_type='bool', 121 storage_type='bool',
122 storage_type_path=None,
114 size=1, 123 size=1,
115 default_value='true', 124 default_value='true',
116 getter_method_name=field_name_suffix_lower, 125 getter_method_name=field_name_suffix_lower,
117 setter_method_name='set' + field_name_suffix_upper, 126 setter_method_name='set' + field_name_suffix_upper,
118 initial_method_name='initial' + field_name_suffix_upper, 127 initial_method_name='initial' + field_name_suffix_upper,
119 resetter_method_name='reset' + field_name_suffix_upper, 128 resetter_method_name='reset' + field_name_suffix_upper,
120 )) 129 ))
121 130
122 # Add the property itself as a member variable. 131 # Add the property itself as a member variable.
123 self._fields.append(Field( 132 self._fields.append(Field(
124 'enum', 133 'enum',
125 name=field_name, 134 name=field_name,
126 property_name=property['name'], 135 property_name=property['name'],
127 inherited=property['inherited'], 136 inherited=property['inherited'],
128 independent=property['independent'], 137 independent=property['independent'],
129 storage_type=type_name, 138 storage_type=type_name,
139 storage_type_path=type_path,
130 size=int(math.ceil(bits_needed)), 140 size=int(math.ceil(bits_needed)),
131 default_value=default_value, 141 default_value=default_value,
132 getter_method_name=property_name_lower, 142 getter_method_name=property_name_lower,
133 setter_method_name='set' + property_name, 143 setter_method_name='set' + property_name,
134 initial_method_name='initial' + property_name, 144 initial_method_name='initial' + property_name,
135 resetter_method_name='reset' + property_name, 145 resetter_method_name='reset' + property_name,
136 is_inherited_method_name=property_name_lower + 'IsInherited' , 146 is_inherited_method_name=property_name_lower + 'IsInherited' ,
137 )) 147 ))
138 148
139 # Small optimization: order fields by size, from largest to smallest, 149 # Small optimization: order fields by size, from largest to smallest,
(...skipping 19 matching lines...) Expand all
159 @template_expander.use_jinja('ComputedStyleBaseConstants.h.tmpl') 169 @template_expander.use_jinja('ComputedStyleBaseConstants.h.tmpl')
160 def generate_base_computed_style_constants(self): 170 def generate_base_computed_style_constants(self):
161 return { 171 return {
162 'properties': self._properties, 172 'properties': self._properties,
163 'enums': self._computed_enums, 173 'enums': self._computed_enums,
164 'fields': self._fields, 174 'fields': self._fields,
165 } 175 }
166 176
167 if __name__ == '__main__': 177 if __name__ == '__main__':
168 in_generator.Maker(ComputedStyleBaseWriter).main(sys.argv) 178 in_generator.Maker(ComputedStyleBaseWriter).main(sys.argv)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698