diff options
Diffstat (limited to '')
| -rw-r--r-- | lparser.c | 6 |
1 files changed, 5 insertions, 1 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lparser.c,v 1.170 2002/03/14 18:32:37 roberto Exp roberto $ | 2 | ** $Id: lparser.c,v 1.171 2002/03/18 14:49:46 roberto Exp roberto $ |
| 3 | ** Lua Parser | 3 | ** Lua Parser |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -1209,6 +1209,10 @@ static void retstat (LexState *ls) { | |||
| 1209 | else { | 1209 | else { |
| 1210 | nret = explist1(ls, &e); /* optional return values */ | 1210 | nret = explist1(ls, &e); /* optional return values */ |
| 1211 | if (e.k == VCALL) { | 1211 | if (e.k == VCALL) { |
| 1212 | if (nret == 1) { /* tail call? */ | ||
| 1213 | SET_OPCODE(getcode(fs,&e), OP_TAILCALL); | ||
| 1214 | return; | ||
| 1215 | } | ||
| 1212 | luaK_setcallreturns(fs, &e, LUA_MULTRET); | 1216 | luaK_setcallreturns(fs, &e, LUA_MULTRET); |
| 1213 | first = fs->nactloc; | 1217 | first = fs->nactloc; |
| 1214 | nret = LUA_MULTRET; /* return all values */ | 1218 | nret = LUA_MULTRET; /* return all values */ |
