diff options
| -rw-r--r-- | lparser.c | 1 | ||||
| -rw-r--r-- | testes/attrib.lua | 10 |
2 files changed, 11 insertions, 0 deletions
| @@ -468,6 +468,7 @@ static void singlevar (LexState *ls, expdesc *var) { | |||
| 468 | expdesc key; | 468 | expdesc key; |
| 469 | singlevaraux(fs, ls->envn, var, 1); /* get environment variable */ | 469 | singlevaraux(fs, ls->envn, var, 1); /* get environment variable */ |
| 470 | lua_assert(var->k != VVOID); /* this one must exist */ | 470 | lua_assert(var->k != VVOID); /* this one must exist */ |
| 471 | luaK_exp2anyregup(fs, var); /* but could be a constant */ | ||
| 471 | codestring(&key, varname); /* key is variable name */ | 472 | codestring(&key, varname); /* key is variable name */ |
| 472 | luaK_indexed(fs, var, &key); /* env[varname] */ | 473 | luaK_indexed(fs, var, &key); /* env[varname] */ |
| 473 | } | 474 | } |
diff --git a/testes/attrib.lua b/testes/attrib.lua index b1076c76..83821c06 100644 --- a/testes/attrib.lua +++ b/testes/attrib.lua | |||
| @@ -434,6 +434,16 @@ a.aVeryLongName012345678901234567890123456789012345678901234567890123456789 == | |||
| 434 | 10) | 434 | 10) |
| 435 | 435 | ||
| 436 | 436 | ||
| 437 | do | ||
| 438 | -- _ENV constant | ||
| 439 | local function foo () | ||
| 440 | local _ENV <const> = 11 | ||
| 441 | X = "hi" | ||
| 442 | end | ||
| 443 | local st, msg = pcall(foo) | ||
| 444 | assert(not st and string.find(msg, "number")) | ||
| 445 | end | ||
| 446 | |||
| 437 | 447 | ||
| 438 | -- test of large float/integer indices | 448 | -- test of large float/integer indices |
| 439 | 449 | ||
