fix setmetatable() to match C version

This commit is contained in:
James Roseborough
2007-12-07 00:52:39 +00:00
parent dc08fcbec2
commit d7c15f99a1
9 changed files with 51 additions and 35 deletions

View File

@@ -1,5 +1,31 @@
package.path = "?.lua;src/test/res/?.lua"
require 'ids'
-- The purpose of this test case is to demonstrate that
-- basic metatable operations on non-table types work.
-- i.e. that s.sub(s,...) could be used in place of string.sub(s,...)
local s = "hello"
print(s:sub(2,4))
local t = {}
function op(name,...)
a,b,c,d = pcall( setmetatable, t, ... )
print( name, id(t), id(getmetatable(t)), id(a), id(b), id(c), id(d) )
end
op('set{} ',{})
op('set-nil',nil)
op('set{} ',{})
op('set')
op('set{} ',{})
op('set{} ',{})
op('set{}{}',{},{})
op('set-nil',nil)
op('set{__}',{__metatable={}})
op('set{} ',{})
op('set-nil',nil)
t = {}
op('set{} ',{})
op('set-nil',nil)
op('set{__}',{__metatable='abc'})
op('set{} ',{})
op('set-nil',nil)