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

Side by Side Diff: mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl

Issue 317073005: Mojom: Add 'default' keyword for initializing structs to non-null value. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 6 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 | Annotate | Revision Log
OLDNEW
1 {%- macro set_default(module, kind, value, depth) -%}
2 {#--- Strings ---#}
3 {%- if kind|is_string_kind -%}
4 {{caller(value|expression_to_text)}}
5 {#--- Arrays ---#}
6 {%- elif kind|is_array_kind %}
7 {%- set _ = value|verify_token_type("ARRAY") %}
8 {
9 var tmp{{depth}} = [];
10 {%- for element in value[1] %}
11 {%- filter indent(2) %}
12 {%- call(result) set_default(module, kind.kind, element, depth+1) %}
13 tmp{{depth}}[{{loop.index0}}] = {{result}};
14 {%- endcall %}
15 {%- endfilter %}
16 {%- endfor -%}
17 {{caller("tmp" ~ depth)|indent(2)}}
18 }
19 {#--- Objects ---#}
20 {%- elif kind|is_object_kind %}
21 {%- set _ = value|verify_token_type("OBJECT") %}
22 {
23 var tmp{{depth}} = new {{kind|js_type}}();
24 {%- set struct = kinds[kind.spec] %}
25 {%- for element in value[1] %}
26 {#- Use struct.packed_fields to order struct values by ordinal number #}
27 {%- set subfield = struct.fields[loop.index0] %}
28 {%- filter indent(2) %}
29 {%- call(result) set_default(module, subfield.kind, element, depth+1) %}
30 tmp{{depth}}.{{subfield.name}} = {{result}};
31 {%- endcall %}
32 {%- endfilter %}
33 {%- endfor -%}
34 {{caller("tmp" ~ depth)|indent(2)}}
35 }
36 {#--- POD types ---#}
37 {%- else -%}
38 {{caller(value|expression_to_text)}}
39 {%- endif %}
40 {%- endmacro %}
41
42 {#--- Begin #} 1 {#--- Begin #}
43 function {{struct.name}}() { 2 function {{struct.name}}() {
44 this.initDefaults_(); 3 this.initDefaults_();
45 } 4 }
46 5
47 {#--- Enums #} 6 {#--- Enums #}
48 {%- from "enum_definition.tmpl" import enum_def %} 7 {%- from "enum_definition.tmpl" import enum_def %}
49 {% for enum in struct.enums %} 8 {% for enum in struct.enums %}
50 {{enum_def("%s.%s"|format(struct.name, enum.name), enum, module)}} 9 {{enum_def("%s.%s"|format(struct.name, enum.name), enum, module)}}
51 {% endfor %} 10 {% endfor %}
52 11
53 {#--- Constants #} 12 {#--- Constants #}
54 {% for constant in struct.constants %} 13 {% for constant in struct.constants %}
55 {{struct.name}}.{{constant.name}} = {{constant.value|expression_to_text}}; 14 {{struct.name}}.{{constant.name}} = {{constant.value|expression_to_text}};
56 {% endfor %} 15 {% endfor %}
57 16
58 {#--- Set up defaults #} 17 {#--- Set up defaults #}
59 {{struct.name}}.prototype.initDefaults_ = function() { 18 {{struct.name}}.prototype.initDefaults_ = function() {
60 {%- for packed_field in struct.packed.packed_fields %} 19 {%- for packed_field in struct.packed.packed_fields %}
61 {%- if packed_field.field.default %}
62 {%- filter indent(4) %}
63 {%- call(result) set_default(module, packed_field.field.kind, packed_field.f ield.default, 0) %}
64 this.{{packed_field.field.name}} = {{result}};
65 {%- endcall %}
66 {%- endfilter %}
67 {%- else %}
68 this.{{packed_field.field.name}} = {{packed_field.field|default_value}}; 20 this.{{packed_field.field.name}} = {{packed_field.field|default_value}};
69 {%- endif %}
70 {%- endfor %} 21 {%- endfor %}
71 }; 22 };
72 23
73 {#--- Encoding and decoding #} 24 {#--- Encoding and decoding #}
74 25
75 {{struct.name}}.encodedSize = codec.kStructHeaderSize + {{struct.packed|payloa d_size}}; 26 {{struct.name}}.encodedSize = codec.kStructHeaderSize + {{struct.packed|payloa d_size}};
76 27
77 {{struct.name}}.decode = function(decoder) { 28 {{struct.name}}.decode = function(decoder) {
78 var packed; 29 var packed;
79 var val = new {{struct.name}}(); 30 var val = new {{struct.name}}();
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 {%- else %} 63 {%- else %}
113 {%- for packed_field in byte.packed_fields %} 64 {%- for packed_field in byte.packed_fields %}
114 encoder.{{packed_field.field.kind|encode_snippet}}val.{{packed_field.field.n ame}}); 65 encoder.{{packed_field.field.kind|encode_snippet}}val.{{packed_field.field.n ame}});
115 {%- endfor %} 66 {%- endfor %}
116 {%- endif %} 67 {%- endif %}
117 {%- if byte.is_padding %} 68 {%- if byte.is_padding %}
118 encoder.skip(1); 69 encoder.skip(1);
119 {%- endif %} 70 {%- endif %}
120 {%- endfor %} 71 {%- endfor %}
121 }; 72 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698