equal
deleted
inserted
replaced
146 |
146 |
147 type internals = string list Long_Name.Chunks.T; (*external name -> internal names*) |
147 type internals = string list Long_Name.Chunks.T; (*external name -> internal names*) |
148 |
148 |
149 val merge_internals : internals * internals -> internals = Long_Name.Chunks.merge_list (op =); |
149 val merge_internals : internals * internals -> internals = Long_Name.Chunks.merge_list (op =); |
150 |
150 |
151 fun add_name name xname : internals -> internals = |
151 fun add_internals name xname : internals -> internals = |
152 Long_Name.Chunks.update_list (op =) (xname, name); |
152 Long_Name.Chunks.update_list (op =) (xname, name); |
153 |
153 |
154 fun del_name name xname : internals -> internals = |
154 fun del_internals name xname : internals -> internals = |
155 Long_Name.Chunks.remove_list (op =) (xname, name); |
155 Long_Name.Chunks.remove_list (op =) (xname, name); |
156 |
156 |
157 fun del_name_extra name xname : internals -> internals = |
157 fun del_internals' name xname : internals -> internals = |
158 Long_Name.Chunks.map_default (xname, []) (fn [] => [] | x :: xs => x :: remove (op =) name xs); |
158 Long_Name.Chunks.map_default (xname, []) (fn [] => [] | x :: xs => x :: remove (op =) name xs); |
159 |
159 |
160 |
160 |
161 (* accesses *) |
161 (* accesses *) |
162 |
162 |
539 val accesses = |
539 val accesses = |
540 get_accesses {intern = true, aliases = true, valid = true} space name |
540 get_accesses {intern = true, aliases = true, valid = true} space name |
541 |> not fully ? inter Long_Name.eq_chunks [Long_Name.base_chunks name]; |
541 |> not fully ? inter Long_Name.eq_chunks [Long_Name.base_chunks name]; |
542 val accesses' = get_accesses {intern = false, aliases = false, valid = true} space name; |
542 val accesses' = get_accesses {intern = false, aliases = false, valid = true} space name; |
543 val internals' = internals |
543 val internals' = internals |
544 |> fold (del_name name) accesses |
544 |> fold (del_internals name) accesses |
545 |> fold (del_name_extra name) accesses'; |
545 |> fold (del_internals' name) accesses'; |
546 val internals_hidden' = internals_hidden |
546 val internals_hidden' = internals_hidden |
547 |> add_name name (Long_Name.make_chunks name); |
547 |> add_internals name (Long_Name.make_chunks name); |
548 in (kind, internals', internals_hidden', entries, aliases) end); |
548 in (kind, internals', internals_hidden', entries, aliases) end); |
549 |
549 |
550 |
550 |
551 (* alias *) |
551 (* alias *) |
552 |
552 |
559 val new_entry = is_none (lookup_entries space alias_name); |
559 val new_entry = is_none (lookup_entries space alias_name); |
560 val decl_entry = can (the_entry space) alias_name; |
560 val decl_entry = can (the_entry space) alias_name; |
561 in |
561 in |
562 space |> map_name_space (fn (kind, internals, internals_hidden, entries, aliases) => |
562 space |> map_name_space (fn (kind, internals, internals_hidden, entries, aliases) => |
563 let |
563 let |
564 val internals' = internals |> fold (add_name name) alias_accesses; |
564 val internals' = internals |> fold (add_internals name) alias_accesses; |
565 val entries' = |
565 val entries' = |
566 if name <> alias_name andalso (new_entry orelse strict) then |
566 if name <> alias_name andalso (new_entry orelse strict) then |
567 entries |> update_entry strict kind (alias_name, |
567 entries |> update_entry strict kind (alias_name, |
568 Alias { |
568 Alias { |
569 suppress = suppress, |
569 suppress = suppress, |
622 pos = pos, |
622 pos = pos, |
623 serial = serial ()}; |
623 serial = serial ()}; |
624 val space' = |
624 val space' = |
625 space |> map_name_space (fn (kind, internals, internals_hidden, entries, aliases) => |
625 space |> map_name_space (fn (kind, internals, internals_hidden, entries, aliases) => |
626 let |
626 let |
627 val internals' = internals |> fold (add_name name) accesses; |
627 val internals' = internals |> fold (add_internals name) accesses; |
628 val entries' = entries |> update_entry strict kind (name, entry); |
628 val entries' = entries |> update_entry strict kind (name, entry); |
629 in (kind, internals', internals_hidden, entries', aliases) end); |
629 in (kind, internals', internals_hidden, entries', aliases) end); |
630 val _ = |
630 val _ = |
631 if proper_pos andalso Context_Position.is_reported_generic context pos then |
631 if proper_pos andalso Context_Position.is_reported_generic context pos then |
632 Position.report pos (markup_entry {def = true} (kind_of space) (name, entry)) |
632 Position.report pos (markup_entry {def = true} (kind_of space) (name, entry)) |