diff options
Diffstat (limited to 'ltests.c')
-rw-r--r-- | ltests.c | 22 |
1 files changed, 21 insertions, 1 deletions
@@ -526,7 +526,8 @@ static char *buildop (Proto *p, int pc, char *buff) { | |||
526 | OpCode o = GET_OPCODE(i); | 526 | OpCode o = GET_OPCODE(i); |
527 | const char *name = opnames[o]; | 527 | const char *name = opnames[o]; |
528 | int line = luaG_getfuncline(p, pc); | 528 | int line = luaG_getfuncline(p, pc); |
529 | sprintf(buff, "(%4d) %4d - ", line, pc); | 529 | int lineinfo = (p->lineinfo != NULL) ? p->lineinfo[pc] : 0; |
530 | sprintf(buff, "(%2d - %4d) %4d - ", lineinfo, line, pc); | ||
530 | switch (getOpMode(o)) { | 531 | switch (getOpMode(o)) { |
531 | case iABC: | 532 | case iABC: |
532 | sprintf(buff+strlen(buff), "%-12s%4d %4d %4d%s", name, | 533 | sprintf(buff+strlen(buff), "%-12s%4d %4d %4d%s", name, |
@@ -621,6 +622,24 @@ static int listk (lua_State *L) { | |||
621 | } | 622 | } |
622 | 623 | ||
623 | 624 | ||
625 | static int listabslineinfo (lua_State *L) { | ||
626 | Proto *p; | ||
627 | int i; | ||
628 | luaL_argcheck(L, lua_isfunction(L, 1) && !lua_iscfunction(L, 1), | ||
629 | 1, "Lua function expected"); | ||
630 | p = getproto(obj_at(L, 1)); | ||
631 | luaL_argcheck(L, p->abslineinfo != NULL, 1, "function has no debug info"); | ||
632 | lua_createtable(L, 2 * p->sizeabslineinfo, 0); | ||
633 | for (i=0; i < p->sizeabslineinfo; i++) { | ||
634 | lua_pushinteger(L, p->abslineinfo[i].pc); | ||
635 | lua_rawseti(L, -2, 2 * i + 1); | ||
636 | lua_pushinteger(L, p->abslineinfo[i].line); | ||
637 | lua_rawseti(L, -2, 2 * i + 2); | ||
638 | } | ||
639 | return 1; | ||
640 | } | ||
641 | |||
642 | |||
624 | static int listlocals (lua_State *L) { | 643 | static int listlocals (lua_State *L) { |
625 | Proto *p; | 644 | Proto *p; |
626 | int pc = cast_int(luaL_checkinteger(L, 2)) - 1; | 645 | int pc = cast_int(luaL_checkinteger(L, 2)) - 1; |
@@ -1682,6 +1701,7 @@ static const struct luaL_Reg tests_funcs[] = { | |||
1682 | {"listcode", listcode}, | 1701 | {"listcode", listcode}, |
1683 | {"printcode", printcode}, | 1702 | {"printcode", printcode}, |
1684 | {"listk", listk}, | 1703 | {"listk", listk}, |
1704 | {"listabslineinfo", listabslineinfo}, | ||
1685 | {"listlocals", listlocals}, | 1705 | {"listlocals", listlocals}, |
1686 | {"loadlib", loadlib}, | 1706 | {"loadlib", loadlib}, |
1687 | {"checkpanic", checkpanic}, | 1707 | {"checkpanic", checkpanic}, |