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 }