#include <stdio.h>
Go to the source code of this file.
Defines | |
#define | VM_OBJ_OFS sizeof(struct _vm_obj_t) |
size of the object header | |
#define | PTR_TO_OBJ(_x) ((vm_obj_t)(((char*)(_x))-VM_OBJ_OFS)) |
translate from a managed buffer to its object header | |
#define | OBJ_TO_PTR(_x) ((void*)(((char*)(_x))+VM_OBJ_OFS)) |
translate from an object header to its managed buffer | |
#define | VM_OBJ_MAGIC 0x61060000 |
magic value for managed objects : bit pattern | |
#define | VM_OBJ_MASK 0xFFFF0000 |
magic value for managed objects : bit mask | |
#define | _obj_type(_x) (((vm_obj_t)(_x))->magic^VM_OBJ_MAGIC) |
retrieve the type of managed object (DataObj* constant) | |
#define | _is_obj_obj(_x) (((_x)&&(((_x)->magic&VM_OBJ_MASK) == VM_OBJ_MAGIC)) || (vm_printerrf("Data at %p is not a managed object (magic = %8.8lX)\n",(_x),(_x)?(_x)->magic:0) && 0)) |
assertions | |
#define | _is_a_obj(_x, _t) (_is_obj(_x) && (_obj_type(_x)==(_t))) |
#define | _is_obj_ptr(_x) ((_x)&&((PTR_TO_OBJ(_x)->magic&VM_OBJ_MASK) == VM_OBJ_MAGIC)) |
#define | _is_a_ptr(_x, _t) (_is_obj_ptr(_x) && (_obj_type(PTR_TO_OBJ(_x))==(_t))) |
Functions | |
static void * | vm_obj_new (word_t struc_size, void(*_free)(vm_t, void *), void *(*_clone)(vm_t, void *), vm_data_type_t obj_type) |
allocate a new managed buffer. | |
static void | vm_obj_free_obj (vm_t vm, vm_obj_t o) |
free a managed object. | |
static vm_obj_t | vm_obj_clone_obj (vm_t vm, vm_obj_t o) |
clone an object | |
static word_t | vm_obj_refcount_ptr (void *ptr) |
get the reference count for object ptr | |
static void | vm_obj_ref_ptr (vm_t vm, void *ptr) |
increase reference count for ptr | |
static void | vm_obj_deref_ptr (vm_t vm, void *ptr) |
decrease reference count for ptr and collect object if necessary | |
char * | vm_string_new (const char *src) |
create a new managed string containing a copy of src | |
char * | vm_string_new_buf (word_t sz) |
create a new managed string of length sz | |
text_seg_t | vm_symtab_new () |
create a new symbol table ( [symbol] => index not null ) | |
mutex_t | vm_mutex_new () |
create a new mutex | |
thread_t | vm_thread_new (vm_t vm, word_t prio, program_t p, word_t ip) |
create a new thread | |
dynarray_t | vm_array_new () |
create a new dynamic array | |
vm_dyn_env_t | vm_env_new () |
create a new map ( symbol table + array) | |
generic_stack_t | vm_stack_new () |
create a new stack | |
vm_dyn_func_t | vm_dyn_fun_new () |
create a new function object |