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}