ocaml_sys/
state.rs

1#![allow(non_camel_case_types)]
2#[allow(unused)]
3use crate::{Char, Value};
4
5#[repr(C)]
6#[derive(Debug, Copy, Clone)]
7pub struct caml_ref_table {
8    pub _address: u8,
9}
10#[repr(C)]
11#[derive(Debug, Copy, Clone)]
12pub struct caml_ephe_ref_table {
13    pub _address: u8,
14}
15#[repr(C)]
16#[derive(Debug, Copy, Clone)]
17pub struct caml_custom_table {
18    pub _address: u8,
19}
20#[repr(C)]
21#[derive(Debug, Copy, Clone)]
22pub struct longjmp_buffer {
23    pub _address: u8,
24}
25
26pub type backtrace_slot = *mut ::core::ffi::c_void;
27
28#[repr(C)]
29#[derive(Debug)]
30#[cfg(not(feature = "ocaml5"))]
31pub struct caml_domain_state {
32    pub _young_ptr: *mut Value,
33    pub _young_limit: *mut Value,
34    pub _exception_pointer: *mut Char,
35    pub _young_base: *mut ::core::ffi::c_void,
36    pub _young_start: *mut Value,
37    pub _young_end: *mut Value,
38    pub _young_alloc_start: *mut Value,
39    pub _young_alloc_end: *mut Value,
40    pub _young_alloc_mid: *mut Value,
41    pub _young_trigger: *mut Value,
42    pub _minor_heap_wsz: usize,
43    pub _in_minor_collection: isize,
44    pub _extra_heap_resources_minor: f64,
45    pub _ref_table: *mut caml_ref_table,
46    pub _ephe_ref_table: *mut caml_ephe_ref_table,
47    pub _custom_table: *mut caml_custom_table,
48    pub _stack_low: *mut Value,
49    pub _stack_high: *mut Value,
50    pub _stack_threshold: *mut Value,
51    pub _extern_sp: *mut Value,
52    pub _trapsp: *mut Value,
53    pub _trap_barrier: *mut Value,
54    pub _external_raise: *mut longjmp_buffer,
55    pub _exn_bucket: Value,
56    pub _top_of_stack: *mut Char,
57    pub _bottom_of_stack: *mut Char,
58    pub _last_return_address: usize,
59    pub _gc_regs: *mut Value,
60    pub _backtrace_active: isize,
61    pub _backtrace_pos: isize,
62    pub _backtrace_buffer: *mut backtrace_slot,
63    pub _backtrace_last_exn: Value,
64    pub _compare_unordered: isize,
65    pub _requested_major_slice: isize,
66    pub _requested_minor_gc: isize,
67    pub _local_roots: *mut crate::memory::CamlRootsBlock,
68    pub _stat_minor_words: f64,
69    pub _stat_promoted_words: f64,
70    pub _stat_major_words: f64,
71    pub _stat_minor_collections: isize,
72    pub _stat_major_collections: isize,
73    pub _stat_heap_wsz: isize,
74    pub _stat_top_heap_wsz: isize,
75    pub _stat_compactions: isize,
76    pub _stat_heap_chunks: isize,
77}
78
79#[repr(C)]
80#[derive(Debug)]
81#[cfg(feature = "ocaml5")]
82pub struct caml_domain_state {
83    pub _young_limit: core::sync::atomic::AtomicUsize,
84    pub _young_ptr: *mut Value,
85    pub _exception_pointer: *mut Char,
86    pub _young_start: *mut Value,
87    pub _young_end: *mut Value,
88    pub _current_stack: *mut core::ffi::c_void, // TODO: add `struct stack_info`
89    pub _exn_handler: *mut core::ffi::c_void,
90    pub _action_pending: core::ffi::c_int,
91    pub _c_stack: *mut core::ffi::c_void, // TODO: add `struct c_stack_link`
92    pub _stack_cache: *mut *mut core::ffi::c_void,
93    pub _gc_regs_buckets: *mut Value,
94    pub _gc_regs: *mut Value,
95    pub _minor_tables: *mut core::ffi::c_void, // TODO: add `struct caml_minor_tables`
96    pub _mark_stack: *mut core::ffi::c_void,   // TODO: add `struct mark_stack`
97    pub _marking_done: crate::Uintnat,
98    pub _sweeping_done: crate::Uintnat,
99    pub _allocated_words: crate::Uintnat,
100    pub _swept_words: crate::Uintnat,
101    pub _major_work_computed: crate::Intnat,
102    pub _major_work_todo: crate::Intnat,
103    pub _major_gc_clock: f64,
104    pub _local_roots: *mut crate::memory::CamlRootsBlock,
105    pub _ephe_info: *mut core::ffi::c_void,
106    pub _final_info: *mut core::ffi::c_void,
107    pub _backtrace_pos: crate::Intnat,
108    pub _backtrace_active: crate::Intnat,
109    pub _backtrace_buffer: *mut backtrace_slot,
110    pub _backtrace_last_exn: Value,
111    pub _compare_unordered: crate::Intnat,
112    pub _oo_next_id_local: crate::Uintnat,
113    pub _requested_major_slice: crate::Uintnat,
114    pub _requested_minor_slice: crate::Uintnat,
115    pub _requested_minor_gc: crate::Uintnat,
116    pub _requested_external_interrupt: core::sync::atomic::AtomicUsize,
117    pub _parser_trace: core::ffi::c_int,
118    pub _minor_heap_wsz: usize,
119    pub _shared_heap: *mut core::ffi::c_void,
120    pub _id: core::ffi::c_int,
121    pub _unique_id: core::ffi::c_int,
122    pub _dls_root: Value,
123    pub _extra_heap_resources: f64,
124    pub _extra_heap_resources_minor: f64,
125    pub _dependent_size: crate::Uintnat,
126    pub _dependent_allocated: crate::Uintnat,
127    pub _caml_extern_state: *mut core::ffi::c_void,
128    pub _caml_intern_state: *mut core::ffi::c_void,
129    pub _stat_minor_words: crate::Uintnat,
130    pub _stat_promoted_words: crate::Uintnat,
131    pub _stat_major_words: crate::Uintnat,
132    pub _stat_minor_collections: crate::Intnat,
133    pub _stat_forced_major_collections: crate::Intnat,
134    pub _stat_blocks_marked: crate::Uintnat,
135    pub _inside_stw_handler: core::ffi::c_int,
136    pub _trap_sp_off: crate::Intnat,
137    pub _trap_barrier_off: crate::Intnat,
138    pub _trap_barrier_block: i64,
139    pub _external_raise: *mut core::ffi::c_void,
140    pub _extra_params_area: [u8; 0],
141}
142
143extern "C" {
144    #[doc(hidden)]
145    pub fn caml_sys_get_domain_state() -> *mut caml_domain_state;
146}
147
148#[doc(hidden)]
149pub unsafe fn local_roots() -> *mut crate::memory::CamlRootsBlock {
150    (*caml_sys_get_domain_state())._local_roots
151}
152
153#[doc(hidden)]
154pub unsafe fn set_local_roots(x: *mut crate::memory::CamlRootsBlock) {
155    (*caml_sys_get_domain_state())._local_roots = x
156}