diff options
Diffstat (limited to 'src/lua/tolua_eh.c')
-rw-r--r-- | src/lua/tolua_eh.c | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/src/lua/tolua_eh.c b/src/lua/tolua_eh.c new file mode 100644 index 00000000..0709cb4c --- /dev/null +++ b/src/lua/tolua_eh.c @@ -0,0 +1,66 @@ +/* tolua: error handling +** Support code for Lua bindings. +** Written by Waldemar Celes +** TeCGraf/PUC-Rio +** Jul 1998 +** $Id: tolua_eh.c,v 1.2 2001/11/26 23:00:27 darkgod Exp $ +*/ + +/* This code is free software; you can redistribute it and/or modify it. +** The software provided hereunder is on an "as is" basis, and +** the author has no obligation to provide maintenance, support, updates, +** enhancements, or modifications. +*/ + +#include "tolua.h" +#include "tolua_eh.h" +#include "tolua_rg.h" + +#include <stdio.h> + +/* registry fiels used to hold current error info + - tolua_err_narg: number of wrong argument + - tolua_err_provided: provided type + - tolua_err_expected: expected type +*/ + +void toluaI_eh_set +(lua_State* L, int narg, const char* provided, const char* expected) +{ + lua_pushnumber(L,narg); + toluaI_setregistry(L,"tolua_err_narg"); + lua_pushstring(L,provided); + toluaI_setregistry(L,"tolua_err_provided"); + lua_pushstring(L,expected); + toluaI_setregistry(L,"tolua_err_expected"); +} + +void tolua_error (lua_State* L, char* msg) +{ + if (msg[0]=='#') + { + static char buffer[BUFSIZ]; + const char* err_provided; + const char* err_expected; + toluaI_getregistry(L,"tolua_err_provided"); + err_provided = lua_tostring(L,-1); + toluaI_getregistry(L,"tolua_err_expected"); + err_expected = lua_tostring(L,-1); + lua_pop(L,2); + if (msg[1]=='f') + { + int err_narg; + toluaI_getregistry(L,"tolua_err_narg"); + err_narg = (int)lua_tonumber(L,-1); + lua_pop(L,1); + sprintf(buffer,"%s\n argument #%d is '%s'; '%s' expected.\n", + msg+2,err_narg,err_provided,err_expected); + } + else if (msg[1]=='v') + sprintf(buffer,"%s\n value is '%s'; '%s' expected.\n", + msg+2,err_provided,err_expected); + lua_error(L,buffer); + } + else + lua_error(L,msg); +} |