Home | History | Annotate | Download | only in js_templates
      1 {%- macro get_handle_deps(kind, name) -%}
      2 {%-   if kind|is_struct_kind or kind|is_union_kind -%}
      3 {{name}}.getHandleDeps()
      4 {%-   elif kind|is_array_kind -%}
      5 [].concat.apply([], {{name}}.map(function(val) {
      6   if (val) {
      7     return {{get_handle_deps(kind.kind, 'val')|indent(4)}};
      8   }
      9   return [];
     10 }))
     11 {%-   elif kind|is_map_kind -%}
     12 [].concat.apply([], Array.from({{name}}.values()).map(function(val) {
     13   if (val) {
     14     return {{get_handle_deps(kind.value_kind, 'val')|indent(4)}};
     15   }
     16   return [];
     17 }))
     18 {%-   elif kind|is_any_handle_or_interface_kind -%}
     19   ["{{kind|fuzz_handle_name}}"]
     20 {%- else -%}
     21   []
     22 {%-   endif -%}
     23 {%- endmacro -%}
     24 
     25 {%- macro set_handles(kind, name) -%}
     26 {%-   if kind|is_struct_kind or kind|is_union_kind -%}
     27 idx = {{name}}.setHandlesInternal_(handles, idx)
     28 {%-   elif kind|is_array_kind -%}
     29 {{name}}.forEach(function(val) {
     30   {{set_handles(kind.kind, 'val')|indent(2)}};
     31 })
     32 {%-   elif kind|is_map_kind -%}
     33 {{name}}.forEach(function(val) {
     34   {{set_handles(kind.value_kind, 'val')|indent(2)}};
     35 })
     36 {%-   elif kind|is_any_handle_or_interface_kind -%}
     37 {{name}} = handles[idx++];
     38 {%-   endif -%}
     39 {%- endmacro -%}
     40 
     41 {%- macro build_call(obj, operation, type, name) -%}
     42 {%-   if name -%}
     43 {{obj}}.{{operation}}{{type}}({{((name,) + varargs)|join(', ')}})
     44 {%-   else -%}
     45 {{obj}}.{{operation}}{{type}}({{varargs|join(', ')}})
     46 {%-   endif -%}
     47 {%- endmacro -%}
     48 
     49 {%- macro generate_or_mutate_enum(obj, operation, kind, name) -%}
     50 {%-   if kind.max_value is not none -%}
     51 {{build_call(obj, operation, 'Enum', name, '0', kind.max_value)}}
     52 {%-   else -%}
     53 {{build_call(obj, operation, 'Enum', name)}}
     54 {%-   endif %}
     55 {%- endmacro -%}
     56 
     57 {%- macro generate_or_mutate_array(obj, operation, kind, name) -%}
     58 {%-   if operation == 'mutate' -%}
     59 {{obj}}.{{operation}}Array({{name}}, function(val) {
     60   return {{generate_or_mutate(obj, operation, kind.kind, 'val')|indent(2)}};
     61 })
     62 {%-   else -%}
     63 {{obj}}.{{operation}}Array(function() {
     64   return {{generate_or_mutate(obj, operation, kind.kind)|indent(2)}};
     65 })
     66 {%-   endif -%}
     67 {%- endmacro -%}
     68 
     69 {%- macro generate_or_mutate_map(obj, operation, kind, name) -%}
     70 {%-   if operation == 'mutate' -%}
     71 {{obj}}.{{operation}}Map({{name}},
     72   function(val) {
     73     return {{generate_or_mutate(obj, operation, kind.key_kind, 'val')|indent(4)}};
     74   },
     75   function(val) {
     76     return {{generate_or_mutate(obj, operation, kind.value_kind, 'val')|indent(4)}};
     77   })
     78 {%-   else -%}
     79 {{obj}}.{{operation}}Map(
     80   function() {
     81     return {{generate_or_mutate(obj, operation, kind.key_kind)|indent(4)}};
     82   },
     83   function() {
     84     return {{generate_or_mutate(obj, operation, kind.value_kind)|indent(4)}};
     85   })
     86 {%-   endif -%}
     87 {%- endmacro -%}
     88 
     89 {%- macro generate_or_mutate_primitive(obj, operation, kind, name) -%}
     90 {%-   if kind|is_reference_kind -%}
     91 {{build_call(obj, operation, kind|primitive_to_fuzz_type, name, kind.is_nullable|to_js_boolean)}}
     92 {%-   else -%}
     93 {{build_call(obj, operation, kind|primitive_to_fuzz_type, name)}}
     94 {%-   endif -%}
     95 {%- endmacro -%}
     96 
     97 {%- macro generate_or_mutate_interface(obj, operation, kind, name) -%}
     98 {%-   if kind|is_interface_request_kind -%}
     99 {{build_call(obj, operation, 'InterfaceRequest', name, '"' ~ kind.kind.module.namespace ~ '.' ~ kind.kind.name ~ '"', kind.is_nullable|to_js_boolean)}}
    100 {%-   elif kind|is_interface_kind -%}
    101 {{build_call(obj, operation, 'Interface', name, '"' ~ kind.module.namespace ~ '.' ~ kind.name ~ '"', kind.is_nullable|to_js_boolean)}}
    102 {%-   elif kind|is_associated_interface_request_kind -%}
    103 {{build_call(obj, operation, 'AssociatedInterfaceRequest', name, '"' ~ kind.kind.module.namespace ~ '.' ~ kind.kind.name ~ '"', kind.is_nullable|to_js_boolean)}}
    104 {%-   elif kind|is_associated_interface_kind -%}
    105 {{build_call(obj, operation, 'AssociatedInterface', name, '"' ~ kind.kind.module.namespace ~ '.' ~ kind.kind.name ~ '"', kind.is_nullable|to_js_boolean)}}
    106 {%-   endif -%}
    107 {%- endmacro -%}
    108 
    109 {%- macro generate_or_mutate(obj, operation, kind, name='') -%}
    110 {%-   if kind|is_primitive_kind -%}
    111 {{generate_or_mutate_primitive(obj, operation, kind, name)}}
    112 {%-   elif kind|is_any_interface_kind -%}
    113 {{generate_or_mutate_interface(obj, operation, kind, name)}}
    114 {%-   elif kind|is_enum_kind -%}
    115 {{generate_or_mutate_enum(obj, operation, kind, name)}}
    116 {%-   elif kind|is_struct_kind -%}
    117 {{build_call(obj, operation, 'Struct', name, kind.module.namespace ~ '.' ~ kind.name, kind.is_nullable|to_js_boolean)}}
    118 {%-   elif kind|is_union_kind -%}
    119 {{build_call(obj, operation, 'Union', name, kind.module.namespace ~ '.' ~ kind.name, kind.is_nullable|to_js_boolean)}}
    120 {%-   elif kind|is_array_kind -%}
    121 {{generate_or_mutate_array(obj, operation, kind, name)}}
    122 {%-   elif kind|is_map_kind -%}
    123 {{generate_or_mutate_map(obj, operation, kind, name)}}
    124 {%-   endif -%}
    125 {%- endmacro -%}
    126