1 /********************************************************************** 2 3 transient_heap.h - declarations of transient_heap related APIs. 4 5 Copyright (C) 2018 Koichi Sasada 6 7 **********************************************************************/ 8 9 #ifndef RUBY_TRANSIENT_HEAP_H 10 #define RUBY_TRANSIENT_HEAP_H 11 12 #include "internal.h" 13 14 #if USE_TRANSIENT_HEAP 15 16 /* public API */ 17 18 /* Allocate req_size bytes from transient_heap. 19 Allocated memories are free-ed when next GC 20 if this memory is not marked by `rb_transient_heap_mark()`. 21 */ 22 void *rb_transient_heap_alloc(VALUE obj, size_t req_size); 23 24 /* If `obj` uses a memory pointed by `ptr` from transient_heap, 25 you need to call `rb_transient_heap_mark(obj, ptr)` 26 to assert liveness of `obj` (and ptr). */ 27 void rb_transient_heap_mark(VALUE obj, const void *ptr); 28 29 /* used by gc.c */ 30 void rb_transient_heap_promote(VALUE obj); 31 void rb_transient_heap_start_marking(int full_marking); 32 void rb_transient_heap_finish_marking(void); 33 34 /* for debug API */ 35 void rb_transient_heap_dump(void); 36 void rb_transient_heap_verify(void); 37 int rb_transient_heap_managed_ptr_p(const void *ptr); 38 39 /* evacuate functions for each type */ 40 void rb_ary_transient_heap_evacuate(VALUE ary, int promote); 41 void rb_obj_transient_heap_evacuate(VALUE obj, int promote); 42 void rb_hash_transient_heap_evacuate(VALUE hash, int promote); 43 void rb_struct_transient_heap_evacuate(VALUE st, int promote); 44 45 #else /* USE_TRANSIENT_HEAP */ 46 47 #define rb_transient_heap_alloc(o, s) NULL 48 #define rb_transient_heap_verify() ((void)0) 49 #define rb_transient_heap_promote(obj) ((void)0) 50 #define rb_transient_heap_start_marking(full_marking) ((void)0) 51 #define rb_transient_heap_finish_marking() ((void)0) 52 #define rb_transient_heap_mark(obj, ptr) ((void)0) 53 54 #define rb_ary_transient_heap_evacuate(x, y) ((void)0) 55 #define rb_obj_transient_heap_evacuate(x, y) ((void)0) 56 #define rb_hash_transient_heap_evacuate(x, y) ((void)0) 57 #define rb_struct_transient_heap_evacuate(x, y) ((void)0) 58 59 #endif /* USE_TRANSIENT_HEAP */ 60 #endif 61