ref: 65795c1b052e87a3d14ad1580f6de0c30ea59010
parent: 812dc24c837fc55cd0912e2e125a6a997e8a3f19
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Thu Mar 20 03:26:59 EDT 2025
slmain: simplify ios handle logic
--- a/src/slmain.c
+++ b/src/slmain.c
@@ -101,11 +101,6 @@
exit(1);
}
- sl_v f = fn_builtin_buffer(nil, 0);
- sl_gc_handle(&f);
- sl_v args = argv_list(argc, argv);
- sl_gc_handle(&args);
- sl_ios *s = value2c(sl_ios*, f);
u8int *unpacked = nil;
if(boot[0] == 0){
u32int unpackedsz =
@@ -122,15 +117,19 @@
boot = unpacked;
bootsz = n;
}
- ios_static_buffer(s, boot, bootsz);
+ static sl_ios s;
+ ios_static_buffer(&s, boot, bootsz);
int r = 1;
+ sl_v args = argv_list(argc, argv);
+ sl_gc_handle(&args);
sl_TRY_EXTERN{
+ sl_v f = cvalue_from_ref(sl_iotype, &s, sizeof(sl_ios));
if(sl_load_system_image(f) == 0){
MEM_FREE(unpacked);
- s = value2c(sl_ios*, f);
- sl_free_gc_handles(2);
- ios_close(s);
+ ios_close(&s);
+ ios_free(&s);
+ sl_free_gc_handles(1);
sl_applyn(1, sym_value(mk_sym("__start", false)), args);
r = 0;
}