-{%- 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))}}
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 %}
{#- 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 %}
{%- 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 %}
{%- 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) {