@@ -3571,6 +3571,62 @@ class ASRToLLVMVisitor : public ASR::BaseVisitor<ASRToLLVMVisitor>
3571
3571
line = v->base .base .loc .first ;
3572
3572
column = 0 ;
3573
3573
}
3574
+
3575
+ if (ASR::is_a<ASR::List_t>(*v->m_type )) {
3576
+ std::string member_type_name;
3577
+ uint32_t member_type_size, member_type_encoding;
3578
+
3579
+ llvm::DIType *int_type = DBuilder->createBasicType (" integer" , 32 , llvm::dwarf::DW_ATE_signed);
3580
+ ASR::ttype_t *asr_member_type = ASRUtils::get_contained_type (v->m_type );
3581
+
3582
+ get_type_debug_info (asr_member_type, member_type_name,
3583
+ member_type_size, member_type_encoding);
3584
+ llvm::DIType *member_type = DBuilder->createBasicType (member_type_name, member_type_size, member_type_encoding);
3585
+
3586
+ llvm::DIType *member_pointer_type = DBuilder->createPointerType (member_type, 64 , 0 , 0 , member_type_name+" *" );
3587
+ llvm::DIType *list_type = DBuilder->createStructType (
3588
+ debug_current_scope, " list" , debug_Unit, line, 64 +member_type_size, 0 , llvm::DINode::FlagZero, nullptr , DBuilder->getOrCreateArray ({
3589
+ DBuilder->createMemberType (debug_Unit, " i32" , debug_Unit, line, 32 , 0 , 0 , llvm::DINode::FlagZero, int_type),
3590
+ DBuilder->createMemberType (debug_Unit, " i32" , debug_Unit, line, 32 , 32 , 0 , llvm::DINode::FlagZero, int_type),
3591
+ DBuilder->createMemberType (debug_Unit, " member" , debug_Unit, line, 64 , 64 , 0 , llvm::DINode::FlagZero, member_pointer_type)
3592
+ }));
3593
+ llvm::DILocalVariable *debug_var = DBuilder->createParameterVariable (debug_current_scope,
3594
+ v->m_name , ++debug_arg_count, debug_Unit, line, list_type, true );
3595
+ DBuilder->insertDeclare (ptr, debug_var, DBuilder->createExpression (),
3596
+ llvm::DILocation::get (debug_current_scope->getContext (),
3597
+ line, 0 , debug_current_scope), builder->GetInsertBlock ());
3598
+ } else if (ASR::is_a<ASR::Set_t>(*v->m_type )) {
3599
+ std::string member_type_name;
3600
+ uint32_t member_type_size, member_type_encoding;
3601
+
3602
+ llvm::DIType *int_type = DBuilder->createBasicType (" integer" , 32 , llvm::dwarf::DW_ATE_signed);
3603
+ llvm::DIType *int_8_ptr_type = DBuilder->createPointerType (
3604
+ DBuilder->createBasicType (" char" , 8 , llvm::dwarf::DW_ATE_unsigned_char), 64 , 0 , 0 , " i8*" );
3605
+ ASR::ttype_t *asr_member_type = ASRUtils::get_contained_type (v->m_type );
3606
+
3607
+ get_type_debug_info (asr_member_type, member_type_name,
3608
+ member_type_size, member_type_encoding);
3609
+ llvm::DIType *member_type = DBuilder->createBasicType (member_type_name, member_type_size, member_type_encoding);
3610
+
3611
+ llvm::DIType *member_pointer_type = DBuilder->createPointerType (member_type, 64 , 0 , 0 , member_type_name+" *" );
3612
+ llvm::DIType *list_type = DBuilder->createStructType (
3613
+ debug_current_scope, " list" , debug_Unit, line, 64 +member_type_size, 0 , llvm::DINode::FlagZero, nullptr , DBuilder->getOrCreateArray ({
3614
+ DBuilder->createMemberType (debug_Unit, " i32" , debug_Unit, line, 32 , 0 , 0 , llvm::DINode::FlagZero, int_type),
3615
+ DBuilder->createMemberType (debug_Unit, " i32" , debug_Unit, line, 32 , 32 , 0 , llvm::DINode::FlagZero, int_type),
3616
+ DBuilder->createMemberType (debug_Unit, " member" , debug_Unit, line, 64 , 64 , 0 , llvm::DINode::FlagZero, member_pointer_type)
3617
+ }));
3618
+ llvm::DIType *set_type = DBuilder->createStructType (
3619
+ debug_current_scope, " list" , debug_Unit, line, 64 +member_type_size+32 +64 , 0 , llvm::DINode::FlagZero, nullptr , DBuilder->getOrCreateArray ({
3620
+ DBuilder->createMemberType (debug_Unit, " i32" , debug_Unit, line, 32 , 0 , 0 , llvm::DINode::FlagZero, int_type),
3621
+ DBuilder->createMemberType (debug_Unit, " list" , debug_Unit, line, 128 , 32 , 0 , llvm::DINode::FlagZero, list_type),
3622
+ DBuilder->createMemberType (debug_Unit, " i8*" , debug_Unit, line, 64 , 160 , 0 , llvm::DINode::FlagZero, int_8_ptr_type)}));
3623
+ llvm::DILocalVariable *debug_var = DBuilder->createParameterVariable (debug_current_scope,
3624
+ v->m_name , ++debug_arg_count, debug_Unit, line, set_type, true );
3625
+ DBuilder->insertDeclare (ptr, debug_var, DBuilder->createExpression (),
3626
+ llvm::DILocation::get (debug_current_scope->getContext (),
3627
+ line, 0 , debug_current_scope), builder->GetInsertBlock ());
3628
+ } else {
3629
+
3574
3630
std::string type_name;
3575
3631
uint32_t type_size, type_encoding;
3576
3632
get_type_debug_info (v->m_type , type_name, type_size,
@@ -3581,6 +3637,7 @@ class ASRToLLVMVisitor : public ASR::BaseVisitor<ASRToLLVMVisitor>
3581
3637
DBuilder->insertDeclare (ptr, debug_var, DBuilder->createExpression (),
3582
3638
llvm::DILocation::get (debug_current_scope->getContext (),
3583
3639
line, 0 , debug_current_scope), builder->GetInsertBlock ());
3640
+ }
3584
3641
}
3585
3642
3586
3643
if ( ASR::is_a<ASR::StructType_t>(*v->m_type ) ) {
0 commit comments