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

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

Issue 2864753002: Mojo code generator: simplify how imported types and values are handled. (Closed)
Patch Set: . Created 3 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 {#--- Begin #} 1 {#--- Begin #}
2 function {{struct.name}}(values) { 2 function {{struct.name}}(values) {
3 this.initDefaults_(); 3 this.initDefaults_();
4 this.initFields_(values); 4 this.initFields_(values);
5 } 5 }
6 6
7 {#--- Enums #} 7 {#--- Enums #}
8 {%- from "enum_definition.tmpl" import enum_def %} 8 {%- from "enum_definition.tmpl" import enum_def %}
9 {% for enum in struct.enums %} 9 {% for enum in struct.enums %}
10 {{enum_def("%s.%s"|format(struct.name, enum.name), enum)}} 10 {{enum_def("%s.%s"|format(struct.name, enum.name), enum)}}
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 {#- Before validating fields introduced at a certain version, we need to add 51 {#- Before validating fields introduced at a certain version, we need to add
52 a version check, which makes sure we skip further validation if |object| 52 a version check, which makes sure we skip further validation if |object|
53 is from an earlier version. |last_checked_version| records the last 53 is from an earlier version. |last_checked_version| records the last
54 version that we have added such version check. #} 54 version that we have added such version check. #}
55 {%- from "validation_macros.tmpl" import validate_struct_field %} 55 {%- from "validation_macros.tmpl" import validate_struct_field %}
56 {%- set last_checked_version = 0 %} 56 {%- set last_checked_version = 0 %}
57 {%- for packed_field in struct.packed.packed_fields_in_ordinal_order %} 57 {%- for packed_field in struct.packed.packed_fields_in_ordinal_order %}
58 {%- set offset = packed_field|field_offset %} 58 {%- set offset = packed_field|field_offset %}
59 {%- set field = packed_field.field %} 59 {%- set field = packed_field.field %}
60 {%- set name = struct.name ~ '.' ~ field.name %} 60 {%- set name = struct.name ~ '.' ~ field.name %}
61 {% if field|is_object_field or field|is_any_handle_or_interface_field or 61 {% if field.kind|is_object_kind or
62 field|is_enum_field %} 62 field.kind|is_any_handle_or_interface_kind or
63 field.kind|is_enum_kind %}
63 {% if packed_field.min_version > last_checked_version %} 64 {% if packed_field.min_version > last_checked_version %}
64 {% set last_checked_version = packed_field.min_version %} 65 {% set last_checked_version = packed_field.min_version %}
65 // version check {{name}} 66 // version check {{name}}
66 if (!messageValidator.isFieldInStructVersion(offset, {{packed_field.min_vers ion}})) 67 if (!messageValidator.isFieldInStructVersion(offset, {{packed_field.min_vers ion}}))
67 return validator.validationError.NONE; 68 return validator.validationError.NONE;
68 {%- endif -%} 69 {%- endif -%}
69 {{validate_struct_field(field, offset, name)|indent(4)}} 70 {{validate_struct_field(field, offset, name)|indent(4)}}
70 {%- endif %} 71 {%- endif %}
71 {%- endfor %} 72 {%- endfor %}
72 73
73 return validator.validationError.NONE; 74 return validator.validationError.NONE;
74 }; 75 };
75 76
76 {#--- Encoding and decoding #} 77 {#--- Encoding and decoding #}
77 78
78 {{struct.name}}.encodedSize = codec.kStructHeaderSize + {{struct.packed|payloa d_size}}; 79 {{struct.name}}.encodedSize = codec.kStructHeaderSize + {{struct.packed|payloa d_size}};
79 80
80 {{struct.name}}.decode = function(decoder) { 81 {{struct.name}}.decode = function(decoder) {
81 var packed; 82 var packed;
82 var val = new {{struct.name}}(); 83 var val = new {{struct.name}}();
83 var numberOfBytes = decoder.readUint32(); 84 var numberOfBytes = decoder.readUint32();
84 var version = decoder.readUint32(); 85 var version = decoder.readUint32();
85 {%- for byte in struct.bytes %} 86 {%- for byte in struct.bytes %}
86 {%- if byte.packed_fields|length >= 1 and 87 {%- if byte.packed_fields|length >= 1 and
87 byte.packed_fields[0].field|is_bool_field %} 88 byte.packed_fields[0].field.kind|is_bool_kind %}
88 packed = decoder.readUint8(); 89 packed = decoder.readUint8();
89 {%- for packed_field in byte.packed_fields %} 90 {%- for packed_field in byte.packed_fields %}
90 val.{{packed_field.field.name}} = (packed >> {{packed_field.bit}}) & 1 ? tru e : false; 91 val.{{packed_field.field.name}} = (packed >> {{packed_field.bit}}) & 1 ? tru e : false;
91 {%- endfor %} 92 {%- endfor %}
92 {%- else %} 93 {%- else %}
93 {%- for packed_field in byte.packed_fields %} 94 {%- for packed_field in byte.packed_fields %}
94 val.{{packed_field.field.name}} = decoder.{{packed_field.field.kind|decode_s nippet}}; 95 val.{{packed_field.field.name}} = decoder.{{packed_field.field.kind|decode_s nippet}};
95 {%- endfor %} 96 {%- endfor %}
96 {%- endif %} 97 {%- endif %}
97 {%- if byte.is_padding %} 98 {%- if byte.is_padding %}
98 decoder.skip(1); 99 decoder.skip(1);
99 {%- endif %} 100 {%- endif %}
100 {%- endfor %} 101 {%- endfor %}
101 return val; 102 return val;
102 }; 103 };
103 104
104 {{struct.name}}.encode = function(encoder, val) { 105 {{struct.name}}.encode = function(encoder, val) {
105 var packed; 106 var packed;
106 encoder.writeUint32({{struct.name}}.encodedSize); 107 encoder.writeUint32({{struct.name}}.encodedSize);
107 encoder.writeUint32({{struct.versions[-1].version}}); 108 encoder.writeUint32({{struct.versions[-1].version}});
108 109
109 {%- for byte in struct.bytes %} 110 {%- for byte in struct.bytes %}
110 {%- if byte.packed_fields|length >= 1 and 111 {%- if byte.packed_fields|length >= 1 and
111 byte.packed_fields[0].field|is_bool_field %} 112 byte.packed_fields[0].field.kind|is_bool_kind %}
112 packed = 0; 113 packed = 0;
113 {%- for packed_field in byte.packed_fields %} 114 {%- for packed_field in byte.packed_fields %}
114 packed |= (val.{{packed_field.field.name}} & 1) << {{packed_field.bit}} 115 packed |= (val.{{packed_field.field.name}} & 1) << {{packed_field.bit}}
115 {%- endfor %} 116 {%- endfor %}
116 encoder.writeUint8(packed); 117 encoder.writeUint8(packed);
117 {%- else %} 118 {%- else %}
118 {%- for packed_field in byte.packed_fields %} 119 {%- for packed_field in byte.packed_fields %}
119 encoder.{{packed_field.field.kind|encode_snippet}}val.{{packed_field.field.n ame}}); 120 encoder.{{packed_field.field.kind|encode_snippet}}val.{{packed_field.field.n ame}});
120 {%- endfor %} 121 {%- endfor %}
121 {%- endif %} 122 {%- endif %}
122 {%- if byte.is_padding %} 123 {%- if byte.is_padding %}
123 encoder.skip(1); 124 encoder.skip(1);
124 {%- endif %} 125 {%- endif %}
125 {%- endfor %} 126 {%- endfor %}
126 }; 127 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698