test_kprint

This commit is contained in:
2023-01-18 03:49:44 +06:00
parent ab761aa395
commit 169165ac5a
7 changed files with 103 additions and 29 deletions

View File

@@ -72,15 +72,23 @@ typedef uint8 bool;
#define __count_args(\
a0, a1, a2, a3, a4, a5, a6, a7,\
a0, a1, a2, a3, a4, a5, a6, a7 ,\
a8, a9, a10,a11,a12,a13,a14,a15,\
a16,a17,a18,a19,a20,a21,a22,a23,\
a24,a25,a26,a27,a28,a29,a30,a31,\
a32,...) a32
// Macro for counting variadic arguments
a32,a33,a34,a35,a36,a37,a38,a39,\
a40,a41,a42,a43,a44,a45,a46,a47,\
a48,a49,a50,a51,a52,a53,a54,a55,\
a56,a57,a58,a59,a60,a61,a62,a63,\
a64,...) a64
// Macro for counting variadic arguments (max 64)
// (see usage in kprint.h)
#define count_args(ARGS...) __count_args(\
ARGS,\
64,63,62,61,60,59,58,57,\
56,55,54,53,52,51,50,49,\
48,47,46,45,44,43,42,41,\
40,39,38,37,36,35,34,33,\
32,31,30,29,28,27,26,25,\
24,23,22,21,20,19,18,17,\
16,15,14,13,12,11,10,9,\

View File

@@ -34,7 +34,14 @@ Maybe __next_toString(kp_fmt f, __kp_value_union* object){
return SUCCESS(UniHeapPtr(char, typeDesc.toString(object, f)));
}
Maybe check_argsN(uint8 n){
if(n%2 != 0) safethrow("kprint recieved non-even number of arguments",;);
if(n > 32) safethrow("kprint recieved >32 number of arguments",;);
return MaybeNull;
}
Maybe __ksprint(uint8 n, kp_fmt* formats, __kp_value_union* objects){
try(check_argsN(n), _,;);
n/=2;
StringBuilder* strb=StringBuilder_create();
for(uint8 i=0; i<n; i++){
@@ -47,6 +54,7 @@ Maybe __ksprint(uint8 n, kp_fmt* formats, __kp_value_union* objects){
}
Maybe __kfprint(FILE* file, uint8 n, kp_fmt* formats, __kp_value_union* objects){
try(check_argsN(n), _,;);
n/=2;
for(uint8 i=0; i<n; i++){
try(__next_toString(formats[i], &objects[i]),maybeStr,;);
@@ -59,6 +67,7 @@ Maybe __kfprint(FILE* file, uint8 n, kp_fmt* formats, __kp_value_union* objects)
}
void __kprint(uint8 n, kp_fmt* formats, __kp_value_union* objects){
tryLast(check_argsN(n), _);
n/=2;
for(uint8 i=0; i<n; i++){
kp_fmt fmt=formats[i];