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/bindings/generators/js_templates/struct_definition.tmpl

Issue 226263002: Mojo: Move mojo/public/bindings to mojo/public/tools/bindings. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 6 years, 8 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
(Empty)
1 {%- macro set_default(module, kind, value, depth) -%}
2 {#--- Strings ---#}
3 {%- if kind|is_string_kind -%}
4 {{caller(value|expression_to_text(module))}}
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(module))}}
39 {%- endif %}
40 {%- endmacro %}
41
42 {#--- Begin #}
43 {#--- Enums. We must define these before the constructor because they
44 may be used there. Later, we alias these to be class static variables. #}
45 {%- from "enum_definition.tmpl" import enum_def %}
46 {% for enum in struct.enums %}
47 var {{enum_def("%s_%s"|format(struct.name, enum.name), enum, module)}}
48 {% endfor %}
49
50 {#--- Constructor #}
51 function {{struct.name}}() {
52 {%- for packed_field in struct.packed.packed_fields %}
53 {%- if packed_field.field.default %}
54 {%- filter indent(4) %}
55 {%- call(result) set_default(module, packed_field.field.kind, packed_field.f ield.default, 0) %}
56 this.{{packed_field.field.name}} = {{result}};
57 {%- endcall %}
58 {%- endfilter %}
59 {%- else %}
60 this.{{packed_field.field.name}} = {{packed_field.field|default_value}};
61 {%- endif %}
62 {%- endfor %}
63 }
64
65 {#--- Alias any Struct_Enum enums to Struct.Enum #}
66 {% for enum in struct.enums %}
67 {{struct.name}}.{{enum.name}} = {{struct.name}}_{{enum.name}};
68 {%- endfor %}
69
70 {#--- Encoding and decoding #}
71
72 {{struct.name}}.encodedSize = codec.kStructHeaderSize + {{struct.packed|payloa d_size}};
73
74 {{struct.name}}.decode = function(decoder) {
75 var packed;
76 var val = new {{struct.name}}();
77 var numberOfBytes = decoder.read32();
78 var numberOfFields = decoder.read32();
79 {%- for byte in struct.bytes %}
80 {%- if byte.packed_fields|length > 1 %}
81 packed = decoder.read8();
82 {%- for packed_field in byte.packed_fields %}
83 val.{{packed_field.field.name}} = (packed >> {{packed_field.bit}}) & 1 ? tru e : false;
84 {%- endfor %}
85 {%- else %}
86 {%- for packed_field in byte.packed_fields %}
87 val.{{packed_field.field.name}} = decoder.{{packed_field.field.kind|decode_s nippet}};
88 {%- endfor %}
89 {%- endif %}
90 {%- if byte.is_padding %}
91 decoder.skip(1);
92 {%- endif %}
93 {%- endfor %}
94 return val;
95 };
96
97 {{struct.name}}.encode = function(encoder, val) {
98 var packed;
99 encoder.write32({{struct.name}}.encodedSize);
100 encoder.write32({{struct.packed.packed_fields|length}});
101
102 {%- for byte in struct.bytes %}
103 {%- if byte.packed_fields|length > 1 %}
104 packed = 0;
105 {%- for packed_field in byte.packed_fields %}
106 packed |= (val.{{packed_field.field.name}} & 1) << {{packed_field.bit}}
107 {%- endfor %}
108 encoder.write8(packed);
109 {%- else %}
110 {%- for packed_field in byte.packed_fields %}
111 encoder.{{packed_field.field.kind|encode_snippet}}val.{{packed_field.field.n ame}});
112 {%- endfor %}
113 {%- endif %}
114 {%- if byte.is_padding %}
115 encoder.skip(1);
116 {%- endif %}
117 {%- endfor %}
118 };
OLDNEW
« no previous file with comments | « mojo/public/bindings/generators/js_templates/module.js.tmpl ('k') | mojo/public/bindings/generators/mojom_cpp_generator.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698