Kaynağa Gözat

Fix Issue2937 (implementation of varargs was wrong)

peyty 9 yıl önce
ebeveyn
işleme
9371fb12a1
1 değiştirilmiş dosya ile 17 ekleme ve 3 silme
  1. 17 3
      std/lua/_std/Reflect.hx

+ 17 - 3
std/lua/_std/Reflect.hx

@@ -135,9 +135,23 @@ import lua.Boot;
 
 	@:overload(function( f : Array<Dynamic> -> Void ) : Dynamic {})
 	public static function makeVarArgs( f : Array<Dynamic> -> Dynamic ) : Dynamic {
-		return function(a) {
-			return f(untyped __lua__("unpack")(a));
-		};
+		/*
+			- Convert var arg to table
+			- Set indexing from zero
+			- Extract real table length
+			- Recreate as dynamic array
+			- Return function called with this array
+		*/
+		return untyped __lua__("function(...)
+			local a = {...}
+			local b = {}
+			local l = 0
+			for k, v in pairs(a) do
+				b[k-1] = v
+				l = math.max(k,l)
+			end
+			return f(__tabArray(b, l))
+		end");
 	}
 
 }