mirror of
https://github.com/urbit/shrub.git
synced 2024-12-21 01:41:37 +03:00
109 lines
2.9 KiB
C
109 lines
2.9 KiB
C
|
/* include/wire.h
|
||
|
**
|
||
|
** This file is in the public domain.
|
||
|
*/
|
||
|
/** Data types.
|
||
|
**/
|
||
|
/** Structures - in loom space.
|
||
|
**/
|
||
|
/* u2_loom_wire: one per thread.
|
||
|
*/
|
||
|
typedef struct _u2_loom_wire {
|
||
|
u2_loom_rail o;
|
||
|
|
||
|
/* Clean bean. u2_no when there may be garbage.
|
||
|
*/
|
||
|
u2_noun lan;
|
||
|
|
||
|
/* Basket; u2_loom_bask; senior storage (for dashboard).
|
||
|
*/
|
||
|
u2_ray bas_r;
|
||
|
|
||
|
/* Dashboard; u2_loom_dash; map battery to chip list.
|
||
|
*/
|
||
|
u2_cash_slot des_s;
|
||
|
|
||
|
/* Ray to jet exception buffer, or 0.
|
||
|
*/
|
||
|
u2_ray kit_r;
|
||
|
|
||
|
/* Ray to OS state.
|
||
|
*/
|
||
|
u2_ray arv_r;
|
||
|
|
||
|
/* Ray to performance log.
|
||
|
*/
|
||
|
u2_ray bex_r;
|
||
|
|
||
|
/* Interpreter trace.
|
||
|
*/
|
||
|
u2_noun tax;
|
||
|
|
||
|
/* Ray to new tracer.
|
||
|
*/
|
||
|
u2_ray rac_r;
|
||
|
|
||
|
/* Heaven.
|
||
|
*/
|
||
|
u2_ray hev_r;
|
||
|
} u2_loom_wire;
|
||
|
|
||
|
# define u2_wire_bas_r(wir_r) *u2_at(wir_r, u2_loom_wire, bas_r)
|
||
|
# define u2_wire_des_r(wir_r) u2_aftr(wir_r, u2_loom_wire, des_s)
|
||
|
# define u2_wire_kit_r(wir_r) *u2_at(wir_r, u2_loom_wire, kit_r)
|
||
|
# define u2_wire_bex_r(wir_r) *u2_at(wir_r, u2_loom_wire, bex_r)
|
||
|
# define u2_wire_rac_r(wir_r) *u2_at(wir_r, u2_loom_wire, rac_r)
|
||
|
# define u2_wire_hev_r(wir_r) *u2_at(wir_r, u2_loom_wire, hev_r)
|
||
|
# define u2_wire_arv_r(wir_r) *u2_at(wir_r, u2_loom_wire, arv_r)
|
||
|
|
||
|
# define u2_wire_tax(wir_r) *u2_at(wir_r, u2_loom_wire, tax)
|
||
|
# define u2_wire_lan(wir_r) *u2_at(wir_r, u2_loom_wire, lan)
|
||
|
|
||
|
|
||
|
/** Functions.
|
||
|
**/
|
||
|
/** Administration.
|
||
|
**/
|
||
|
/* u2_wr_init():
|
||
|
**
|
||
|
** Install an empty wire within `hat_r` and `mat_r` in the loom,
|
||
|
** with memory model `hip`.
|
||
|
**
|
||
|
** Returns ray to wire, which always equalls the passed `mat_r`.
|
||
|
*/
|
||
|
u2_ray
|
||
|
u2_wr_init(c3_m hip_m,
|
||
|
u2_ray hat_r,
|
||
|
u2_ray mat_r);
|
||
|
|
||
|
/* u2_wr_check_init(): initialize checkpoint segments and/or files.
|
||
|
*/
|
||
|
void
|
||
|
u2_wr_check_init(c3_c* cpu_c);
|
||
|
|
||
|
/* u2_wr_check_save(): checkpoint wire in global structure.
|
||
|
*/
|
||
|
void
|
||
|
u2_wr_check_save();
|
||
|
|
||
|
/* u2_wr_ice(): u2_rl_ice(), with u2_bx_copy().
|
||
|
*/
|
||
|
u2_weak
|
||
|
u2_wr_ice(u2_ray wir_r,
|
||
|
u2_noun fiz);
|
||
|
|
||
|
/* u2_wr_gc():
|
||
|
**
|
||
|
** Garbage-collect all current storage in a wire, given
|
||
|
** a 0-terminated list of external roots.
|
||
|
*/
|
||
|
void
|
||
|
u2_wr_gc(u2_ray wir_r, ...);
|
||
|
|
||
|
/* u2_wr_mark():
|
||
|
**
|
||
|
** Mark all roots in a wire and return their allocation size.
|
||
|
*/
|
||
|
c3_w
|
||
|
u2_wr_mark(u2_ray wir_r);
|