src/Tools/code/code_name.ML
changeset 30364 577edc39b501
parent 30161 c26e515f1c29
child 30648 17365ef082f3
equal deleted inserted replaced
30363:9b8d9b6ef803 30364:577edc39b501
    37 
    37 
    38 val first_upper = implode o nth_map 0 Symbol.to_ascii_upper o explode;
    38 val first_upper = implode o nth_map 0 Symbol.to_ascii_upper o explode;
    39 val first_lower = implode o nth_map 0 Symbol.to_ascii_lower o explode;
    39 val first_lower = implode o nth_map 0 Symbol.to_ascii_lower o explode;
    40 
    40 
    41 val dest_name =
    41 val dest_name =
    42   apfst NameSpace.implode o split_last o fst o split_last o NameSpace.explode;
    42   apfst Long_Name.implode o split_last o fst o split_last o Long_Name.explode;
    43 
    43 
    44 
    44 
    45 (** purification **)
    45 (** purification **)
    46 
    46 
    47 fun purify_name upper lower =
    47 fun purify_name upper lower =
    78   explode
    78   explode
    79   (*FIMXE should disappear as soon as hierarchical theory name spaces are available*)
    79   (*FIMXE should disappear as soon as hierarchical theory name spaces are available*)
    80   #> Symbol.scanner "Malformed name"
    80   #> Symbol.scanner "Malformed name"
    81       (Scan.repeat ($$ "_" |-- $$ "_" >> (fn _ => ".") || Scan.one Symbol.is_regular))
    81       (Scan.repeat ($$ "_" |-- $$ "_" >> (fn _ => ".") || Scan.one Symbol.is_regular))
    82   #> implode
    82   #> implode
    83   #> NameSpace.explode
    83   #> Long_Name.explode
    84   #> map (purify_name true false);
    84   #> map (purify_name true false);
    85 
    85 
    86 (*FIMXE non-canonical function treating non-canonical names*)
    86 (*FIMXE non-canonical function treating non-canonical names*)
    87 fun purify_base _ "op &" = "and"
    87 fun purify_base _ "op &" = "and"
    88   | purify_base _ "op |" = "or"
    88   | purify_base _ "op |" = "or"
    99 
    99 
   100 val purify_sym = purify_base false;
   100 val purify_sym = purify_base false;
   101 
   101 
   102 fun check_modulename mn =
   102 fun check_modulename mn =
   103   let
   103   let
   104     val mns = NameSpace.explode mn;
   104     val mns = Long_Name.explode mn;
   105     val mns' = map (purify_name true false) mns;
   105     val mns' = map (purify_name true false) mns;
   106   in
   106   in
   107     if mns' = mns then mn else error ("Invalid module name: " ^ quote mn ^ "\n"
   107     if mns' = mns then mn else error ("Invalid module name: " ^ quote mn ^ "\n"
   108       ^ "perhaps try " ^ quote (NameSpace.implode mns'))
   108       ^ "perhaps try " ^ quote (Long_Name.implode mns'))
   109   end;
   109   end;
   110 
   110 
   111 
   111 
   112 (** variable name contexts **)
   112 (** variable name contexts **)
   113 
   113 
   153 fun mk_name_module reserved_names module_prefix module_alias program =
   153 fun mk_name_module reserved_names module_prefix module_alias program =
   154   let
   154   let
   155     fun mk_alias name = case module_alias name
   155     fun mk_alias name = case module_alias name
   156      of SOME name' => name'
   156      of SOME name' => name'
   157       | NONE => name
   157       | NONE => name
   158           |> NameSpace.explode
   158           |> Long_Name.explode
   159           |> map (fn name => (the_single o fst) (Name.variants [name] reserved_names))
   159           |> map (fn name => (the_single o fst) (Name.variants [name] reserved_names))
   160           |> NameSpace.implode;
   160           |> Long_Name.implode;
   161     fun mk_prefix name = case module_prefix
   161     fun mk_prefix name = case module_prefix
   162      of SOME module_prefix => NameSpace.append module_prefix name
   162      of SOME module_prefix => Long_Name.append module_prefix name
   163       | NONE => name;
   163       | NONE => name;
   164     val tab =
   164     val tab =
   165       Symtab.empty
   165       Symtab.empty
   166       |> Graph.fold ((fn name => Symtab.default (name, (mk_alias #> mk_prefix) name))
   166       |> Graph.fold ((fn name => Symtab.default (name, (mk_alias #> mk_prefix) name))
   167            o fst o dest_name o fst)
   167            o fst o dest_name o fst)