def __init__(self, json5_file_path, output_dir): super(RuntimeFeatureWriter, self).__init__(json5_file_path, output_dir) self._outputs = { (self.file_basename + '.h'): self.generate_header, (self.file_basename + '.cc'): self.generate_implementation, } self._features = self.json5_file.name_dictionaries # Make sure the resulting dictionaries have all the keys we expect. for feature in self._features: feature['first_lowered_name'] = lower_first(feature['name']) feature['class_member_name'] = class_member_name(feature['name']) # Most features just check their isFooEnabled bool # but some depend on or are implied by other bools. enabled_condition = 'is_%senabled_' % feature['class_member_name'] assert not feature['implied_by'] or not feature[ 'depends_on'], 'Only one of implied_by and depends_on is allowed' for implied_by_name in feature['implied_by']: enabled_condition += ' || is_%senabled_' % class_member_name( implied_by_name) for dependant_name in feature['depends_on']: enabled_condition += ' && is_%senabled_' % class_member_name( dependant_name) feature['enabled_condition'] = enabled_condition self._standard_features = [ feature for feature in self._features if not feature['custom'] ] self._origin_trial_features = [ feature for feature in self._features if feature['origin_trial_feature_name'] ]
def __init__(self, field_role, name_for_methods, property_name, type_name, field_template, field_group, size, default_value, has_custom_compare_and_copy, getter_method_name, setter_method_name, initial_method_name, **kwargs): """Creates a new field.""" self.name = class_member_name(name_for_methods) self.property_name = property_name self.type_name = 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.has_custom_compare_and_copy = has_custom_compare_and_copy # Field role: one of these must be true self.is_property = field_role == 'property' self.is_inherited_flag = field_role == 'inherited_flag' assert (self.is_property, self.is_inherited_flag).count(True) == 1, \ 'Field role has to be exactly one of: property, inherited_flag' if not self.is_inherited_flag: self.is_inherited = kwargs.pop('inherited') self.is_independent = kwargs.pop('independent') assert self.is_inherited or not self.is_independent, 'Only inherited fields can be independent' self.is_inherited_method_name = method_name( join_name(name_for_methods, 'is inherited')) # Method names # TODO(nainar): Method name generation is inconsistent. Fix. self.getter_method_name = getter_method_name self.setter_method_name = setter_method_name self.internal_getter_method_name = method_name( join_name(getter_method_name, 'Internal')) self.internal_mutable_method_name = method_name( join_name('Mutable', name_for_methods, 'Internal')) 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 assert len( kwargs ) == 0, 'Unexpected arguments provided to Field: ' + str(kwargs)
def __init__(self, name, subgroups, fields): self.name = name self.subgroups = subgroups self.fields = fields self.type_name = class_name(join_name('style', name, 'data')) self.member_name = class_member_name(join_name(name, 'data')) self.num_32_bit_words_for_bit_fields = _num_32_bit_words_for_bit_fields( field for field in fields if field.is_bit_field ) # Recursively get all the fields in the subgroups as well self.all_fields = _flatten_list(subgroup.all_fields for subgroup in subgroups) + fields
def __init__(self, field_role, name_for_methods, property_name, type_name, wrapper_pointer_name, field_template, size, default_value, custom_copy, custom_compare, mutable, getter_method_name, setter_method_name, initial_method_name, computed_style_custom_functions, **kwargs): """Creates a new field.""" self.name = class_member_name(name_for_methods) self.property_name = property_name self.type_name = type_name self.wrapper_pointer_name = wrapper_pointer_name self.alignment_type = self.wrapper_pointer_name or self.type_name self.field_template = field_template self.size = size self.default_value = default_value self.custom_copy = custom_copy self.custom_compare = custom_compare self.mutable = mutable self.group = None # Field role: one of these must be true self.is_property = field_role == 'property' self.is_inherited_flag = field_role == 'inherited_flag' assert (self.is_property, self.is_inherited_flag).count(True) == 1, \ 'Field role has to be exactly one of: property, inherited_flag' if not self.is_inherited_flag: self.is_inherited = kwargs.pop('inherited') self.is_independent = kwargs.pop('independent') assert self.is_inherited or not self.is_independent, 'Only inherited fields can be independent' self.is_inherited_method_name = method_name( [name_for_methods, 'is inherited']) # Method names # TODO(nainar): Method name generation is inconsistent. Fix. self.getter_method_name = getter_method_name self.setter_method_name = setter_method_name self.internal_getter_method_name = method_name([self.name, 'internal']) self.internal_mutable_method_name = method_name( ['mutable', name_for_methods, 'internal']) self.internal_setter_method_name = method_name( [setter_method_name, 'internal']) self.initial_method_name = initial_method_name self.resetter_method_name = method_name(['reset', name_for_methods]) self.computed_style_custom_functions = computed_style_custom_functions # 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 assert len( kwargs ) == 0, 'Unexpected arguments provided to Field: ' + str(kwargs)
def __init__(self, name, subgroups, fields): self.name = name self.subgroups = subgroups self.fields = fields self.parent = None self.type_name = class_name(['style', name, 'data']) self.member_name = class_member_name([name, 'data']) self.num_32_bit_words_for_bit_fields = _num_32_bit_words_for_bit_fields( field for field in fields if field.is_bit_field) # Recursively get all the fields in the subgroups as well self.all_fields = _flatten_list(subgroup.all_fields for subgroup in subgroups) + fields # Ensure that all fields/subgroups on this group link to it for field in fields: field.group = self for subgroup in subgroups: subgroup.parent = self