equal
deleted
inserted
replaced
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; |