Module generators

Source
Expand description

This module implements generator logic for the VM. Generators are functions used during evaluation which can suspend their execution during their control flow, and request that the VM do something.

This is used to keep the VMโ€™s stack size constant even when evaluating deeply nested recursive data structures.

We implement generators using the genawaiter crate.

Structsยง

Gen
This is a generator which stores its state on the heap.

Enumsยง

GeneratorState ๐Ÿ”’
States that a generator can be in while being driven by the VM.
VMRequest
Messages that can be sent from generators to the VM. In most cases, the VM will suspend the generator when receiving a message and enter some other frame to process the request.
VMResponse
Responses returned to generators from the VM.

Functionsยง

call_functor ๐Ÿ”’
Call the given value as if it was an attribute set containing a functor. The arguments must already be prepared on the stack when a generator frame from this function is invoked.
check_equality ๐Ÿ”’
Ask the VM to compare two values for equality.
emit_warning ๐Ÿ”’
Emit a fully constructed runtime warning.
emit_warning_kind
Emit a runtime warning with the span of the current generator.
pin_generator
Helper function to provide type annotations which are otherwise difficult to infer.
request_call
Call the given value as a callable. The argument(s) must already be prepared on the stack.
request_call_with
Helper function to call the given value with the provided list of arguments. This uses the StackPush and Call messages under the hood.
request_deep_force
Deep-force any value and return the evaluated result from the VM.
request_enter_lambda ๐Ÿ”’
Request that the VM enter the given lambda.
request_force
Force any value and return the evaluated result from the VM.
request_import_cache_lookup ๐Ÿ”’
Request a lookup in the VMโ€™s import cache.
request_import_cache_put ๐Ÿ”’
Request that the VM populate its input cache for the given path.
request_open_file
Request that the VM open a std::io::Read for the specified file.
request_path_exists ๐Ÿ”’
request_path_import ๐Ÿ”’
Request that the VM import the given path.
request_read_dir ๐Ÿ”’
request_read_file_type ๐Ÿ”’
request_span ๐Ÿ”’
request_stack_pop
Request that the VM pop a value from the stack and return it to the generator.
request_stack_push
Request that the VM place the given value on its stack.
request_string_coerce
request_try_force ๐Ÿ”’
Force a value

Type Aliasesยง

GenCo
Generator ๐Ÿ”’