aboutsummaryrefslogtreecommitdiffstats
path: root/transient_heap.h
diff options
context:
space:
mode:
Diffstat (limited to 'transient_heap.h')
-rw-r--r--transient_heap.h38
1 files changed, 38 insertions, 0 deletions
diff --git a/transient_heap.h b/transient_heap.h
new file mode 100644
index 0000000000..ac0eaadb78
--- /dev/null
+++ b/transient_heap.h
@@ -0,0 +1,38 @@
+/**********************************************************************
+
+ transient_heap.h - declarations of transient_heap related APIs.
+
+ Copyright (C) 2018 Koichi Sasada
+
+**********************************************************************/
+
+#ifndef RUBY_TRANSIENT_HEAP_H
+#define RUBY_TRANSIENT_HEAP_H
+
+/* public API */
+
+/* Allocate req_size bytes from transient_heap.
+ Allocated memories are free-ed when next GC
+ if this memory is not marked by `rb_transient_heap_mark()`.
+ */
+void *rb_transient_heap_alloc(VALUE obj, size_t req_size);
+
+/* If `obj` uses a memory pointed by `ptr` from transient_heap,
+ you need to call `rb_transient_heap_mark(obj, ptr)`
+ to assert liveness of `obj` (and ptr). */
+void rb_transient_heap_mark(VALUE obj, const void *ptr);
+
+/* used by gc.c */
+void rb_transient_heap_promote(VALUE obj);
+void rb_transient_heap_start_marking(int full_marking);
+void rb_transient_heap_finish_marking(void);
+
+/* for debug API */
+void rb_transient_heap_dump(void);
+void rb_transient_heap_verify(void);
+int rb_transient_heap_managed_ptr_p(const void *ptr);
+
+/* evacuate functions */
+void rb_ary_transient_heap_evacuate(VALUE ary, int promote);
+
+#endif