src/Pure/General/name_space.ML
changeset 17412 e26cb20ef0cc
parent 17221 6cd180204582
child 17756 d4a35f82fbb4
equal deleted inserted replaced
17411:664434175578 17412:e26cb20ef0cc
   111   NameSpace of (string list * string list) Symtab.table;
   111   NameSpace of (string list * string list) Symtab.table;
   112 
   112 
   113 val empty = NameSpace Symtab.empty;
   113 val empty = NameSpace Symtab.empty;
   114 
   114 
   115 fun lookup (NameSpace tab) xname =
   115 fun lookup (NameSpace tab) xname =
   116   (case Symtab.curried_lookup tab xname of
   116   (case Symtab.lookup tab xname of
   117     NONE => (xname, true)
   117     NONE => (xname, true)
   118   | SOME ([], []) => (xname, true)
   118   | SOME ([], []) => (xname, true)
   119   | SOME ([name], _) => (name, true)
   119   | SOME ([name], _) => (name, true)
   120   | SOME (name :: _, _) => (name, false)
   120   | SOME (name :: _, _) => (name, false)
   121   | SOME ([], name' :: _) => (hidden name', true));
   121   | SOME ([], name' :: _) => (hidden name', true));
   148 
   148 
   149 
   149 
   150 (* basic operations *)
   150 (* basic operations *)
   151 
   151 
   152 fun map_space f xname (NameSpace tab) =
   152 fun map_space f xname (NameSpace tab) =
   153   NameSpace (Symtab.curried_update (xname, f (if_none (Symtab.curried_lookup tab xname) ([], []))) tab);
   153   NameSpace (Symtab.update (xname, f (if_none (Symtab.lookup tab xname) ([], []))) tab);
   154 
   154 
   155 fun del (name: string) = remove (op =) name;
   155 fun del (name: string) = remove (op =) name;
   156 fun add name names = name :: del name names;
   156 fun add name names = name :: del name names;
   157 
   157 
   158 val del_name = map_space o apfst o del;
   158 val del_name = map_space o apfst o del;