equal
deleted
inserted
replaced
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; |