shithub: sl

Download patch

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;
 		}