Skip to content

Commit 1906d5e

Browse files
committed
Proper GC bits for builtins
Set correct GC bitmaps for all builtin types!
1 parent 696aa21 commit 1906d5e

1 file changed

Lines changed: 25 additions & 18 deletions

File tree

builtin/src/__builtin__.ext.c

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,30 @@
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));
10-
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));
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_bool / B_boolD_gcbm
9+
// - B_complex / B_complexD_gcbm
10+
// - B_float / B_floatD_gcbm
11+
// - B_i16 / B_i16D_gcbm
12+
// - B_i32 / B_i32D_gcbm
13+
// - B_i64 / B_i64D_gcbm
14+
// - B_u16 / B_u16D_gcbm
15+
// - B_u32 / B_u32D_gcbm
16+
// - B_u64 / B_u64D_gcbm
17+
// - B_range / B_rangeD_gcbm
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_intD_gcbm, GC_WORD_OFFSET(struct B_int, val.n));
22+
GC_set_bit(B_listD_gcbm, GC_WORD_OFFSET(struct B_list, data));
23+
GC_set_bit(B_setD_gcbm, GC_WORD_OFFSET(struct B_set, table));
24+
GC_set_bit(B_sliceD_gcbm, GC_WORD_OFFSET(struct B_slice, start));
25+
GC_set_bit(B_sliceD_gcbm, GC_WORD_OFFSET(struct B_slice, step));
26+
GC_set_bit(B_sliceD_gcbm, GC_WORD_OFFSET(struct B_slice, stop));
27+
GC_set_bit(B_strD_gcbm, GC_WORD_OFFSET(struct B_str, str));
2128

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

0 commit comments

Comments
 (0)