| Index: core/scripts/make_css_property_names.py
|
| diff --git a/core/scripts/make_css_property_names.py b/core/scripts/make_css_property_names.py
|
| index 58f85f2ad8e1526291e74acaaad61939795d5b2b..f775462be93ea1ee7789646ec8ab9ca6eeeebb79 100755
|
| --- a/core/scripts/make_css_property_names.py
|
| +++ b/core/scripts/make_css_property_names.py
|
| @@ -78,10 +78,14 @@ GPERF_TEMPLATE = """
|
| #include "wtf/text/WTFString.h"
|
|
|
| namespace WebCore {
|
| -const char* const propertyNameStrings[numCSSProperties] = {
|
| +static const char propertyNameStringsPool[] = {
|
| %(property_name_strings)s
|
| };
|
|
|
| +static const unsigned short propertyNameStringsOffsets[] = {
|
| +%(property_name_offsets)s
|
| +};
|
| +
|
| %%}
|
| %%struct-type
|
| struct Property;
|
| @@ -93,6 +97,7 @@ struct Property;
|
| %%define class-name %(class_name)sHash
|
| %%define lookup-function-name findPropertyImpl
|
| %%define hash-function-name propery_hash_function
|
| +%%define slot-name nameOffset
|
| %%define word-array-name property_wordlist
|
| %%enum
|
| %%%%
|
| @@ -110,7 +115,7 @@ const char* getPropertyName(CSSPropertyID id)
|
| int index = id - firstCSSProperty;
|
| if (index >= numCSSProperties)
|
| return 0;
|
| - return propertyNameStrings[index];
|
| + return propertyNameStringsPool + propertyNameStringsOffsets[index];
|
| }
|
|
|
| const AtomicString& getPropertyNameAtomicString(CSSPropertyID id)
|
| @@ -124,7 +129,7 @@ const AtomicString& getPropertyNameAtomicString(CSSPropertyID id)
|
| static AtomicString* propertyStrings = new AtomicString[numCSSProperties]; // Intentionally never destroyed.
|
| AtomicString& propertyString = propertyStrings[index];
|
| if (propertyString.isNull()) {
|
| - const char* propertyName = propertyNameStrings[index];
|
| + const char* propertyName = propertyNameStringsPool + propertyNameStringsOffsets[index];
|
| propertyString = AtomicString(propertyName, strlen(propertyName), AtomicString::ConstructFromLiteral);
|
| }
|
| return propertyString;
|
| @@ -210,14 +215,21 @@ class CSSPropertiesWriter(in_generator.Writer):
|
| }
|
|
|
| def generate_implementation(self):
|
| + property_offsets = []
|
| + current_offset = 0
|
| + for property in self._properties:
|
| + property_offsets.append(current_offset)
|
| + current_offset += len(property["name"]) + 1
|
| +
|
| gperf_input = GPERF_TEMPLATE % {
|
| 'license': license.license_for_generated_cpp(),
|
| 'class_name': self.class_name,
|
| - 'property_name_strings': '\n'.join(map(lambda property: ' "%(name)s",' % property, self._properties)),
|
| + 'property_name_strings': '\n'.join(map(lambda property: ' "%(name)s\\0"' % property, self._properties)),
|
| + 'property_name_offsets': '\n'.join(map(lambda offset: ' %d,' % offset, property_offsets)),
|
| 'property_to_enum_map': '\n'.join(map(lambda property: '%(name)s, %(enum_name)s' % property, self._properties + self._aliases)),
|
| }
|
| # FIXME: If we could depend on Python 2.7, we would use subprocess.check_output
|
| - gperf_args = ['gperf', '--key-positions=*', '-D', '-n', '-s', '2']
|
| + gperf_args = ['gperf', '--key-positions=*', '-P', '-D', '-n', '-s', '2']
|
| gperf = subprocess.Popen(gperf_args, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
|
| return gperf.communicate(gperf_input)[0]
|
|
|
|
|