This commit is contained in:
2026-05-12 09:23:43 -05:00
parent ad970577b0
commit 3a35a1e125
2 changed files with 7 additions and 2 deletions

View File

@@ -53,7 +53,7 @@ static size_t stack_top_fp(Stack* s)
static TYC_RESULT stack_peek(Stack* s, VALUE* v_out) static TYC_RESULT stack_peek(Stack* s, VALUE* v_out)
{ {
if (s->stack_n < stack_top_fp(s)) if (s->stack_n <= stack_top_fp(s))
return T_ERR_STACK_UNDERFLOW; return T_ERR_STACK_UNDERFLOW;
if (v_out) if (v_out)
*v_out = s->stack[s->stack_n - 1]; *v_out = s->stack[s->stack_n - 1];
@@ -77,9 +77,11 @@ static size_t stack_len(Stack* s)
static TYC_RESULT stack_at(Stack* s, int32_t key, VALUE* v) static TYC_RESULT stack_at(Stack* s, int32_t key, VALUE* v)
{ {
if (key >= 0) { if (key >= 0) {
if (key >= s->stack_n)
return T_ERR_STACK_ACCESS_OUT_OF_RANGE;
*v = s->stack[stack_top_fp(s) + key]; *v = s->stack[stack_top_fp(s) + key];
} else { } else {
if (stack_top_fp(s) + s->stack_n + key < 0) if ((int) stack_top_fp(s) + (int) s->stack_n + key < 0)
return T_ERR_STACK_ACCESS_OUT_OF_RANGE; return T_ERR_STACK_ACCESS_OUT_OF_RANGE;
*v = s->stack[s->stack_n + key]; *v = s->stack[s->stack_n + key];
} }

View File

@@ -36,6 +36,9 @@ int main()
assert(stack_at(&s, -1, &v) == T_OK); assert(value_integer(v) == 30); assert(stack_at(&s, -1, &v) == T_OK); assert(value_integer(v) == 30);
assert(stack_at(&s, -2, &v) == T_OK); assert(value_integer(v) == 20); assert(stack_at(&s, -2, &v) == T_OK); assert(value_integer(v) == 20);
assert(stack_at(&s, 3, &v) == T_ERR_STACK_ACCESS_OUT_OF_RANGE);
assert(stack_at(&s, -4, &v) == T_ERR_STACK_ACCESS_OUT_OF_RANGE);
assert(stack_pop(&s, NULL) == T_OK); assert(stack_pop(&s, NULL) == T_OK);
assert(stack_pop(&s, NULL) == T_OK); assert(stack_pop(&s, NULL) == T_OK);
assert(stack_at(&s, -1, &v) == T_OK); assert(value_integer(v) == 10); assert(stack_at(&s, -1, &v) == T_OK); assert(value_integer(v) == 10);