From a56a20b04673655dc2f33663e80110d30beae073 Mon Sep 17 00:00:00 2001 From: dzaima Date: Sat, 21 Aug 2021 04:41:51 +0300 Subject: [PATCH] fix vm_fmtPoint on non-equal s and src types --- src/core/stuff.c | 4 ++++ src/h.h | 3 ++- src/vm.c | 3 ++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/core/stuff.c b/src/core/stuff.c index 1ab7674e..c70244c3 100644 --- a/src/core/stuff.c +++ b/src/core/stuff.c @@ -591,4 +591,8 @@ NOINLINE void printAllocStats() { } return x; } + NOINLINE NORETURN void assert_fail(char* expr, char* file, int line, const char fn[]) { + printf("%s:%d: %s: Assertion `%s` failed.\n", file, line, fn, expr); + err(""); + } #endif diff --git a/src/h.h b/src/h.h index 54ff5f3b..6a0cb817 100644 --- a/src/h.h +++ b/src/h.h @@ -207,7 +207,8 @@ typedef struct Arr { } Arr; #ifdef DEBUG - #include + NOINLINE NORETURN void assert_fail(char* expr, char* file, int line, const char fn[]); + #define assert(X) do { if (!(X)) assert_fail(#X, __FILE__, __LINE__, __PRETTY_FUNCTION__); } while (0) B VALIDATE(B x); Value* VALIDATEP(Value* x); #define UD assert(false); diff --git a/src/vm.c b/src/vm.c index 001eb9a3..e9dce008 100644 --- a/src/vm.c +++ b/src/vm.c @@ -998,7 +998,8 @@ NOINLINE B vm_fmtPoint(B src, B prepend, B path, usz cs, usz ce) { // consumes p else AFMT("at "); i64 padEnd = (i64)a(s)->ia; i64 padStart = padEnd; - while (padStart>0 && o2cu(srcGetU(s,padStart-1))!='\n') padStart--; + BS2B sGetU = TI(s,getU); + while (padStart>0 && o2cu(sGetU(s,padStart-1))!='\n') padStart--; Arr* slice = TI(src,slice)(inc(src),srcS, srcE-srcS); arr_shVec(slice); AJOIN(taga(slice));