OLD | NEW |
---|---|
1 {% from "macros.tmpl" import license %} | 1 {% from "macros.tmpl" import license %} |
2 {{ license() }} | 2 {{ license() }} |
3 | 3 |
4 #include "config.h" | 4 #include "config.h" |
5 | 5 |
6 #include "{{namespace}}{{suffix}}Names.h" | 6 #include "{{namespace}}{{suffix}}Names.h" |
7 | 7 |
8 #include "wtf/StaticConstructors.h" | 8 #include "wtf/StdLibExtras.h" |
9 | 9 |
10 namespace blink { | 10 namespace blink { |
11 namespace {{namespace}}Names { | 11 namespace {{namespace}}Names { |
12 | 12 |
13 using namespace WTF; | 13 using namespace WTF; |
14 | 14 |
15 {% for entry in entries|sort %} | 15 const int k{{suffix}}NameCount = {{entries|length}}; |
16 | |
17 void* {{suffix}}NamesStorage[k{{suffix}}NameCount * ((sizeof(AtomicString) + siz eof(void *) - 1) / sizeof(void *))]; | |
18 | |
19 {% for entry in entries|sort(case_sensitive=True) %} | |
Jens Widell
2014/09/26 06:09:46
Since we're sorting a list of structures (not stri
Daniel Bratell
2014/09/26 07:59:28
Done.
| |
16 {% filter enable_conditional(entry.Conditional) %} | 20 {% filter enable_conditional(entry.Conditional) %} |
17 DEFINE_GLOBAL(AtomicString, {{entry|symbol}}) | 21 const AtomicString& {{entry|symbol}} = reinterpret_cast<AtomicString*>(&{{suffix }}NamesStorage)[{{loop.index0}}]; |
18 {% endfilter %} | 22 {% endfilter %} |
19 {% endfor %} | 23 {% endfor %} |
20 | 24 |
21 void init{{suffix}}() | 25 void init{{suffix}}() |
22 { | 26 { |
23 {% for entry in entries|sort %} | 27 struct NameEntry { |
24 {% filter enable_conditional(entry.Conditional) %} | 28 const char* name; |
25 StringImpl* {{entry|symbol}}Impl = StringImpl::createStatic("{{entry|cpp_nam e}}", {{entry|cpp_name|length}}, {{entry|cpp_name|hash}}); | 29 unsigned hash; |
26 {% endfilter %} | 30 unsigned char length; |
31 }; | |
32 | |
33 static const NameEntry kNames[] = { | |
34 {% for entry in entries|sort(case_sensitive=True) %} | |
35 { "{{entry|cpp_name}}", {{entry|cpp_name|hash}}, {{entry|cpp_name|length }} }, | |
Jens Widell
2014/09/26 06:09:46
I don't really understand why "|cpp_name" is used
Daniel Bratell
2014/09/26 07:59:29
I am not expert on this, but it seems that while M
Jens Widell
2014/09/26 08:44:57
Right. (I'm sorry I didn't fully investigate befor
| |
27 {% endfor %} | 36 {% endfor %} |
37 }; | |
28 | 38 |
29 {% for entry in entries|sort %} | 39 for (size_t i = 0; i < WTF_ARRAY_LENGTH(kNames); i++) { |
30 {% filter enable_conditional(entry.Conditional) %} | 40 StringImpl* stringImpl = StringImpl::createStatic(kNames[i].name, kNames [i].length, kNames[i].hash); |
31 new ((void*)&{{entry|symbol}}) AtomicString({{entry|symbol}}Impl); | 41 void* address = reinterpret_cast<AtomicString*>(&{{suffix}}NamesStorage) + i; |
32 {% endfilter %} | 42 new (address) AtomicString(stringImpl); |
33 {% endfor %} | 43 } |
34 } | 44 } |
35 | 45 |
36 } // {{namespace}}Names | 46 } // {{namespace}}Names |
37 } // namespace blink | 47 } // namespace blink |
OLD | NEW |