---
source: src/main.rs
expression: compiled
input_file: test-data/lua5.1-tests/locals.lua
---
print('testing local variables plus some extra stuff');
{
local i = 10
{
local i = 100
assert(i == 100);
}
{
local i = 1000
assert(i == 1000);
}
assert(i == 10);
if i != 10 {
local i = 20
} else {
local i = 30
assert(i == 30);
}
}
f = nil
local f
x = 1
a = nil
loadstring('local a = {}')();
assert(type(a) != 'table');
global fn f(a) {
local _1, _2, _3, _4, _5
local _6, _7, _8, _9, _10
local x = 3
local b = a
local c, d = a, b
if (d == b) {
local x = 'q'
x = b
assert(x == 2);
} else {
assert(nil);
}
assert(x == 3);
local f = 10
}
local b = 10
local a
loop {
local b
a, b = 1, 2
assert(a + 1 == b);
} until a + b == 3
assert(x == 1);
f(2);
assert(type(f) == 'function');
{
local f = {}
local _G = _G
for i = 1, 10 {
f[(i)] = fn (x) {
A = A + 1
return A, _G.getfenv(x)
}
}
A = 10
assert(f[(1)]() == 11);
for i = 1, 10 {
assert(setfenv(f[(i)], {
A = i
}) == f[(i)]);
}
assert(f[(3)]() == 4 && A == 11);
local a, b = f[(8)](1)
assert(b.A == 9);
a, b = f[(8)](0)
assert(b.A == 11);
local g
local fn f() {
assert(setfenv(2, {
a = '10'
}) == g);
}
g = fn () {
f();
_G.assert(_G.getfenv(1).a == '10');
}
g();
assert(getfenv(g).a == '10');
}
local fn foo(s) {
return loadstring(s)
}
assert(getfenv(foo("")) == _G);
local a = {
loadstring = loadstring
}
setfenv(foo, a);
assert(getfenv(foo("")) == _G);
setfenv(0, a);
assert(getfenv(foo("")) == a);
setfenv(0, _G);
local a
local p = 4
for i = 2, 31 {
for j = -3, 3 {
assert(loadstring(string.format(`local a=%s;a=a+
%s;
assert(a
==2^%s)`, j, p - j, i)))();
assert(loadstring(string.format(`local a=%s;
a=a-%s;
assert(a==-2^%s)`, -j, p - j, i)))();
assert(loadstring(string.format(`local a,b=0,%s;
a=b-%s;
assert(a==-2^%s)`, -j, p - j, i)))();
}
p = 2 * p
}
print('+');
if rawget(_G, "querytab") {
collectgarbage("stop");
local a = {
{} = 4,
3 = 0,
alo = 1,
a1234567890123456789012345678901234567890 = 10
}
local t = querytab(a)
for k, _ with pairs(a) {
a[(k)] = nil
}
collectgarbage();
for i = 0, t - 1 {
local k = querytab(a, i)
assert(k == nil || type(k) == 'number' || k == 'alo');
}
}
print('OK');
return 5, f