OLD | NEW |
---|---|
1 {#--- Begin #} | 1 {#--- Begin #} |
2 | 2 |
3 {%- import "encoding_macros.tmpl" as encoding_macros %} | 3 {%- import "encoding_macros.tmpl" as encoding_macros %} |
4 {% import "mojom_type_macros.tmpl" as mojom_type_macros %} | |
4 | 5 |
5 {%- macro enum_def(union) %} | 6 {%- macro enum_def(union, typepkg, package) %} |
6 enum {{union|name}}Tag { | 7 enum {{union|name}}Tag { |
7 {%- for field in union.fields %} | 8 {%- for field in union.fields %} |
8 {{field|tag_name}}, | 9 {{field|tag_name}}, |
9 {%- endfor %} | 10 {%- endfor %} |
10 unknown | 11 unknown |
11 } | 12 } |
12 {%- endmacro %} | 13 {%- endmacro %} |
13 | 14 |
14 {%- macro wrapper_def(union) %} | 15 {%- macro wrapper_def(union) %} |
15 class {{union|name}} extends bindings.Union { | 16 class {{union|name}} extends bindings.Union { |
(...skipping 28 matching lines...) Expand all Loading... | |
44 } | 45 } |
45 {%- endfor %} | 46 {%- endfor %} |
46 | 47 |
47 static {{union|name}} decode(bindings.Decoder decoder0, int offset) { | 48 static {{union|name}} decode(bindings.Decoder decoder0, int offset) { |
48 int size = decoder0.decodeUint32(offset); | 49 int size = decoder0.decodeUint32(offset); |
49 if (size == 0) { | 50 if (size == 0) { |
50 return null; | 51 return null; |
51 } | 52 } |
52 {{union|name}} result = new {{union|name}}(); | 53 {{union|name}} result = new {{union|name}}(); |
53 | 54 |
54 // TODO(azani): Handle unknown union member. | 55 // TODO(azani): Handle unknown union member. An assert breaks validation_uni ttest. |
55 {{union|name}}Tag tag = _int_to_tag[decoder0.decodeUint32(offset + 4)]; | 56 {{union|name}}Tag tag = _int_to_tag[decoder0.decodeUint32(offset + 4)]; |
56 switch (tag) { | 57 switch (tag) { |
57 {%- for field in union.fields %} | 58 {%- for field in union.fields %} |
58 case {{union|name}}Tag.{{field|tag_name}}: | 59 case {{union|name}}Tag.{{field|tag_name}}: |
59 {%- if field.kind|is_union_kind %} | 60 {%- if field.kind|is_union_kind %} |
60 var decoder1 = decoder0.decodePointer(offset + 8, {{field.kind|is_nullab le_kind|dart_true_false}}); | 61 var decoder1 = decoder0.decodePointer(offset + 8, {{field.kind|is_nullab le_kind|dart_true_false}}); |
61 result.{{field|name}} = {{field.kind|dart_type}}.decode(decoder1, 0); | 62 result.{{field|name}} = {{field.kind|dart_type}}.decode(decoder1, 0); |
62 {%- else %} | 63 {%- else %} |
63 {{encoding_macros.decode('result.' ~ field|name, field.kind, "offset + 8 ", 0)|indent(8)}} | 64 {{encoding_macros.decode('result.' ~ field|name, field.kind, "offset + 8 ", 0)|indent(8)}} |
64 {%- endif %} | 65 {%- endif %} |
65 break; | 66 break; |
66 {%- endfor %} | 67 {%- endfor %} |
68 default: | |
zra
2015/11/24 17:34:44
If this is an error or unreachable, that should be
alexfandrianto
2015/12/18 01:53:19
Someone else fixed this.
| |
69 break; | |
67 } | 70 } |
68 | 71 |
69 return result; | 72 return result; |
70 } | 73 } |
71 | 74 |
72 void encode(bindings.Encoder encoder0, int offset) { | 75 void encode(bindings.Encoder encoder0, int offset) { |
73 // TODO(azani): Error when trying to encode an unknown member. | 76 // TODO(azani): Error when trying to encode an unknown member. |
74 encoder0.encodeUint32(16, offset); | 77 encoder0.encodeUint32(16, offset); |
75 encoder0.encodeUint32(_tag_to_int[_tag], offset + 4); | 78 encoder0.encodeUint32(_tag_to_int[_tag], offset + 4); |
76 switch (_tag) { | 79 switch (_tag) { |
77 {%- for field in union.fields %} | 80 {%- for field in union.fields %} |
78 case {{union|name}}Tag.{{field|tag_name}}: | 81 case {{union|name}}Tag.{{field|tag_name}}: |
79 {%- if field.kind|is_union_kind %} | 82 {%- if field.kind|is_union_kind %} |
80 encoder0.encodeNestedUnion({{field|name}}, offset + 8, {{field.kind|is_n ullable_kind|dart_true_false}}); | 83 encoder0.encodeNestedUnion({{field|name}}, offset + 8, {{field.kind|is_n ullable_kind|dart_true_false}}); |
81 {%- else %} | 84 {%- else %} |
82 {{encoding_macros.encode(field|name, field.kind, "offset + 8", 0)|indent (8)}} | 85 {{encoding_macros.encode(field|name, field.kind, "offset + 8", 0)|indent (8)}} |
83 {%- endif %} | 86 {%- endif %} |
84 break; | 87 break; |
85 {%- endfor %} | 88 {%- endfor %} |
89 default: | |
zra
2015/11/24 17:34:44
ditto.
alexfandrianto
2015/12/18 01:53:19
Done.
| |
90 break; | |
86 } | 91 } |
87 } | 92 } |
88 | 93 |
89 String toString() { | 94 String toString() { |
90 String result = "{{union|name}}("; | 95 String result = "{{union|name}}("; |
91 switch (_tag) { | 96 switch (_tag) { |
92 {%- for field in union.fields %} | 97 {%- for field in union.fields %} |
93 case {{union|name}}Tag.{{field|tag_name}}: | 98 case {{union|name}}Tag.{{field|tag_name}}: |
94 result += "{{field|name}}"; | 99 result += "{{field|name}}"; |
95 break; | 100 break; |
96 {%- endfor %} | 101 {%- endfor %} |
97 default: | 102 default: |
98 result += "unknown"; | 103 result += "unknown"; |
99 } | 104 } |
100 result += ": $_data)"; | 105 result += ": $_data)"; |
101 return result; | 106 return result; |
102 } | 107 } |
103 } | 108 } |
104 {%- endmacro %} | 109 {%- endmacro %} |
105 | 110 |
106 | 111 |
107 {%- macro union_def(union) %} | 112 {%- macro union_def(union, typepkg, package) %} |
108 {{enum_def(union)}} | 113 {{enum_def(union)}} |
109 {{wrapper_def(union)}} | 114 {{wrapper_def(union)}} |
115 | |
116 {{ mojom_type_macros.writeMojomTypeDef(union, typepkg, package) }} | |
110 {%- endmacro %} | 117 {%- endmacro %} |
OLD | NEW |