diff --git a/std/lua/Table.hx b/std/lua/Table.hx index 1f57d81796f..68aba5a480f 100644 --- a/std/lua/Table.hx +++ b/std/lua/Table.hx @@ -22,6 +22,10 @@ package lua; +import lua.PairTools; + +import haxe.ds.ObjectMap; + /** This library provides generic functions for table manipulation. **/ @@ -55,26 +59,30 @@ extern class Table implements ArrayAccess implements Dynamic { } public inline static function toMap(tbl : Table) : Map { - var res = new haxe.ds.ObjectMap(); - foreach(tbl , (k:A,v:B) -> { - res.set(k,v); - }); - return cast res; + var obj = new ObjectMap(); + PairTools.pairsFold(tbl, (k,v,m) ->{ + obj.set(k,v); + return obj; + }, obj); + return cast obj; } public inline static function toArray(tbl : Table) : Array { - var res = []; - foreachi(tbl, (k:Int, v:T, i:Int) ->{ - res.push(v); - }); - return res; + var arr = []; + PairTools.ipairsFold(tbl, (k,v,m) ->{ + arr.push(v); + return arr; + }, arr); + return arr; } @:overload(function(table:Table):Void {}) public static function concat(table:Table, ?sep:String, ?i:Int, ?j:Int):String; + #if (lua_ver == 5.1) public static function foreach(table:Table, f:A->B->Void):Void; public static function foreachi(table:Table, f:A->B->Int->Void):Void; + #end public static function sort(table:Table, ?order:A->A->Bool):Void;