diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2000-03-29 17:19:20 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2000-03-29 17:19:20 -0300 |
commit | a69356e9e0a7525b1cebadc928a0efcce8c39b46 (patch) | |
tree | c676ee2997c699d3e0b036323ecbafa7ea0d786f /ldebug.c | |
parent | b53dc0c4853c56694dda727793e5f6188de39dd8 (diff) | |
download | lua-a69356e9e0a7525b1cebadc928a0efcce8c39b46.tar.gz lua-a69356e9e0a7525b1cebadc928a0efcce8c39b46.tar.bz2 lua-a69356e9e0a7525b1cebadc928a0efcce8c39b46.zip |
no more special cases for closures with 0 upvalues (performance is the same,
memory use a little higher, code much simpler).
Diffstat (limited to 'ldebug.c')
-rw-r--r-- | ldebug.c | 28 |
1 files changed, 10 insertions, 18 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: ldebug.c,v 1.12 2000/03/20 19:14:54 roberto Exp roberto $ | 2 | ** $Id: ldebug.c,v 1.13 2000/03/27 20:10:21 roberto Exp roberto $ |
3 | ** Debug Interface | 3 | ** Debug Interface |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -24,10 +24,8 @@ | |||
24 | 24 | ||
25 | static const lua_Type normtype[] = { /* ORDER LUA_T */ | 25 | static const lua_Type normtype[] = { /* ORDER LUA_T */ |
26 | TAG_USERDATA, TAG_NUMBER, TAG_STRING, TAG_TABLE, | 26 | TAG_USERDATA, TAG_NUMBER, TAG_STRING, TAG_TABLE, |
27 | TAG_LPROTO, TAG_CPROTO, TAG_NIL, | 27 | TAG_LCLOSURE, TAG_CCLOSURE, TAG_NIL, |
28 | TAG_LCLOSURE, TAG_CCLOSURE, | 28 | TAG_LCLOSURE, TAG_CCLOSURE /* TAG_LCLMARK, TAG_CCLMARK */ |
29 | TAG_LCLOSURE, TAG_CCLOSURE, /* TAG_LCLMARK, TAG_CCLMARK */ | ||
30 | TAG_LPROTO, TAG_CPROTO /* TAG_LMARK, TAG_CMARK */ | ||
31 | }; | 29 | }; |
32 | 30 | ||
33 | 31 | ||
@@ -104,11 +102,7 @@ static int lua_currentline (lua_State *L, StkId f) { | |||
104 | 102 | ||
105 | 103 | ||
106 | static Proto *getluaproto (StkId f) { | 104 | static Proto *getluaproto (StkId f) { |
107 | if (ttype(f) == TAG_LMARK) | 105 | return (ttype(f) == TAG_LCLMARK) ? clvalue(f)->f.l : NULL; |
108 | return f->value.tf; | ||
109 | else if (ttype(f) == TAG_LCLMARK) | ||
110 | return protovalue(f)->value.tf; | ||
111 | else return NULL; | ||
112 | } | 106 | } |
113 | 107 | ||
114 | 108 | ||
@@ -141,20 +135,18 @@ int lua_setlocal (lua_State *L, const lua_Dbgactreg *ar, lua_Dbglocvar *v) { | |||
141 | static void lua_funcinfo (lua_Dbgactreg *ar) { | 135 | static void lua_funcinfo (lua_Dbgactreg *ar) { |
142 | StkId func = ar->_func; | 136 | StkId func = ar->_func; |
143 | switch (ttype(func)) { | 137 | switch (ttype(func)) { |
144 | case TAG_LPROTO: case TAG_LMARK: | ||
145 | ar->source = tfvalue(func)->source->str; | ||
146 | ar->linedefined = tfvalue(func)->lineDefined; | ||
147 | ar->what = "Lua"; | ||
148 | break; | ||
149 | case TAG_LCLOSURE: case TAG_LCLMARK: | 138 | case TAG_LCLOSURE: case TAG_LCLMARK: |
150 | ar->source = tfvalue(protovalue(func))->source->str; | 139 | ar->source = clvalue(func)->f.l->source->str; |
151 | ar->linedefined = tfvalue(protovalue(func))->lineDefined; | 140 | ar->linedefined = clvalue(func)->f.l->lineDefined; |
152 | ar->what = "Lua"; | 141 | ar->what = "Lua"; |
153 | break; | 142 | break; |
154 | default: | 143 | case TAG_CCLOSURE: case TAG_CCLMARK: |
155 | ar->source = "(C)"; | 144 | ar->source = "(C)"; |
156 | ar->linedefined = -1; | 145 | ar->linedefined = -1; |
157 | ar->what = "C"; | 146 | ar->what = "C"; |
147 | break; | ||
148 | default: | ||
149 | LUA_INTERNALERROR(L, "invalid `func' value"); | ||
158 | } | 150 | } |
159 | if (ar->linedefined == 0) | 151 | if (ar->linedefined == 0) |
160 | ar->what = "main"; | 152 | ar->what = "main"; |