Skip to content

Commit 785fca1

Browse files
committed
Set proper GC bitmaps for builtins
Set correct GC bitmaps for all builtins except for ints.
1 parent 696aa21 commit 785fca1

1 file changed

Lines changed: 27 additions & 17 deletions

File tree

builtin/src/__builtin__.ext.c

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,33 @@
11

22
void B___ext_init__() {
3-
memset(B_boolD_gcbm, 0xFF, sizeof(B_boolD_gcbm));
4-
memset(B_complexD_gcbm, 0xFF, sizeof(B_complexD_gcbm));
5-
memset(B_dictD_gcbm, 0xFF, sizeof(B_dictD_gcbm));
6-
memset(B_floatD_gcbm, 0xFF, sizeof(B_floatD_gcbm));
7-
memset(B_i16D_gcbm, 0xFF, sizeof(B_i16D_gcbm));
8-
memset(B_i32D_gcbm, 0xFF, sizeof(B_i32D_gcbm));
9-
memset(B_i64D_gcbm, 0xFF, sizeof(B_i64D_gcbm));
3+
// Here is a list of things that have no fields that need to be scanned. It
4+
// is noted down as an explicit negative list of things so we don't have to
5+
// think "did we miss this". No, we did not, it just does not need scanning
6+
// and the GC bitmap is already initialized to 0 due to the GC malloc
7+
// actually being a calloc.
8+
// - B_boolD_gcbm / B_bool
9+
// - B_complexD_gcbm / B_complex
10+
// - B_floatD_gcbm / B_float
11+
// - B_i16D_gcbm / B_i16
12+
// - B_i32D_gcbm / B_i32
13+
// - B_i64D_gcbm / B_i64
14+
// - B_u16D_gcbm / B_u16
15+
// - B_u32D_gcbm / B_u32
16+
// - B_u64D_gcbm / B_u64
17+
// - B_rangeD_gcbm / B_range
18+
GC_set_bit(B_bytearrayD_gcbm, GC_WORD_OFFSET(struct B_bytearray, str));
19+
GC_set_bit(B_bytesD_gcbm, GC_WORD_OFFSET(struct B_bytes, str));
20+
GC_set_bit(B_dictD_gcbm, GC_WORD_OFFSET(struct B_dict, table));
21+
GC_set_bit(B_listD_gcbm, GC_WORD_OFFSET(struct B_list, data));
22+
GC_set_bit(B_setD_gcbm, GC_WORD_OFFSET(struct B_set, table));
23+
GC_set_bit(B_sliceD_gcbm, GC_WORD_OFFSET(struct B_slice, start));
24+
GC_set_bit(B_sliceD_gcbm, GC_WORD_OFFSET(struct B_slice, step));
25+
GC_set_bit(B_sliceD_gcbm, GC_WORD_OFFSET(struct B_slice, stop));
26+
GC_set_bit(B_strD_gcbm, GC_WORD_OFFSET(struct B_str, str));
27+
28+
// TODO: look into zz_struct
1029
memset(B_intD_gcbm, 0xFF, sizeof(B_intD_gcbm));
11-
memset(B_listD_gcbm, 0xFF, sizeof(B_listD_gcbm));
12-
memset(B_rangeD_gcbm, 0xFF, sizeof(B_rangeD_gcbm));
13-
memset(B_setD_gcbm, 0xFF, sizeof(B_setD_gcbm));
14-
memset(B_sliceD_gcbm, 0xFF, sizeof(B_sliceD_gcbm));
15-
memset(B_strD_gcbm, 0xFF, sizeof(B_strD_gcbm));
16-
memset(B_bytearrayD_gcbm, 0xFF, sizeof(B_bytearrayD_gcbm));
17-
memset(B_bytesD_gcbm, 0xFF, sizeof(B_bytesD_gcbm));
18-
memset(B_u16D_gcbm, 0xFF, sizeof(B_u16D_gcbm));
19-
memset(B_u32D_gcbm, 0xFF, sizeof(B_u32D_gcbm));
20-
memset(B_u64D_gcbm, 0xFF, sizeof(B_u64D_gcbm));
30+
2131

2232
B_HashableD_intG_methods.__eq__ = (B_bool (*)(B_HashableD_int, B_int, B_int))B_OrdD_intD___eq__;
2333
B_HashableD_i64G_methods.__eq__ = (B_bool (*)(B_HashableD_i64, B_i64, B_i64))B_OrdD_i64D___eq__;

0 commit comments

Comments
 (0)