diff options
Diffstat (limited to 'testes')
| -rw-r--r-- | testes/constructs.lua | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/testes/constructs.lua b/testes/constructs.lua index a74a8c04..0d9ec92d 100644 --- a/testes/constructs.lua +++ b/testes/constructs.lua | |||
| @@ -103,6 +103,31 @@ do -- test old bug (first name could not be an `upvalue') | |||
| 103 | local a; function f(x) x={a=1}; x={x=1}; x={G=1} end | 103 | local a; function f(x) x={a=1}; x={x=1}; x={G=1} end |
| 104 | end | 104 | end |
| 105 | 105 | ||
| 106 | |||
| 107 | do -- bug since 5.4.0 | ||
| 108 | -- create code with a table using more than 256 constants | ||
| 109 | local code = {"local x = {"} | ||
| 110 | for i = 1, 257 do | ||
| 111 | code[#code + 1] = i .. ".1," | ||
| 112 | end | ||
| 113 | code[#code + 1] = "};" | ||
| 114 | code = table.concat(code) | ||
| 115 | |||
| 116 | -- add "ret" to the end of that code and checks that | ||
| 117 | -- it produces the expected value "val" | ||
| 118 | local function check (ret, val) | ||
| 119 | local code = code .. ret | ||
| 120 | code = load(code) | ||
| 121 | assert(code() == val) | ||
| 122 | end | ||
| 123 | |||
| 124 | check("return (1 ~ (2 or 3))", 1 ~ 2) | ||
| 125 | check("return (1 | (2 or 3))", 1 | 2) | ||
| 126 | check("return (1 + (2 or 3))", 1 + 2) | ||
| 127 | check("return (1 << (2 or 3))", 1 << 2) | ||
| 128 | end | ||
| 129 | |||
| 130 | |||
| 106 | function f (i) | 131 | function f (i) |
| 107 | if type(i) ~= 'number' then return i,'jojo'; end; | 132 | if type(i) ~= 'number' then return i,'jojo'; end; |
| 108 | if i > 0 then return i, f(i-1); end; | 133 | if i > 0 then return i, f(i-1); end; |
