| 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: |
| 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: |
| 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 |