Exemplo n.º 1
0
Arquivo: libs.c Projeto: clarkok/cript
static Value
_lib_foreach(VMState *vm, Value value)
{
    Hash *args = value_to_ptr(value);
    Hash *array = value_to_ptr(hash_find(args, 1));
    Value callback = hash_find(args, 2);

    for (size_t i = 0; i < hash_size(array); ++i) {
        Hash *cb_arg = cvm_create_array(vm, HASH_MIN_CAPACITY);

        cb_arg = cvm_set_hash(vm, cb_arg, 0, value_from_ptr(cvm_get_global(vm)));
        cb_arg = cvm_set_hash(vm, cb_arg, 1, hash_find(array, i));

        cvm_state_call_function(vm, callback, value_from_ptr(cb_arg));
    }

    return value_undefined();
}
Exemplo n.º 2
0
TEST(fixnum)
    value_t x = value_from_int(322);
    PT_ASSERT_EQ(value_to_int(x), 322);
END(fixnum)

TEST(bool)
    value_t x = value_true();
    PT_ASSERT(value_to_bool(x));
    x = value_false();
    PT_ASSERT(!value_to_bool(x));
END(bool)

TEST(ptr)
    struct arena_handle *a = arena_new((yu_allocator *)&mctx);
    struct boxed_value *v = arena_alloc_val(a);
    value_t x = value_from_ptr(&v);
    PT_ASSERT_EQ(value_get_ptr(x), v);
    PT_ASSERT_EQ(boxed_value_owner(v), a);
END(ptr)

TEST(value_type)
    struct arena_handle *a = arena_new((yu_allocator *)&mctx);
    struct boxed_value *v1 = arena_alloc_val(a), *v2 = arena_alloc_val(a);
    value_t w = value_from_int(655), x = value_true(),
            y = value_from_ptr(&v1),
            z = value_from_ptr(&v2);
    boxed_value_set_type(value_get_ptr(y), VALUE_REAL);
    boxed_value_set_type(value_get_ptr(z), VALUE_FIXNUM);

    PT_ASSERT_EQ(value_what(w), VALUE_FIXNUM);
    PT_ASSERT_EQ(value_what(z), VALUE_FIXNUM);