| OLD | NEW | 
 | (Empty) | 
|   1 {%- set class_name = struct.name -%} |  | 
|   2 {%- set dtor_name = [] %} |  | 
|   3 {%- if struct|is_struct_with_handles %} |  | 
|   4 {%-   set _ = dtor_name.append("&internal::%s_Data_Destructor"|format(struct.nam
    e)) %} |  | 
|   5 {%- else %} |  | 
|   6 {%-   set _ = dtor_name.append("NULL") %} |  | 
|   7 {%- endif %} |  | 
|   8  |  | 
|   9 {%- macro set_default(kind, value, depth) -%} |  | 
|  10 {#--- Strings ---#} |  | 
|  11 {%-   if kind|is_string_kind -%} |  | 
|  12 {{caller("mojo::String(" ~ value|expression_to_text(module) ~ ")")}} |  | 
|  13 {#--- Arrays ---#} |  | 
|  14 {%-   elif kind|is_array_kind %} |  | 
|  15 {%-     set _ = value|verify_token_type("ARRAY") %} |  | 
|  16 { |  | 
|  17   {{kind|cpp_wrapper_type}}::Builder tmp{{depth}}({{value[1]|length}}); |  | 
|  18 {%-     for element in value[1] %} |  | 
|  19 {%-       filter indent(2) %} |  | 
|  20 {%-         call(result) set_default(kind.kind, element, depth+1) %} |  | 
|  21 tmp{{depth}}[{{loop.index0}}] = {{result}}; |  | 
|  22 {%-         endcall %} |  | 
|  23 {%-       endfilter %} |  | 
|  24 {%-     endfor -%} |  | 
|  25   {{caller("tmp" ~ depth ~ ".Finish()")|indent(2)}} |  | 
|  26 } |  | 
|  27 {#--- Objects ---#} |  | 
|  28 {%-   elif kind|is_object_kind %} |  | 
|  29 {%-     set _ = value|verify_token_type("OBJECT") %} |  | 
|  30 { |  | 
|  31   {{kind|cpp_wrapper_type}}::Builder tmp{{depth}}; |  | 
|  32 {%-   set struct = kinds[kind.spec] %} |  | 
|  33 {%-   for element in value[1] %} |  | 
|  34 {#-     Use struct.packed_fields to order struct values by ordinal number #} |  | 
|  35 {%-     set subfield = struct.fields[loop.index0] %} |  | 
|  36 {%-     filter indent(2) %} |  | 
|  37 {%-       call(result) set_default(subfield.kind, element, depth+1) %} |  | 
|  38 tmp{{depth}}.set_{{subfield.name}}({{result}}); |  | 
|  39 {%-       endcall %} |  | 
|  40 {%-     endfilter %} |  | 
|  41 {%-   endfor -%} |  | 
|  42   {{caller("tmp" ~ depth ~ ".Finish()")|indent(2)}} |  | 
|  43 } |  | 
|  44 {#--- POD types ---#} |  | 
|  45 {%-   else -%} |  | 
|  46 {{caller(value|expression_to_text(module))}} |  | 
|  47 {%-   endif %} |  | 
|  48 {%- endmacro %} |  | 
|  49  |  | 
|  50 {{class_name}}::Builder::Builder(mojo::Buffer* buf) |  | 
|  51     : data_(Data::New(buf, {{dtor_name[0]}})) { |  | 
|  52 {%- for pf in struct.packed.packed_fields if pf.field.default %} |  | 
|  53 {%-   filter indent(2) %} |  | 
|  54 {%-     call(result) set_default(pf.field.kind, pf.field.default, 0) %} |  | 
|  55 set_{{pf.field.name}}({{result}}); |  | 
|  56 {%-     endcall %} |  | 
|  57 {%-   endfilter %} |  | 
|  58 {%- endfor %} |  | 
|  59 } |  | 
|  60  |  | 
|  61 {{class_name}} {{class_name}}::Builder::Finish() { |  | 
|  62   Data* data = NULL; |  | 
|  63   std::swap(data, data_); |  | 
|  64   return mojo::internal::Wrap(data); |  | 
|  65 } |  | 
| OLD | NEW |