blob: 33ae4e1c534bd56080bb484893fe1232fb450ed1 [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
--
--------------------------------------------------------------------------------
local W = require 'metalua.treequery.walk'
local function bindings(ast)
local cfg = { }
local locals = { }
local globals = { }
function cfg.occurrence(binding_ctx, id_occ, ...)
if binding_ctx then
local binder = binding_ctx[2]
local id_name = id_occ[1]
if not locals[binder][id_name] then
locals[binder][id_name] = {}
end
table.insert(locals[binder][id_name], id_occ)
else
local occ_name = id_occ[1]
local t = globals[occ_name]
if t then table.insert(t, id_occ) else globals[occ_name]={ id_occ } end
end
end
function cfg.binder(id, stat, ...)
local id_name = id[1]
if not locals[stat] then
locals[stat] = {}
end
if not locals[stat][id_name] then
locals[stat][id_name] = {}
end
end
W.guess(cfg, ast)
return locals, globals
end
return bindings