|
|
|
@ -14,27 +14,13 @@
|
|
|
|
|
#if !BHL_FRONT
|
|
|
|
|
static bhl.Coroutine {{local_fn_name}}(VM.Frame frm, ValStack stack, FuncArgsInfo args_info, ref BHS status) {
|
|
|
|
|
|
|
|
|
|
{{ _self.read_args2natives(o, '__') }}
|
|
|
|
|
|
|
|
|
|
{%- if this_type and not has_token(o, 'bhl_static') ~%}
|
|
|
|
|
|
|
|
|
|
var dv_self = stack.Pop();
|
|
|
|
|
{%if has_token(this_type, 'bhl_blob')%}ref{%endif%} var {{ _self.val2native(this_type, 'dv_self', '__self', true, has_token(this_type, 'bhl_blob')) }};
|
|
|
|
|
|
|
|
|
|
{%- endif ~%}
|
|
|
|
|
{{ _self.read_args2natives(o, '__', this_type) }}
|
|
|
|
|
|
|
|
|
|
{%~ if o.returntype %}
|
|
|
|
|
var return_val =
|
|
|
|
|
{%- endif ~%}
|
|
|
|
|
{{this_prefix}}{{ _self.call_native_prefix_func(o, '__') }}
|
|
|
|
|
|
|
|
|
|
{%- if this_type and not has_token(o, 'bhl_static') ~%}
|
|
|
|
|
{%if has_token(this_type, 'bhl_custom_rw')%}
|
|
|
|
|
dv_self.Encode(__self);
|
|
|
|
|
{%- endif ~%}
|
|
|
|
|
dv_self.Release();
|
|
|
|
|
{%- endif ~%}
|
|
|
|
|
|
|
|
|
|
{# pass back and release ref args #}
|
|
|
|
|
{%- for arg in o.args -%}
|
|
|
|
|
{%- if has_token(arg, 'bhl_ref_arg') ~%}
|
|
|
|
@ -93,9 +79,7 @@
|
|
|
|
|
{%- if o.args -%}
|
|
|
|
|
var args = Script_{{o.name|norm_name}}.ReadArgs(frm, stack, args_info);
|
|
|
|
|
Script_{{o.name|norm_name}}.Exec(frm, args {{_self.out_results(o)}});
|
|
|
|
|
{% if has_disposable_args(o) ~%}
|
|
|
|
|
args.Dispose();
|
|
|
|
|
{%- endif ~%}
|
|
|
|
|
{%- else ~%}
|
|
|
|
|
Script_{{o.name|norm_name}}.Exec(frm {{_self.out_results(o)}});
|
|
|
|
|
{%- endif ~%}
|
|
|
|
@ -131,60 +115,24 @@
|
|
|
|
|
{%- endif -%}
|
|
|
|
|
{%- endmacro -%}
|
|
|
|
|
|
|
|
|
|
{%- macro return_out_results_single_common(type, var_name = 'result0') -%}
|
|
|
|
|
{%- if type == 'any' -%}
|
|
|
|
|
FuncRetValUtil.FuncReturnSingleValueRaw(frm, stack, {{ var_name }});
|
|
|
|
|
{%- else -%}
|
|
|
|
|
{%- if type is instanceof('\\mtgBuiltinType') -%}
|
|
|
|
|
{%- if type.isfloat -%}
|
|
|
|
|
FuncRetValUtil.FuncReturnSingleValueFloat(frm, stack, (double){{ var_name }});
|
|
|
|
|
{%- elseif type.isdouble -%}
|
|
|
|
|
FuncRetValUtil.FuncReturnSingleValueFloat(frm, stack, (double){{ var_name }});
|
|
|
|
|
{%- elseif type.isuint8 -%}
|
|
|
|
|
FuncRetValUtil.FuncReturnSingleValueInt(frm, stack, (double){{ var_name }});
|
|
|
|
|
{%- elseif type.isuint16 or type.isuint32 -%}
|
|
|
|
|
FuncRetValUtil.FuncReturnSingleValueInt(frm, stack, (double){{ var_name }});
|
|
|
|
|
{%- elseif type.isuint64 -%}
|
|
|
|
|
FuncRetValUtil.FuncReturnSingleValueInt(frm, stack, (double){{ var_name }});
|
|
|
|
|
{%- elseif type.isstring -%}
|
|
|
|
|
FuncRetValUtil.FuncReturnSingleValueString(frm, stack, (string){{ var_name }});
|
|
|
|
|
{%- elseif type.isbool -%}
|
|
|
|
|
FuncRetValUtil.FuncReturnSingleValueBool(frm, stack, (bool){{ var_name }});
|
|
|
|
|
{%- else -%}
|
|
|
|
|
FuncRetValUtil.FuncReturnSingleValueInt(frm, stack, (double){{ var_name }});
|
|
|
|
|
{%- endif -%}
|
|
|
|
|
{%- else -%}
|
|
|
|
|
{{Error('Unexpected type for single-value return optimization: ' ~ type)}}
|
|
|
|
|
{%- endif -%}
|
|
|
|
|
{%- endif -%}
|
|
|
|
|
{%- endmacro -%}
|
|
|
|
|
|
|
|
|
|
{%- macro return_out_results(o) -%}
|
|
|
|
|
{%- if o.returntype -%}
|
|
|
|
|
{%if not has_token(o, 'bhl_coroutine') and (o.returntype == 'any' or o.returntype is instanceof('\\mtgBuiltinType')) %}
|
|
|
|
|
{{ _self.return_out_results_single_common(o.returntype) }}
|
|
|
|
|
{%- else ~%}
|
|
|
|
|
Script_{{o.name|norm_name}}.ReturnValue(frm, stack
|
|
|
|
|
{%- for idx, type_item in types_array(o.returntype) -%}
|
|
|
|
|
, result{{idx}}
|
|
|
|
|
{%- endfor -%}
|
|
|
|
|
);
|
|
|
|
|
{%- endif -%}
|
|
|
|
|
{%- endif -%}
|
|
|
|
|
{%- endmacro -%}
|
|
|
|
|
|
|
|
|
|
{%- macro return_method_out_results(o, m) -%}
|
|
|
|
|
{%- if m.returntype -%}
|
|
|
|
|
{%if not has_token(m, 'bhl_coroutine') and (m.returntype == 'any' or m.returntype is instanceof('\\mtgBuiltinType')) %}
|
|
|
|
|
{{ _self.return_out_results_single_common(m.returntype) }}
|
|
|
|
|
{%- else ~%}
|
|
|
|
|
Script_{{o.name|norm_name}}.Method_{{m.name}}.ReturnValue(frm, stack
|
|
|
|
|
{%- for idx, type_item in types_array(m.returntype) -%}
|
|
|
|
|
, result{{idx}}
|
|
|
|
|
{%- endfor -%}
|
|
|
|
|
);
|
|
|
|
|
{%- endif -%}
|
|
|
|
|
{%- endif -%}
|
|
|
|
|
{%- endmacro -%}
|
|
|
|
|
|
|
|
|
|
{%- macro decl_func_partial_class(o, prefix, this_type = null) ~%}
|
|
|
|
@ -227,9 +175,7 @@ Script_{{o.name|norm_name}}.Method_{{m.name}}.ReturnValue(frm, stack
|
|
|
|
|
{%- else ~%}
|
|
|
|
|
var args = Script_{{o.name|norm_name}}.Method_{{m.name}}.ReadArgs(frm, stack, args_info);
|
|
|
|
|
Script_{{o.name|norm_name}}.Method_{{m.name}}.Exec(frm, args {{_self.out_results(m)}});
|
|
|
|
|
{% if has_disposable_args(m) ~%}
|
|
|
|
|
args.Dispose();
|
|
|
|
|
{%- endif ~%}
|
|
|
|
|
{{_self.return_method_out_results(o, m)}}
|
|
|
|
|
return null;
|
|
|
|
|
{%- endif ~%}
|
|
|
|
@ -265,9 +211,7 @@ Script_{{o.name|norm_name}}.Method_{{m.name}}.ReturnValue(frm, stack
|
|
|
|
|
|
|
|
|
|
var args = Script_{{o.name|norm_name}}.Method_{{m.name}}.ReadArgs(frm, stack, args_info);
|
|
|
|
|
Script_{{o.name|norm_name}}.Method_{{m.name}}.Exec(frm, args {{_self.out_results(m)}});
|
|
|
|
|
{% if has_disposable_args(m) ~%}
|
|
|
|
|
args.Dispose();
|
|
|
|
|
{% endif ~%}
|
|
|
|
|
{{_self.return_method_out_results(o, m)}}
|
|
|
|
|
|
|
|
|
|
return null;
|
|
|
|
@ -313,9 +257,7 @@ Script_{{o.name|norm_name}}.Method_{{m.name}}.ReturnValue(frm, stack
|
|
|
|
|
public override void Cleanup(VM.Frame frm, bhl.VM.ExecState exec) {
|
|
|
|
|
Cleanup(frm);
|
|
|
|
|
{% if o.args or this_type ~%}
|
|
|
|
|
{% if has_disposable_args(o) ~%}
|
|
|
|
|
args.Dispose();
|
|
|
|
|
{% endif %}
|
|
|
|
|
args = default;
|
|
|
|
|
{% endif %}
|
|
|
|
|
}
|
|
|
|
@ -323,11 +265,7 @@ Script_{{o.name|norm_name}}.Method_{{m.name}}.ReturnValue(frm, stack
|
|
|
|
|
{%- endmacro -%}
|
|
|
|
|
|
|
|
|
|
{%- macro Args(o, this_type) ~%}
|
|
|
|
|
public struct Args
|
|
|
|
|
{% if has_disposable_args(o) ~%}
|
|
|
|
|
: IDisposable
|
|
|
|
|
{% endif %}
|
|
|
|
|
{
|
|
|
|
|
public struct Args : IDisposable {
|
|
|
|
|
{% if this_type and not has_token(o, 'bhl_static') ~%}
|
|
|
|
|
public {{this_type|native_type}} self;
|
|
|
|
|
{% endif %}
|
|
|
|
@ -337,12 +275,10 @@ Script_{{o.name|norm_name}}.Method_{{m.name}}.ReturnValue(frm, stack
|
|
|
|
|
|
|
|
|
|
{% endfor %}
|
|
|
|
|
|
|
|
|
|
{% if has_disposable_args(o) ~%}
|
|
|
|
|
public void Dispose()
|
|
|
|
|
{
|
|
|
|
|
{{ _self.dispose_args(o) }}
|
|
|
|
|
}
|
|
|
|
|
{% endif %}
|
|
|
|
|
}
|
|
|
|
|
{%- endmacro -%}
|
|
|
|
|
|
|
|
|
@ -355,8 +291,10 @@ Script_{{o.name|norm_name}}.Method_{{m.name}}.ReturnValue(frm, stack
|
|
|
|
|
{%- endmacro -%}
|
|
|
|
|
|
|
|
|
|
{%- macro ReturnValue(o) -%}
|
|
|
|
|
{%if not has_token(o, 'bhl_coroutine') and (o.returntype == 'any' or o.returntype is instanceof('\\mtgBuiltinType')) %}
|
|
|
|
|
//Will use shared return function {{_self.return_out_results_single_common(o.returntype)}}
|
|
|
|
|
{%if o.returntype == 'any' %}
|
|
|
|
|
static public void ReturnValue(VM.Frame frm, ValStack stack, bhl.Val dv) {
|
|
|
|
|
stack.Push(dv);
|
|
|
|
|
}
|
|
|
|
|
{% else ~%}
|
|
|
|
|
static public void ReturnValue(VM.Frame frm, ValStack stack,
|
|
|
|
|
{%- for idx, type_item in types_array(o.returntype) -%}
|
|
|
|
@ -382,6 +320,7 @@ Script_{{o.name|norm_name}}.Method_{{m.name}}.ReturnValue(frm, stack
|
|
|
|
|
{%- if this_type ~%}
|
|
|
|
|
{{this_type|native_type}} {{prefix}}self = default;
|
|
|
|
|
{%- endif -%}
|
|
|
|
|
|
|
|
|
|
{%- for v in vars -%}
|
|
|
|
|
{%- if has_token(v, 'bhl_ref_arg') -%}
|
|
|
|
|
bhl.Val {{prefix}}{{v.name}} = default;
|
|
|
|
@ -411,7 +350,6 @@ Script_{{o.name|norm_name}}.Method_{{m.name}}.ReturnValue(frm, stack
|
|
|
|
|
{%- set default_counter = default_counter + 1 -%}
|
|
|
|
|
if(!args_info.IsDefaultArgUsed({{o.args|length - count_required_args(o) - default_counter}}))
|
|
|
|
|
{%- endif ~%}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
{%- if has_token(arg, 'bhl_ref_arg') ~%}
|
|
|
|
|
var dv = stack.Pop();
|
|
|
|
@ -425,7 +363,6 @@ Script_{{o.name|norm_name}}.Method_{{m.name}}.ReturnValue(frm, stack
|
|
|
|
|
dv.Release();
|
|
|
|
|
{%- endif ~%}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{#-default arg value-#}
|
|
|
|
|
{%- if has_token(arg, 'default') ~%}
|
|
|
|
|
else
|
|
|
|
@ -503,7 +440,7 @@ Script_{{o.name|norm_name}}.Method_{{m.name}}.ReturnValue(frm, stack
|
|
|
|
|
{%- endfor -%}
|
|
|
|
|
{%- endmacro -%}
|
|
|
|
|
|
|
|
|
|
{%- macro val2native(type, value, native, is_arg = false, is_ref = false) -%}
|
|
|
|
|
{%- macro val2native(type, value, native, is_arg = false) -%}
|
|
|
|
|
{# any special case #}
|
|
|
|
|
{%- if type == 'any' -%}
|
|
|
|
|
{{native}} = {{value}};
|
|
|
|
@ -555,7 +492,8 @@ Script_{{o.name|norm_name}}.Method_{{m.name}}.ReturnValue(frm, stack
|
|
|
|
|
for(int i=0;i<_src_arr_count;++i)
|
|
|
|
|
{
|
|
|
|
|
var _arr_item = _src_arr_type.ArrGetAt({{value}}, i);
|
|
|
|
|
var {{_self.val2native(type.value, '_arr_item', 'tmp')}};
|
|
|
|
|
{#TODO: get rid of replace hack below#}
|
|
|
|
|
{{('var ' ~ _self.val2native(type.value, '_arr_item', 'tmp'))|replace({'tmp = tmp' : '', 'var var' : 'var'})}};
|
|
|
|
|
if(i < _dst_before_count)
|
|
|
|
|
{{native}}[i] = tmp;
|
|
|
|
|
else
|
|
|
|
@ -594,9 +532,9 @@ Script_{{o.name|norm_name}}.Method_{{m.name}}.ReturnValue(frm, stack
|
|
|
|
|
{{native}} = ({{type|native_class_name}})((int){{value}}._num)
|
|
|
|
|
{%- else -%}
|
|
|
|
|
{%- if has_token(type, 'bhl_custom_rw') -%}
|
|
|
|
|
{{native}} = {{value}}.Decode(new {{type|native_class_name}}())
|
|
|
|
|
var tmp = new {{type|native_class_name}}(); {{value}}.Decode(ref tmp); {{native}} = tmp
|
|
|
|
|
{%- elseif has_token(type, 'bhl_blob') -%}
|
|
|
|
|
{{native}} = {%if is_ref%}ref{%endif%} {{value}}.GetBlob<{{type|native_class_name}}>()
|
|
|
|
|
{{native}} = {{value}}.GetBlob<{{type|native_class_name}}>()
|
|
|
|
|
{%- else -%}
|
|
|
|
|
{{native}} = ({{type|native_class_name}}){{value}}._obj
|
|
|
|
|
{%- endif -%}
|
|
|
|
@ -613,7 +551,7 @@ Script_{{o.name|norm_name}}.Method_{{m.name}}.ReturnValue(frm, stack
|
|
|
|
|
{%- else -%}
|
|
|
|
|
|
|
|
|
|
{%- if type is instanceof('\\mtgMetaFunc') -%}
|
|
|
|
|
{{value}}.SetObj({{native}}, Types.Any/*TODO: use real type?*/)
|
|
|
|
|
{{value}}.SetObj({{native}}, Types.Any)
|
|
|
|
|
{%- endif -%}
|
|
|
|
|
|
|
|
|
|
{%- if type is instanceof('\\mtgArrType') -%}
|
|
|
|
@ -655,10 +593,8 @@ Script_{{o.name|norm_name}}.Method_{{m.name}}.ReturnValue(frm, stack
|
|
|
|
|
{{value}}.Encode({{native}})
|
|
|
|
|
{%- elseif has_token(type, 'bhl_blob') -%}
|
|
|
|
|
{{value}}.SetBlob({{native}}, Types_{{type.name|norm_name}}.Value)
|
|
|
|
|
{%- elseif has_token(type, 'bhl_refc') -%}
|
|
|
|
|
{{value}}.SetObj({{native}}, Types_{{type.name|norm_name}}.Value)
|
|
|
|
|
{%- else -%}
|
|
|
|
|
{{value}}.SetObjNoRefc({{native}}, Types_{{type.name|norm_name}}.Value)
|
|
|
|
|
{{value}}.SetObj({{native}}, Types_{{type.name|norm_name}}.Value)
|
|
|
|
|
{%- endif -%}
|
|
|
|
|
{%- endif -%}
|
|
|
|
|
{%- endif -%}
|
|
|
|
@ -680,7 +616,8 @@ Script_{{o.name|norm_name}}.Method_{{m.name}}.ReturnValue(frm, stack
|
|
|
|
|
"{{o.name}}",
|
|
|
|
|
(v) => {
|
|
|
|
|
#if !BHL_FRONT
|
|
|
|
|
var {{_self.val2native(token(o, 'bhl_native_arr_proxy'), 'v', 'tmp')}};
|
|
|
|
|
{#TODO: get rid of replace hack below#}
|
|
|
|
|
{{('var ' ~ _self.val2native(token(o, 'bhl_native_arr_proxy'), 'v', 'tmp'))|replace({'tmp = tmp' : '', 'var var' : 'var'})}};
|
|
|
|
|
return tmp;
|
|
|
|
|
#else
|
|
|
|
|
return null;
|
|
|
|
@ -705,8 +642,7 @@ Script_{{o.name|norm_name}}.Method_{{m.name}}.ReturnValue(frm, stack
|
|
|
|
|
{%- macro reg_enum(o, scope = 'types.ns') ~%}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
const string enumName = "{{o.name|ns_last}}";
|
|
|
|
|
var en = new EnumSymbolNative(new Origin(), enumName
|
|
|
|
|
var en = new EnumSymbolNative(new Origin(), "{{o.name|ns_last}}"
|
|
|
|
|
#if !BHL_FRONT
|
|
|
|
|
, typeof({{o|native_class_name}})
|
|
|
|
|
#else
|
|
|
|
@ -714,16 +650,17 @@ Script_{{o.name|norm_name}}.Method_{{m.name}}.ReturnValue(frm, stack
|
|
|
|
|
#endif
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
System.Type nativeType = null;
|
|
|
|
|
#if !BHL_FRONT
|
|
|
|
|
nativeType = en.GetNativeType();
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{{scope}}.{{o.name|ns_prefix}}Define(en);
|
|
|
|
|
|
|
|
|
|
{%- for fname,v in o.values ~%}
|
|
|
|
|
RegisterEnumValue(en, nativeType, enumName, "{{fname}}", (int){{v}});
|
|
|
|
|
{
|
|
|
|
|
#if !BHL_FRONT
|
|
|
|
|
if(Enum.GetName(en.GetNativeType(), {{v}}) != "{{fname}}")
|
|
|
|
|
throw new Exception("Enum '{{o.name}}' names don't match at value " + {{v}});
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
en.Define(new EnumItemSymbol(new Origin(), "{{fname}}", (int){{v}}));
|
|
|
|
|
}
|
|
|
|
|
{%~ endfor -%}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
@ -749,10 +686,8 @@ Script_{{o.name|norm_name}}.Method_{{m.name}}.ReturnValue(frm, stack
|
|
|
|
|
v.Encode(o);
|
|
|
|
|
{% elseif has_token(o, 'bhl_blob') %}
|
|
|
|
|
v.SetBlob(ref o, type);
|
|
|
|
|
{% elseif has_token(o, 'bhl_refc') %}
|
|
|
|
|
v.SetObj(o, type);
|
|
|
|
|
{% else %}
|
|
|
|
|
v.SetObjNoRefc(o, type);
|
|
|
|
|
v.SetObj(o, type);
|
|
|
|
|
{% endif %}
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
@ -783,7 +718,9 @@ Script_{{o.name|norm_name}}.Method_{{m.name}}.ReturnValue(frm, stack
|
|
|
|
|
, native_type: typeof({{o|native_class_name}})
|
|
|
|
|
{% if has_token(o, 'bhl_custom_rw') %}
|
|
|
|
|
, native_object_getter: (v) => {
|
|
|
|
|
return v.Decode(new {{o|native_class_name}}());
|
|
|
|
|
var tmp = new {{o|native_class_name}}();
|
|
|
|
|
v.Decode(ref tmp);
|
|
|
|
|
return tmp;
|
|
|
|
|
}
|
|
|
|
|
{% elseif has_token(o, 'bhl_blob') %}
|
|
|
|
|
, native_object_getter: (v) => {
|
|
|
|
@ -830,7 +767,8 @@ Script_{{o.name|norm_name}}.Method_{{m.name}}.ReturnValue(frm, stack
|
|
|
|
|
static void get_{{o.name|norm_name}}_{{f.name}}(VM.Frame frm, Val ctx, ref Val v, FieldSymbol fld) {
|
|
|
|
|
#if !BHL_FRONT
|
|
|
|
|
{%~ if has_token(o, 'bhl_custom_rw') ~%}
|
|
|
|
|
{{class}} f = ctx.Decode(new {{class}}());
|
|
|
|
|
{{class}} f = new {{class}}();
|
|
|
|
|
ctx.Decode(ref f);
|
|
|
|
|
{%- elseif has_token(o, 'bhl_blob') ~%}
|
|
|
|
|
ref var f = ref ctx.GetBlob<{{class}}>();
|
|
|
|
|
{%- else ~%}
|
|
|
|
@ -855,7 +793,8 @@ Script_{{o.name|norm_name}}.Method_{{m.name}}.ReturnValue(frm, stack
|
|
|
|
|
static void set_{{o.name|norm_name}}_{{f.name}}(VM.Frame frm, ref Val ctx, Val v, FieldSymbol fld) {
|
|
|
|
|
#if !BHL_FRONT
|
|
|
|
|
{%~ if has_token(o, 'bhl_custom_rw') ~%}
|
|
|
|
|
{{class}} f = ctx.Decode(new {{class}}());
|
|
|
|
|
{{class}} f = new {{class}}();
|
|
|
|
|
ctx.Decode(ref f);
|
|
|
|
|
{%- elseif has_token(o, 'bhl_blob') ~%}
|
|
|
|
|
ref var f = ref ctx.GetBlob<{{class}}>();
|
|
|
|
|
{%- else ~%}
|
|
|
|
@ -863,7 +802,7 @@ Script_{{o.name|norm_name}}.Method_{{m.name}}.ReturnValue(frm, stack
|
|
|
|
|
{%- endif ~%}
|
|
|
|
|
|
|
|
|
|
{% if token(f, 'bhl_set') == 2 %}
|
|
|
|
|
var {{_self.val2native(f.type, 'v', 'nv')}};
|
|
|
|
|
{{_self.val2native(f.type, 'v', 'var nv')}};
|
|
|
|
|
Script_{{o.name|norm_name}}.Set_{{f.name}}(ref f, nv);
|
|
|
|
|
{% else %}
|
|
|
|
|
{%- if has_token(f, 'bhl_native_prefix') -%}
|
|
|
|
@ -937,15 +876,11 @@ Script_{{o.name|norm_name}}.Method_{{m.name}}.ReturnValue(frm, stack
|
|
|
|
|
{{Error('Not implemented for multipled returns')}}
|
|
|
|
|
{%- endif ~%}
|
|
|
|
|
|
|
|
|
|
{%if not has_token(f, 'bhl_coroutine') and (f.returntype == 'any' or f.returntype is instanceof('\\mtgBuiltinType')) %}
|
|
|
|
|
{{ _self.return_out_results_single_common(f.returntype, 'return_val') }};
|
|
|
|
|
{%- else -%}
|
|
|
|
|
{
|
|
|
|
|
var dv = bhl.Val.New(frm.vm);
|
|
|
|
|
{{ _self.native2val(f.returntype, return_var, 'dv') }};
|
|
|
|
|
stack.Push(dv);
|
|
|
|
|
}
|
|
|
|
|
{%- endif ~%}
|
|
|
|
|
{%- endif ~%}
|
|
|
|
|
{%- endmacro -%}
|
|
|
|
|
|
|
|
|
|