next: *
This commit is contained in:
parent
2ac2f85512
commit
90175b7e26
12 changed files with 300 additions and 77 deletions
23
next/core/alien.c
Normal file
23
next/core/alien.c
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
#include <growl.h>
|
||||
|
||||
Growl growl_make_alien(GrowlVM *vm, GrowlAlienType *type, void *data) {
|
||||
size_t size = sizeof(GrowlObjectHeader) + sizeof(GrowlAlien);
|
||||
GrowlObjectHeader *hdr = growl_gc_alloc(vm, size);
|
||||
hdr->type = GROWL_TYPE_ALIEN;
|
||||
GrowlAlien *alien = (GrowlAlien *)(hdr + 1);
|
||||
alien->type = type;
|
||||
alien->data = data;
|
||||
return GROWL_BOX(hdr);
|
||||
}
|
||||
|
||||
GrowlAlien *growl_unwrap_alien(Growl obj, GrowlAlienType *type) {
|
||||
if (obj == GROWL_NIL || GROWL_IMM(obj))
|
||||
return NULL;
|
||||
GrowlObjectHeader *hdr = GROWL_UNBOX(obj);
|
||||
if (hdr->type != GROWL_TYPE_ALIEN)
|
||||
return NULL;
|
||||
GrowlAlien *alien = (GrowlAlien *)(hdr + 1);
|
||||
if (alien->type != type)
|
||||
return NULL;
|
||||
return alien;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue