From 1679d957e865c13c9d6c6938e8aef01f954a133b Mon Sep 17 00:00:00 2001 From: dzaima Date: Fri, 13 Sep 2024 21:52:18 +0300 Subject: [PATCH] more checks in arr_* functions --- src/core/stuff.h | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/core/stuff.h b/src/core/stuff.h index 460329c3..d6585910 100644 --- a/src/core/stuff.h +++ b/src/core/stuff.h @@ -106,24 +106,27 @@ static usz* arr_shAlloc(Arr* x, ur r) { // sets rank, allocates & returns shape } } static Arr* arr_shSetI(Arr* x, ur r, ShArr* sh) { // set rank and assign and increment shape if needed + assert(PRNK(x)<=1); SPRNK(x,r); if (r>1) x->sh = ptr_inc(sh)->a; else x->sh = &x->ia; return x; } static Arr* arr_shSetUO(Arr* x, ur r, ShArr* sh) { // set rank, and consume & assign shape if r>1 + assert(PRNK(x)<=1); SPRNK(x,r); if (r>1) x->sh = sh->a; else x->sh = &x->ia; return x; } static Arr* arr_shSetUG(Arr* x, ur r, ShArr* sh) { // arr_shSetUO but guaranteed r>1, i.e. always consumes sh - assert(r>1); + assert(r>1 && PRNK(x)<=1); SPRNK(x,r); x->sh = sh->a; return x; } -static Arr* arr_shCopyUnchecked(Arr* n, B o) { +static Arr* arr_shCopyUnchecked(Arr* n, B o) { // copy shape & rank from o to n + assert(PRNK(n)<=1); ur r = SPRNK(n,RNK(o)); if (r<=1) { n->sh = &n->ia; @@ -134,6 +137,10 @@ static Arr* arr_shCopyUnchecked(Arr* n, B o) { } return n; } +static Arr* arr_shCopy(Arr* n, B o) { // copy shape & rank from o to n; verifies that ia of both match + assert(isArr(o) && IA(o)==n->ia); + return arr_shCopyUnchecked(n, o); +} static Arr* arr_shErase(Arr* x, ur r) { // replace x's shape with rank 0 or 1 assert(r<=1); u8 xr = PRNK(x); @@ -153,10 +160,6 @@ static Arr* arr_shReplace(Arr* x, ur r, ShArr* sh) { // replace x's shape with a if (xr>1) decShObj(shObjS(prevsh)); return x; } -static Arr* arr_shCopy(Arr* n, B o) { // copy shape & rank from o to n - assert(isArr(o) && IA(o)==n->ia); - return arr_shCopyUnchecked(n, o); -} static void shcpy(usz* dst, usz* src, ux len) { PLAINLOOP for (ux i = 0; i < len; i++) dst[i] = src[i]; }