Exemplo n.º 1
0
    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
Exemplo n.º 4
0
    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)
Exemplo n.º 5
0
    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