src/Pure/General/name_space.ML
changeset 30280 eb98b49ef835
parent 30277 4f2b6ccce047
child 30359 3f9b3ff851ca
equal deleted inserted replaced
30279:84097bba7bdc 30280:eb98b49ef835
    23   val is_qualified: string -> bool
    23   val is_qualified: string -> bool
    24   val implode: string list -> string
    24   val implode: string list -> string
    25   val explode: string -> string list
    25   val explode: string -> string list
    26   val append: string -> string -> string
    26   val append: string -> string -> string
    27   val qualified: string -> string -> string
    27   val qualified: string -> string -> string
    28   val base: string -> string
    28   val base_name: string -> string
    29   val qualifier: string -> string
    29   val qualifier: string -> string
    30   val map_base: (string -> string) -> string -> string
    30   val map_base_name: (string -> string) -> string -> string
    31   type T
    31   type T
    32   val empty: T
    32   val empty: T
    33   val intern: T -> xstring -> string
    33   val intern: T -> xstring -> string
    34   val extern: T -> string -> xstring
    34   val extern: T -> string -> xstring
    35   val extern_flags: {long_names: bool, short_names: bool, unique_names: bool} ->
    35   val extern_flags: {long_names: bool, short_names: bool, unique_names: bool} ->
    76 
    76 
    77 fun qualified path name =
    77 fun qualified path name =
    78   if path = "" orelse name = "" then name
    78   if path = "" orelse name = "" then name
    79   else path ^ separator ^ name;
    79   else path ^ separator ^ name;
    80 
    80 
    81 fun base "" = ""
    81 fun base_name "" = ""
    82   | base name = List.last (explode_name name);
    82   | base_name name = List.last (explode_name name);
    83 
    83 
    84 fun qualifier "" = ""
    84 fun qualifier "" = ""
    85   | qualifier name = implode_name (#1 (split_last (explode_name name)));
    85   | qualifier name = implode_name (#1 (split_last (explode_name name)));
    86 
    86 
    87 fun map_base _ "" = ""
    87 fun map_base_name _ "" = ""
    88   | map_base f name =
    88   | map_base_name f name =
    89       let val names = explode_name name
    89       let val names = explode_name name
    90       in implode_name (nth_map (length names - 1) f names) end;
    90       in implode_name (nth_map (length names - 1) f names) end;
    91 
    91 
    92 
    92 
    93 (* standard accesses *)
    93 (* standard accesses *)
   159 
   159 
   160     fun ext [] = if valid false name then name else hidden name
   160     fun ext [] = if valid false name then name else hidden name
   161       | ext (nm :: nms) = if valid unique_names nm then nm else ext nms;
   161       | ext (nm :: nms) = if valid unique_names nm then nm else ext nms;
   162   in
   162   in
   163     if long_names then name
   163     if long_names then name
   164     else if short_names then base name
   164     else if short_names then base_name name
   165     else ext (get_accesses space name)
   165     else ext (get_accesses space name)
   166   end;
   166   end;
   167 
   167 
   168 val long_names = ref false;
   168 val long_names = ref false;
   169 val short_names = ref false;
   169 val short_names = ref false;
   202     error ("Attempt to hide hidden name " ^ quote name)
   202     error ("Attempt to hide hidden name " ^ quote name)
   203   else
   203   else
   204     let val names = valid_accesses space name in
   204     let val names = valid_accesses space name in
   205       space
   205       space
   206       |> add_name' name name
   206       |> add_name' name name
   207       |> fold (del_name name) (if fully then names else names inter_string [base name])
   207       |> fold (del_name name) (if fully then names else names inter_string [base_name name])
   208       |> fold (del_name_extra name) (get_accesses space name)
   208       |> fold (del_name_extra name) (get_accesses space name)
   209     end;
   209     end;
   210 
   210 
   211 
   211 
   212 (* merge *)
   212 (* merge *)