Skip to content

Commit 43f7504

Browse files
committed
Fix bugs and refactor code
1 parent f2bfc2e commit 43f7504

File tree

2 files changed

+8
-27
lines changed

2 files changed

+8
-27
lines changed

integration_tests/test_set_clear.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,20 @@ def test_clear():
22
a: set[i32] = {1, 2}
33

44
a.clear()
5-
# a.add(3)
5+
a.add(3)
66

7+
assert len(a) == 1
8+
a.remove(3)
79
assert len(a) == 0
8-
# a.remove(3)
9-
# assert len(a) == 0
1010

1111
b: set[str] = {'a', 'b'}
1212

1313
b.clear()
14-
# b.add('c')
14+
b.add('c')
1515

16+
assert len(b) == 1
17+
b.remove('c')
1618
assert len(b) == 0
17-
# b.remove('c')
18-
# assert len(b) == 0
1919

2020

2121
test_clear()

src/libasr/codegen/llvm_utils.cpp

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6902,32 +6902,13 @@ namespace LCompilers {
69026902
}
69036903

69046904
void LLVMSetLinearProbing::set_clear(llvm::Value* set, llvm::Module* module, ASR::ttype_t* el_asr_type) {
6905-
get_builder0();
6906-
llvm::Value* occupancy_ptr = get_pointer_to_occupancy(set);
6907-
llvm::Value* capacity_ptr = get_pointer_to_capacity(set);
6908-
llvm::Value* llvm_zero = llvm::ConstantInt::get(llvm::Type::getInt32Ty(context), llvm::APInt(32, 0));
6909-
LLVM::CreateStore(*builder, llvm_zero, occupancy_ptr);
6910-
LLVM::CreateStore(*builder, llvm_zero, capacity_ptr);
69116905

69126906
llvm::Value* el_list = get_el_list(set);
6913-
llvm::DataLayout data_layout(module);
6914-
size_t mask_size = data_layout.getTypeAllocSize(llvm::Type::getInt8Ty(context));
6915-
llvm::Value* llvm_mask_size = llvm::ConstantInt::get(llvm::Type::getInt32Ty(context),
6916-
llvm::APInt(32, mask_size));
6917-
llvm::Value* new_el_mask = LLVM::lfortran_calloc(context, *module, *builder, llvm_zero,
6918-
llvm_mask_size);
6919-
std::string el_type_code = ASRUtils::get_type_code(el_asr_type);
6920-
llvm::Type* el_llvm_type = std::get<2>(typecode2settype[el_type_code]);
6921-
int32_t el_type_size = std::get<1>(typecode2settype[el_type_code]);
6922-
6923-
llvm::Value* new_el_list = builder0.CreateAlloca(llvm_utils->list_api->get_list_type(el_llvm_type,
6924-
el_type_code, el_type_size), nullptr);
6925-
llvm_utils->list_api->list_init(el_type_code, el_list, *module, llvm_zero, llvm_zero);
69266907

69276908
llvm_utils->list_api->free_data(el_list, *module);
69286909
LLVM::lfortran_free(context, *module, *builder, LLVM::CreateLoad(*builder, get_pointer_to_mask(set)));
6929-
LLVM::CreateStore(*builder, LLVM::CreateLoad(*builder, new_el_list), el_list);
6930-
LLVM::CreateStore(*builder, new_el_mask, get_pointer_to_mask(set));
6910+
6911+
set_init(ASRUtils::get_type_code(el_asr_type), set, module, 0);
69316912
}
69326913

69336914
void LLVMSetSeparateChaining::set_clear(llvm::Value* set, llvm::Module* module, ASR::ttype_t* el_asr_type) {

0 commit comments

Comments
 (0)