|
|
@@ -8,11 +8,13 @@ class TestLua extends Test {
|
|
|
eq(lua.Lua.type(untyped __lua__("multi")), "table");
|
|
|
eq(l, "table");
|
|
|
}
|
|
|
+
|
|
|
function testMultiReturnPlainFunctionCall(){
|
|
|
var multi : Multi = untyped MultiCall.doit();
|
|
|
// this shouldn't box the result
|
|
|
eq(untyped __lua__("multi"), null);
|
|
|
}
|
|
|
+
|
|
|
function testMultiReturnValue(){
|
|
|
var multi : Multi = untyped MultiCall.doit();
|
|
|
var l = lua.Lua.type(multi.b);
|
|
|
@@ -20,6 +22,29 @@ class TestLua extends Test {
|
|
|
eq(untyped __lua__("multi"), null);
|
|
|
eq(l, "string");
|
|
|
}
|
|
|
+
|
|
|
+ function testMultiReturnArgument(){
|
|
|
+ // make sure multireturns passed as arguments are wrapped
|
|
|
+ eq(MultiCall.acceptMr(untyped MultiCall.doit()), true);
|
|
|
+ }
|
|
|
+
|
|
|
+ function testMultiReturnValueHandled(){
|
|
|
+ // make sure that multireturn is not wrapped if return values not used
|
|
|
+ var old_hx_box_mr = untyped _hx_box_mr;
|
|
|
+ var called = false;
|
|
|
+ untyped _hx_box_mr = function(){
|
|
|
+ called = true;
|
|
|
+ }
|
|
|
+ var k = lua.NativeStringTools.find("foo bar", "foo");
|
|
|
+ eq(called,false);
|
|
|
+ called = true;
|
|
|
+ // make sure that multireturn is wrapped if return values not used
|
|
|
+ var l = lua.NativeStringTools.find("foo bar", "foo");
|
|
|
+ var m = l + '';
|
|
|
+ eq(called, true);
|
|
|
+ untyped _hx_box_mr = old_hx_box_mr;
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
@:multiReturn extern class Multi {
|
|
|
@@ -31,4 +56,7 @@ class MultiCall {
|
|
|
public static function doit() : Dynamic {
|
|
|
return untyped __lua__("1,'hi'");
|
|
|
}
|
|
|
+ public static function acceptMr(m:Multi){
|
|
|
+ return lua.Lua.type(m) == "table";
|
|
|
+ }
|
|
|
}
|