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