src/Pure/name_space.ML
changeset 4886 31f23b8d6851
parent 4851 cbbc53963aaa
equal deleted inserted replaced
4885:54fa88124d52 4886:31f23b8d6851
    15   val append: string -> string -> string
    15   val append: string -> string -> string
    16   val unpack: string -> string list
    16   val unpack: string -> string list
    17   val pack: string list -> string
    17   val pack: string list -> string
    18   val base: string -> string
    18   val base: string -> string
    19   val qualified: string -> bool
    19   val qualified: string -> bool
       
    20   val accesses: string -> string list
    20   type T
    21   type T
    21   val empty: T
    22   val empty: T
    22   val extend: T * string list -> T
    23   val extend: T * string list -> T
    23   val merge: T * T -> T
    24   val merge: T * T -> T
    24   val intern: T -> string -> string
    25   val intern: T -> string -> string
    55   let
    56   let
    56     val uname = unpack name;
    57     val uname = unpack name;
    57     val (q, b) = split_last uname;
    58     val (q, b) = split_last uname;
    58     val sfxs = suffixes1 uname;
    59     val sfxs = suffixes1 uname;
    59     val pfxs = map (fn x => x @ [b]) (prefixes1 q);
    60     val pfxs = map (fn x => x @ [b]) (prefixes1 q);
    60   in
    61   in map pack (sfxs @ pfxs) end;
    61     map (rpair name o pack) (sfxs @ pfxs)
       
    62   end;
       
    63 
    62 
    64 
    63 
    65 
    64 
    66 (** name spaces **)
    65 (** name spaces **)
    67 
    66 
    76 (* extend, merge operations *)
    75 (* extend, merge operations *)
    77 
    76 
    78 fun add (tab, entry) = Symtab.update (entry, tab);
    77 fun add (tab, entry) = Symtab.update (entry, tab);
    79 
    78 
    80 fun extend (NameSpace tab, names) =
    79 fun extend (NameSpace tab, names) =
    81   NameSpace (foldl add (tab, flat (map accesses names)));
    80   NameSpace (foldl add (tab, flat (map (fn name => map (rpair name) (accesses name)) names)));
    82 
    81 
    83 fun merge (NameSpace tab1, NameSpace tab2) =    (*2nd overrides 1st*)
    82 fun merge (NameSpace tab1, NameSpace tab2) =    (*2nd overrides 1st*)
    84   NameSpace (foldl add (tab1, Symtab.dest tab2));
    83   NameSpace (foldl add (tab1, Symtab.dest tab2));
    85 
    84 
    86 
    85