Struct block_sys::Block_layout [−][src]
#[repr(C)]pub struct Block_layout {
pub isa: *mut Class,
pub flags: block_flags,
pub reserved: i32,
pub invoke: Option<unsafe extern "C" fn(block: *mut Block_layout, ...)>,
pub descriptor: *mut Block_descriptor_header,
}Fields
isa: *mut ClassClass pointer. Always initialised to &_NSConcreteStackBlock for blocks that are created on the stack or &_NSConcreteGlobalBlock for blocks that are created in global storage.
flags: block_flagsFlags.
See the block_flags enumerated type for possible values.
Contains ref count in Apple and ObjFW.
reserved: i32Reserved - always initialised to 0 by the compiler (but this is not said in the specification).
Used for the reference count in GNUStep and WinObjC.
invoke: Option<unsafe extern "C" fn(block: *mut Block_layout, ...)>The function that implements the block. The first argument is this structure, the subsequent arguments are the block’s explicit parameters. If the BLOCK_USE_SRET & BLOCK_HAS_SIGNATURE flag is set, there is an additional hidden argument, which is a pointer to the space on the stack allocated to hold the return value.
descriptor: *mut Block_descriptor_headerThe block’s descriptor. The actual type of this is:
match (BLOCK_HAS_COPY_DISPOSE, BLOCK_HAS_SIGNATURE) {
(false, false) => Block_descriptor_header,
(true, false) => Block_descriptor,
(false, true) => Block_descriptor_basic,
(true, true) => Block_descriptor_with_signature,
}But it is safe to access this through just Block_descriptor_header.
