1+ use std:: { collections:: HashMap , hash:: Hash } ;
2+
13use astoir_hir:: { ctx:: HIRContext , nodes:: { HIRNode , HIRNodeKind } } ;
24use astoir_mir:: ctx:: MIRContext ;
35use compiler_typing:: { SizedType , raw:: RawType , structs:: LoweredStructTypeContainer , tree:: Type } ;
@@ -55,7 +57,7 @@ pub fn lower_hir(ctx: HIRContext) -> DiagnosticResult<MIRContext> {
5557pub fn lower_hir_generic ( ctx : & MIRLoweringContext , t : & Type , generic : & RawType ) -> DiagnosticResult < Type > {
5658 match generic {
5759 RawType :: Struct ( a, b) => {
58- let mut lowered_container = LoweredStructTypeContainer { fields : IndexStorage :: new ( ) , functions : IndexStorage :: new ( ) , is_lowered_enum_child : false , is_lowered_enum_parent : false , lowered_enum_child : None , lowered_enum_parent : None } ;
60+ let mut lowered_container = LoweredStructTypeContainer { fields : IndexStorage :: new ( ) , functions : IndexStorage :: new ( ) , is_lowered_enum_child : false , is_lowered_enum_parent : false , lowered_enum_child : None , lowered_enum_parent : None , hir_mir_indexes : HashMap :: new ( ) } ;
5961
6062 for field in & b. fields . vals {
6163 lowered_container. fields . vals . push ( lower_hir_type ( ctx, field. clone ( ) . resolve ( t) ) ?) ;
@@ -65,7 +67,7 @@ pub fn lower_hir_generic(ctx: &MIRLoweringContext, t: &Type, generic: &RawType)
6567 } ,
6668
6769 RawType :: EnumEntry ( container) => {
68- let mut lowered_container = LoweredStructTypeContainer { fields : IndexStorage :: new ( ) , functions : IndexStorage :: new ( ) , is_lowered_enum_child : true , is_lowered_enum_parent : false , lowered_enum_child : Some ( container. clone ( ) ) , lowered_enum_parent : None } ;
70+ let mut lowered_container = LoweredStructTypeContainer { fields : IndexStorage :: new ( ) , functions : IndexStorage :: new ( ) , is_lowered_enum_child : true , is_lowered_enum_parent : false , lowered_enum_child : Some ( container. clone ( ) ) , lowered_enum_parent : None , hir_mir_indexes : HashMap :: new ( ) } ;
6971
7072 let parent = match & ctx. hir_ctx . type_storage . types . vals [ container. parent ] {
7173 RawType :: Enum ( container) => container. clone ( ) ,
@@ -74,15 +76,20 @@ pub fn lower_hir_generic(ctx: &MIRLoweringContext, t: &Type, generic: &RawType)
7476
7577 lowered_container. fields . vals . push ( Type :: GenericLowered ( parent. get_hint_type ( ) ) ) ; // Enum entry hint
7678
79+ let mut ind = 0 ;
7780 for field in & container. fields . vals {
81+ lowered_container. append_hir_index_conv ( ind, lowered_container. fields . vals . len ( ) ) ; // Allow for LRU to work correctly
82+
7883 lowered_container. fields . vals . push ( lower_hir_type ( ctx, field. clone ( ) . resolve ( t) ) ?) ;
84+
85+ ind += 1 ;
7986 }
8087
8188 return Ok ( Type :: GenericLowered ( RawType :: LoweredStruct ( false , lowered_container) ) ) ;
8289 } ,
8390
8491 RawType :: Enum ( container) => {
85- let mut lowered_container = LoweredStructTypeContainer { fields : IndexStorage :: new ( ) , functions : IndexStorage :: new ( ) , is_lowered_enum_child : false , is_lowered_enum_parent : true , lowered_enum_parent : Some ( container. clone ( ) ) , lowered_enum_child : None } ;
92+ let mut lowered_container = LoweredStructTypeContainer { fields : IndexStorage :: new ( ) , functions : IndexStorage :: new ( ) , is_lowered_enum_child : false , is_lowered_enum_parent : true , lowered_enum_parent : Some ( container. clone ( ) ) , lowered_enum_child : None , hir_mir_indexes : HashMap :: new ( ) } ;
8693
8794 let mut entry_size = 0 ;
8895
0 commit comments