From 501f99f28f58a17c3af8d421ca6f4fda3ee6fce4 Mon Sep 17 00:00:00 2001 From: Andre Wagner Date: Tue, 12 May 2026 10:37:41 -0500 Subject: [PATCH] . --- Makefile | 2 +- lib/stack.c | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index b8a6401..db60e84 100644 --- a/Makefile +++ b/Makefile @@ -30,7 +30,7 @@ endif # debug and release flags -DEBUG_CFLAGS=-Og -ggdb3 ${WARNINGS} -fno-omit-frame-pointer -fsanitize=address -fsanitize=undefined \ +DEBUG_CFLAGS=-O0 -Og -ggdb3 ${WARNINGS} -fno-omit-frame-pointer -fsanitize=address -fsanitize=undefined \ -fno-sanitize-recover=all -fstack-protector-strong -fstack-clash-protection -fno-common ${ADD_DBG_FLAGS} \ -DCHECK_TYCHE_BUGS=1 DEBUG_LDFLAGS=-fsanitize=address -fsanitize=undefined diff --git a/lib/stack.c b/lib/stack.c index d4aca32..3b1f547 100644 --- a/lib/stack.c +++ b/lib/stack.c @@ -77,7 +77,7 @@ static size_t stack_len(Stack* s) static TYC_RESULT stack_at(Stack* s, int32_t key, VALUE* v) { if (key >= 0) { - if (key >= s->stack_n) + if (stack_top_fp(s) + key >= s->stack_n) return T_ERR_STACK_ACCESS_OUT_OF_RANGE; *v = s->stack[stack_top_fp(s) + key]; } else { @@ -91,7 +91,17 @@ static TYC_RESULT stack_at(Stack* s, int32_t key, VALUE* v) static TYC_RESULT stack_set(Stack* s, int32_t key, VALUE v) { - abort(); // TODO + if (key >= 0) { + if (stack_top_fp(s) + key >= s->stack_n) + return T_ERR_STACK_ACCESS_OUT_OF_RANGE; + s->stack[stack_top_fp(s) + key] = v; + } else { + if ((int) stack_top_fp(s) + (int) s->stack_n + key < 0) + return T_ERR_STACK_ACCESS_OUT_OF_RANGE; + s->stack[s->stack_n + key] = v; + } + + return T_OK; } static TYC_RESULT stack_push_fp(Stack* s)