[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Second argument in luaL_newlib should be an array
- From: Karel Tuma <kat@...>
- Date: Mon, 15 Sep 2014 01:44:17 +0200
Excerpts from Alexander Nasonov's message of 2014-09-14 21:42:07 +0200:
> Karel Tuma wrote:
> > Excerpts from Alexander Nasonov's message of 2014-09-14 20:19:08 +0200:
> > > Dirk Laurie wrote:
> > > > Is there any difference between *l and l[] in C?
> > >
> > > There is no difference for function arguments but luaL_newlib()
> > > and luaL_newlibtable() are macros. Because the documentation
> > > emphasises that l must be an array, I suspect the implementation
> > > calculates sizeof(l) / sizeof(l[0]).
> > >
> > > Alex
> >
> > Luckily not, it looks for NULL terminator in the name field.
>
> #define luaL_newlibtable(L,l) \
> lua_createtable(L, 0, sizeof(l)/sizeof((l)[0]) - 1)
>
> #define luaL_newlib(L,l) (luaL_newlibtable(L,l), luaL_setfuncs(L,l,0))
>
> Alex
I suspect the macro "virtual decl" was pasted from actual declaration of
luaL_setfuncs, which uses a pointer, whereas luaL_newlibtable "virtual decl"
uses [] as an emphasis that the array will be used to compute hint, indeed the docs
can be perceived a bit misleading in that regard, though no harm done in the actual API.
Interestingly, with pointer the result always yields -1 (becaue l[0] is 2 pointers wide)
which makes lua_createtable ignore it. While not the case of Lua, this might be existing
int overflow bug to look for in other software..