local a={}function a.new(a)local b={}local p={}b.__index=p if a then for a,b in pairs((getmetatable(a)).__index)do p[a]=b end end function b.__newindex(a,b,c)assert(p[b]==nil,string.format("\067\097\110\110\111\116 \114\101\097\115\115\105\103\110 \037\115 \105\110 \099\111\110\116\101\120\116",tostring(b)))p[b]=c end return setmetatable({},b)end return a
--[[
	The Context object implements a write-once key-value store. It also allows
	for a new Context object to inherit the entries from an existing one.
]]
local Context = {}

function Context.new(parent)
	local meta = {}
	local index = {}
	meta.__index = index

	if parent then
		for key, value in pairs(getmetatable(parent).__index) do
			index[key] = value
		end
	end

	function meta.__newindex(_obj, key, value)
		assert(index[key] == nil, string.format("Cannot reassign %s in context", tostring(key)))
		index[key] = value
	end

	return setmetatable({}, meta)
end

return Context
