@@ -27,7 +27,7 @@
27typedef enum {
27typedef enum {
28 CON, INT, BIGINT, FLOAT, STRING, STROFFSET,
28 CON, INT, BIGINT, FLOAT, STRING, STROFFSET,
29 BITS8, BITS16, BITS32, BITS64, UNIT, PTR, FWD,
29 BITS8, BITS16, BITS32, BITS64, UNIT, PTR, FWD,
30− MANAGEDPTR, RAWDATA
30+ MANAGEDPTR, RAWDATA, CDATA
31} ClosureType;
31} ClosureType;
33typedef struct Closure *VAL;
33typedef struct Closure *VAL;
@@ -67,6 +67,7 @@ typedef struct Closure {
67 uint32_t bits32;
67 uint32_t bits32;
68 uint64_t bits64;
68 uint64_t bits64;
69 ManagedPtr* mptr;
69 ManagedPtr* mptr;
70+ CHeapItem* c_heap_item;
70 size_t size;
71 size_t size;
@@ -90,6 +91,7 @@ struct VM_t {
90 VAL* valstack_base;
91 VAL* valstack_base;
91 VAL* stack_max;
92 VAL* stack_max;
93 Heap heap;
95 Heap heap;
94#ifdef HAS_PTHREAD
96#ifdef HAS_PTHREAD
95 pthread_mutex_t inbox_lock;
97 pthread_mutex_t inbox_lock;
@@ -207,6 +209,7 @@ VAL MKB8(VM* vm, uint8_t b);
207VAL MKB16(VM* vm, uint16_t b);
209VAL MKB16(VM* vm, uint16_t b);
208VAL MKB32(VM* vm, uint32_t b);
210VAL MKB32(VM* vm, uint32_t b);
209VAL MKB64(VM* vm, uint64_t b);
211VAL MKB64(VM* vm, uint64_t b);
212+VAL MKCDATA(VM* vm, CHeapItem * item);
211// following versions don't take a lock when allocating
214// following versions don't take a lock when allocating
212VAL MKFLOATc(VM* vm, double val);
215VAL MKFLOATc(VM* vm, double val);
@@ -214,6 +217,7 @@ VAL MKSTROFFc(VM* vm, StrOffset* off);
214VAL MKSTRc(VM* vm, char* str);
217VAL MKSTRc(VM* vm, char* str);
215VAL MKPTRc(VM* vm, void* ptr);
218VAL MKPTRc(VM* vm, void* ptr);
216VAL MKMPTRc(VM* vm, void* ptr, size_t size);
219VAL MKMPTRc(VM* vm, void* ptr, size_t size);
220+VAL MKCDATAc(VM* vm, CHeapItem * item);
218char* GETSTROFF(VAL stroff);
222char* GETSTROFF(VAL stroff);