do --- get __metatable
local t = setmetatable({}, { __metatable = "foo" })
for i=1,100 do assert(getmetatable(t) == "foo") end
end
do --- jit smoke
local mt = {}
local t = setmetatable({}, mt)
for i=1,100 do assert(getmetatable(t) == mt) end
for i=1,100 do assert(setmetatable(t, mt) == t) end
end
do --- jit assorted
local mt = {}
local t = {}
for i=1,200 do t[i] = setmetatable({}, mt) end
t[150] = setmetatable({}, { __metatable = "foo" })
for i=1,200 do
if not pcall(setmetatable, t[i], mt) then assert(i == 150) end
end
for i=1,200 do assert(getmetatable(t[i]) == mt or i == 150) end
for i=1,200 do
if not pcall(setmetatable, t[i], nil) then assert(i == 150) end
end
for i=1,200 do assert(getmetatable(t[i]) == nil or i == 150) end
end
do --- jit get primitive metatable
local x = true
for i=1,100 do x = getmetatable(i) end
assert(x == nil)
end