memory.h
Go to the documentation of this file.
1 #pragma once
6 #include "kuroko.h"
7 #include "object.h"
8 #include "table.h"
9 
10 #define GROW_CAPACITY(c) ((c) < 8 ? 8 : (c) * 2)
11 #define GROW_ARRAY(t,p,o,n) (t*)krk_reallocate(p,sizeof(t)*o,sizeof(t)*n)
12 
13 #define FREE_ARRAY(t,a,c) krk_reallocate(a,sizeof(t) * c, 0)
14 #define FREE(t,p) krk_reallocate(p,sizeof(t),0)
15 
16 #define ALLOCATE(type, count) (type*)krk_reallocate(NULL,0,sizeof(type)*(count))
17 
30 extern void * krk_reallocate(void * ptr, size_t old, size_t new);
31 
38 extern void krk_freeObjects(void);
39 
49 extern size_t krk_collectGarbage(void);
50 
60 extern void krk_markValue(KrkValue value);
61 
69 extern void krk_markObject(KrkObj * object);
70 
79 extern void krk_markTable(KrkTable * table);
80 
92 extern void krk_gcTakeBytes(const void * ptr, size_t size);
Top-level header with configuration macros.
void krk_markValue(KrkValue value)
During a GC scan cycle, mark a value as used.
Definition: memory.c:329
void krk_markTable(KrkTable *table)
During a GC scan cycle, mark the contents of a table as used.
Definition: memory.c:438
void krk_freeObjects(void)
Release all objects.
Definition: memory.c:272
void krk_markObject(KrkObj *object)
During a GC scan cycle, mark an object as used.
Definition: memory.c:316
void * krk_reallocate(void *ptr, size_t old, size_t new)
Resize an allocated heap object.
Definition: memory.c:154
void krk_gcTakeBytes(const void *ptr, size_t size)
Assume ownership of size bytes at ptr.
Definition: memory.c:146
size_t krk_collectGarbage(void)
Run a cycle of the garbage collector.
Definition: memory.c:508
Struct definitions for core object types.
The most basic object type.
Definition: object.h:41
Simple hash table of arbitrary keys to values.
Definition: table.h:28
Stack reference or primative value.
Implementation of a generic hash table.