fixed metatable-related loop when a table is its own index. References #4

This commit is contained in:
kikito 2013-01-21 00:49:22 +01:00
parent 1514d86828
commit 2b502e1a81
2 changed files with 18 additions and 6 deletions

View File

@ -64,7 +64,7 @@ local function getDictionaryKeys(t)
end
local function getToStringResultSafely(t, mt)
local __tostring = type(mt) == 'table' and mt.__tostring
local __tostring = type(mt) == 'table' and rawget(mt, '__tostring')
local string, status
if type(__tostring) == 'function' then
status, string = pcall(__tostring, t)

View File

@ -192,14 +192,26 @@ describe( 'inspect', function()
}]])
end)
it('accepts a table that is its own metatable without stack overflowing', function()
local x = {}
setmetatable(x,x)
assert.equals(inspect(x), [[<1>{
describe('When a table is its own metatable', function()
it('accepts a table that is its own metatable without stack overflowing', function()
local x = {}
setmetatable(x,x)
assert.equals(inspect(x), [[<1>{
<metatable> = <table 1>
}]])
end)
end)
it('can invoke the __tostring method without stack overflowing', function()
local t = {}
t.__index = t
setmetatable(t,t)
assert.equals(inspect(t), [[<1>{
__index = <table 1>,
<metatable> = <table 1>
}]])
end)
end)
end)
end)
end)