local R={}function R.new(R)local j={}local h={}j.__index=h if R then for R,j in pairs((getmetatable(R)).__index)do h[R]=j end end function j.__newindex(R,j,q)assert(h[j]==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(j)))h[j]=q end return setmetatable({},j)end return R
--[[
	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
