datex_core/global/binary_codes.rs
1use num_enum::TryFromPrimitive;
2use strum::Display;
3
4#[allow(non_camel_case_types)]
5#[derive(
6 Debug,
7 Eq,
8 PartialEq,
9 TryFromPrimitive,
10 Copy,
11 Clone,
12 Display,
13 num_enum::IntoPrimitive,
14)]
15#[repr(u8)]
16pub enum InstructionCode {
17 // flow instructions 0x00 - 0x0f
18 EXIT = 0x00,
19 CLOSE_AND_STORE, // ; TODO: do we need close_and_store at all, or is scope_end enough?
20 SCOPE_START, // (
21 SCOPE_END, // )
22 CACHE_POINT, // cache dxb from this point on
23 CACHE_RESET, // reset dxb scope cache
24
25 // primitive / fundamental types 0x10 - 0x2f
26 STD_TYPE_TEXT,
27 STD_TYPE_INT,
28 STD_TYPE_FLOAT,
29 STD_TYPE_BOOLEAN,
30 STD_TYPE_NULL,
31 STD_TYPE_VOID,
32 STD_TYPE_BUFFER,
33 STD_TYPE_CODE_BLOCK,
34 STD_TYPE_QUANTITY,
35 STD_TYPE_TIME,
36 STD_TYPE_URL,
37
38 STD_TYPE_ARRAY,
39 STD_TYPE_OBJECT,
40 STD_TYPE_SET,
41 STD_TYPE_MAP,
42 STD_TYPE_TUPLE,
43
44 STD_TYPE_FUNCTION,
45 STD_TYPE_STREAM,
46 STD_TYPE_ANY,
47 STD_TYPE_ASSERTION,
48 STD_TYPE_TASK,
49 STD_TYPE_ITERATOR,
50
51 // internal variables and other shorthands 0x30 - 0x4f
52 VAR_RESULT,
53 SET_VAR_RESULT,
54 SET_VAR_RESULT_REFERENCE,
55 VAR_RESULT_ACTION,
56
57 VAR_SUB_RESULT,
58 SET_VAR_SUB_RESULT,
59 SET_VAR_SUB_RESULT_REFERENCE,
60 VAR_SUB_RESULT_ACTION,
61
62 VAR_VOID,
63 SET_VAR_VOID,
64 SET_VAR_VOID_REFERENCE,
65 VAR_VOID_ACTION,
66
67 _VAR_ORIGIN,
68 _SET_VAR_ORIGIN,
69 _SET_VAR_ORIGIN_REFERENCE,
70 _VAR_ORIGIN_ACTION,
71
72 VAR_IT,
73 SET_VAR_IT,
74 SET_VAR_IT_REFERENCE,
75 VAR_IT_ACTION,
76
77 VAR_REMOTE,
78
79 VAR_REMOTE_ACTION,
80 VAR_ORIGIN,
81 VAR_ENDPOINT,
82 VAR_ENTRYPOINT,
83 VAR_STD,
84 // VAR_TIMESTAMP ,
85 VAR_META,
86 VAR_PUBLIC,
87 VAR_THIS,
88 VAR_LOCATION,
89 VAR_ENV,
90
91 // runtime commands 0x50 - 0x7f
92 RETURN, // return
93 TEMPLATE, // template
94 EXTENDS, // extends
95 IMPLEMENTS, // implements
96 MATCHES, // matches
97 DEBUGGER, // debugger
98 JMP, // jmp labelname
99 JTR, // jtr labelname
100 JFA, // jfa labelname (TODO replace with 0xa)
101 COUNT, // count x
102 ABOUT, // about x
103 NEW, // new <x> ()
104 DELETE_POINTER, // delete $aa
105 COPY, // copy $aa
106 CLONE, // clone $aa
107 ORIGIN, // origin $aa
108 SUBSCRIBERS, // subscribers $aa
109 PLAIN_SCOPE, // scope xy;
110 // don't use 0x64 (magic number)
111 TRANSFORM, // transform x <Int>
112 OBSERVE, // observe x ()=>()
113 RUN, // run xy;
114 AWAIT, // await xy;
115 DEFER, // maybe xy;
116 FUNCTION, // function ()
117 ASSERT, // assert
118 ITERATOR, // iterator ()
119 NEXT, // next it
120 FREEZE, // freeze
121 SEAL, // seal
122 HAS, // x has y
123 KEYS, // keys x
124 GET_TYPE, // type $aa
125 GET, // get file://..., get @user::34
126 RANGE, // ..
127 RESOLVE_RELATIVE_PATH, // ./abc
128 DO, // do xy;
129 DEFAULT, // x default y
130 COLLAPSE, // collapse x
131 RESPONSE, // response x
132 CLONE_COLLAPSE, // collapse
133
134 // comparators 0x80 - 0x8f
135 STRUCTURAL_EQUAL, // ==
136 NOT_STRUCTURAL_EQUAL, // !=
137 EQUAL, // ===
138 NOT_EQUAL, // !==
139 GREATER, // >
140 LESS, // <
141 GREATER_EQUAL, // >=
142 LESS_EQUAL, // <=
143 IS, // is
144
145 // logical + algebraic operators 0x90 - 0x9f
146 AND, // &
147 OR, // |
148 ADD, // +
149 SUBTRACT, // -
150 MULTIPLY, // *
151 DIVIDE, // /
152 NOT, // !
153 MODULO, // %
154 POWER, // ^
155 INCREMENT, // ++
156 DECREMENT, // --
157
158 // pointers & variables 0xa0 - 0xbf
159
160 // slots
161 GET_SLOT, // #xyz 0x0000-0x00ff = variables passed on between scopes, 0x0100-0xfdff = normal variables, 0xfe00-0xffff = it variables (#it.0, #it.1, ...) for function arguments
162 SET_SLOT, // #aa = ...
163 ALLOCATE_SLOT, // #aa = ...
164 SLOT_ACTION, // #x += ...
165 DROP_SLOT, // drop #aa
166
167 LABEL, // $x
168 SET_LABEL, // $x = ...,
169 INIT_LABEL, // $x := ...
170 LABEL_ACTION, // $x += ...
171
172 POINTER, // $x
173 INIT_POINTER, // $aa := ...
174 POINTER_ACTION, // $aa += ...
175 CREATE_REF, // $$ ()
176 SET_REF, // $aa = ...
177
178 CHILD_GET, // .y
179 CHILD_SET, // .y = a
180 CHILD_SET_REFERENCE, // .y $= a
181 CHILD_ACTION, // .y += a, ...
182 CHILD_GET_REF, // ->y
183
184 WILDCARD, // *
185
186 // values 0xc0 - 0xdf
187 TEXT,
188 INT_8, // byte
189 INT_16,
190 INT_32,
191 INT_64,
192 INT_128,
193 INT_BIG,
194
195 UINT_128,
196
197 DECIMAL_F32,
198 DECIMAL_F64,
199 DECIMAL_BIG,
200 DECIMAL_AS_INT_32,
201 DECIMAL_AS_INT_16,
202
203 TRUE,
204 FALSE,
205 NULL,
206 VOID,
207 BUFFER,
208 EXECUTION_BLOCK,
209 QUANTITY,
210
211 SHORT_TEXT, // string with max. 255 characters
212
213 PERSON_ALIAS,
214 PERSON_ALIAS_WILDCARD,
215 INSTITUTION_ALIAS,
216 INSTITUTION_ALIAS_WILDCARD,
217 BOT,
218 BOT_WILDCARD,
219
220 ENDPOINT,
221 ENDPOINT_WILDCARD,
222
223 URL, //file://... , https://...
224
225 TYPE, // <type>
226 EXTENDED_TYPE, // <type/xy()>
227
228 CONJUNCTION, // x&y&z
229 DISJUNCTION, // x|y|z
230
231 TIME, // ~2022-10-10~
232
233 // arrays, objects and tuples 0xe0 - 0xef
234 ARRAY_START, // array / or array
235 OBJECT_START, // {}
236 TUPLE_START, // (a,b,c)
237 KEY_VALUE_SHORT_TEXT,
238 KEY_VALUE_DYNAMIC, // for object elements with dynamic key
239 KEY_PERMISSION, // for object elements with permission prefix
240 INTERNAL_OBJECT_SLOT, // for object internal slots
241
242 // special instructions 0xf0 - 0xff
243 SYNC, // <==
244 STOP_SYNC, // </=
245
246 STREAM, // << stream
247 STOP_STREAM, // </ stream
248
249 EXTEND, // ...
250
251 YEET, // !
252
253 REMOTE_EXECUTION, // ::
254
255 _SYNC_SILENT, // <==:
256}
257
258/// internal slots address space, starting at 0xffffff_00
259#[derive(
260 Debug,
261 Eq,
262 PartialEq,
263 TryFromPrimitive,
264 Copy,
265 Clone,
266 Display,
267 num_enum::IntoPrimitive,
268)]
269#[repr(u32)]
270pub enum InternalSlot {
271 ENDPOINT = 0xffffff00,
272}