Pushing a Lua table

14,634

Solution 1

Here's a quick helper function to push strings to the table

void l_pushtablestring(lua_State* L , char* key , char* value) {
    lua_pushstring(L, key);
    lua_pushstring(L, value);
    lua_settable(L, -3);
} 

Here I use the helper function to create the table and pass it to a function

// create a lua function
luaL_loadstring(L, "function fullName(t) print(t.fname,t.lname) end");
lua_pcall(L, 0, 0, 0);

// push the function to the stack
lua_getglobal(L, "fullName");

// create a table in c (it will be at the top of the stack)
lua_newtable(L);
l_pushtablestring(L, "fname", "john");
l_pushtablestring(L, "lname", "stewart");

// call the function with one argument
lua_pcall(L, 1, 0, 0);

Solution 2

The table is already in the stack, where lua_newtable left it, isn't it?

Solution 3

I made a small snippet open source that solves pushing simple Lua dictionary tables from C to Lua.

You can check it out here, should work well.

Share:
14,634
Tom Leese
Author by

Tom Leese

Software developer with an interest in Android and Web technologies. Currently studying at the University of Southampton. GitHub - MDN - Qt - Stack Overflow - Twitter

Updated on June 04, 2022

Comments

  • Tom Leese
    Tom Leese almost 2 years

    I have created a Lua table in C, but I'm not sure how to push that table onto the top of a stack so I can pass it to a Lua function.

    Does anyone know how to do this?

    This is my current code:

    lua_createtable(state, libraries.size(), 0);
    int table_index = lua_gettop(state);
    for (int i = 0; i < libraries.size(); i++)
    {
        lua_pushstring(state, libraries[i].c_str());
        lua_rawseti(state, table_index, i + 1);
    }
    
    lua_settable(state, -3);
    
    [ Push other things ]
    [ Call function ]
    
  • Tom Leese
    Tom Leese over 13 years
    If it is, I must be making the table incorrectly. Could you tell me how I should be creating the table? All it needs to contain is some strings.
  • lhf
    lhf over 13 years
    See lua.org/source/5.1/lua.c.html#getargs for instance. Or show us your code.
  • Tom Leese
    Tom Leese over 13 years
    How would I push two different tables to the same function?
  • DaEagle
    DaEagle over 13 years
    The second argument in lua_pcall is the number of arguments being passed to the function so you would push both tables onto the stack and then change the pcall to lua_pcall(L, 2, 0, 0);