@@ -27,7 +27,7 @@
2727typedef enum {
2828 CON, INT, BIGINT, FLOAT, STRING, STROFFSET,
2929 BITS8, BITS16, BITS32, BITS64, UNIT, PTR, FWD,
30− MANAGEDPTR, RAWDATA
30+ MANAGEDPTR, RAWDATA, CDATA
3131} ClosureType;
3232
3333typedef struct Closure *VAL;
@@ -67,6 +67,7 @@ typedef struct Closure {
6767 uint32_t bits32;
6868 uint64_t bits64;
6969 ManagedPtr* mptr;
70+ CHeapItem* c_heap_item;
7071 size_t size;
7172 } info;
7273} Closure;
@@ -90,6 +91,7 @@ struct VM_t {
9091 VAL* valstack_base;
9192 VAL* stack_max;
9293
94+ CHeap c_heap;
9395 Heap heap;
9496#ifdef HAS_PTHREAD
9597 pthread_mutex_t inbox_lock;
@@ -207,6 +209,7 @@ VAL MKB8(VM* vm, uint8_t b);
207209VAL MKB16(VM* vm, uint16_t b);
208210VAL MKB32(VM* vm, uint32_t b);
209211VAL MKB64(VM* vm, uint64_t b);
212+VAL MKCDATA(VM* vm, CHeapItem * item);
210213
211214// following versions don't take a lock when allocating
212215VAL MKFLOATc(VM* vm, double val);
@@ -214,6 +217,7 @@ VAL MKSTROFFc(VM* vm, StrOffset* off);
214217VAL MKSTRc(VM* vm, char* str);
215218VAL MKPTRc(VM* vm, void* ptr);
216219VAL MKMPTRc(VM* vm, void* ptr, size_t size);
220+VAL MKCDATAc(VM* vm, CHeapItem * item);
217221
218222char* GETSTROFF(VAL stroff);
219223