.
This commit is contained in:
2
.idea/tyche.iml
generated
Normal file
2
.idea/tyche.iml
generated
Normal 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" />
|
||||
4
TODO.md
4
TODO.md
@@ -7,8 +7,8 @@ Decisions:
|
||||
|
||||
- [x] Makefile
|
||||
- [x] VALUE
|
||||
- [ ] Stack
|
||||
- [ ] Test application (C++?)
|
||||
- [x] Stack
|
||||
- [x] Test application
|
||||
- [ ] Heap
|
||||
- [ ] Heap value
|
||||
- [ ] VM
|
||||
|
||||
12
lib/stack.c
12
lib/stack.c
@@ -77,13 +77,13 @@ static size_t stack_len(Stack* s)
|
||||
static TYC_RESULT stack_at(Stack* s, int32_t key, VALUE* v)
|
||||
{
|
||||
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;
|
||||
*v = s->stack[stack_top_fp(s) + key];
|
||||
*v = s->stack[(int) stack_top_fp(s) + key];
|
||||
} else {
|
||||
if ((int) s->stack_n + key < (int) stack_top_fp(s))
|
||||
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;
|
||||
@@ -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)
|
||||
{
|
||||
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;
|
||||
s->stack[stack_top_fp(s) + key] = v;
|
||||
s->stack[(int) stack_top_fp(s) + key] = v;
|
||||
} else {
|
||||
if ((int) s->stack_n + key < (int) stack_top_fp(s))
|
||||
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;
|
||||
|
||||
@@ -72,6 +72,9 @@ int main()
|
||||
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_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, -4, &v) == T_ERR_STACK_ACCESS_OUT_OF_RANGE);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user