1/* 2** $Id: ltests.h $ 3** Internal Header for Debugging of the Lua Implementation 4** See Copyright Notice in lua.h 5*/ 6 7#ifndef ltests_h 8#define ltests_h 9 10 11#include <stdio.h> 12#include <stdlib.h> 13 14/* test Lua with compatibility code */ 15#define LUA_COMPAT_MATHLIB 16#define LUA_COMPAT_LT_LE 17 18 19#define LUA_DEBUG 20 21 22/* turn on assertions */ 23#define LUAI_ASSERT 24 25 26/* to avoid warnings, and to make sure value is really unused */ 27#define UNUSED(x) (x=0, (void)(x)) 28 29 30/* test for sizes in 'l_sprintf' (make sure whole buffer is available) */ 31#undef l_sprintf 32#if !defined(LUA_USE_C89) 33#define l_sprintf(s,sz,f,i) (memset(s,0xAB,sz), snprintf(s,sz,f,i)) 34#else 35#define l_sprintf(s,sz,f,i) (memset(s,0xAB,sz), sprintf(s,f,i)) 36#endif 37 38 39/* get a chance to test code without jump tables */ 40#define LUA_USE_JUMPTABLE 0 41 42 43/* use 32-bit integers in random generator */ 44#define LUA_RAND32 45 46 47/* memory-allocator control variables */ 48typedef struct Memcontrol { 49 int failnext; 50 unsigned long numblocks; 51 unsigned long total; 52 unsigned long maxmem; 53 unsigned long memlimit; 54 unsigned long countlimit; 55 unsigned long objcount[LUA_NUMTYPES]; 56} Memcontrol; 57 58LUA_API Memcontrol l_memcontrol; 59 60 61/* 62** generic variable for debug tricks 63*/ 64extern void *l_Trick; 65 66 67 68/* 69** Function to traverse and check all memory used by Lua 70*/ 71LUAI_FUNC int lua_checkmemory (lua_State *L); 72 73/* 74** Function to print an object GC-friendly 75*/ 76struct GCObject; 77LUAI_FUNC void lua_printobj (lua_State *L, struct GCObject *o); 78 79 80/* test for lock/unlock */ 81 82struct L_EXTRA { int lock; int *plock; }; 83#undef LUA_EXTRASPACE 84#define LUA_EXTRASPACE sizeof(struct L_EXTRA) 85#define getlock(l) cast(struct L_EXTRA*, lua_getextraspace(l)) 86#define luai_userstateopen(l) \ 87 (getlock(l)->lock = 0, getlock(l)->plock = &(getlock(l)->lock)) 88#define luai_userstateclose(l) \ 89 lua_assert(getlock(l)->lock == 1 && getlock(l)->plock == &(getlock(l)->lock)) 90#define luai_userstatethread(l,l1) \ 91 lua_assert(getlock(l1)->plock == getlock(l)->plock) 92#define luai_userstatefree(l,l1) \ 93 lua_assert(getlock(l)->plock == getlock(l1)->plock) 94#define lua_lock(l) lua_assert((*getlock(l)->plock)++ == 0) 95#define lua_unlock(l) lua_assert(--(*getlock(l)->plock) == 0) 96 97 98 99LUA_API int luaB_opentests (lua_State *L); 100 101LUA_API void *debug_realloc (void *ud, void *block, 102 size_t osize, size_t nsize); 103 104#if defined(lua_c) 105#define luaL_newstate() lua_newstate(debug_realloc, &l_memcontrol) 106#define luaL_openlibs(L) \ 107 { (luaL_openlibs)(L); \ 108 luaL_requiref(L, "T", luaB_opentests, 1); \ 109 lua_pop(L, 1); } 110#endif 111 112 113 114/* change some sizes to give some bugs a chance */ 115 116#undef LUAL_BUFFERSIZE 117#define LUAL_BUFFERSIZE 23 118#define MINSTRTABSIZE 2 119#define MAXIWTHABS 3 120 121#define STRCACHE_N 23 122#define STRCACHE_M 5 123 124#undef LUAI_USER_ALIGNMENT_T 125#define LUAI_USER_ALIGNMENT_T union { char b[sizeof(void*) * 8]; } 126 127 128/* 129** This one is not compatible with tests for opcode optimizations, 130** as it blocks some optimizations 131#define MAXINDEXRK 0 132*/ 133 134 135/* make stack-overflow tests run faster */ 136#undef LUAI_MAXSTACK 137#define LUAI_MAXSTACK 50000 138 139 140/* test mode uses more stack space */ 141#undef LUAI_MAXCCALLS 142#define LUAI_MAXCCALLS 180 143 144 145/* force Lua to use its own implementations */ 146#undef lua_strx2number 147#undef lua_number2strx 148 149 150#endif 151 152