diff options
author | Nathan Ringo <nathan@remexre.com> | 2024-11-29 15:37:04 -0600 |
---|---|---|
committer | Nathan Ringo <nathan@remexre.com> | 2024-11-29 15:37:04 -0600 |
commit | f54faf130e4a1f6fb75eba1634bb07a9adc038a6 (patch) | |
tree | c9360513bc5edbc5df0ad4f23875ccf32030d64e /src/value.c | |
parent | b3149099a17d392289db9699b5b5d83444d25173 (diff) |
Diffstat (limited to 'src/value.c')
-rw-r--r-- | src/value.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/value.c b/src/value.c index eacc21c..e240646 100644 --- a/src/value.c +++ b/src/value.c @@ -152,14 +152,18 @@ struct object *untag_ptr(struct value value) { } void bootstrap(void) { + // Register every builtin slot as a root. + for (size_t i = 0; i < BUILTINS_COUNT; i++) + gc_root_push(&builtins[i]); + // Since it is its own class, standard-class needs to be constructed // manually. { - struct object *obj = gc_alloc(STANDARD_CLASS_SLOT_COUNT + 1, 0); - builtins[BUILTIN_BUILTIN_CLASS_STANDARD_CLASS] = (struct value){ - .bits = (uintptr_t)obj | TAG_BUILTIN_OBJECT, - }; - gc_write_value_slot(obj, 0, builtins[BUILTIN_BUILTIN_CLASS_STANDARD_CLASS]); + builtins[BUILTIN_BUILTIN_CLASS_STANDARD_CLASS] = + tag_ptr(gc_alloc(STANDARD_CLASS_SLOT_COUNT + 1, 0), TAG_BUILTIN_OBJECT); + builtin_object_write_value_slot( + builtins[BUILTIN_BUILTIN_CLASS_STANDARD_CLASS], 0, + builtins[BUILTIN_BUILTIN_CLASS_STANDARD_CLASS]); // TODO } |