git @ Cat's Eye Technologies Decoy / master src / decoy / env.lua
master

Tree @master (Download .tar.gz)

env.lua @masterraw · history · blame

--
-- 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