This commit is contained in:
2026-05-12 10:55:08 -05:00
parent bf8eb83575
commit 77434a4c01
4 changed files with 13 additions and 8 deletions

2
.idea/tyche.iml generated Normal file
View File

@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<module classpath="External" external.linked.project.id="tyche" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="Makefile" type="CPP_MODULE" version="4" />

View File

@@ -7,8 +7,8 @@ Decisions:
- [x] Makefile - [x] Makefile
- [x] VALUE - [x] VALUE
- [ ] Stack - [x] Stack
- [ ] Test application (C++?) - [x] Test application
- [ ] Heap - [ ] Heap
- [ ] Heap value - [ ] Heap value
- [ ] VM - [ ] VM

View File

@@ -77,13 +77,13 @@ 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 (stack_top_fp(s) + key >= s->stack_n) if ((int) stack_top_fp(s) + key >= (int) s->stack_n)
return T_ERR_STACK_ACCESS_OUT_OF_RANGE; return T_ERR_STACK_ACCESS_OUT_OF_RANGE;
*v = s->stack[stack_top_fp(s) + key]; *v = s->stack[(int) stack_top_fp(s) + key];
} else { } else {
if ((int) s->stack_n + key < (int) stack_top_fp(s)) if ((int) s->stack_n + key < (int) stack_top_fp(s))
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[(int) s->stack_n + key];
} }
return T_OK; return T_OK;
@@ -92,13 +92,13 @@ static TYC_RESULT stack_at(Stack* s, int32_t key, VALUE* v)
static TYC_RESULT stack_set(Stack* s, int32_t key, VALUE v) static TYC_RESULT stack_set(Stack* s, int32_t key, VALUE v)
{ {
if (key >= 0) { if (key >= 0) {
if (stack_top_fp(s) + key >= s->stack_n) if ((int) stack_top_fp(s) + key >= (int) s->stack_n)
return T_ERR_STACK_ACCESS_OUT_OF_RANGE; return T_ERR_STACK_ACCESS_OUT_OF_RANGE;
s->stack[stack_top_fp(s) + key] = v; s->stack[(int) stack_top_fp(s) + key] = v;
} else { } else {
if ((int) s->stack_n + key < (int) stack_top_fp(s)) if ((int) s->stack_n + key < (int) stack_top_fp(s))
return T_ERR_STACK_ACCESS_OUT_OF_RANGE; return T_ERR_STACK_ACCESS_OUT_OF_RANGE;
s->stack[s->stack_n + key] = v; s->stack[(int) s->stack_n + key] = v;
} }
return T_OK; return T_OK;

View File

@@ -72,6 +72,9 @@ int main()
assert(stack_at(&s, -1, &v) == T_OK); assert(value_integer(v) == 50); assert(stack_at(&s, -1, &v) == T_OK); assert(value_integer(v) == 50);
assert(stack_at(&s, -2, &v) == T_OK); assert(value_integer(v) == 40); assert(stack_at(&s, -2, &v) == T_OK); assert(value_integer(v) == 40);
assert(stack_set(&s, -2, create_value_integer(99)) == T_OK);
assert(stack_at(&s, -2, &v) == T_OK); assert(value_integer(v) == 99);
assert(stack_at(&s, 3, &v) == T_ERR_STACK_ACCESS_OUT_OF_RANGE); 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_at(&s, -4, &v) == T_ERR_STACK_ACCESS_OUT_OF_RANGE);