From Tony Trinh:

Update Lua from 5.1 to 5.2

https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=7400

svn path=/trunk/; revision=43479
This commit is contained in:
Anders Broman 2012-06-25 20:28:14 +00:00
parent f272aaeb80
commit 6efe4ea27c
11 changed files with 103 additions and 59 deletions

View File

@ -130,12 +130,11 @@ int dissect_lua(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree) {
}
static void iter_table_and_call(lua_State* LS, int env, const gchar* table_name, lua_CFunction error_handler) {
static void iter_table_and_call(lua_State* LS, const gchar* table_name, lua_CFunction error_handler) {
lua_settop(LS,0);
lua_pushcfunction(LS,error_handler);
lua_pushstring(LS, table_name);
lua_gettable(LS, env);
lua_getglobal(LS, table_name);
if (!lua_istable(LS, 2)) {
report_failure("Lua: either `%s' does not exist or it is not a table!\n",table_name);
@ -183,7 +182,7 @@ static void wslua_init_routine(void) {
}
if (L) {
iter_table_and_call(L, LUA_GLOBALSINDEX, WSLUA_INIT_ROUTINES,init_error_handler);
iter_table_and_call(L, WSLUA_INIT_ROUTINES,init_error_handler);
}
}
@ -239,7 +238,11 @@ static gboolean lua_load_script(const gchar* filename) {
lua_pushcfunction(L,lua_main_error_handler);
#if LUA_VERSION_NUM >= 502
error = lua_load(L,getF,file,filename,NULL);
#else
error = lua_load(L,getF,file,filename);
#endif
switch (error) {
case 0:
lua_pcall(L,0,0,1);
@ -254,6 +257,10 @@ static gboolean lua_load_script(const gchar* filename) {
report_failure("Lua: memory allocation error during execution of %s",filename);
fclose(file);
return FALSE;
default:
report_failure("Lua: unspecified error during execution of %s", filename);
fclose(file);
return FALSE;
}
report_failure("Lua: unknown error during execution of %s: %d",filename,error);
@ -348,9 +355,8 @@ int wslua_init(register_cb cb, gpointer client_data) {
lua_atpanic(L,wslua_panic);
/* the init_routines table (accessible by the user) */
lua_pushstring(L, WSLUA_INIT_ROUTINES);
lua_newtable (L);
lua_settable(L, LUA_GLOBALSINDEX);
lua_setglobal(L, WSLUA_INIT_ROUTINES);
/* the dissectors table goes in the registry (not accessible) */
lua_newtable (L);
@ -374,8 +380,7 @@ int wslua_init(register_cb cb, gpointer client_data) {
filename = NULL;
/* check if lua is to be disabled */
lua_pushstring(L,"disable_lua");
lua_gettable(L, LUA_GLOBALSINDEX);
lua_getglobal(L,"disable_lua");
if (lua_isboolean(L,-1) && lua_toboolean(L,-1)) {
/* disable lua */
@ -388,8 +393,7 @@ int wslua_init(register_cb cb, gpointer client_data) {
lua_load_plugins(get_plugin_dir());
/* check whether we should run other scripts even if running superuser */
lua_pushstring(L,"run_user_scripts_when_superuser");
lua_gettable(L, LUA_GLOBALSINDEX);
lua_getglobal(L,"run_user_scripts_when_superuser");
if (lua_isboolean(L,-1) && lua_toboolean(L,-1)) {
run_anyway = TRUE;
@ -424,9 +428,8 @@ int wslua_init(register_cb cb, gpointer client_data) {
* after this point it is too late to register a menu
* disable the function to avoid weirdness
*/
lua_pushstring(L, "register_menu");
lua_pushcfunction(L, wslua_not_register_menu);
lua_settable(L, LUA_GLOBALSINDEX);
lua_setglobal(L, "register_menu");
/* set up some essential globals */
lua_pinfo = NULL;

View File

@ -81,7 +81,7 @@ static UBits barg(lua_State *L, int idx)
#error "Unknown number type, check LUA_NUMBER_* in luaconf.h"
#endif
if (b == 0 && !lua_isnumber(L, idx))
luaL_typerror(L, idx, "number");
luaL_error(L, "bad argument %d (number expected, got %s)", idx, lua_typename(L, lua_type(L, idx)));
return b;
}
@ -174,7 +174,14 @@ LUALIB_API int luaopen_bit(lua_State *L)
msg = "arithmetic right-shift broken";
luaL_error(L, "bit library self-test failed (%s)", msg);
}
#if LUA_VERSION_NUM >= 502
luaL_newlib(L, bit_funcs);
lua_setglobal(L, "bit");
#else
luaL_register(L, "bit", bit_funcs);
#endif
return 1;
}

View File

@ -195,14 +195,14 @@ TBLFTR
for my $ename (sort keys %enums) {
print CFILE "\n\t/*\n\t * $ename\n\t */\n\tlua_pushstring(L,\"$ename\"); lua_newtable(L);\n";
print CFILE "\n\t/*\n\t * $ename\n\t */\n\tlua_newtable(L);\n";
for my $a (@{$enums{$ename}}) {
print CFILE <<"ENUMELEM";
lua_pushstring(L,"$a"); lua_pushnumber(L,(lua_Number)$a); lua_settable(L,LUA_GLOBALSINDEX);
lua_pushnumber(L,(lua_Number)$a); lua_setglobal(L,"$a");
lua_pushnumber(L,(lua_Number)$a); lua_pushstring(L,"$a"); lua_settable(L,-3);
ENUMELEM
}
print CFILE "\tlua_settable(L,LUA_GLOBALSINDEX);\n";
print CFILE "\tlua_setglobal(L,\"$ename\");\n";
}
print CFILE <<"TAIL";

View File

@ -258,7 +258,7 @@ typedef struct _wslua_private_table* PrivateTable;
#define WSLUA_CLASS_DEFINE(C,check_code,push_code) \
C to##C(lua_State* L, int idx) { \
C* v = (C*)lua_touserdata (L, idx); \
if (!v) luaL_typerror(L,idx,#C); \
if (!v) luaL_error(L, "bad argument %d (%s expected, got %s)", idx, #C, lua_typename(L, lua_type(L, idx))); \
return v ? *v : NULL; \
} \
C check##C(lua_State* L, int idx) { \
@ -299,6 +299,29 @@ typedef int dummy##C
#ifdef HAVE_LUA_5_1
#if LUA_VERSION_NUM >= 502
#define WSLUA_REGISTER_CLASS(C) { \
int lib_idx, meta_idx; \
lua_createtable(L, 0, 0); \
lib_idx = lua_gettop(L); \
luaL_newmetatable(L, #C); \
meta_idx = lua_gettop(L); \
luaL_setfuncs(L, C ## _meta, 0); \
luaL_newlib(L, C ## _methods); \
lua_setfield(L, meta_idx, "__index"); \
luaL_newlib(L, C ## _meta); \
lua_setfield(L, meta_idx, "__metatable"); \
lua_setmetatable(L, lib_idx); \
lua_setglobal(L, #C); \
}
#define WSLUA_REGISTER_META(C) { \
luaL_newmetatable (L, #C); \
luaL_setfuncs (L, C ## _meta, 0); \
lua_pop(L,1); \
}
#else
#define WSLUA_REGISTER_CLASS(C) { \
luaL_register (L, #C, C ## _methods); \
luaL_newmetatable (L, #C); \
@ -317,6 +340,7 @@ typedef int dummy##C
luaL_register (L, NULL, C ## _meta); \
lua_pop(L,1); \
}
#endif
#define WSLUA_INIT(L) \
luaL_openlibs(L); \
@ -326,7 +350,9 @@ typedef int dummy##C
#endif
#define WSLUA_FUNCTION extern int
#define WSLUA_REGISTER_FUNCTION(name) { lua_pushstring(L, #name); lua_pushcfunction(L, wslua_## name); lua_settable(L, LUA_GLOBALSINDEX); }
#define WSLUA_REGISTER_FUNCTION(name) { lua_pushcfunction(L, wslua_## name); lua_setglobal(L, #name); }
#define WSLUA_REGISTER extern int
#define WSLUA_METHOD static int
@ -335,17 +361,17 @@ typedef int dummy##C
#define WSLUA_ATTR_GET static int
#define WSLUA_METAMETHOD static int
#define WSLUA_METHODS static const luaL_reg
#define WSLUA_META static const luaL_reg
#define WSLUA_METHODS static const luaL_Reg
#define WSLUA_META static const luaL_Reg
#define WSLUA_CLASS_FNREG(class,name) { #name, class##_##name }
#define WSLUA_ERROR(name,error) { luaL_error(L, ep_strdup_printf("%s%s", #name ": " ,error) ); return 0; }
#define WSLUA_ARG_ERROR(name,attr,error) { luaL_argerror(L,WSLUA_ARG_ ## name ## _ ## attr, #name ": " error); return 0; }
#define WSLUA_OPTARG_ERROR(name,attr,error) { luaL_argerror(L,WSLUA_OPTARG_##name##_ ##attr, #name ": " error); return 0; }
#define WSLUA_REG_GLOBAL_BOOL(L,n,v) { lua_pushstring(L,n); lua_pushboolean(L,v); lua_settable(L, LUA_GLOBALSINDEX); }
#define WSLUA_REG_GLOBAL_STRING(L,n,v) { lua_pushstring(L,n); lua_pushstring(L,v); lua_settable(L, LUA_GLOBALSINDEX); }
#define WSLUA_REG_GLOBAL_NUMBER(L,n,v) { lua_pushstring(L,n); lua_pushnumber(L,v); lua_settable(L, LUA_GLOBALSINDEX); }
#define WSLUA_REG_GLOBAL_BOOL(L,n,v) { lua_pushboolean(L,v); lua_setglobal(L,n); }
#define WSLUA_REG_GLOBAL_STRING(L,n,v) { lua_pushstring(L,v); lua_setglobal(L,n); }
#define WSLUA_REG_GLOBAL_NUMBER(L,n,v) { lua_pushnumber(L,v); lua_setglobal(L,n); }
#define WSLUA_RETURN(i) return (i);

View File

@ -208,7 +208,7 @@ static int FieldInfo_get_name(lua_State* L) {
return 1;
}
static const luaL_reg FieldInfo_get[] = {
static const luaL_Reg FieldInfo_get[] = {
/* {"data_source", FieldInfo_get_data_source }, */
{"range", FieldInfo_get_range},
/* {"hidden", FieldInfo_get_hidden}, */
@ -232,7 +232,7 @@ static int FieldInfo__index(lua_State* L) {
Other attributes:
*/
const gchar* idx = luaL_checkstring(L,2);
const luaL_reg* r;
const luaL_Reg* r;
checkFieldInfo(L,1);
@ -294,7 +294,7 @@ WSLUA_METAMETHOD FieldInfo__lt(lua_State* L) {
}
static const luaL_reg FieldInfo_meta[] = {
static const luaL_Reg FieldInfo_meta[] = {
{"__tostring", FieldInfo__tostring},
{"__call", FieldInfo__call},
{"__index", FieldInfo__index},
@ -469,12 +469,12 @@ WSLUA_METAMETHOD Field_tostring(lua_State* L) {
return 1;
}
static const luaL_reg Field_methods[] = {
static const luaL_Reg Field_methods[] = {
{"new", Field_new},
{ NULL, NULL }
};
static const luaL_reg Field_meta[] = {
static const luaL_Reg Field_meta[] = {
{"__tostring", Field_tostring},
{"__call", Field__call},
{ NULL, NULL }

View File

@ -297,13 +297,13 @@ static int Listener_newindex(lua_State* L) {
}
static const luaL_reg Listener_methods[] = {
static const luaL_Reg Listener_methods[] = {
{"new", Listener_new},
{"remove", Listener_remove},
{ NULL, NULL }
};
static const luaL_reg Listener_meta[] = {
static const luaL_Reg Listener_meta[] = {
{"__tostring", Listener_tostring},
{"__newindex", Listener_newindex},
{ NULL, NULL }

View File

@ -301,9 +301,9 @@ WSLUA_META NSTime_meta[] = {
int NSTime_register(lua_State* L) {
WSLUA_REGISTER_META(NSTime);
lua_pushstring(L, "NSTime");
lua_pushcfunction(L, NSTime_new);
lua_settable(L, LUA_GLOBALSINDEX);
lua_setglobal(L, "NSTime");
return 1;
}
@ -809,7 +809,7 @@ static int Columns_gc(lua_State* L) {
}
static const luaL_reg Columns_meta[] = {
static const luaL_Reg Columns_meta[] = {
{"__tostring", Columns__tostring },
{"__newindex", Columns__newindex },
{"__index", Columns_index},
@ -1444,7 +1444,7 @@ static int Pinfo_gc(lua_State* L) {
}
static const luaL_reg Pinfo_meta[] = {
static const luaL_Reg Pinfo_meta[] = {
{"__index", Pinfo_index},
{"__newindex",Pinfo_setindex},
{"__tostring", Pinfo_tostring},

View File

@ -1095,7 +1095,7 @@ static int ProtoField_gc(lua_State* L) {
return 0;
}
static const luaL_reg ProtoField_methods[] = {
static const luaL_Reg ProtoField_methods[] = {
{"new", ProtoField_new},
{"uint8",ProtoField_uint8},
{"uint16",ProtoField_uint16},
@ -1126,7 +1126,7 @@ static const luaL_reg ProtoField_methods[] = {
{ NULL, NULL }
};
static const luaL_reg ProtoField_meta[] = {
static const luaL_Reg ProtoField_meta[] = {
{"__tostring", ProtoField__tostring },
{"__gc", ProtoField_gc },
{ NULL, NULL }
@ -1281,12 +1281,21 @@ static int Proto_set_init(lua_State* L) {
if (lua_isfunction(L,3)) {
/* insert the dissector into the dissectors table */
lua_pushstring(L, WSLUA_INIT_ROUTINES);
#if LUA_VERSION_NUM >= 502
lua_pushglobaltable(L);
#else
lua_gettable(L, LUA_GLOBALSINDEX);
#endif
lua_replace(L, 1);
lua_pushstring(L,proto->name);
lua_replace(L, 2);
lua_settable(L,1);
#if LUA_VERSION_NUM >= 502
/* remove the global environment table from the stack */
lua_pop(L,1);
#endif
return 0;
} else {
luaL_argerror(L,3,"The initializer of a protocol must be a function");
@ -1423,7 +1432,7 @@ static int Proto_newindex(lua_State* L) {
return 0;
}
static const luaL_reg Proto_meta[] = {
static const luaL_Reg Proto_meta[] = {
{"__tostring", Proto_tostring},
{"__index", Proto_index},
{"__newindex", Proto_newindex},
@ -1437,10 +1446,9 @@ int Proto_register(lua_State* L) {
lua_newtable(L);
protocols_table_ref = luaL_ref(L, LUA_REGISTRYINDEX);
lua_pushstring(L, "Proto");
lua_pushcfunction(L, Proto_new);
lua_settable(L, LUA_GLOBALSINDEX);
lua_pushcfunction(L, Proto_new);
lua_setglobal(L, "Proto");
Pref_register(L);
Prefs_register(L);
@ -1539,13 +1547,13 @@ WSLUA_METAMETHOD Dissector_tostring(lua_State* L) {
return 1;
}
static const luaL_reg Dissector_methods[] = {
static const luaL_Reg Dissector_methods[] = {
{"get", Dissector_get },
{"call", Dissector_call },
{ NULL, NULL }
};
static const luaL_reg Dissector_meta[] = {
static const luaL_Reg Dissector_meta[] = {
{"__tostring", Dissector_tostring},
{ NULL, NULL }
};
@ -1825,7 +1833,7 @@ WSLUA_METAMETHOD DissectorTable_tostring(lua_State* L) {
return 1;
}
static const luaL_reg DissectorTable_methods[] = {
static const luaL_Reg DissectorTable_methods[] = {
{"new", DissectorTable_new },
{"get", DissectorTable_get },
{"add", DissectorTable_add },
@ -1835,7 +1843,7 @@ static const luaL_reg DissectorTable_methods[] = {
{ NULL, NULL }
};
static const luaL_reg DissectorTable_meta[] = {
static const luaL_Reg DissectorTable_meta[] = {
{"__tostring", DissectorTable_tostring},
{ NULL, NULL }
};

View File

@ -419,7 +419,7 @@ static int TreeItem_gc(lua_State* L) {
return 0;
}
static const luaL_reg TreeItem_methods[] = {
static const luaL_Reg TreeItem_methods[] = {
{"add_packet_field", TreeItem_add_packet_field},
{"add", TreeItem_add},
{"add_le", TreeItem_add_le},
@ -433,7 +433,7 @@ static const luaL_reg TreeItem_methods[] = {
{ NULL, NULL }
};
static const luaL_reg TreeItem_meta[] = {
static const luaL_Reg TreeItem_meta[] = {
{"__gc", TreeItem_gc},
{ NULL, NULL }
};

View File

@ -287,7 +287,7 @@ static int ByteArray_tostring(lua_State* L) {
static int ByteArray_tvb (lua_State *L);
static const luaL_reg ByteArray_methods[] = {
static const luaL_Reg ByteArray_methods[] = {
{"new", ByteArray_new},
{"len", ByteArray_len},
{"prepend", ByteArray_prepend},
@ -300,7 +300,7 @@ static const luaL_reg ByteArray_methods[] = {
{ NULL, NULL }
};
static const luaL_reg ByteArray_meta[] = {
static const luaL_Reg ByteArray_meta[] = {
{"__tostring", ByteArray_tostring},
{"__gc", ByteArray_gc},
{"__concat", ByteArray__concat},
@ -623,7 +623,7 @@ WSLUA_METHOD Tvb_range(lua_State* L) {
return 0;
}
static const luaL_reg Tvb_methods[] = {
static const luaL_Reg Tvb_methods[] = {
{"range", Tvb_range},
{"len", Tvb_len},
{"offset", Tvb_offset},
@ -632,7 +632,7 @@ static const luaL_reg Tvb_methods[] = {
{ NULL, NULL }
};
static const luaL_reg Tvb_meta[] = {
static const luaL_Reg Tvb_meta[] = {
{"__call", Tvb_range},
{"__tostring", Tvb__tostring},
{"__gc", Tvb__gc},
@ -1314,7 +1314,7 @@ WSLUA_METAMETHOD TvbRange__tostring(lua_State* L) {
return 1;
}
static const luaL_reg TvbRange_methods[] = {
static const luaL_Reg TvbRange_methods[] = {
{"uint", TvbRange_uint},
{"le_uint", TvbRange_le_uint},
{"int", TvbRange_int},
@ -1345,7 +1345,7 @@ static const luaL_reg TvbRange_methods[] = {
{ NULL, NULL }
};
static const luaL_reg TvbRange_meta[] = {
static const luaL_Reg TvbRange_meta[] = {
{"__tostring", TvbRange__tostring},
{"__concat", wslua__concat},
{"__call", TvbRange_range},
@ -1386,11 +1386,11 @@ static int Int64__gc(lua_State* L) {
return 0;
}
static const luaL_reg Int64_methods[] = {
static const luaL_Reg Int64_methods[] = {
{ NULL, NULL }
};
static const luaL_reg Int64_meta[] = {
static const luaL_Reg Int64_meta[] = {
{"__tostring", Int64__tostring},
{"__concat", wslua__concat},
{"__gc", Int64__gc},
@ -1422,11 +1422,11 @@ static int UInt64__gc(lua_State* L) {
return 0;
}
static const luaL_reg UInt64_methods[] = {
static const luaL_Reg UInt64_methods[] = {
{ NULL, NULL }
};
static const luaL_reg UInt64_meta[] = {
static const luaL_Reg UInt64_meta[] = {
{"__tostring", UInt64__tostring},
{"__concat", wslua__concat},
{"__gc", UInt64__gc},

View File

@ -373,13 +373,13 @@ static int wslua_Dir__gc(lua_State* L) {
return 0;
}
static const luaL_reg Dir_methods[] = {
static const luaL_Reg Dir_methods[] = {
{"open", Dir_open},
{"close", Dir_close},
{ NULL, NULL }
};
static const luaL_reg Dir_meta[] = {
static const luaL_Reg Dir_meta[] = {
{"__call", Dir__call},
{"__gc", wslua_Dir__gc},
{ NULL, NULL }