Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(326)

Side by Side Diff: third_party/WebKit/Source/build/scripts/templates/ElementLookupTrie.cpp.tmpl

Issue 1938343002: Generate a series of nested switch statements to parse CSSPrimitiveValue units. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 {% from 'macros.tmpl' import license %} 1 {% from 'macros.tmpl' import license %}
2 {% from 'macros.tmpl' import trie_length_switch %}
3 {% macro trie_return_statement(tag) %}
4 return {{tag}}Tag.localName().impl();
5 {% endmacro %}
2 {{license()}} 6 {{license()}}
3 {% macro trie_switch(trie, index) %}
4 {# FIXME: No need to switch if there's only a single item in the subtrie:
5 can just have an if statement as we're currently doing for leaves. #}
6 switch (data[{{index}}]) {
7 {% for char, subtrie, tag, conditions in trie %}
8 case '{{char}}':
9 {% if subtrie %}{# Recurse on subtrie #}
10 {{trie_switch(subtrie, index + 1) | indent}}
11 {% elif conditions %}{# Check suffix #}
12 if ({{conditions | join(' && ')}})
13 return {{tag}}Tag.localName().impl();
14 return 0;
15 {% else %}{# Terminal node (no suffix) #}
16 return {{tag}}Tag.localName().impl();
17 {% endif %}
18 {% endfor %}
19 }
20 return 0;
21 {% endmacro %}
22 7
23 #include "{{namespace}}ElementLookupTrie.h" 8 #include "{{namespace}}ElementLookupTrie.h"
24 9
25 #include "{{namespace}}Names.h" 10 #include "{{namespace}}Names.h"
26 11
27 namespace blink { 12 namespace blink {
28 13
29 using namespace {{namespace}}Names; 14 using namespace {{namespace}}Names;
30 15
31 StringImpl* lookup{{namespace}}Tag(const UChar* data, unsigned length) 16 StringImpl* lookup{{namespace}}Tag(const UChar* data, unsigned length)
32 { 17 {
33 ASSERT(data); 18 DCHECK(data);
34 ASSERT(length); 19 DCHECK(length);
35 switch (length) { 20 {{trie_length_switch(empty_case_return_value, length_tries, trie_return_stat ement, '0')}}
36 {% for length, trie in length_tries %}
37 case {{length}}:
38 {{trie_switch(trie, 0) | indent(8)}}
39 {% endfor %}
40 }
41 return 0;
42 } 21 }
43 22
44 } // namespace blink 23 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698