src/Pure/General/name_space.ML
changeset 55962 fbd0e768bc8f
parent 55961 c2d4a3608441
child 55975 9962ca0875c9
equal deleted inserted replaced
55961:c2d4a3608441 55962:fbd0e768bc8f
   320 fun err_bad binding = error (Binding.bad binding);
   320 fun err_bad binding = error (Binding.bad binding);
   321 
   321 
   322 fun transform_binding (Naming {conceal = true, ...}) = Binding.conceal
   322 fun transform_binding (Naming {conceal = true, ...}) = Binding.conceal
   323   | transform_binding _ = I;
   323   | transform_binding _ = I;
   324 
   324 
       
   325 val bad_specs = ["", "??", "__"];
       
   326 
   325 fun name_spec (naming as Naming {path, ...}) raw_binding =
   327 fun name_spec (naming as Naming {path, ...}) raw_binding =
   326   let
   328   let
   327     val binding = transform_binding naming raw_binding;
   329     val binding = transform_binding naming raw_binding;
   328     val (concealed, prefix, name) = Binding.dest binding;
   330     val (concealed, prefix, name) = Binding.dest binding;
   329     val _ = Long_Name.is_qualified name andalso err_bad binding;
   331     val _ = Long_Name.is_qualified name andalso err_bad binding;
   330 
   332 
   331     val spec1 = maps (fn (a, b) => map (rpair b) (Long_Name.explode a)) (path @ prefix);
   333     val spec1 = maps (fn (a, b) => map (rpair b) (Long_Name.explode a)) (path @ prefix);
   332     val spec2 = if name = "" then [] else [(name, true)];
   334     val spec2 = if name = "" then [] else [(name, true)];
   333     val spec = spec1 @ spec2;
   335     val spec = spec1 @ spec2;
   334     val _ =
   336     val _ =
   335       exists (fn (a, _) => a = "" orelse a = "??" orelse exists_string (fn s => s = "\"") a) spec
   337       exists (fn (a, _) => member (op =) bad_specs a orelse exists_string (fn s => s = "\"") a) spec
   336       andalso err_bad binding;
   338       andalso err_bad binding;
   337   in (concealed, if null spec2 then [] else spec) end;
   339   in (concealed, if null spec2 then [] else spec) end;
   338 
   340 
   339 fun full_name naming =
   341 fun full_name naming =
   340   name_spec naming #> #2 #> map #1 #> Long_Name.implode;
   342   name_spec naming #> #2 #> map #1 #> Long_Name.implode;