github.com/mmatczuk/gohan@v0.0.0-20170206152520-30e45d9bdb69/extension/gohanscript/templates/lib.tmpl (about)

     1  package {{ export_package }}
     2  
     3  // AUTO GENERATED CODE DO NOT MODIFY MANUALLY
     4  
     5  import (
     6      "github.com/cloudwan/gohan/extension/gohanscript"
     7      "{{full_package}}"
     8  {% for import in imports %}
     9      "{{ import }}"
    10  {% endfor %}
    11  )
    12  
    13  {% macro result(decl) %}
    14  {% for param in decl.Type.Results.List %}
    15      {% if param.Type.Name == "error" %}err{% else %}result{{ forloop.Counter }}{% endif %}{% if !forloop.Last %},{% endif %}{% endfor %}{% endmacro %}
    16  
    17  {% macro call(package, decl) %}
    18      {{package}}.{{ decl.Name.Name }}({{ params(decl) }})
    19  {% endmacro %}
    20  
    21  {% macro quoted_params(decl) %}
    22  {% for param in decl.Type.Params.List %}{% for name in param.Names %}"{{ name.Name | to_under_score_case }}",{% endfor %}{% endfor %}{% endmacro %}
    23  
    24  {% macro params(decl) %}
    25  {% for param in decl.Type.Params.List %}{% for name in param.Names %}{{ name.Name }},{% endfor %}{% endfor %}{% endmacro %}
    26  
    27  {% macro gohanscript_cast_params(decl) %}
    28  {% for param in decl.Type.Params.List %}{% for name in param.Names %}
    29  var {{ name.Name }} {{ param.Type | astType }}
    30  i{{ name.Name }} := stmt.Arg("{{ name.Name | to_under_score_case }}", context)
    31  if i{{ name.Name }} != nil {
    32      {{ name.Name }} = i{{ name.Name }}.({{ param.Type | astType }})
    33  }{% endfor %}
    34  {% endfor %}
    35  {% endmacro %}
    36  
    37  {% macro gohanscript(package, decl) %}
    38  gohanscript.RegisterStmtParser("{{ decl.Name.Name | to_under_score_case }}",
    39      func (stmt *gohanscript.Stmt) (func(*gohanscript.Context) (interface{}, error), error) {
    40         return func(context *gohanscript.Context) (interface{}, error) {
    41             {{ gohanscript_cast_params(decl) }}
    42             {% if decl.Type.Results.List | length == 0 %}
    43                 {{ call(package, decl) }}
    44                 return nil, nil
    45             {% else %}
    46                 {{ result(decl) }} := {{ call(package, decl) }}
    47                 {% if decl.Type.Results.List | length == 1 %}
    48                     {% if decl.Type.Results.List.0.Type.Name == "error" %}
    49                         return nil , err
    50                     {% else %}
    51                         return result1 , nil
    52                     {% endif %}
    53                 {% elif decl.Type.Results.List | length == 2 &&  decl.Type.Results.List.1.Type.Name == "error" %}
    54                     return result1, err
    55                 {% else %}
    56                     return []interface{}{ {{ result(decl) }} }, nil
    57                 {% endif %}
    58            {% endif %}
    59            }, nil})
    60  {% endmacro %}
    61  
    62  
    63  {% macro minigo_params(decl) %}
    64  {%        if decl.Type.Params.List | length > index %}
    65  {% set i = 0 %}
    66  {%         for param in decl.Type.Params.List %}
    67  {%             for name in param.Names %}
    68                      {{ name.Name }}, _ := args[{{ i }}].({{ param.Type | astType }}){% set i = i + 1 %}
    69  {%             endfor %}
    70  {%        endfor %}
    71  {%     endif %}
    72  {% endmacro %}
    73  
    74  {% macro minigo(package, decl) %}
    75      gohanscript.RegisterMiniGoFunc("{{ decl.Name.Name }}",
    76          func (vm *gohanscript.VM, args []interface{}) []interface{} {
    77              {{ minigo_params(decl) }}
    78              {% if decl.Type.Results.List | length == 0 %}
    79                  {{ call(package, decl) }}
    80                  return nil
    81              {% else %}
    82                   {{ result(decl) }} := {{ call(package, decl) }}
    83                  return []interface{}{ {{ result(decl) }} }
    84              {% endif %}
    85      })
    86  {% endmacro %}
    87  
    88  {% macro func_body(package, decl) %}
    89  {{ gohanscript(package, decl) }}
    90  {{ minigo(package, decl) }}
    91  {% endmacro %}
    92  
    93  func init(){
    94  {% for decl in funcs %}
    95  {% if decl.Body != nil %} {{ func_body(package, decl) }} {% endif %}
    96  {% endfor %}
    97  }