forked from len0rd/rockbox
lua LCD (Lua Compact Debug) patch
LCD developed 9/2015 by Terry Ellison We've already discarded the ldebug module from lua it only makes sense to discard the debug info as well adds 1.5 K to the binary saves 8 Kb on the base state once scripts start getting called i've seen 10-50Kb savings but it all depends on what exactly you are running Change-Id: Ibb74f344df1c4c96380ec6c98b010a810e9ae9cc
This commit is contained in:
parent
1dabca6c26
commit
d61ea6c5ee
13 changed files with 373 additions and 6 deletions
|
@ -344,6 +344,11 @@ static void open_func (LexState *ls, FuncState *fs) {
|
|||
fs->bl = NULL;
|
||||
f->source = ls->source;
|
||||
f->maxstacksize = 2; /* registers 0/1 are always valid */
|
||||
#ifdef LUA_OPTIMIZE_DEBUG
|
||||
fs->lastline = 0;
|
||||
fs->lastlineOffset = 0;
|
||||
fs->lineinfoLastPC = -1;
|
||||
#endif
|
||||
fs->h = luaH_new(L, 0, 0);
|
||||
/* anchor table of constants and prototype (to avoid being collected) */
|
||||
sethvalue2s(L, L->top, fs->h);
|
||||
|
@ -361,8 +366,14 @@ static void close_func (LexState *ls) {
|
|||
luaK_ret(fs, 0, 0); /* final return */
|
||||
luaM_reallocvector(L, f->code, f->sizecode, fs->pc, Instruction);
|
||||
f->sizecode = fs->pc;
|
||||
#ifdef LUA_OPTIMIZE_DEBUG
|
||||
f->packedlineinfo[fs->lastlineOffset+1]=0;
|
||||
luaM_reallocvector(L, f->packedlineinfo, f->sizelineinfo,
|
||||
fs->lastlineOffset+2, unsigned char);
|
||||
#else
|
||||
luaM_reallocvector(L, f->lineinfo, f->sizelineinfo, fs->pc, int);
|
||||
f->sizelineinfo = fs->pc;
|
||||
#endif
|
||||
luaM_reallocvector(L, f->k, f->sizek, fs->nk, TValue);
|
||||
f->sizek = fs->nk;
|
||||
luaM_reallocvector(L, f->p, f->sizep, fs->np, Proto *);
|
||||
|
@ -379,6 +390,23 @@ static void close_func (LexState *ls) {
|
|||
L->top -= 2; /* remove table and prototype from the stack */
|
||||
}
|
||||
|
||||
#ifdef LUA_OPTIMIZE_DEBUG
|
||||
static void compile_stripdebug(lua_State *L, Proto *f) {
|
||||
int level;
|
||||
#ifdef LUA_OPTIMIZE_DEBUG_USER
|
||||
lua_pushlightuserdata(L, &luaG_stripdebug);
|
||||
lua_gettable(L, LUA_REGISTRYINDEX);
|
||||
level = lua_isnil(L, -1) ? LUA_OPTIMIZE_DEBUG : lua_tointeger(L, -1);
|
||||
lua_pop(L, 1);
|
||||
#else
|
||||
level = LUA_OPTIMIZE_DEBUG;
|
||||
#endif
|
||||
|
||||
if (level > 1) {
|
||||
luaG_stripdebug(L, f, level, 16);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
Proto *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff, const char *name) {
|
||||
struct LexState lexstate;
|
||||
|
@ -395,6 +423,9 @@ Proto *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff, const char *name) {
|
|||
check(&lexstate, TK_EOS);
|
||||
close_func(&lexstate);
|
||||
L->top--; /* remove 'name' from stack */
|
||||
#ifdef LUA_OPTIMIZE_DEBUG
|
||||
compile_stripdebug(L, funcstate.f);
|
||||
#endif
|
||||
lua_assert(funcstate.prev == NULL);
|
||||
lua_assert(funcstate.f->nups == 0);
|
||||
lua_assert(lexstate.fs == NULL);
|
||||
|
@ -402,7 +433,6 @@ Proto *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff, const char *name) {
|
|||
}
|
||||
|
||||
|
||||
|
||||
/*============================================================*/
|
||||
/* GRAMMAR RULES */
|
||||
/*============================================================*/
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue