.
This commit is contained in:
2
Makefile
2
Makefile
@@ -30,7 +30,7 @@ endif
|
|||||||
|
|
||||||
# debug and release flags
|
# 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} \
|
-fno-sanitize-recover=all -fstack-protector-strong -fstack-clash-protection -fno-common ${ADD_DBG_FLAGS} \
|
||||||
-DCHECK_TYCHE_BUGS=1
|
-DCHECK_TYCHE_BUGS=1
|
||||||
DEBUG_LDFLAGS=-fsanitize=address -fsanitize=undefined
|
DEBUG_LDFLAGS=-fsanitize=address -fsanitize=undefined
|
||||||
|
|||||||
14
lib/stack.c
14
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)
|
static TYC_RESULT stack_at(Stack* s, int32_t key, VALUE* v)
|
||||||
{
|
{
|
||||||
if (key >= 0) {
|
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;
|
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 {
|
||||||
@@ -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)
|
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)
|
static TYC_RESULT stack_push_fp(Stack* s)
|
||||||
|
|||||||
Reference in New Issue
Block a user