user10F64D4
user10F64D4

Reputation: 6651

D Lua doesn't get metatable

I'm trying to get Lua to work with the new programming language D. Everything works fine (library, lua52.dll, etc.) but luaL_getmetatable crashes. Originally, the function was not defined in dlua, but I added it:

    //C     #define luaL_getmetatable(L,n)  (lua_getfield(L, LUA_REGISTRYINDEX, (n)))
    void luaL_getmetatable(lua_State* L, const(char)* s) {
        lua_getfield(L, LUA_REGISTRYINDEX, s);
    }

But when I run:

    L = lua_open();
    luaL_openlibs(L);
    // prevent script kiddies
    luaL_dostring(L, "os = nil; io = nil");
    // reprogram 'print'
    luaL_newmetatable(L, "vector");
    luaL_getmetatable(L, "vector"); // CRASH

it crashes. Any ideas why this is?

Upvotes: 3

Views: 346

Answers (2)

jA_cOp
jA_cOp

Reputation: 3305

It sounds like you are using the ancient dlua bindings, not LuaD, which has always had luaL_getmetatable.

However, both these bindings as well as your code are for Lua 5.1, not 5.2; make sure you link to the correct version of Lua. There is no lua_open in Lua 5.2 (and it's deprecated in 5.1).

If you encounter the same problem after linking to the right library, I recommend compiling Lua with the macro LUA_USE_APICHECK set and trying again to see exactly what went wrong.

Upvotes: 8

dav1d
dav1d

Reputation: 6055

Maybe you should take a look at the existing Lua-Bindings for D, LuaD.

Upvotes: 1

Related Questions