src/Pure/General/name_space.ML
changeset 49816 e63d6c55ad6d
parent 49528 789b73fcca72
child 50201 c26369c9eda6
equal deleted inserted replaced
49815:e4f87bd5f223 49816:e63d6c55ad6d
    88   id: serial};
    88   id: serial};
    89 
    89 
    90 fun entry_markup def kind (name, {pos, id, ...}: entry) =
    90 fun entry_markup def kind (name, {pos, id, ...}: entry) =
    91   Markup.properties (Position.entity_properties_of def id pos) (Isabelle_Markup.entity kind name);
    91   Markup.properties (Position.entity_properties_of def id pos) (Isabelle_Markup.entity kind name);
    92 
    92 
    93 fun print_entry def kind (name, entry) =
    93 fun print_entry_ref kind (name, entry) =
    94   quote (Markup.markup (entry_markup def kind (name, entry)) name);
    94   quote (Markup.markup (entry_markup false kind (name, entry)) name);
    95 
    95 
    96 fun err_dup kind entry1 entry2 =
    96 fun err_dup kind entry1 entry2 pos =
    97   error ("Duplicate " ^ kind ^ " declaration " ^
    97   error ("Duplicate " ^ kind ^ " declaration " ^
    98     print_entry true kind entry1 ^ " vs. " ^ print_entry true kind entry2);
    98     print_entry_ref kind entry1 ^ " vs. " ^ print_entry_ref kind entry2 ^ Position.here pos);
    99 
    99 
   100 fun undefined kind name = "Undefined " ^ kind ^ ": " ^ quote name;
   100 fun undefined kind name = "Undefined " ^ kind ^ ": " ^ quote name;
   101 
   101 
   102 
   102 
   103 (* datatype T *)
   103 (* datatype T *)
   237         then raise Symtab.SAME
   237         then raise Symtab.SAME
   238         else (Library.merge (op =) (names1, names2), Library.merge (op =) (names1', names2'))));
   238         else (Library.merge (op =) (names1, names2), Library.merge (op =) (names1', names2'))));
   239     val entries' = (entries1, entries2) |> Symtab.join
   239     val entries' = (entries1, entries2) |> Symtab.join
   240       (fn name => fn ((_, entry1), (_, entry2)) =>
   240       (fn name => fn ((_, entry1), (_, entry2)) =>
   241         if #id entry1 = #id entry2 then raise Symtab.SAME
   241         if #id entry1 = #id entry2 then raise Symtab.SAME
   242         else err_dup kind' (name, entry1) (name, entry2));
   242         else err_dup kind' (name, entry1) (name, entry2) Position.none);
   243   in make_name_space (kind', internals', entries') end;
   243   in make_name_space (kind', internals', entries') end;
   244 
   244 
   245 
   245 
   246 
   246 
   247 (** naming context **)
   247 (** naming context **)
   385   map_name_space (fn (kind, internals, entries) =>
   385   map_name_space (fn (kind, internals, entries) =>
   386     let
   386     let
   387       val entries' =
   387       val entries' =
   388         (if strict then Symtab.update_new else Symtab.update) (name, (externals, entry)) entries
   388         (if strict then Symtab.update_new else Symtab.update) (name, (externals, entry)) entries
   389           handle Symtab.DUP dup =>
   389           handle Symtab.DUP dup =>
   390             err_dup kind (dup, #2 (the (Symtab.lookup entries dup))) (name, entry);
   390             err_dup kind (dup, #2 (the (Symtab.lookup entries dup))) (name, entry) (#pos entry);
   391     in (kind, internals, entries') end);
   391     in (kind, internals, entries') end);
   392 
   392 
   393 fun declare context strict binding space =
   393 fun declare context strict binding space =
   394   let
   394   let
   395     val naming = naming_of context;
   395     val naming = naming_of context;