cluna 1.1.0

Tool to convert Lua code into Clue code Made by MarkosTh09
Documentation
---
source: src/main.rs
expression: compiled
input_file: test-data/lua5.3-tests/big.lua
---
if _soft {
    return 'a'
}
print("testing large tables");
local debug = require("debug")
local lim = 2 ^ 18 + 1000
local prog = {
    "local y = {0"
}
for i = 1, lim {
    prog[(#prog + 1)] = i
}
prog[(#prog + 1)] = "}\n"
prog[(#prog + 1)] = "X = y\n"
prog[(#prog + 1)] = ("assert(X[%d] == %d)")::format(lim - 1, lim - 2)
prog[(#prog + 1)] = "return 0"
prog = table.concat(prog, ";")
local env = {
    string = string, 
    assert = assert
}
local f = assert(load(prog, nil, nil, env))
f();
assert(env.X[(lim)] == lim - 1 && env.X[(lim + 1)] == lim);
for k with pairs(env) {
    env[(k)] = nil
}
setmetatable(env, {
    __index = fn (t, n) {
        coroutine.yield('g');
        return _G[(n)]
    }, 
    __newindex = fn (t, n, v) {
        coroutine.yield('s');
        _G[(n)] = v
    }
});
X = nil
co = coroutine.wrap(f)
assert(co() == 's');
assert(co() == 'g');
assert(co() == 'g');
assert(co() == 0);
assert(X[(lim)] == lim - 1 && X[(lim + 1)] == lim);
getmetatable(env).__index = fn () {
    
}
getmetatable(env).__newindex = fn () {
    
}
local e, m = pcall(f)
assert(!e && m::find("global 'X'"));
getmetatable(env).__newindex = fn () {
    error("hi");
}
local e, m = xpcall(f, debug.traceback)
assert(!e && m::find("'__newindex'"));
f, X = nil
coroutine.yield('b');
if 2 ^ 32 == 0 {
    print("testing string length overflow");
    local repstrings = 192
    local ssize = math.ceil(2.0 ^ 32 / repstrings) + 1
    assert(repstrings * ssize > 2.0 ^ 32);
    local longs = string.rep("\0", ssize)
    local rep = assert(load("local a = ...; return " .. string.rep("a", repstrings, "..")))
    local a, b = pcall(rep, longs)
    assert(!a && string.find(b, "overflow"));
}
print('OK');
return 'a'