forked from urbit/vere
-
Notifications
You must be signed in to change notification settings - Fork 0
/
nock.h
149 lines (123 loc) · 3.75 KB
/
nock.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/// @file
#ifndef U3_NOCK_H
#define U3_NOCK_H
#include <stdio.h>
#include "c3.h"
#include "jets.h"
#include "types.h"
#include "zave.h"
/** Data structures.
***
**/
/* u3n_memo: %memo hint space
*/
typedef struct {
c3_l sip_l;
u3_noun key;
u3z_cid cid;
} u3n_memo;
/* u3n_prog: program compiled from nock
*/
typedef struct _u3n_prog {
struct {
c3_o own_o; // program owns ops_y?
c3_w len_w; // length of bytecode (bytes)
c3_y* ops_y; // actual array of bytes
} byc_u; // bytecode
struct {
c3_w len_w; // number of literals
u3_noun* non; // array of literals
} lit_u; // literals
struct {
c3_w len_w; // number of memo slots
u3n_memo* sot_u; // array of memo slots
} mem_u; // memo slot data
struct {
c3_w len_w; // number of calls sites
u3j_site* sit_u; // array of sites
} cal_u; // call site data
struct {
c3_w len_w; // number of registration sites
u3j_rite* rit_u; // array of sites
} reg_u; // registration site data
} u3n_prog;
/** Functions.
**/
/* u3n_nock_on(): produce .*(bus fol).
*/
u3_noun
u3n_nock_on(u3_noun bus, u3_noun fol);
/* u3n_find(): return prog for given formula,
* split by key (u3_nul for none). RETAIN.
*/
u3p(u3n_prog)
u3n_find(u3_noun key, u3_noun fol);
/* u3n_burn(): execute u3n_prog with bus as subject.
*/
u3_noun
u3n_burn(u3p(u3n_prog) pog_p, u3_noun bus);
/* u3n_slam_on(): produce (gat sam).
*/
u3_noun
u3n_slam_on(u3_noun gat, u3_noun sam);
/* u3n_kick_on(): fire `gat` without changing the sample.
*/
u3_noun
u3n_kick_on(u3_noun gat);
/* u3n_nock_in(): produce .*(bus fol), as ++toon, in namespace.
*/
u3_noun
u3n_nock_in(u3_noun fly, u3_noun bus, u3_noun fol);
/* u3n_nock_it(): produce .*(bus fol), as ++toon, in namespace.
*/
u3_noun
u3n_nock_it(u3_noun sea, u3_noun bus, u3_noun fol);
/* u3n_nock_et(): produce .*(bus fol), as ++toon, in namespace.
*/
u3_noun
u3n_nock_et(u3_noun gul, u3_noun bus, u3_noun fol);
/* u3n_slam_in(): produce (gat sam), as ++toon, in namespace.
*/
u3_noun
u3n_slam_in(u3_noun fly, u3_noun gat, u3_noun sam);
/* u3n_slam_it(): produce (gat sam), as ++toon, in namespace.
*/
u3_noun
u3n_slam_it(u3_noun sea, u3_noun gat, u3_noun sam);
/* u3n_slam_et(): produce (gat sam), as ++toon, in namespace.
*/
u3_noun
u3n_slam_it(u3_noun gul, u3_noun gat, u3_noun sam);
/* u3n_nock_an(): as slam_in(), but with empty fly.
*/
u3_noun
u3n_nock_an(u3_noun bus, u3_noun fol);
/* u3n_reap(): promote bytecode state.
*/
void
u3n_reap(u3p(u3h_root) har_p);
/* u3n_take(): copy junior bytecode state.
*/
u3p(u3h_root)
u3n_take(u3p(u3h_root) har_p);
/* u3n_mark(): mark bytecode cache.
*/
c3_w
u3n_mark(FILE* fil_u);
/* u3n_reclaim(): clear ad-hoc persistent caches to reclaim memory.
*/
void
u3n_reclaim(void);
/* u3n_rewrite_compact(): rewrite bytecode cache for compaction.
*/
void
u3n_rewrite_compact();
/* u3n_free(): free bytecode cache.
*/
void
u3n_free(void);
/* u3n_ream(): refresh after restoring from checkpoint.
*/
void
u3n_ream(void);
#endif /* ifndef U3_NOCK_H */