| Index: core/scripts/make_css_value_keywords.py
|
| diff --git a/core/scripts/make_css_value_keywords.py b/core/scripts/make_css_value_keywords.py
|
| index a51823c216367504627529b83d30dd9b3376b0de..0b5a3d65e6b6f7d15ca99aed32cb0d05b6fb8b80 100755
|
| --- a/core/scripts/make_css_value_keywords.py
|
| +++ b/core/scripts/make_css_value_keywords.py
|
| @@ -46,10 +46,13 @@ GPERF_TEMPLATE = """
|
| #include <string.h>
|
|
|
| namespace WebCore {
|
| -const char* const valueList[] = {
|
| -"",
|
| +static const char valueListStringPool[] = {
|
| +"\\0"
|
| %(value_keyword_strings)s
|
| -0
|
| +};
|
| +
|
| +static const unsigned short valueListStringOffsets[] = {
|
| +%(value_keyword_offsets)s
|
| };
|
|
|
| %%}
|
| @@ -62,7 +65,9 @@ struct Value;
|
| %%define class-name %(class_name)sHash
|
| %%define lookup-function-name findValueImpl
|
| %%define hash-function-name value_hash_function
|
| +%%define slot-name nameOffset
|
| %%define word-array-name value_word_list
|
| +%%pic
|
| %%enum
|
| %%%%
|
| %(value_keyword_to_enum_map)s
|
| @@ -76,7 +81,7 @@ const char* getValueName(unsigned short id)
|
| {
|
| if (id >= numCSSValueKeywords || id <= 0)
|
| return 0;
|
| - return valueList[id];
|
| + return valueListStringPool + valueListStringOffsets[id];
|
| }
|
|
|
| bool isValueAllowedInMode(unsigned short id, CSSParserMode mode)
|
| @@ -146,14 +151,21 @@ class CSSValueKeywordsWriter(in_generator.Writer):
|
| return filter(lambda property: property['mode'] == mode, self._value_keywords)
|
|
|
| def generate_implementation(self):
|
| + keyword_offsets = [0]
|
| + current_offset = 1
|
| + for keyword in self._value_keywords:
|
| + keyword_offsets.append(current_offset)
|
| + current_offset += len(keyword["name"]) + 1
|
| +
|
| gperf_input = GPERF_TEMPLATE % {
|
| 'license': license.license_for_generated_cpp(),
|
| 'class_name': self.class_name,
|
| - 'value_keyword_strings': '\n'.join(map(lambda property: ' "%(name)s",' % property, self._value_keywords)),
|
| + 'value_keyword_strings': '\n'.join(map(lambda property: ' "%(name)s\\0"' % property, self._value_keywords)),
|
| + 'value_keyword_offsets': '\n'.join(map(lambda offset: ' %d,' % offset, keyword_offsets)),
|
| 'value_keyword_to_enum_map': '\n'.join(map(lambda property: '%(name)s, %(enum_name)s' % property, self._value_keywords)),
|
| - 'ua_sheet_mode_values_keywords': '\n'.join(map(self._case_value_keyword, self._value_keywords_with_mode('UASheet'))),
|
| - 'quirks_mode_values_keywords': '\n'.join(map(self._case_value_keyword, self._value_keywords_with_mode('Quirks'))),
|
| - 'quirks_mode_or_ua_sheet_mode_values_keywords': '\n'.join(map(self._case_value_keyword, self._value_keywords_with_mode('QuirksOrUASheet'))),
|
| + 'ua_sheet_mode_values_keywords': '\n '.join(map(self._case_value_keyword, self._value_keywords_with_mode('UASheet'))),
|
| + 'quirks_mode_values_keywords': '\n '.join(map(self._case_value_keyword, self._value_keywords_with_mode('Quirks'))),
|
| + 'quirks_mode_or_ua_sheet_mode_values_keywords': '\n '.join(map(self._case_value_keyword, self._value_keywords_with_mode('QuirksOrUASheet'))),
|
| }
|
| # FIXME: If we could depend on Python 2.7, we would use subprocess.check_output
|
| gperf_args = ['gperf', '--key-positions=*', '-D', '-n', '-s', '2']
|
|
|