.
This commit is contained in:
@@ -30,6 +30,8 @@ typedef struct {
|
||||
} VALUE;
|
||||
|
||||
TYC_TYPE value_type(VALUE v);
|
||||
bool type_is_collectable(TYC_TYPE t);
|
||||
|
||||
int32_t value_integer(VALUE v);
|
||||
float value_real(VALUE v);
|
||||
uint32_t value_idx(VALUE v);
|
||||
@@ -63,6 +65,8 @@ TYC_RESULT stack_push_fp(Stack* s);
|
||||
TYC_RESULT stack_pop_fp(Stack* s);
|
||||
size_t stack_fp_level(Stack* s);
|
||||
|
||||
size_t stack_collectable_array(Stack* s, VALUE** values);
|
||||
|
||||
//
|
||||
// HEAP
|
||||
//
|
||||
|
||||
13
lib/stack.c
13
lib/stack.c
@@ -134,4 +134,15 @@ TYC_RESULT stack_pop_fp(Stack* s)
|
||||
size_t stack_fp_level(Stack* s)
|
||||
{
|
||||
return s->fp_n;
|
||||
}
|
||||
}
|
||||
|
||||
size_t stack_collectable_array(Stack* s, VALUE** values)
|
||||
{
|
||||
size_t j = 0;
|
||||
*values = xmalloc(stack_len(s) * sizeof(VALUE));
|
||||
|
||||
for (size_t i = 0; i < s->stack_n; ++i)
|
||||
if (type_is_collectable(s->stack[i].type))
|
||||
(*values)[j++] = s->stack[i];
|
||||
return j;
|
||||
}
|
||||
|
||||
@@ -9,6 +9,11 @@ TYC_TYPE value_type(VALUE v)
|
||||
return v.type;
|
||||
}
|
||||
|
||||
bool type_is_collectable(TYC_TYPE t)
|
||||
{
|
||||
return t == TT_STRING || t == TT_ARRAY || t == TT_TABLE;
|
||||
}
|
||||
|
||||
int32_t value_integer(VALUE v)
|
||||
{
|
||||
#ifdef CHECK_TYCHE_BUGS
|
||||
|
||||
Reference in New Issue
Block a user