--
-- decoy_env.lua
--
-- SPDX-FileCopyrightText: Copyright (c) 2023-2024 Chris Pressey, Cat's Eye Technologies.
-- This work is distributed under a 2-clause BSD license. For more information, see:
-- SPDX-License-Identifier: LicenseRef-BSD-2-Clause-X-Decoy
--
-- env's are tables that map Lua strings to (Lua representations of) Decoy values.
--
local M = {}
M.clone = function(env)
local new_env = {}
local name, value
for name, value in pairs(env) do
new_env[name] = value
end
return new_env
end
M.extend = function(env, formals, actuals)
-- formals is a Decoy list, actuals is a Lua table
local sexp = formals
local new_env = M.clone(env)
local i, value
for i, value in ipairs(actuals) do
new_env[sexp:head():text()] = value
sexp = sexp:tail()
end
return new_env
end
M.bind = function(name, value, env)
-- name is a Lua string, value is a Decoy value
local new_env = M.clone(env)
new_env[name] = value
return new_env
end
return M