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

Tree @master (Download .tar.gz)

ast.lua @masterraw · history · blame

--
-- decoy.ast
--

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

require "decoy.model"


local Define = {}

function Define:depict()
    return "(define " .. tostring(self.name) .. ": " .. tostring(self.defn) .. ")"
end

Define.is_class_of = function(obj)
    local mt = getmetatable(obj)
    return mt and mt.__index == Define
end

Define.new = function(name, defn)
    local self = {
        name = name,
        defn = defn,
    }
    setmetatable(self, {__index = Define})
    return self
end


local ImportFrom = {}

function ImportFrom:depict()
    return "(import-from " .. tostring(self.name) .. ": " .. tostring(self.imports) .. ")"
end

ImportFrom.is_class_of = function(obj)
    local mt = getmetatable(obj)
    return mt and mt.__index == ImportFrom
end

ImportFrom.new = function(name, imports)
    local self = {
        name = name,
        imports = imports,
    }
    setmetatable(self, {__index = ImportFrom})
    return self
end

return {
    Define = Define,
    ImportFrom = ImportFrom,
}