#include <luaunpanic.h>
#include <stdlib.h>
#include <setjmp.h>
#include <errno.h>
#include <string.h>
#include <stdarg.h>
#include <stddef.h>
#include "luaunpanic_macros.h"
#include "try_throw_catch.h"
typedef
struct
luaunpanic_userdata {
char
*panicstring;
size_t
envpmallocl;
size_t
envpusedl;
jmp_buf
*envp;
} luaunpanic_userdata_t;
static
char
*LUAUNPANIC_DEFAULT_PANICSTRING =
""
;
static
char
*LUAUNPANIC_UNKNOWN_PANICSTRING =
"Could not retreive last error string"
;
#define LUAUNPANIC_PANIC 1
static
int
luaunpanic_atpanic(lua_State *L)
{
luaunpanic_userdata_t *LW = (luaunpanic_userdata_t *) lua_getuserdata(L);
if
(LW != NULL) {
if
(LW->panicstring != NULL) {
if
((LW->panicstring != LUAUNPANIC_DEFAULT_PANICSTRING) && (LW->panicstring != LUAUNPANIC_UNKNOWN_PANICSTRING)) {
free
(LW->panicstring);
}
}
LW->panicstring = (
char
*) lua_tostring(L, -1);
if
(LW->panicstring != NULL) {
LW->panicstring = strdup(LW->panicstring);
if
(LW->panicstring == NULL) {
LW->panicstring = LUAUNPANIC_UNKNOWN_PANICSTRING;
}
}
THROW(LW, LUAUNPANIC_PANIC);
}
return
0;
}
short
luaunpanic_panicstring(
char
**panicstringp, lua_State *L)
{
luaunpanic_userdata_t *LW;
short
rc;
if
(L == NULL) {
errno
= EINVAL;
goto
err;
}
LW = lua_getuserdata(L);
if
(LW == NULL) {
errno
= EINVAL;
goto
err;
}
if
(panicstringp != NULL) {
*panicstringp = LW->panicstring;
}
rc = 0;
goto
done;
err:
rc = 1;
done:
return
rc;
}
short
luaunpanic_newstate(lua_State **Lp, lua_Alloc f,
void
*ud)
{
luaunpanic_userdata_t *LW;
lua_State *L;
short
rc;
LW = (luaunpanic_userdata_t *)
malloc
(
sizeof
(luaunpanic_userdata_t));
if
(LW == NULL) {
goto
err;
}
LW->panicstring = LUAUNPANIC_DEFAULT_PANICSTRING;
LW->envpmallocl = 0;
LW->envpusedl = 0;
LW->envp = NULL;
L = lua_newstate(f, ud);
if
(L == NULL) {
free
(LW);
goto
err;
}
lua_setuserdata(L, (
void
*) LW);
lua_atpanic(L, &luaunpanic_atpanic);
if
(Lp != NULL) {
*Lp = L;
}
rc = 0;
goto
done;
err:
rc = 1;
done:
return
rc;
}
short
luaunpanic_close(lua_State *L)
{
short
rc = 1;
luaunpanic_userdata_t *LW;
if
(L == NULL) {
errno
= EINVAL;
}
else
{
LW = lua_getuserdata(L);
if
(LW != NULL) {
TRY(LW) {
lua_close(L);
rc = 0;
} FINALLY(LW) {
if
(LW->panicstring != NULL) {
if
((LW->panicstring != LUAUNPANIC_DEFAULT_PANICSTRING) && (LW->panicstring != LUAUNPANIC_UNKNOWN_PANICSTRING)) {
free
(LW->panicstring);
}
}
if
(LW->envp != NULL) {
free
(LW->envp);
}
free
(LW);
LW = NULL;
}
ETRY(LW);
}
else
{
lua_close(L);
rc = 0;
}
}
return
rc;
}
static
short
_luaunpanic_newthread(lua_State **LNp, lua_State *L)
{
short
rc = 1;
luaunpanic_userdata_t *LW;
if
(L == NULL) {
errno
= EINVAL;
}
else
{
LW = lua_getuserdata(L);
if
(LW != NULL) {
if
(LW->panicstring != NULL) {
if
((LW->panicstring != LUAUNPANIC_DEFAULT_PANICSTRING) && (LW->panicstring != LUAUNPANIC_UNKNOWN_PANICSTRING)) {
free
(LW->panicstring);
}
LW->panicstring = LUAUNPANIC_DEFAULT_PANICSTRING;
}
TRY(LW) {
lua_State *LN = lua_newthread(L);
if
(LNp != NULL) {
*LNp = LN;
}
rc = 0;
}
ETRY(LW);
}
else
{
lua_State *LN = lua_newthread(L);
if
(LNp != NULL) {
*LNp = LN;
}
rc = 0;
}
}
return
rc;
}
short
luaunpanic_newthread(lua_State **Lp, lua_State *L)
{
luaunpanic_userdata_t *LW = (luaunpanic_userdata_t *) lua_getuserdata(L);
lua_State *LN;
short
rc;
if
(_luaunpanic_newthread(&LN, L)) {
goto
err;
}
lua_setuserdata(LN, (
void
*) LW);
lua_atpanic(LN, &luaunpanic_atpanic);
if
(Lp != NULL) {
*Lp = LN;
}
rc = 0;
goto
done;
err:
rc = 1;
done:
return
rc;
}
short
luaunpanicL_newstate(lua_State **Lp)
{
luaunpanic_userdata_t *LW;
lua_State *L;
short
rc;
LW = (luaunpanic_userdata_t *)
malloc
(
sizeof
(luaunpanic_userdata_t));
if
(LW == NULL) {
goto
err;
}
LW->panicstring = LUAUNPANIC_DEFAULT_PANICSTRING;
LW->envpmallocl = 0;
LW->envpusedl = 0;
LW->envp = NULL;
L = luaL_newstate();
if
(L == NULL) {
free
(LW);
goto
err;
}
lua_setuserdata(L, (
void
*) LW);
lua_atpanic(L, &luaunpanic_atpanic);
if
(Lp != NULL) {
*Lp = L;
}
rc = 0;
goto
done;
err:
rc = 1;
done:
return
rc;
}
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_version, ,
const
lua_Number *, lua_version(L), lua_State *L)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_absindex, ,
int
, lua_absindex(L, idx), lua_State *L,
int
idx)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_gettop, ,
int
, lua_gettop(L), lua_State *L)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanic_settop, , lua_settop(L, idx), lua_State *L,
int
idx)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanic_pushvalue, , lua_pushvalue(L, idx), lua_State *L,
int
idx)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanic_rotate, , lua_rotate(L, idx, n), lua_State *L,
int
idx,
int
n)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanic_copy, , lua_copy(L, fromidx, toidx), lua_State *L,
int
fromidx,
int
toidx)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_checkstack, ,
int
, lua_checkstack(L, n), lua_State *L,
int
n)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanic_xmove, , lua_xmove(L, to, n), lua_State *L, lua_State *to,
int
n)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_isnumber, ,
int
, lua_isnumber(L, idx), lua_State *L,
int
idx)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_isstring, ,
int
, lua_isstring(L, idx), lua_State *L,
int
idx)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_iscfunction, ,
int
, lua_iscfunction(L, idx), lua_State *L,
int
idx)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_isinteger, ,
int
, lua_isinteger(L, idx), lua_State *L,
int
idx)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_isuserdata, ,
int
, lua_isuserdata(L, idx), lua_State *L,
int
idx)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_type, ,
int
, lua_type(L, idx), lua_State *L,
int
idx)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_typename, ,
const
char
*, lua_typename(L, tp), lua_State *L,
int
tp)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_tonumberx, , lua_Number, lua_tonumberx(L, idx, isnum), lua_State *L,
int
idx,
int
*isnum)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_tointegerx, , lua_Integer, lua_tointegerx(L, idx, isnum), lua_State *L,
int
idx,
int
*isnum)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_toboolean, ,
int
, lua_toboolean(L, idx), lua_State *L,
int
idx)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_tolstring, ,
const
char
*, lua_tolstring(L, idx, len), lua_State *L,
int
idx,
size_t
*len)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_rawlen, ,
size_t
, lua_rawlen(L, idx), lua_State *L,
int
idx)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_tocfunction, , lua_CFunction, lua_tocfunction(L, idx), lua_State *L,
int
idx)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_touserdata, ,
void
*, lua_touserdata(L, idx), lua_State *L,
int
idx)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_tothread, , lua_State *, lua_tothread(L, idx), lua_State *L,
int
idx)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_topointer, ,
const
void
*, lua_topointer(L, idx), lua_State *L,
int
idx)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanic_arith, , lua_arith(L, op), lua_State *L,
int
op)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_rawequal, ,
int
, lua_rawequal(L, idx1, idx2), lua_State *L,
int
idx1,
int
idx2)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_compare, ,
int
, lua_compare(L, idx1, idx2, op), lua_State *L,
int
idx1,
int
idx2,
int
op)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanic_pushnil, , lua_pushnil(L), lua_State *L)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanic_pushnumber, , lua_pushnumber(L, n), lua_State *L, lua_Number n)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanic_pushinteger, , lua_pushinteger(L, n), lua_State *L, lua_Integer n)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_pushlstring, ,
const
char
*, lua_pushlstring(L, s, len), lua_State *L,
const
char
*s,
size_t
len)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_pushstring, ,
const
char
*, lua_pushstring(L, s), lua_State *L,
const
char
*s)
#ifdef C_VA_COPY
LUAUNPANIC2ON_NON_VOID_FUNCTION(luaunpanic_pushvfstring, ,
const
char
*, lua_pushvfstring(L, fmt, argpcopy), argp, argpcopy, lua_State *L,
const
char
*fmt,
va_list
argp)
#else
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_pushvfstring, ,
const
char
*, lua_pushvfstring(L, fmt, argp), lua_State *L,
const
char
*fmt,
va_list
argp)
#endif
LUAUNPANIC3ON_NON_VOID_FUNCTION(luaunpanic_pushfstring, ,
const
char
*, lua_pushvfstring(L, fmt, ap), fmt, ap, lua_State *L,
const
char
*fmt, ...)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanic_pushcclosure, , lua_pushcclosure(L, fn, n), lua_State *L, lua_CFunction fn,
int
n)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanic_pushboolean, , lua_pushboolean(L, b), lua_State *L,
int
b)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanic_pushlightuserdata,, lua_pushlightuserdata(L, p), lua_State *L,
void
*p)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_pushthread, ,
int
, lua_pushthread(L), lua_State *L)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_getglobal, ,
int
, lua_getglobal(L, name), lua_State *L,
const
char
*name)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_gettable, ,
int
, lua_gettable(L, idx), lua_State *L,
int
idx)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_getfield, ,
int
, lua_getfield(L, idx, k), lua_State *L,
int
idx,
const
char
*k)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_geti, ,
int
, lua_geti(L, idx, n), lua_State *L,
int
idx, lua_Integer n)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_rawget, ,
int
, lua_rawget(L, idx), lua_State *L,
int
idx)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_rawgeti, ,
int
, lua_rawgeti(L, idx, n), lua_State *L,
int
idx, lua_Integer n)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_rawgetp, ,
int
, lua_rawgetp(L, idx, p), lua_State *L,
int
idx,
const
void
*p)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanic_createtable, , lua_createtable(L, narr, nrec), lua_State *L,
int
narr,
int
nrec)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_newuserdata, ,
void
*, lua_newuserdata(L, sz), lua_State *L,
size_t
sz)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_getmetatable, ,
int
, lua_getmetatable(L, objindex), lua_State *L,
int
objindex)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_getuservalue, ,
int
, lua_getuservalue(L, idx), lua_State *L,
int
idx)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanic_setglobal, , lua_setglobal(L, name), lua_State *L,
const
char
*name)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanic_settable, , lua_settable(L, idx), lua_State *L,
int
idx)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanic_setfield, , lua_setfield(L, idx, k), lua_State *L,
int
idx,
const
char
*k)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanic_seti, , lua_seti(L, idx, n), lua_State *L,
int
idx, lua_Integer n)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanic_rawset, , lua_rawset(L, idx), lua_State *L,
int
idx)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanic_rawseti, , lua_rawseti(L, idx, n), lua_State *L,
int
idx, lua_Integer n)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanic_rawsetp, , lua_rawsetp(L, idx, p), lua_State *L,
int
idx,
const
void
*p)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_setmetatable, ,
int
, lua_setmetatable(L, objindex), lua_State *L,
int
objindex)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanic_setuservalue, , lua_setuservalue(L, idx), lua_State *L,
int
idx)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanic_callk, , lua_callk(L, nargs, nresults, ctx, k), lua_State *L,
int
nargs,
int
nresults, lua_KContext ctx, lua_KFunction k)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_pcallk, ,
int
, lua_pcallk(L, nargs, nresults, errfunc, ctx, k), lua_State *L,
int
nargs,
int
nresults,
int
errfunc, lua_KContext ctx, lua_KFunction k)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_load, ,
int
, lua_load(L, reader, dt, chunkname, mode), lua_State *L, lua_Reader reader,
void
*dt,
const
char
*chunkname,
const
char
*mode)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_dump, ,
int
, lua_dump(L, writer, data, strip), lua_State *L, lua_Writer writer,
void
*data,
int
strip)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_yieldk, ,
int
, lua_yieldk(L, nresults, ctx, k), lua_State *L,
int
nresults, lua_KContext ctx, lua_KFunction k)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_resume, ,
int
, lua_resume(L, from, narg), lua_State *L, lua_State *from,
int
narg)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_status, ,
int
, lua_status(L), lua_State *L)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_isyieldable, ,
int
, lua_isyieldable(L), lua_State *L)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_gc, ,
int
, lua_gc(L, what, data), lua_State *L,
int
what,
int
data)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_error, ,
int
, lua_error(L), lua_State *L)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_next, ,
int
, lua_next(L, idx), lua_State *L,
int
idx)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanic_concat, , lua_concat(L, n), lua_State *L,
int
n)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanic_len, , lua_len(L, idx), lua_State *L,
int
idx)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_stringtonumber,,
size_t
, lua_stringtonumber(L, s), lua_State *L,
const
char
*s)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_getallocf, , lua_Alloc, lua_getallocf(L, ud), lua_State *L,
void
**ud)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanic_setallocf, , lua_setallocf(L, f, ud), lua_State *L, lua_Alloc f,
void
*ud)
LUAUNPANIC_IS_XXX(function, ==, LUA_TFUNCTION)
LUAUNPANIC_IS_XXX(table, ==, LUA_TTABLE)
LUAUNPANIC_IS_XXX(lightuserdata, ==, LUA_TLIGHTUSERDATA)
LUAUNPANIC_IS_XXX(nil, ==, LUA_TNIL)
LUAUNPANIC_IS_XXX(boolean, ==, LUA_TBOOLEAN)
LUAUNPANIC_IS_XXX(
thread
, ==, LUA_TTHREAD)
LUAUNPANIC_IS_XXX(none, ==, LUA_TNONE)
LUAUNPANIC_IS_XXX(noneornil, <=, 0)
#if defined(LUA_COMPAT_APIINTCASTS)
short
luaunpanic_tounsignedx(lua_Unsigned *rcp, lua_State *L,
int
idx,
int
*isnum)
{
lua_Integer luarc;
if
(luaunpanic_tointegerx(&luarc, L, idx, isnum)) {
return
1;
}
if
(rcp != NULL) {
*rcp = (lua_Unsigned) luarc;
}
return
0;
}
#endif
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_getstack, ,
int
, lua_getstack(L, level, ar), lua_State *L,
int
level, lua_Debug *ar)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_getinfo, ,
int
, lua_getinfo(L, what, ar), lua_State *L,
const
char
*what, lua_Debug *ar)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_getlocal, ,
const
char
*, lua_getlocal(L, ar, n), lua_State *L,
const
lua_Debug *ar,
int
n)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_setlocal, ,
const
char
*, lua_setlocal(L, ar, n), lua_State *L,
const
lua_Debug *ar,
int
n)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_getupvalue, ,
const
char
*, lua_getupvalue(L, funcindex, n), lua_State *L,
int
funcindex,
int
n)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_setupvalue, ,
const
char
*, lua_setupvalue(L, funcindex, n), lua_State *L,
int
funcindex,
int
n)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_upvalueid, ,
void
*, lua_upvalueid(L, fidx, n), lua_State *L,
int
fidx,
int
n)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanic_upvaluejoin, , lua_upvaluejoin(L, fidx1, n1, fidx2, n2), lua_State *L,
int
fidx1,
int
n1,
int
fidx2,
int
n2)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanic_sethook, , lua_sethook(L, func, mask, count), lua_State *L, lua_Hook func,
int
mask,
int
count)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_gethook, , lua_Hook, lua_gethook(L), lua_State *L)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_gethookmask, ,
int
, lua_gethookmask(L), lua_State *L)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanic_gethookcount, ,
int
, lua_gethookcount(L), lua_State *L)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanicL_checkversion_,, luaL_checkversion_(L, ver, sz), lua_State *L, lua_Number ver,
size_t
sz)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicL_getmetafield,,
int
, luaL_getmetafield(L, obj, e), lua_State *L,
int
obj,
const
char
*e)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicL_callmeta, ,
int
, luaL_callmeta(L, obj, e), lua_State *L,
int
obj,
const
char
*e)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicL_tolstring, ,
const
char
*, luaL_tolstring(L, idx, len), lua_State *L,
int
idx,
size_t
*len)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicL_argerror, ,
int
, luaL_argerror(L, arg, extramsg), lua_State *L,
int
arg,
const
char
*extramsg)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicL_checklstring,,
const
char
*, luaL_checklstring(L, arg, l), lua_State *L,
int
arg,
size_t
*l)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicL_optlstring, ,
const
char
*, luaL_optlstring(L, arg, def, l), lua_State *L,
int
arg,
const
char
*def,
size_t
*l)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicL_checknumber, , lua_Number, luaL_checknumber(L, arg), lua_State *L,
int
arg)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicL_optnumber, , lua_Number, luaL_optnumber(L, arg, def), lua_State *L,
int
arg, lua_Number def)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicL_checkinteger,, lua_Integer, luaL_checkinteger(L, arg), lua_State *L,
int
arg)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicL_optinteger, , lua_Integer, luaL_optinteger(L, arg, def), lua_State *L,
int
arg, lua_Integer def)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanicL_checkstack, , luaL_checkstack(L, sz, msg), lua_State *L,
int
sz,
const
char
*msg)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanicL_checktype, , luaL_checktype(L, arg, t), lua_State *L,
int
arg,
int
t)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanicL_checkany, , luaL_checkany(L, arg), lua_State *L,
int
arg)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicL_newmetatable,,
int
, luaL_newmetatable(L, tname), lua_State *L,
const
char
*tname)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanicL_setmetatable,, luaL_setmetatable(L, tname), lua_State *L,
const
char
*tname)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicL_testudata, ,
void
*, luaL_testudata(L, ud, tname), lua_State *L,
int
ud,
const
char
*tname)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicL_checkudata, ,
void
*, luaL_checkudata(L, ud, tname), lua_State *L,
int
ud,
const
char
*tname)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanicL_where, , luaL_where(L, lvl), lua_State *L,
int
lvl)
short
luaunpanicL_error (
int
*rcp, lua_State *L,
const
char
*fmt, ...)
{
va_list
argp;
va_start
(argp, fmt);
if
(luaunpanicL_where(L, 1)) {
va_end
(argp);
return
1;
}
if
(luaunpanic_pushvfstring(NULL, L, fmt, argp)) {
va_end
(argp);
return
1;
}
va_end
(argp);
if
(luaunpanic_concat(L, 2)) {
return
1;
}
return
luaunpanic_error(rcp, L);
}
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicL_checkoption, ,
int
, luaL_checkoption(L, arg, def, lst), lua_State *L,
int
arg,
const
char
*def,
const
char
*
const
lst[])
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicL_fileresult, ,
int
, luaL_fileresult(L, stat, fname), lua_State *L,
int
stat,
const
char
*fname)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicL_execresult, ,
int
, luaL_execresult(L, stat), lua_State *L,
int
stat)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicL_ref, ,
int
, luaL_ref(L, t), lua_State *L,
int
t)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanicL_unref, , luaL_unref(L, t, ref), lua_State *L,
int
t,
int
ref)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicL_loadfilex, ,
int
, luaL_loadfilex(L, filename, mode), lua_State *L,
const
char
*filename,
const
char
*mode)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicL_loadbufferx, ,
int
, luaL_loadbufferx(L, buff, sz, name, mode), lua_State *L,
const
char
*buff,
size_t
sz,
const
char
*name,
const
char
*mode)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicL_loadstring, ,
int
, luaL_loadstring(L, s), lua_State *L,
const
char
*s)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicL_len, , lua_Integer, luaL_len(L, idx), lua_State *L,
int
idx)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicL_gsub, ,
const
char
*, luaL_gsub(L, s, p, r), lua_State *L,
const
char
*s,
const
char
*p,
const
char
*r)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanicL_setfuncs, , luaL_setfuncs(L, l, nup), lua_State *L,
const
luaL_Reg *l,
int
nup)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicL_getsubtable, ,
int
, luaL_getsubtable(L, idx, fname), lua_State *L,
int
idx,
const
char
*fname)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanicL_traceback, , luaL_traceback(L, L1, msg, level), lua_State *L, lua_State *L1,
const
char
*msg,
int
level)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanicL_requiref, , luaL_requiref(L, modname, openf, glb), lua_State *L,
const
char
*modname, lua_CFunction openf,
int
glb)
short
luaunpanicL_typename(
const
char
**rcpp, lua_State *L,
int
tp)
{
int
luatype;
if
(luaunpanic_type(&luatype, L, tp)) {
return
1;
}
return
luaunpanic_typename(rcpp, L, luatype);
}
short
luaunpanicL_dofile(
int
*rcp, lua_State *L,
const
char
*fn)
{
int
rc;
if
(luaunpanicL_loadfile(&rc, L, fn)) {
return
1;
}
if
(rc) {
if
(rcp != NULL) {
*rcp = rc;
}
return
1;
}
return
luaunpanic_pcall(rcp, L, 0, LUA_MULTRET, 0);
}
short
luaunpanicL_dostring(
int
*rcp, lua_State *L,
const
char
*fn)
{
int
rc;
if
(luaunpanicL_loadstring(&rc, L, fn)) {
return
1;
}
if
(rc) {
if
(rcp != NULL) {
*rcp = rc;
}
return
1;
}
return
luaunpanic_pcall(rcp, L, 0, LUA_MULTRET, 0);
}
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanicL_buffinit, , luaL_buffinit(L, B), lua_State *L, luaL_Buffer *B)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicL_prepbuffsize,lua_State *L = B->L;,
char
*, luaL_prepbuffsize(B, sz), luaL_Buffer *B,
size_t
sz)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanicL_addlstring, lua_State *L = B->L;, luaL_addlstring(B, s, l), luaL_Buffer *B,
const
char
*s,
size_t
l)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanicL_addstring, lua_State *L = B->L;, luaL_addstring(B, s), luaL_Buffer *B,
const
char
*s)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanicL_addvalue, lua_State *L = B->L;, luaL_addvalue(B), luaL_Buffer *B)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanicL_pushresult, lua_State *L = B->L;, luaL_pushresult(B), luaL_Buffer *B)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanicL_pushresultsize,lua_State *L = B->L;, luaL_pushresultsize(B, sz), luaL_Buffer *B,
size_t
sz)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicL_buffinitsize,,
char
*, luaL_buffinitsize(L, B, sz), lua_State *L, luaL_Buffer *B,
size_t
sz)
#if defined(LUA_COMPAT_MODULE)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanicL_pushmodule, , luaL_pushmodule(L, modname, sizehint), lua_State *L,
const
char
*modname,
int
sizehint);
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanicL_openlib, , luaL_openlib(L, libname, l, nup), lua_State *L,
const
char
*libname,
const
luaL_Reg *l,
int
nup)
#endif
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicopen_base, ,
int
, luaopen_base(L), lua_State *L)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicopen_coroutine,,
int
, luaopen_coroutine(L), lua_State *L)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicopen_table, ,
int
, luaopen_table(L), lua_State *L)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicopen_io, ,
int
, luaopen_io(L), lua_State *L)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicopen_os, ,
int
, luaopen_os(L), lua_State *L)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicopen_string, ,
int
, luaopen_string(L), lua_State *L)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicopen_utf8, ,
int
, luaopen_utf8(L), lua_State *L)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicopen_bit32, ,
int
, luaopen_bit32(L), lua_State *L)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicopen_math, ,
int
, luaopen_math(L), lua_State *L)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicopen_debug, ,
int
, luaopen_debug(L), lua_State *L)
LUAUNPANIC_ON_NON_VOID_FUNCTION(luaunpanicopen_package, ,
int
, luaopen_package(L), lua_State *L)
LUAUNPANIC_ON_VOID_FUNCTION (luaunpanicL_openlibs, , luaL_openlibs(L), lua_State *L)