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

Side by Side Diff: mojo/public/bindings/generators/cpp_templates/struct_builder_definition.tmpl

Issue 139613005: Support default values for complex objects in mojom. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 10 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 | Annotate | Revision Log
OLDNEW
1 {%- set class_name = struct.name -%} 1 {%- set class_name = struct.name -%}
2 {%- set dtor_name = [] %} 2 {%- set dtor_name = [] %}
3 {%- if struct|is_struct_with_handles %} 3 {%- if struct|is_struct_with_handles %}
4 {%- set _ = dtor_name.append("&internal::%s_Data_Destructor"|format(struct.nam e)) %} 4 {%- set _ = dtor_name.append("&internal::%s_Data_Destructor"|format(struct.nam e)) %}
5 {%- else %} 5 {%- else %}
6 {%- set _ = dtor_name.append("NULL") %} 6 {%- set _ = dtor_name.append("NULL") %}
7 {%- endif %} 7 {%- endif %}
8 8
9 {%- macro set_default(field) -%} 9 {%- macro set_default(kind, value, depth) -%}
10 {%- if field.kind|is_string_kind -%} 10 {#--- Strings ---#}
11 set_{{field.name}}(mojo::String({{field.default}})); 11 {%- if kind|is_string_kind -%}
12 {%- elif field.kind|is_array_kind -%} 12 {{caller("mojo::String(" ~ value ~ ")")}}
13 {#--- Arrays ---#}
14 {%- elif kind|is_array_kind %}
15 {%- set _ = value|verify_token_type("ARRAY") %}
13 { 16 {
14 {{field.kind|cpp_wrapper_type}}::Builder tmp({{field.default|length}}); 17 {{kind|cpp_wrapper_type}}::Builder tmp{{depth}}({{value[1]|length}});
15 {%- for element in field.default %} 18 {%- for element in value[1] %}
16 tmp[{{loop.index0}}] = {{element}}; 19 {%- filter indent(2) %}
17 {%- endfor %} 20 {%- call(result) set_default(kind.kind, element, depth+1) %}
18 set_{{field.name}}(tmp.Finish()); 21 tmp{{depth}}[{{loop.index0}}] = {{result}};
22 {%- endcall %}
23 {%- endfilter %}
24 {%- endfor -%}
25 {{caller("tmp" ~ depth ~ ".Finish()")|indent(2)}}
19 } 26 }
20 {%- elif field.kind|is_object_kind -%} 27 {#--- Objects ---#}
28 {%- elif kind|is_object_kind %}
29 {%- set _ = value|verify_token_type("OBJECT") %}
21 { 30 {
22 {{field.kind|cpp_wrapper_type}}::Builder tmp; 31 {{kind|cpp_wrapper_type}}::Builder tmp{{depth}};
23 // TODO 32 {%- set struct = structs|struct_by_name(kind.name) %}
24 set_{{field.name}}(tmp.Finish()); 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)}}
25 } 43 }
44 {#--- POD types ---#}
26 {%- else -%} 45 {%- else -%}
27 set_{{field.name}}({{field.default}}); 46 {{caller(value)}}
28 {%- endif %} 47 {%- endif %}
29 {%- endmacro %} 48 {%- endmacro %}
30 49
31 {{class_name}}::Builder::Builder(mojo::Buffer* buf) 50 {{class_name}}::Builder::Builder(mojo::Buffer* buf)
32 : data_(Data::New(buf, {{dtor_name[0]}})) { 51 : data_(Data::New(buf, {{dtor_name[0]}})) {
33 {%- for pf in struct.packed.packed_fields if pf.field.default %} 52 {%- for pf in struct.packed.packed_fields if pf.field.default %}
34 {{set_default(pf.field)|indent(2)}} 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 %}
35 {%- endfor %} 58 {%- endfor %}
36 } 59 }
37 60
38 {{class_name}} {{class_name}}::Builder::Finish() { 61 {{class_name}} {{class_name}}::Builder::Finish() {
39 Data* data = NULL; 62 Data* data = NULL;
40 std::swap(data, data_); 63 std::swap(data, data_);
41 return mojo::internal::Wrap(data); 64 return mojo::internal::Wrap(data);
42 } 65 }
OLDNEW
« no previous file with comments | « mojo/apps/js/bindings/sample_service_unittests.js ('k') | mojo/public/bindings/generators/js_templates/struct_definition.tmpl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698