| OLD | NEW |
| 1 {%- set mojom_type = union|get_qualified_name_for_kind %} | 1 {%- set mojom_type = union|get_qualified_name_for_kind %} |
| 2 {%- set data_type = union|get_qualified_name_for_kind(internal=True) %} | 2 {%- set data_type = union|get_qualified_name_for_kind(internal=True) %} |
| 3 | 3 |
| 4 namespace internal { | 4 namespace internal { |
| 5 | 5 |
| 6 // static | 6 // static |
| 7 size_t UnionSerializerImpl<{{mojom_type}}Ptr>::PrepareToSerialize( | 7 size_t UnionSerializerImpl<{{mojom_type}}Ptr>::PrepareToSerialize( |
| 8 {{mojom_type}}Ptr& input, | 8 {{mojom_type}}Ptr& input, |
| 9 bool inlined, | 9 bool inlined, |
| 10 SerializationContext* context) { | 10 SerializationContext* context) { |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 49 UnionAccessor<{{mojom_type}}> input_acc(input.get()); | 49 UnionAccessor<{{mojom_type}}> input_acc(input.get()); |
| 50 // TODO(azani): Handle unknown and objects. | 50 // TODO(azani): Handle unknown and objects. |
| 51 // Set the not-null flag. | 51 // Set the not-null flag. |
| 52 result->size = 16; | 52 result->size = 16; |
| 53 result->tag = input->which(); | 53 result->tag = input->which(); |
| 54 switch (input->which()) { | 54 switch (input->which()) { |
| 55 {%- for field in union.fields %} | 55 {%- for field in union.fields %} |
| 56 case {{mojom_type}}::Tag::{{field.name|upper}}: { | 56 case {{mojom_type}}::Tag::{{field.name|upper}}: { |
| 57 {%- set serializer_type = field.kind|unmapped_type_for_serializer %} | 57 {%- set serializer_type = field.kind|unmapped_type_for_serializer %} |
| 58 {%- if field.kind|is_object_kind %} | 58 {%- if field.kind|is_object_kind %} |
| 59 typename decltype(result->data.f_{{field.name}})::BaseType* ptr; |
| 59 {%- if field.kind|is_union_kind %} | 60 {%- if field.kind|is_union_kind %} |
| 60 mojo::internal::Serialize<{{serializer_type}}>( | 61 mojo::internal::Serialize<{{serializer_type}}>( |
| 61 *(input_acc.data()->{{field.name}}), buf, | 62 *(input_acc.data()->{{field.name}}), buf, &ptr, false, context); |
| 62 &result->data.f_{{field.name}}.ptr, false, context); | |
| 63 {%- elif field.kind|is_array_kind or field.kind|is_map_kind %} | 63 {%- elif field.kind|is_array_kind or field.kind|is_map_kind %} |
| 64 const ContainerValidateParams {{field.name}}_validate_params( | 64 const ContainerValidateParams {{field.name}}_validate_params( |
| 65 {{field.kind|get_container_validate_params_ctor_args|indent(16)}}); | 65 {{field.kind|get_container_validate_params_ctor_args|indent(16)}}); |
| 66 mojo::internal::Serialize<{{serializer_type}}>( | 66 mojo::internal::Serialize<{{serializer_type}}>( |
| 67 *(input_acc.data()->{{field.name}}), buf, | 67 *(input_acc.data()->{{field.name}}), buf, &ptr, |
| 68 &result->data.f_{{field.name}}.ptr, &{{field.name}}_validate_params, | 68 &{{field.name}}_validate_params, context); |
| 69 context); | |
| 70 {%- else %} | 69 {%- else %} |
| 71 mojo::internal::Serialize<{{serializer_type}}>( | 70 mojo::internal::Serialize<{{serializer_type}}>( |
| 72 *(input_acc.data()->{{field.name}}), buf, | 71 *(input_acc.data()->{{field.name}}), buf, &ptr, context); |
| 73 &result->data.f_{{field.name}}.ptr, context); | |
| 74 {%- endif %} | 72 {%- endif %} |
| 73 result->data.f_{{field.name}}.Set(ptr); |
| 75 {%- if not field.kind|is_nullable_kind %} | 74 {%- if not field.kind|is_nullable_kind %} |
| 76 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING( | 75 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING( |
| 77 !result->data.f_{{field.name}}.ptr, | 76 !ptr, mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER, |
| 78 mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER, | |
| 79 "null {{field.name}} in {{union.name}} union"); | 77 "null {{field.name}} in {{union.name}} union"); |
| 80 {%- endif %} | 78 {%- endif %} |
| 81 | 79 |
| 82 {%- elif field.kind|is_any_handle_or_interface_kind %} | 80 {%- elif field.kind|is_any_handle_or_interface_kind %} |
| 83 mojo::internal::Serialize<{{serializer_type}}>( | 81 mojo::internal::Serialize<{{serializer_type}}>( |
| 84 *input_acc.data()->{{field.name}}, &result->data.f_{{field.name}}, | 82 *input_acc.data()->{{field.name}}, &result->data.f_{{field.name}}, |
| 85 context); | 83 context); |
| 86 {%- if not field.kind|is_nullable_kind %} | 84 {%- if not field.kind|is_nullable_kind %} |
| 87 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING( | 85 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING( |
| 88 !mojo::internal::IsHandleOrInterfaceValid(result->data.f_{{field.nam
e}}), | 86 !mojo::internal::IsHandleOrInterfaceValid(result->data.f_{{field.nam
e}}), |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 122 if (input && !input->is_null()) { | 120 if (input && !input->is_null()) { |
| 123 {{mojom_type}}Ptr result({{mojom_type}}::New()); | 121 {{mojom_type}}Ptr result({{mojom_type}}::New()); |
| 124 UnionAccessor<{{mojom_type}}> result_acc(result.get()); | 122 UnionAccessor<{{mojom_type}}> result_acc(result.get()); |
| 125 switch (input->tag) { | 123 switch (input->tag) { |
| 126 {%- for field in union.fields %} | 124 {%- for field in union.fields %} |
| 127 case {{mojom_type}}::Tag::{{field.name|upper}}: { | 125 case {{mojom_type}}::Tag::{{field.name|upper}}: { |
| 128 {%- set serializer_type = field.kind|unmapped_type_for_serializer %} | 126 {%- set serializer_type = field.kind|unmapped_type_for_serializer %} |
| 129 {%- if field.kind|is_object_kind %} | 127 {%- if field.kind|is_object_kind %} |
| 130 result_acc.SwitchActive({{mojom_type}}::Tag::{{field.name|upper}}); | 128 result_acc.SwitchActive({{mojom_type}}::Tag::{{field.name|upper}}); |
| 131 if (!mojo::internal::Deserialize<{{serializer_type}}>( | 129 if (!mojo::internal::Deserialize<{{serializer_type}}>( |
| 132 input->data.f_{{field.name}}.ptr, | 130 input->data.f_{{field.name}}.Get(), |
| 133 result_acc.data()->{{field.name}}, context)) | 131 result_acc.data()->{{field.name}}, context)) |
| 134 success = false; | 132 success = false; |
| 135 | 133 |
| 136 {%- elif field.kind|is_any_handle_or_interface_kind %} | 134 {%- elif field.kind|is_any_handle_or_interface_kind %} |
| 137 typename std::remove_reference< | 135 typename std::remove_reference< |
| 138 decltype(result->get_{{field.name}}())>::type result_{{field.name}}; | 136 decltype(result->get_{{field.name}}())>::type result_{{field.name}}; |
| 139 bool ret = mojo::internal::Deserialize<{{serializer_type}}>( | 137 bool ret = mojo::internal::Deserialize<{{serializer_type}}>( |
| 140 &input->data.f_{{field.name}}, &result_{{field.name}}, context); | 138 &input->data.f_{{field.name}}, &result_{{field.name}}, context); |
| 141 DCHECK(ret); | 139 DCHECK(ret); |
| 142 result->set_{{field.name}}(std::move(result_{{field.name}})); | 140 result->set_{{field.name}}(std::move(result_{{field.name}})); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 157 {%- endfor %} | 155 {%- endfor %} |
| 158 } | 156 } |
| 159 *output = std::move(result); | 157 *output = std::move(result); |
| 160 } else { | 158 } else { |
| 161 output->reset(); | 159 output->reset(); |
| 162 } | 160 } |
| 163 return success; | 161 return success; |
| 164 } | 162 } |
| 165 | 163 |
| 166 } // namespace internal | 164 } // namespace internal |
| OLD | NEW |