@@ -65,7 +65,7 @@ impl<'a> AnalyzeContext<'a> {
6565 Some ( decl_pos) ,
6666 ) ;
6767 entry. insert ( ( ent. id ( ) , type_decl. ident . pos ( ) . clone ( ) ) ) ;
68- region. add_named_entity ( ent, diagnostics) ;
68+ region. add_named_entity ( Arc :: new ( ent) , diagnostics) ;
6969 }
7070 Entry :: Occupied ( entry) => {
7171 let ( _, decl_pos) = entry. get ( ) ;
@@ -130,7 +130,7 @@ impl<'a> AnalyzeContext<'a> {
130130 resolved_name. and_then ( |resolved| resolved. into_non_overloaded ( ) ) ;
131131
132132 if let Some ( named_entity) = named_entity {
133- region. add_implicit_declarations (
133+ region. add_implicit_declaration_aliases (
134134 Some ( & designator. pos ) ,
135135 & named_entity,
136136 diagnostics,
@@ -251,37 +251,31 @@ impl<'a> AnalyzeContext<'a> {
251251 ) -> FatalNullResult {
252252 match type_decl. def {
253253 TypeDefinition :: Enumeration ( ref enumeration) => {
254- for literal in enumeration. iter ( ) {
255- parent. add (
256- literal. clone ( ) . map_into ( |lit| lit. into_designator ( ) ) ,
257- NamedEntityKind :: Overloaded ,
258- diagnostics,
259- )
260- }
254+ let mut implicit = Vec :: with_capacity ( enumeration. len ( ) ) ;
261255
262- let mut enum_region = Region :: default ( ) ;
263- let mut ignored = Vec :: new ( ) ;
264256 for literal in enumeration. iter ( ) {
265- enum_region . add (
266- literal. clone ( ) . map_into ( |lit| lit . into_designator ( ) ) ,
257+ let literal_ent = NamedEntity :: new (
258+ literal. item . clone ( ) . into_designator ( ) ,
267259 NamedEntityKind :: Overloaded ,
268- // Ignore diagnostics as they will be given above
269- & mut ignored,
270- )
260+ Some ( & literal. pos ) ,
261+ ) ;
262+ let literal_ent = Arc :: new ( literal_ent) ;
263+ implicit. push ( literal_ent. clone ( ) ) ;
264+ parent. add_named_entity ( literal_ent, diagnostics) ;
271265 }
272266
273267 add_or_overwrite (
274268 parent,
275269 & type_decl. ident ,
276- NamedEntityKind :: TypeDeclaration ( Some ( Arc :: new ( enum_region ) ) ) ,
270+ NamedEntityKind :: TypeDeclaration ( implicit ) ,
277271 overwrite_id,
278272 diagnostics,
279273 ) ;
280274 }
281275 TypeDefinition :: ProtectedBody ( ref mut body) => {
282276 body. type_reference . clear_reference ( ) ;
283277
284- match parent. lookup_extended ( & type_decl. ident . item . clone ( ) . into ( ) ) {
278+ match parent. lookup_immediate ( & type_decl. ident . item . clone ( ) . into ( ) ) {
285279 Some ( visible) => {
286280 let is_ok = match visible. clone ( ) . into_non_overloaded ( ) {
287281 Ok ( ent) => {
@@ -326,7 +320,7 @@ impl<'a> AnalyzeContext<'a> {
326320 let id = add_or_overwrite (
327321 parent,
328322 & type_decl. ident ,
329- NamedEntityKind :: TypeDeclaration ( None ) ,
323+ NamedEntityKind :: TypeDeclaration ( Vec :: new ( ) ) ,
330324 overwrite_id,
331325 diagnostics,
332326 ) ;
@@ -346,15 +340,12 @@ impl<'a> AnalyzeContext<'a> {
346340 }
347341 let region = region. without_parent ( ) ;
348342
349- parent. overwrite (
343+ parent. overwrite ( NamedEntity :: new_with_id (
344+ id,
350345 type_decl. ident . name ( ) . clone ( ) ,
351- NamedEntity :: new_with_id (
352- id,
353- type_decl. ident . name ( ) . clone ( ) ,
354- NamedEntityKind :: ProtectedType ( Arc :: new ( region) ) ,
355- Some ( type_decl. ident . pos ( ) ) ,
356- ) ,
357- ) ;
346+ NamedEntityKind :: ProtectedType ( Arc :: new ( region) ) ,
347+ Some ( type_decl. ident . pos ( ) ) ,
348+ ) ) ;
358349 }
359350 TypeDefinition :: Record ( ref mut element_decls) => {
360351 let mut region = Region :: default ( ) ;
@@ -367,7 +358,7 @@ impl<'a> AnalyzeContext<'a> {
367358 add_or_overwrite (
368359 parent,
369360 & type_decl. ident ,
370- NamedEntityKind :: TypeDeclaration ( None ) ,
361+ NamedEntityKind :: TypeDeclaration ( Vec :: new ( ) ) ,
371362 overwrite_id,
372363 diagnostics,
373364 ) ;
@@ -378,7 +369,7 @@ impl<'a> AnalyzeContext<'a> {
378369 add_or_overwrite (
379370 parent,
380371 & type_decl. ident ,
381- NamedEntityKind :: TypeDeclaration ( None ) ,
372+ NamedEntityKind :: TypeDeclaration ( Vec :: new ( ) ) ,
382373 overwrite_id,
383374 diagnostics,
384375 ) ;
@@ -392,7 +383,7 @@ impl<'a> AnalyzeContext<'a> {
392383 add_or_overwrite (
393384 parent,
394385 & type_decl. ident ,
395- NamedEntityKind :: TypeDeclaration ( None ) ,
386+ NamedEntityKind :: TypeDeclaration ( Vec :: new ( ) ) ,
396387 overwrite_id,
397388 diagnostics,
398389 ) ;
@@ -430,7 +421,7 @@ impl<'a> AnalyzeContext<'a> {
430421 add_or_overwrite (
431422 parent,
432423 & type_decl. ident ,
433- NamedEntityKind :: TypeDeclaration ( None ) ,
424+ NamedEntityKind :: TypeDeclaration ( Vec :: new ( ) ) ,
434425 overwrite_id,
435426 diagnostics,
436427 ) ;
@@ -444,7 +435,7 @@ impl<'a> AnalyzeContext<'a> {
444435 add_or_overwrite (
445436 parent,
446437 & type_decl. ident ,
447- NamedEntityKind :: TypeDeclaration ( None ) ,
438+ NamedEntityKind :: TypeDeclaration ( Vec :: new ( ) ) ,
448439 overwrite_id,
449440 diagnostics,
450441 ) ;
@@ -455,19 +446,20 @@ impl<'a> AnalyzeContext<'a> {
455446 err. add_to ( diagnostics) ?;
456447 }
457448
458- let mut implicit = Region :: default ( ) ;
459- for name in [ "file_open" , "file_close" , "endfile" ] . iter ( ) {
460- implicit. add_implicit (
449+ let names = [ "file_open" , "file_close" , "endfile" ] ;
450+ let mut implicit = Vec :: with_capacity ( names. len ( ) ) ;
451+ for name in names. iter ( ) {
452+ let ent = NamedEntity :: new (
461453 Designator :: Identifier ( self . symbol_utf8 ( name) ) ,
462- None ,
463454 NamedEntityKind :: Overloaded ,
464- diagnostics ,
455+ None ,
465456 ) ;
457+ implicit. push ( Arc :: new ( ent) ) ;
466458 }
467459 add_or_overwrite (
468460 parent,
469461 & type_decl. ident ,
470- NamedEntityKind :: TypeDeclaration ( Some ( Arc :: new ( implicit) ) ) ,
462+ NamedEntityKind :: TypeDeclaration ( implicit) ,
471463 overwrite_id,
472464 diagnostics,
473465 ) ;
@@ -726,12 +718,12 @@ fn add_or_overwrite(
726718) -> EntityId {
727719 if let Some ( id) = old_id {
728720 let ent = NamedEntity :: new_with_id ( id, name. name ( ) . clone ( ) , kind, Some ( name. pos ( ) ) ) ;
729- region. overwrite ( name . name ( ) . clone ( ) , ent) ;
721+ region. overwrite ( ent) ;
730722 id
731723 } else {
732724 let ent = NamedEntity :: new ( name. name ( ) . clone ( ) , kind, Some ( & name. pos ) ) ;
733725 let id = ent. id ( ) ;
734- region. add_named_entity ( ent, diagnostics) ;
726+ region. add_named_entity ( Arc :: new ( ent) , diagnostics) ;
735727 id
736728 }
737729}
0 commit comments