(* HCoop Domtool (http://hcoop.sourceforge.net/) * Copyright (c) 2006, Adam Chlipala * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *) (* Default record field database *) structure Defaults :> DEFAULTS = struct open Ast Print structure SM = StringMap val dmy = ErrorMsg.dummyLoc val defaultT : record ref = ref SM.empty val defaultV : (unit -> exp) SM.map ref = ref SM.empty fun registerDefault (name, t, v) = case SM.find (!defaultT, name) of NONE => (defaultT := SM.insert (!defaultT, name, t); defaultV := SM.insert (!defaultV, name, v)) | SOME _ => raise Fail "Duplicate default environment variable" fun tInit () = (TAction ((CRoot, dmy), !defaultT, StringMap.empty), dmy) fun eInit () = SM.map (fn f => f ()) (!defaultV) end