Sha256: 1c4b3e22abd7e73bff3794def9748ea855e6c31ae6c343bca7e3844a7c68fcd7

Contents?: true

Size: 1.42 KB

Versions: 58

Compression:

Stored size: 1.42 KB

Contents

#include <ruby.h>

static VALUE rb_sym_next;
static VALUE fiber_propagator;
static VALUE track_rb_fiber_new;
static VALUE track_rb_fiber_yield;

VALUE rb_fiber_new(VALUE (*func)(ANYARGS), VALUE obj);
VALUE (*rb_fiber_new_original)(VALUE (*func)(ANYARGS), VALUE obj);

VALUE rb_fiber_yield(int argc, const VALUE *argv);
VALUE (*rb_fiber_yield_original)(int argc, const VALUE *argv);

/* If you call `#next` on an enumerator object, that enumerator object
 * instantiates a fiber and runs its given proc inside of that fiber.
 * This minor design consideration presents a few significant edge-cases to us.
 * - match data from regex is bound to execution context, and it's an open
 *   question (but looking grim) as to whether we can propagate at that event.
 *   Ruby doesn't expose much around ECs, so both finding an event to hook
 *   and having a native way to access the EC data are onerous.
 * - fiber_yield is implemented with jmps in YARV, so our primary paradigm
 *   of operating on intercepted return values is off the table.
 *   (And heaven help you if you execute `#next` within an rb_protect call.)
 *   Luckily, we can read the fiber's return value before it executes a jump,
 *   so we have a point at which we can reliably propagate.
 */
VALUE rb_fiber_new_hook(VALUE (*func)(ANYARGS), VALUE obj);

VALUE rb_fiber_yield_hook(int argc, const VALUE *argv);

static int install_fiber_hooks();

void Init_cs__assess_fiber_track(void);

Version data entries

58 entries across 58 versions & 1 rubygems

Version Path
contrast-agent-6.4.0 ext/cs__assess_fiber_track/cs__assess_fiber_track.h
contrast-agent-6.3.0 ext/cs__assess_fiber_track/cs__assess_fiber_track.h
contrast-agent-6.2.0 ext/cs__assess_fiber_track/cs__assess_fiber_track.h
contrast-agent-6.1.2 ext/cs__assess_fiber_track/cs__assess_fiber_track.h
contrast-agent-6.1.1 ext/cs__assess_fiber_track/cs__assess_fiber_track.h
contrast-agent-6.1.0 ext/cs__assess_fiber_track/cs__assess_fiber_track.h
contrast-agent-6.0.0 ext/cs__assess_fiber_track/cs__assess_fiber_track.h
contrast-agent-5.3.0 ext/cs__assess_fiber_track/cs__assess_fiber_track.h
contrast-agent-5.2.0 ext/cs__assess_fiber_track/cs__assess_fiber_track.h
contrast-agent-5.1.0 ext/cs__assess_fiber_track/cs__assess_fiber_track.h
contrast-agent-5.0.0 ext/cs__assess_fiber_track/cs__assess_fiber_track.h
contrast-agent-4.14.1 ext/cs__assess_fiber_track/cs__assess_fiber_track.h
contrast-agent-4.14.0 ext/cs__assess_fiber_track/cs__assess_fiber_track.h
contrast-agent-4.13.1 ext/cs__assess_fiber_track/cs__assess_fiber_track.h
contrast-agent-4.13.0 ext/cs__assess_fiber_track/cs__assess_fiber_track.h
contrast-agent-4.12.0 ext/cs__assess_fiber_track/cs__assess_fiber_track.h
contrast-agent-4.11.0 ext/cs__assess_fiber_track/cs__assess_fiber_track.h
contrast-agent-4.10.0 ext/cs__assess_fiber_track/cs__assess_fiber_track.h
contrast-agent-4.9.1 ext/cs__assess_fiber_track/cs__assess_fiber_track.h
contrast-agent-4.9.0 ext/cs__assess_fiber_track/cs__assess_fiber_track.h