manpagez: man pages & more
info guile
Home | html | info | man
[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

9.3.6.5 Trampoline Instructions

Though most applicable objects in Guile are procedures implemented in bytecode, not all are. There are primitives, continuations, and other procedure-like objects that have their own calling convention. Instead of adding special cases to the call instruction, Guile wraps these other applicable objects in VM trampoline procedures, then provides special support for these objects in bytecode.

Trampoline procedures are typically generated by Guile at runtime, for example in response to a call to scm_c_make_gsubr. As such, a compiler probably shouldn’t emit code with these instructions. However, it’s still interesting to know how these things work, so we document these trampoline instructions here.

Instruction: subr-call nargs

Pop off a foreign pointer (which should have been pushed on by the trampoline), and call it directly, with the nargs arguments from the stack. Return the resulting value or values to the calling procedure.

Instruction: foreign-call nargs

Pop off an internal foreign object (which should have been pushed on by the trampoline), and call that foreign function with the nargs arguments from the stack. Return the resulting value to the calling procedure.

Instruction: continuation-call

Pop off an internal continuation object (which should have been pushed on by the trampoline), and reinstate that continuation. All of the procedure’s arguments are passed to the continuation. Does not return.

Instruction: partial-cont-call

Pop off two objects from the stack: the dynamic winds associated with the partial continuation, and the VM continuation object. Unroll the continuation onto the stack, rewinding the dynamic environment and overwriting the current frame, and pass all arguments to the continuation. Control flow proceeds where the continuation was captured.


[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

This document was generated on April 20, 2013 using texi2html 5.0.

© manpagez.com 2000-2019
Individual documents may contain additional copyright information.