Index: mojo/public/bindings/generators/js_templates/struct_definition.tmpl |
diff --git a/mojo/public/bindings/generators/js_templates/struct_definition.tmpl b/mojo/public/bindings/generators/js_templates/struct_definition.tmpl |
index 1ab7b94f18605c892b0ac577ef9463b612dea601..622f4a382bf3d3edfe39522db519fdbfa53eac38 100644 |
--- a/mojo/public/bindings/generators/js_templates/struct_definition.tmpl |
+++ b/mojo/public/bindings/generators/js_templates/struct_definition.tmpl |
@@ -1,6 +1,56 @@ |
+{%- macro set_default(kind, value, depth) -%} |
+{#--- Strings ---#} |
+{%- if kind|is_string_kind -%} |
+{{caller(value)}} |
+{#--- Arrays ---#} |
+{%- elif kind|is_array_kind %} |
+{%- set _ = value|verify_token_type("ARRAY") %} |
+{ |
+ var tmp{{depth}} = []; |
+{%- 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)|indent(2)}} |
+} |
+{#--- Objects ---#} |
+{%- elif kind|is_object_kind %} |
+{%- set _ = value|verify_token_type("OBJECT") %} |
+{ |
+ var tmp{{depth}} = new {{kind.name}}(); |
+{%- 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}}.{{subfield.name}} = {{result}}; |
+{%- endcall %} |
+{%- endfilter %} |
+{%- endfor -%} |
+ {{caller("tmp" ~ depth)|indent(2)}} |
+} |
+{#--- POD types ---#} |
+{%- else -%} |
+{{caller(value)}} |
+{%- endif %} |
+{%- endmacro %} |
+ |
+ |
function {{struct.name}}() { |
{%- for packed_field in struct.packed.packed_fields %} |
+{%- if packed_field.field.default %} |
+{%- filter indent(4) %} |
+{%- call(result) set_default(packed_field.field.kind, packed_field.field.default, 0) %} |
+this.{{packed_field.field.name}} = {{result}}; |
+{%- endcall %} |
+{%- endfilter %} |
+{%- else %} |
this.{{packed_field.field.name}} = {{packed_field.field|default_value}}; |
+{%- endif %} |
{%- endfor %} |
} |