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

Unified 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, 11 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 side-by-side diff with in-line comments
Download patch
Index: mojo/public/bindings/generators/cpp_templates/struct_builder_definition.tmpl
diff --git a/mojo/public/bindings/generators/cpp_templates/struct_builder_definition.tmpl b/mojo/public/bindings/generators/cpp_templates/struct_builder_definition.tmpl
index e1fc09e397210c19f1470e867f696cc1fe714ace..eea1e9aecb188c33cbc35f71f3c4425786f657fb 100644
--- a/mojo/public/bindings/generators/cpp_templates/struct_builder_definition.tmpl
+++ b/mojo/public/bindings/generators/cpp_templates/struct_builder_definition.tmpl
@@ -6,32 +6,55 @@
{%- set _ = dtor_name.append("NULL") %}
{%- endif %}
-{%- macro set_default(field) -%}
-{%- if field.kind|is_string_kind -%}
-set_{{field.name}}(mojo::String({{field.default}}));
-{%- elif field.kind|is_array_kind -%}
+{%- macro set_default(kind, value, depth) -%}
+{#--- Strings ---#}
+{%- if kind|is_string_kind -%}
+{{caller("mojo::String(" ~ value ~ ")")}}
+{#--- Arrays ---#}
+{%- elif kind|is_array_kind %}
+{%- set _ = value|verify_token_type("ARRAY") %}
{
- {{field.kind|cpp_wrapper_type}}::Builder tmp({{field.default|length}});
-{%- for element in field.default %}
- tmp[{{loop.index0}}] = {{element}};
-{%- endfor %}
- set_{{field.name}}(tmp.Finish());
+ {{kind|cpp_wrapper_type}}::Builder tmp{{depth}}({{value[1]|length}});
+{%- for element in value[1] %}
+{%- filter indent(2) %}
+{%- call(result) set_default(kind.kind, element, depth+1) %}
+tmp{{depth}}[{{loop.index0}}] = {{result}};
+{%- endcall %}
+{%- endfilter %}
+{%- endfor -%}
+ {{caller("tmp" ~ depth ~ ".Finish()")|indent(2)}}
}
-{%- elif field.kind|is_object_kind -%}
+{#--- Objects ---#}
+{%- elif kind|is_object_kind %}
+{%- set _ = value|verify_token_type("OBJECT") %}
{
- {{field.kind|cpp_wrapper_type}}::Builder tmp;
- // TODO
- set_{{field.name}}(tmp.Finish());
+ {{kind|cpp_wrapper_type}}::Builder tmp{{depth}};
+{%- set struct = structs|struct_by_name(kind.name) %}
+{%- for element in value[1] %}
+{#- Use struct.packed_fields to order struct values by ordinal number #}
+{%- set subfield = struct.fields[loop.index0] %}
+{%- filter indent(2) %}
+{%- call(result) set_default(subfield.kind, element, depth+1) %}
+tmp{{depth}}.set_{{subfield.name}}({{result}});
+{%- endcall %}
+{%- endfilter %}
+{%- endfor -%}
+ {{caller("tmp" ~ depth ~ ".Finish()")|indent(2)}}
}
+{#--- POD types ---#}
{%- else -%}
-set_{{field.name}}({{field.default}});
+{{caller(value)}}
{%- endif %}
{%- endmacro %}
{{class_name}}::Builder::Builder(mojo::Buffer* buf)
: data_(Data::New(buf, {{dtor_name[0]}})) {
{%- for pf in struct.packed.packed_fields if pf.field.default %}
- {{set_default(pf.field)|indent(2)}}
+{%- filter indent(2) %}
+{%- call(result) set_default(pf.field.kind, pf.field.default, 0) %}
+set_{{pf.field.name}}({{result}});
+{%- endcall %}
+{%- endfilter %}
{%- endfor %}
}
« 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