diff --git a/luad/conversions/arrays.d b/luad/conversions/arrays.d index 5f72d50..def9fe3 100644 --- a/luad/conversions/arrays.d +++ b/luad/conversions/arrays.d @@ -22,9 +22,10 @@ void pushArray(T)(lua_State* L, ref T arr) if (isArray!T) } } +// TODO: do the immutable/const initialization *properly* T getArray(T)(lua_State* L, int idx) if (isArray!T) { - alias ElementType!T ElemType; + alias ElemType = ElementType!T; auto len = lua_objlen(L, idx); static if(isStaticArray!T) @@ -32,10 +33,10 @@ T getArray(T)(lua_State* L, int idx) if (isArray!T) if(len != T.length) luaL_error(L, "Incorrect number of array elements: %d, expected: %d", len, T.length); - T arr; + Unqual!ElemType[T.length] arr; } else - auto arr = new ElemType[len]; + auto arr = new Unqual!ElemType[len]; foreach(i; 0 .. len) { @@ -44,7 +45,7 @@ T getArray(T)(lua_State* L, int idx) if (isArray!T) arr[i] = popValue!ElemType(L); } - return arr; + return cast(T)arr; } void fillStaticArray(T)(lua_State* L, ref T arr) if(isStaticArray!T) diff --git a/luad/stack.d b/luad/stack.d index 50566bd..086a9a6 100644 --- a/luad/stack.d +++ b/luad/stack.d @@ -598,13 +598,18 @@ unittest assert(lua_gettop(L) == 0, "bad popValue semantics for primitives"); + // arrays + immutable int[] arr = [1, 2, 3]; + pushValue(L, arr); + assert(lua_istable(L, -1) && popValue!(typeof(arr))(L) == arr); + //void arrays - immutable void[] iarr = "foobar"; - pushValue(L, iarr); - assert(lua_isstring(L, -1) && popValue!(typeof(iarr))(L) == "foobar"); + immutable void[] voidiarr = "foobar"; + pushValue(L, voidiarr); + assert(lua_isstring(L, -1) && popValue!(typeof(voidiarr))(L) == "foobar"); - void[] arr ="baz".dup; - pushValue(L, arr); + void[] voidarr ="baz".dup; + pushValue(L, voidarr); assert(lua_isstring(L, -1) && popValue!(void[])(L) == "baz"); //popStack @@ -626,4 +631,4 @@ unittest assert(stack[1].type == LuaType.String); assert(stack[2].type == LuaType.Number); assert(stack[3].type == LuaType.Boolean); -} \ No newline at end of file +}