Lua 查看栈的宏

#ifndef SHOW_STACK
#define SHOW_STACK(stack) {\
int show_stack_n = lua_gettop(stack), show_stack_i;\
printf(" _____________________STACK_____________________\n");\
for(show_stack_i=show_stack_n;show_stack_i>0;--show_stack_i)\
switch(lua_type(L, show_stack_i)) {\
case LUA_TNIL:\
printf("|\t%d / %d IS A LUA_TNIL\n", show_stack_i, show_stack_n);\
break;\
case LUA_TNUMBER:\
printf("|\t%d / %d IS A LUA_TNUMBER\n", show_stack_i, show_stack_n);\
break;\
case LUA_TBOOLEAN:\
printf("|\t%d / %d IS A LUA_TBOOLEAN\n", show_stack_i, show_stack_n);\
break;\
case LUA_TSTRING:\
printf("|\t%d / %d IS A LUA_TSTRING\n", show_stack_i, show_stack_n);\
break;\
case LUA_TTABLE:\
printf("|\t%d / %d IS A LUA_TTABLE\n", show_stack_i, show_stack_n);\
break;\
case LUA_TFUNCTION:\
printf("|\t%d / %d IS A LUA_TFUNCTION\n", show_stack_i, show_stack_n);\
break;\
case LUA_TUSERDATA:\
printf("|\t%d / %d IS A LUA_TUSERDATA\n", show_stack_i, show_stack_n);\
break;\
case LUA_TTHREAD:\
printf("|\t%d / %d IS A LUA_TTHREAD\n", show_stack_i, show_stack_n);\
break;\
case LUA_TLIGHTUSERDATA:\
printf("|\t%d / %d IS A LUA_TLIGHTUSERDATA\n", show_stack_i, show_stack_n);\
break;\
default:\
printf("|\t%d / %d IS A UNKNOWN\n", show_stack_i, show_stack_n);\
break;}}
#endif // SHOW_STACK


#ifndef EXPAND_TABLE
#define EXPAND_TABLE(stack) do{\
printf(" _____________________TABLE_____________________\n");\
if(!lua_gettop(stack)) {\
printf("|\tSTACK IS EMPTY\n");break;}\
int stack_table_idx = lua_gettop(stack);\
if(!lua_istable(stack, stack_table_idx)){\
printf("|\tSTACK TOP IS NOT TABLE\n");break;}\
lua_pushnil(stack);\
while (lua_next(stack, stack_table_idx)!=0){\
printf("|%20s\t", lua_tostring(stack, -2));\
switch(lua_type(L, -1)) {\
case LUA_TNIL:\
printf("LUA_TNIL\n");\
break;\
case LUA_TNUMBER:\
printf("LUA_TNUMBER\n");\
break;\
case LUA_TBOOLEAN:\
printf("LUA_TBOOLEAN\n");\
break;\
case LUA_TSTRING:\
printf("LUA_TSTRING\n");\
break;\
case LUA_TTABLE:\
printf("LUA_TTABLE\n");\
break;\
case LUA_TFUNCTION:\
printf("LUA_TFUNCTION\n");\
break;\
case LUA_TUSERDATA:\
printf("LUA_TUSERDATA\n");\
break;\
case LUA_TTHREAD:\
printf("LUA_TTHREAD\n");\
break;\
case LUA_TLIGHTUSERDATA:\
printf("LUA_TLIGHTUSERDATA\n");\
break;\
default:\
printf("UNKNOWN\n");\
break;}lua_pop(L, 1);\
}}while(0);
#endif // EXPAND_TABLE