shithub: sl

Download patch

ref: 8f521e6db49764583e5ba4391c0d798393e2082e
parent: 0701c4dbef52bca80ba285a07daecebc9ba3b4d2
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Wed Feb 5 22:02:25 EST 2025

cvalue init funcs: expect a throw on error

--- a/src/cvalues.c
+++ b/src/cvalues.c
@@ -214,7 +214,7 @@
 }
 
 #define num_init(ctype, cnvt, tag) \
-	static int \
+	static void \
 	cvalue_##ctype##_init(fltype_t *type, value_t arg, void *dest) \
 	{ \
 		ctype n; \
@@ -229,9 +229,8 @@
 			void *p = cv_data(ptr(arg)); \
 			n = (ctype)conv_to_##cnvt(p, T_MPINT); \
 		}else \
-			return 1; \
+			type_error("number", arg); \
 		*((ctype*)dest) = n; \
-		return 0; \
 	}
 
 num_init(int8_t, int32, T_INT8)
@@ -254,8 +253,7 @@
 			args = &FL(stack)[FL(sp)-1]; \
 		} \
 		value_t cp = cprim(FL(typenam##type), sizeof(ctype)); \
-		if(cvalue_##ctype##_init(FL(typenam##type), args[0], cp_data(ptr(cp)))) \
-			type_error("number", args[0]); \
+		cvalue_##ctype##_init(FL(typenam##type), args[0], cp_data(ptr(cp))); \
 		return cp; \
 	}
 
@@ -284,7 +282,7 @@
 num_ctor(double, double, T_DOUBLE)
 num_ctor(rune, uint32_t, T_UINT32)
 
-static int
+static void
 cvalue_mpint_init(fltype_t *type, value_t arg, void *dest)
 {
 	mpint *n;
@@ -299,11 +297,9 @@
 		cprim_t *cp = ptr(arg);
 		void *p = cp_data(cp);
 		n = conv_to_mpint(p, cp_numtype(cp));
-	}else{
-		return 1;
-	}
+	}else
+		type_error("number", arg);
 	*((mpint**)dest) = n;
-	return 0;
 }
 
 BUILTIN("bignum", bignum)
@@ -313,8 +309,7 @@
 		args = &FL(stack)[FL(sp)-1];
 	}
 	value_t cv = cvalue(FL(mpinttype), sizeof(mpint*));
-	if(cvalue_mpint_init(FL(mpinttype), args[0], cvalue_data(cv)))
-		type_error("number", args[0]);
+	cvalue_mpint_init(FL(mpinttype), args[0], cvalue_data(cv));
 	return cv;
 }
 
@@ -392,7 +387,7 @@
 	return 1;
 }
 
-int
+void
 cvalue_array_init(fltype_t *ft, value_t arg, void *dest)
 {
 	value_t type = ft->type;
@@ -416,7 +411,7 @@
 			cvalue_init(eltype, vector_elt(arg, i), dest);
 			dest = (char*)dest + elsize;
 		}
-		return 0;
+		return;
 	}
 	if(iscons(arg) || arg == FL_nil){
 		i = 0;
@@ -432,7 +427,7 @@
 		}
 		if(i != cnt)
 			lerrorf(FL_ArgError, "size mismatch");
-		return 0;
+		return;
 	}
 	if(iscvalue(arg)){
 		cvalue_t *cv = ptr(arg);
@@ -443,7 +438,7 @@
 					memcpy(dest, cv_data(cv), sz);
 				else
 					lerrorf(FL_ArgError, "size mismatch");
-				return 0;
+				return;
 			}else{
 				// TODO: initialize array from different type elements
 				lerrorf(FL_ArgError, "element type mismatch");
--- a/src/cvalues.h
+++ b/src/cvalues.h
@@ -23,7 +23,7 @@
 size_t tosize(value_t n);
 off_t tooffset(value_t n);
 bool isarray(value_t v) fl_purefn;
-int cvalue_array_init(fltype_t *ft, value_t arg, void *dest);
+void cvalue_array_init(fltype_t *ft, value_t arg, void *dest);
 size_t cvalue_arraylen(value_t v) fl_purefn;
 size_t ctype_sizeof(value_t type);
 void to_sized_ptr(value_t v, uint8_t **pdata, size_t *psz);
--- a/src/flisp.h
+++ b/src/flisp.h
@@ -278,7 +278,7 @@
 	void (*print_traverse)(value_t self);
 } cvtable_t;
 
-typedef int (*cvinitfunc_t)(fltype_t*, value_t, void*);
+typedef void (*cvinitfunc_t)(fltype_t*, value_t, void*);
 
 struct fltype_t {
 	value_t type;
--