Skip to content

Commit 3e29697

Browse files
committed
Initialize GC bitmaps for manually defined builtins
We err on the safe side by initializing the GC bitmaps to all 1s which means they will be scanned in their entirety.
1 parent 3e2ec8e commit 3e29697

2 files changed

Lines changed: 23 additions & 2 deletions

File tree

builtin/src/__builtin__.ext.c

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
2+
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));
21+
}

compiler/Acton/CodeGen.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -310,8 +310,8 @@ cModule env srcbase (Module m imps stmts)
310310
if inBuiltin env then empty else char '}' -- Temporary fix until __builtin__ADD.c not necessary
311311
where initImports = vcat [ gen env (GName m initKW) <> parens empty <> semi | m <- modNames imps ]
312312
external = hasNotImpl stmts && not (inBuiltin env)
313-
ext_include = if external then text "#include" <+> doubleQuotes (text srcbase <> text ".ext.c") else empty
314-
ext_init = if external then genTopName env (name "__ext_init__") <+> parens empty <> semi else empty
313+
ext_include = if hasNotImpl stmts then text "#include" <+> doubleQuotes (text srcbase <> text ".ext.c") else empty
314+
ext_init = if hasNotImpl stmts then genTopName env (name "__ext_init__") <+> parens empty <> semi else empty
315315

316316

317317
declModule env [] = empty

0 commit comments

Comments
 (0)