NAME ^

src/io/io_layers.c - IO Layer Handling

DESCRIPTION ^

The Parrot IO subsystem uses a per-interpreter stack to provide a layer-based approach to IO. Each layer implements a subset of the ParrotIOLayerAPI vtable. To find an IO function the layer stack is searched downwards until a non-NULL function pointer is found for that particular slot.

Layer and Stack Functions ^

PARROT_API PARROT_MALLOC PARROT_CANNOT_RETURN_NULL ParrotIOLayer *PIO_base_new_layer(NULLOK(ParrotIOLayer *proto))

The default IO layer constructor. Creates and returns a new ParrotIOLayer. If a prototype *proto is supplied then its values will be copied to the new instance.

PARROT_API void PIO_base_delete_layer(NULLOK(ParrotIOLayer *layer))

The default IO layer destructor. Frees the memory associated with *layer.

PARROT_API INTVAL PIO_push_layer(PARROT_INTERP, NULLOK(PMC *pmc), NULLOK(ParrotIOLayer *layer))

Push a layer onto an IO object (*pmc) or the default stack.

PARROT_WARN_UNUSED_RESULT PARROT_CAN_RETURN_NULL PARROT_API ParrotIOLayer *PIO_get_layer(SHIM_INTERP, ARGIN(const char *name))

RT#48260: Not yet documented!!!

void PIO_push_layer_str(PARROT_INTERP, NOTNULL(PMC *pmc), NULLOK(STRING *ls))

Push a layer onto an IO object (*pmc).

PARROT_API PARROT_IGNORABLE_RESULT PARROT_CAN_RETURN_NULL ParrotIOLayer *PIO_pop_layer(PARROT_INTERP, NULLOK(PMC *pmc))

Pop a layer from an IO object (*pmc) or the default stack.

PARROT_IGNORABLE_RESULT PARROT_CANNOT_RETURN_NULL STRING *PIO_pop_layer_str(PARROT_INTERP, NOTNULL(PMC *pmc))

Pop a layer from an IO object (*pmc) and return the name of the popped layer. The layer gets freed.

PARROT_API PARROT_IGNORABLE_RESULT PARROT_CANNOT_RETURN_NULL ParrotIOLayer *PIO_copy_stack(NULLOK(ParrotIOLayer *stack))

Primarily used to copy the default IO stack for a new IO object. Later we will do some funky copy-on-write stuff.


parrot