blob: 3809c252419e281c896f0e60cf2af9e9984fac5b [file] [log] [blame]
--------------------------------------------------------------------------------
-- Copyright (c) 2006-2013 Fabien Fleutot and others.
--
-- All rights reserved.
--
-- This program and the accompanying materials are made available
-- under the terms of the Eclipse Public License v1.0 which
-- accompanies this distribution, and is available at
-- http://www.eclipse.org/legal/epl-v10.html
--
-- This program and the accompanying materials are also made available
-- under the terms of the MIT public license which accompanies this
-- distribution, and is available at http://www.lua.org/license.html
--
-- Contributors:
-- Fabien Fleutot - API and implementation
--
--------------------------------------------------------------------------------
-- Export all public APIs from sub-modules, squashed into a flat spacename
local MT = { __type='metalua.compiler.parser' }
local function new()
local mod_names = { "common", "expr", "lexer", "meta", "misc", "stat", "table", "ext", "annot" }
for name, _ in pairs(package.loaded) do
local x = name :match '^metalua.compiler.parser.(.*)'
if x then
local found = false
for _, y in pairs(mod_names) do
if x==y then found=true; break end
end
--if found then print (">> found "..x)
--else print(">> not found: "..x) end
end
end
-- Unload parser modules
for _, mod_name in ipairs(mod_names) do
package.loaded["metalua.compiler.parser."..mod_name] = nil
end
local M = require 'metalua.compiler.parser.common'
for _, mod_name in ipairs(mod_names) do
-- TODO: expose sub-modules as nested tables?
-- Not sure: it might be confusing, will clash with API names, e.g. for expr
local mod = require ("metalua.compiler.parser."..mod_name)
assert (type (mod) == 'table')
for api_name, val in pairs(mod) do
assert(not M[api_name])
M[api_name] = val
end
end
-- TODO: remove or make somehow optional the 'ext' module
return setmetatable(M, MT)
end
return { new = new }