Upstream version 7.35.144.0
[platform/framework/web/crosswalk.git] / src / mojo / public / bindings / generators / js_templates / struct_definition.tmpl
index e80e675..1686820 100644 (file)
@@ -1,4 +1,4 @@
-{%- macro set_default(kind, value, depth) -%}
+{%- macro set_default(module, kind, value, depth) -%}
 {#--- Strings ---#}
 {%-   if kind|is_string_kind -%}
 {{caller(value|expression_to_text(module))}}
@@ -9,7 +9,7 @@
   var tmp{{depth}} = [];
 {%-     for element in value[1] %}
 {%-       filter indent(2) %}
-{%-         call(result) set_default(kind.kind, element, depth+1) %}
+{%-         call(result) set_default(module, kind.kind, element, depth+1) %}
 tmp{{depth}}[{{loop.index0}}] = {{result}};
 {%-         endcall %}
 {%-       endfilter %}
@@ -26,7 +26,7 @@ tmp{{depth}}[{{loop.index0}}] = {{result}};
 {#-     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) %}
+{%-       call(result) set_default(module, subfield.kind, element, depth+1) %}
 tmp{{depth}}.{{subfield.name}} = {{result}};
 {%-       endcall %}
 {%-     endfilter %}
@@ -39,13 +39,20 @@ tmp{{depth}}.{{subfield.name}} = {{result}};
 {%-   endif %}
 {%- endmacro %}
 
-
 {#--- Begin #}
+{#--- Enums. We must define these before the constructor because they
+      may be used there. Later, we alias these to be class static variables. #}
+{%- from "enum_definition.tmpl" import enum_def %}
+{%  for enum in struct.enums %}
+  var {{enum_def("%s_%s"|format(struct.name, enum.name), enum, module)}}
+{%  endfor %}
+
+{#--- Constructor #}
   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) %}
+{%-     call(result) set_default(module, packed_field.field.kind, packed_field.field.default, 0) %}
 this.{{packed_field.field.name}} = {{result}};
 {%-     endcall %}
 {%-   endfilter %}
@@ -55,13 +62,13 @@ this.{{packed_field.field.name}} = {{result}};
 {%- endfor %}
   }
 
-{#--- Enums #}
-{%- from "enum_definition.tmpl" import enum_def -%}
+{#--- Alias any Struct_Enum enums to Struct.Enum #}
 {%  for enum in struct.enums %}
-{{  enum_def("%s.%s"|format(struct.name, enum.name), enum)}}
-{%  endfor %}
+  {{struct.name}}.{{enum.name}} = {{struct.name}}_{{enum.name}};
+{%- endfor %}
 
 {#--- Encoding and decoding #}
+
   {{struct.name}}.encodedSize = codec.kStructHeaderSize + {{struct.packed|payload_size}};
 
   {{struct.name}}.decode = function(decoder) {