diff options
| -rw-r--r-- | ldebug.c | 4 | ||||
| -rw-r--r-- | testes/db.lua | 19 |
2 files changed, 21 insertions, 2 deletions
| @@ -783,11 +783,13 @@ l_noret luaG_runerror (lua_State *L, const char *fmt, ...) { | |||
| 783 | ** previous instruction 'oldpc'. | 783 | ** previous instruction 'oldpc'. |
| 784 | */ | 784 | */ |
| 785 | static int changedline (const Proto *p, int oldpc, int newpc) { | 785 | static int changedline (const Proto *p, int oldpc, int newpc) { |
| 786 | if (p->lineinfo == NULL) /* no debug information? */ | ||
| 787 | return 0; | ||
| 786 | while (oldpc++ < newpc) { | 788 | while (oldpc++ < newpc) { |
| 787 | if (p->lineinfo[oldpc] != 0) | 789 | if (p->lineinfo[oldpc] != 0) |
| 788 | return (luaG_getfuncline(p, oldpc - 1) != luaG_getfuncline(p, newpc)); | 790 | return (luaG_getfuncline(p, oldpc - 1) != luaG_getfuncline(p, newpc)); |
| 789 | } | 791 | } |
| 790 | return 0; /* no line changes in the way */ | 792 | return 0; /* no line changes between positions */ |
| 791 | } | 793 | } |
| 792 | 794 | ||
| 793 | 795 | ||
diff --git a/testes/db.lua b/testes/db.lua index 941283f7..5377f6ec 100644 --- a/testes/db.lua +++ b/testes/db.lua | |||
| @@ -884,7 +884,7 @@ end | |||
| 884 | 884 | ||
| 885 | 885 | ||
| 886 | print("testing debug functions on chunk without debug info") | 886 | print("testing debug functions on chunk without debug info") |
| 887 | prog = [[-- program to be loaded without debug information | 887 | prog = [[-- program to be loaded without debug information (strip) |
| 888 | local debug = require'debug' | 888 | local debug = require'debug' |
| 889 | local a = 12 -- a local variable | 889 | local a = 12 -- a local variable |
| 890 | 890 | ||
| @@ -927,6 +927,23 @@ local f = assert(load(string.dump(load(prog), true))) | |||
| 927 | 927 | ||
| 928 | assert(f() == 13) | 928 | assert(f() == 13) |
| 929 | 929 | ||
| 930 | do -- bug in 5.4.0: line hooks in stripped code | ||
| 931 | local function foo () | ||
| 932 | local a = 1 | ||
| 933 | local b = 2 | ||
| 934 | return b | ||
| 935 | end | ||
| 936 | |||
| 937 | local s = load(string.dump(foo, true)) | ||
| 938 | local line = true | ||
| 939 | debug.sethook(function (e, l) | ||
| 940 | assert(e == "line") | ||
| 941 | line = l | ||
| 942 | end, "l") | ||
| 943 | assert(s() == 2); debug.sethook(nil) | ||
| 944 | assert(line == nil) -- hook called withoug debug info for 1st instruction | ||
| 945 | end | ||
| 946 | |||
| 930 | do -- tests for 'source' in binary dumps | 947 | do -- tests for 'source' in binary dumps |
| 931 | local prog = [[ | 948 | local prog = [[ |
| 932 | return function (x) | 949 | return function (x) |
