tidepool_codegen/
context.rs1use std::mem;
2
3#[repr(C, align(16))]
8pub struct VMContext {
9 pub alloc_ptr: *mut u8,
11 pub alloc_limit: *const u8,
13 pub gc_trigger: unsafe extern "C" fn(*mut VMContext),
15 pub tail_callee: *mut u8,
17 pub tail_arg: *mut u8,
19}
20
21impl VMContext {
22 pub fn new(
24 nursery_start: *mut u8,
25 nursery_end: *const u8,
26 gc_trigger: unsafe extern "C" fn(*mut VMContext),
27 ) -> Self {
28 Self {
29 alloc_ptr: nursery_start,
30 alloc_limit: nursery_end,
31 gc_trigger,
32 tail_callee: std::ptr::null_mut(),
33 tail_arg: std::ptr::null_mut(),
34 }
35 }
36}
37
38const _: () = {
40 use crate::layout::*;
41 assert!(mem::offset_of!(VMContext, alloc_ptr) == VMCTX_ALLOC_PTR_OFFSET as usize);
42 assert!(mem::offset_of!(VMContext, alloc_limit) == VMCTX_ALLOC_LIMIT_OFFSET as usize);
43 assert!(mem::offset_of!(VMContext, gc_trigger) == VMCTX_GC_TRIGGER_OFFSET as usize);
44 assert!(mem::offset_of!(VMContext, tail_callee) == VMCTX_TAIL_CALLEE_OFFSET as usize);
45 assert!(mem::offset_of!(VMContext, tail_arg) == VMCTX_TAIL_ARG_OFFSET as usize);
46 assert!(mem::align_of::<VMContext>() == 16);
47};