1#![allow(non_camel_case_types)]
2
3use std::{
4 cell::Cell,
5 ffi::{c_int, c_void},
6 marker::{PhantomData, PhantomPinned},
7 ptr::null_mut,
8};
9
10#[repr(C)]
11#[derive(Copy, Clone, Debug)]
12pub struct jl_array_t {
13 _unused: [u8; 0],
14 _marker: PhantomData<(*mut u8, PhantomPinned)>,
15}
16
17#[repr(C)]
18#[derive(Copy, Clone, Debug)]
19pub struct jl_datatype_layout_t {
20 _unused: [u8; 0],
21 _marker: PhantomData<(*mut u8, PhantomPinned)>,
22}
23
24#[repr(C)]
25#[derive(Copy, Clone, Debug)]
26pub struct jl_datatype_t {
27 _unused: [u8; 0],
28 _marker: PhantomData<(*mut u8, PhantomPinned)>,
29}
30
31#[repr(C)]
32#[derive(Copy, Clone, Debug)]
33pub struct jl_expr_t {
34 _unused: [u8; 0],
35 _marker: PhantomData<(*mut u8, PhantomPinned)>,
36}
37
38#[repr(u32)]
39#[derive(Copy, Clone, Debug)]
40pub enum jl_gc_collection_t {
41 Auto = 0,
42 Full = 1,
43 Incremental = 2,
44}
45
46pub type GcCollection = jl_gc_collection_t;
47
48#[repr(C)]
49#[derive(Debug)]
50pub struct jl_gcframe_t {
51 pub n_roots: usize,
52 pub prev: Cell<*mut c_void>,
53 _marker: PhantomData<(*mut u8, PhantomPinned)>,
54}
55
56impl jl_gcframe_t {
57 #[inline]
58 pub const fn new<const N: usize>() -> Self {
59 jl_gcframe_t {
60 n_roots: N << 2,
61 prev: Cell::new(null_mut()),
62 _marker: PhantomData,
63 }
64 }
65
66 #[inline]
67 pub const fn new_split(m: usize, n: usize) -> Self {
68 jl_gcframe_t {
69 n_roots: (m + n) << 2,
70 prev: Cell::new(null_mut()),
71 _marker: PhantomData,
72 }
73 }
74}
75
76#[repr(C)]
77#[derive(Copy, Clone, Debug)]
78#[cfg(not(julia_1_10))]
79pub struct jl_genericmemory_t {
80 _unused: [u8; 0],
81 _marker: PhantomData<(*mut u8, PhantomPinned)>,
82}
83
84pub type jl_markfunc_t =
85 unsafe extern "C" fn(ptls: *mut jl_tls_states_t, obj: *mut jl_value_t) -> usize;
86
87pub type jl_sweepfunc_t = unsafe extern "C" fn(obj: *mut jl_value_t);
88
89pub type jl_gc_cb_root_scanner_t = unsafe extern "C" fn(c_int);
90
91#[repr(C)]
92#[derive(Copy, Clone, Debug)]
93pub struct jl_module_t {
94 _unused: [u8; 0],
95 _marker: PhantomData<(*mut u8, PhantomPinned)>,
96}
97
98#[repr(C)]
99#[derive(Copy, Clone, Debug)]
100pub struct JL_STREAM {
101 _unused: [u8; 0],
102 _marker: PhantomData<(*mut u8, PhantomPinned)>,
103}
104
105#[repr(C)]
106#[derive(Copy, Clone, Debug)]
107pub struct jl_svec_t {
108 _unused: [u8; 0],
109 _marker: PhantomData<(*mut u8, PhantomPinned)>,
110}
111
112#[repr(C)]
113#[derive(Copy, Clone, Debug)]
114pub struct jl_sym_t {
115 _unused: [u8; 0],
116 _marker: PhantomData<(*mut u8, PhantomPinned)>,
117}
118
119#[repr(C)]
120#[derive(Copy, Clone, Debug)]
121pub struct jl_task_t {
122 _unused: [u8; 0],
123 _marker: PhantomData<(*mut u8, PhantomPinned)>,
124}
125
126#[repr(C)]
127#[derive(Copy, Clone, Debug)]
128pub struct jl_tls_states_t {
129 _unused: [u8; 0],
130 _marker: PhantomData<(*mut u8, PhantomPinned)>,
131}
132
133#[repr(C)]
134#[derive(Copy, Clone, Debug)]
135pub struct jl_tvar_t {
136 _unused: [u8; 0],
137 _marker: PhantomData<(*mut u8, PhantomPinned)>,
138}
139
140#[repr(C)]
141#[derive(Copy, Clone, Debug)]
142pub struct jl_typename_t {
143 _unused: [u8; 0],
144 _marker: PhantomData<(*mut u8, PhantomPinned)>,
145}
146
147#[repr(C)]
148#[derive(Copy, Clone, Debug)]
149pub struct jl_unionall_t {
150 _unused: [u8; 0],
151 _marker: PhantomData<(*mut u8, PhantomPinned)>,
152}
153
154#[repr(C)]
155#[derive(Copy, Clone, Debug)]
156pub struct jl_uniontype_t {
157 _unused: [u8; 0],
158 _marker: PhantomData<(*mut u8, PhantomPinned)>,
159}
160
161#[repr(C)]
162#[derive(Copy, Clone, Debug)]
163pub struct jl_value_t {
164 _unused: [u8; 0],
165 _marker: PhantomData<(*mut u8, PhantomPinned)>,
166}
167
168#[repr(C)]
169#[derive(Copy, Clone, Debug)]
170pub struct jl_binding_partition_t {
171 _unused: [u8; 0],
172 _marker: PhantomData<(*mut u8, PhantomPinned)>,
173}
174
175#[repr(C)]
176#[derive(Copy, Clone, Debug)]
177pub struct jl_binding_t {
178 _unused: [u8; 0],
179 _marker: PhantomData<(*mut u8, PhantomPinned)>,
180}