/// Returns the length field from a slice header.
fn sliceLen(s: *[i32]) -> u32 {
    return s.len;
}

/// Returns the capacity field from a slice header.
fn sliceCap(s: *[i32]) -> u32 {
    return s.cap;
}

/// Returns the pointer field from a slice header.
unsafe fn slicePtr(s: *[i32]) -> *i32 {
    return s.ptr;
}

/// Copies a slice header into a new binding and returns it.
fn sliceCopy(s: *[i32]) -> *[i32] {
    let c: *[i32] = s;
    return c;
}

/// Builds a slice header from a pointer and length.
unsafe fn sliceOf(ptr: *i32, len: u32) -> *[i32] {
    return @sliceOf(ptr, len);
}

/// Builds a slice header from pointer, length, and capacity.
unsafe fn sliceOfWithCap(ptr: *i32, len: u32, cap: u32) -> *[i32] {
    return @sliceOf(ptr, len, cap);
}
