_PROMPT can have non-string values

'get_prompt' uses 'luaL_tolstring' to convert _PROMPT or _PROMPT2
value to a string. That conversion may invoke a '__tostring'
metamethod.
This commit is contained in:
Roberto Ierusalimschy
2020-10-26 11:15:51 -03:00
parent d742a193e5
commit 69b71a6919
2 changed files with 37 additions and 6 deletions

View File

@@ -287,6 +287,33 @@ RUN([[lua "-e_PROMPT='%s'" -i < %s > %s]], prompt, prog, out)
local t = getoutput()
assert(string.find(t, prompt .. ".*" .. prompt .. ".*" .. prompt))
-- using the prompt default
prepfile[[ --
a = 2
]]
RUN([[lua -i < %s > %s]], prog, out)
local t = getoutput()
prompt = "> " -- the default
assert(string.find(t, prompt .. ".*" .. prompt .. ".*" .. prompt))
-- non-string prompt
prompt =
"local C = 0;\z
_PROMPT=setmetatable({},{__tostring = function () \z
C = C + 1; return C end})"
prepfile[[ --
a = 2
]]
RUN([[lua -e "%s" -i < %s > %s]], prompt, prog, out)
local t = getoutput()
assert(string.find(t, [[
1 --
2a = 2
3
]], 1, true))
-- test for error objects
prepfile[[
debug = require "debug"