wasmtime_environ/gc/
drc.rs1use super::*;
4
5pub const HEADER_SIZE: u32 = 24;
7
8pub const HEADER_ALIGN: u32 = 8;
10
11pub const ARRAY_LENGTH_OFFSET: u32 = HEADER_SIZE;
13
14pub const EXCEPTION_TAG_INSTANCE_OFFSET: u32 = HEADER_SIZE;
16
17pub const EXCEPTION_TAG_DEFINED_OFFSET: u32 = HEADER_SIZE + 4;
19
20pub const HEADER_MARK_BIT: u32 = 1 << 0;
24
25pub const HEADER_IN_OVER_APPROX_LIST_BIT: u32 = 1 << 1;
28
29#[derive(Default)]
31pub struct DrcTypeLayouts;
32
33impl GcTypeLayouts for DrcTypeLayouts {
34 fn array_length_field_offset(&self) -> u32 {
35 ARRAY_LENGTH_OFFSET
36 }
37
38 fn exception_tag_instance_offset(&self) -> u32 {
39 EXCEPTION_TAG_INSTANCE_OFFSET
40 }
41
42 fn exception_tag_defined_offset(&self) -> u32 {
43 EXCEPTION_TAG_DEFINED_OFFSET
44 }
45
46 fn array_layout(&self, ty: &WasmArrayType) -> GcArrayLayout {
47 common_array_layout(ty, HEADER_SIZE, HEADER_ALIGN, ARRAY_LENGTH_OFFSET)
48 }
49
50 fn struct_layout(&self, ty: &WasmStructType) -> GcStructLayout {
51 common_struct_layout(ty, HEADER_SIZE, HEADER_ALIGN)
52 }
53
54 fn exn_layout(&self, ty: &WasmExnType) -> GcStructLayout {
55 common_exn_layout(ty, HEADER_SIZE, HEADER_ALIGN)
56 }
57}