datex_core/global/binary_codes.rs
1use num_enum::TryFromPrimitive;
2use strum::Display;
3
4#[allow(non_camel_case_types)]
5#[derive(Debug, Eq, PartialEq, TryFromPrimitive, Copy, Clone, Display)]
6#[repr(u8)]
7pub enum BinaryCode {
8 // flow instructions 0x00 - 0x0f
9 EXIT = 0x00,
10 CLOSE_AND_STORE = 0x01, // ;
11 SUBSCOPE_START = 0x02, // (
12 SUBSCOPE_END = 0x03, // )
13 CACHE_POINT = 0x04, // cache dxb from this point on
14 CACHE_RESET = 0x05, // reset dxb scope cache
15
16 // primitive / fundamental types 0x10 - 0x2f
17 STD_TYPE_TEXT = 0x10,
18 STD_TYPE_INT = 0x11,
19 STD_TYPE_FLOAT = 0x12,
20 STD_TYPE_BOOLEAN = 0x13,
21 STD_TYPE_NULL = 0x14,
22 STD_TYPE_VOID = 0x15,
23 STD_TYPE_BUFFER = 0x16,
24 STD_TYPE_CODE_BLOCK = 0x17,
25 STD_TYPE_QUANTITY = 0x18,
26 STD_TYPE_TIME = 0x19,
27 STD_TYPE_URL = 0x1a,
28
29 STD_TYPE_ARRAY = 0x1b,
30 STD_TYPE_OBJECT = 0x1c,
31 STD_TYPE_SET = 0x1d,
32 STD_TYPE_MAP = 0x1e,
33 STD_TYPE_TUPLE = 0x1f,
34
35 STD_TYPE_FUNCTION = 0x20,
36 STD_TYPE_STREAM = 0x21,
37 STD_TYPE_ANY = 0x22,
38 STD_TYPE_ASSERTION = 0x23,
39 STD_TYPE_TASK = 0x24,
40 STD_TYPE_ITERATOR = 0x25,
41
42
43 // internal variables and other shorthands 0x30 - 0x4f
44 VAR_RESULT = 0x30,
45 SET_VAR_RESULT = 0x31,
46 SET_VAR_RESULT_REFERENCE =
47 0x32,
48 VAR_RESULT_ACTION = 0x33,
49
50 VAR_SUB_RESULT = 0x34,
51 SET_VAR_SUB_RESULT = 0x35,
52 SET_VAR_SUB_RESULT_REFERENCE =
53 0x36,
54 VAR_SUB_RESULT_ACTION =
55 0x37,
56
57 VAR_VOID = 0x38,
58 SET_VAR_VOID = 0x39,
59 SET_VAR_VOID_REFERENCE =
60 0x3a,
61 VAR_VOID_ACTION = 0x3b,
62
63 _VAR_ORIGIN = 0x3c,
64 _SET_VAR_ORIGIN = 0x3d,
65 _SET_VAR_ORIGIN_REFERENCE =
66 0x3e,
67 _VAR_ORIGIN_ACTION = 0x3f,
68
69 VAR_IT = 0x40,
70 SET_VAR_IT = 0x41,
71 SET_VAR_IT_REFERENCE= 0x42,
72 VAR_IT_ACTION = 0x43,
73
74 VAR_REMOTE = 0x44,
75
76 VAR_REMOTE_ACTION = 0x45,
77 VAR_ORIGIN = 0x46,
78 VAR_ENDPOINT = 0x47,
79 VAR_ENTRYPOINT = 0x48,
80 VAR_STD = 0x49,
81 // VAR_TIMESTAMP = 0x4a,
82 VAR_META = 0x4b,
83 VAR_PUBLIC = 0x4c,
84 VAR_THIS = 0x4d,
85 VAR_LOCATION = 0x4e,
86 VAR_ENV = 0x4f,
87
88 // runtime commands 0x50 - 0x7f
89
90 RETURN = 0x50, // return
91 TEMPLATE = 0x51, // template
92 EXTENDS = 0x52, // extends
93 IMPLEMENTS = 0x53, // implements
94 MATCHES = 0x54, // matches
95 DEBUGGER = 0x55, // debugger
96 JMP = 0x56, // jmp labelname
97 JTR = 0x57, // jtr labelname
98 JFA = 0x58, // jfa labelname (TODO replace with 0xa)
99 COUNT = 0x59, // count x
100 ABOUT = 0x5a, // about x
101 NEW = 0x5b, // new <x> ()
102 DELETE_POINTER = 0x5c, // delete $aa
103 COPY = 0x5f, // copy $aa
104 CLONE = 0x60, // clone $aa
105 ORIGIN = 0x61, // origin $aa
106 SUBSCRIBERS = 0x62, // subscribers $aa
107 PLAIN_SCOPE = 0x63, // scope xy;
108 // don't use 0x64 (magic number)
109 TRANSFORM = 0x65, // transform x <Int>
110 OBSERVE = 0x66, // observe x ()=>()
111 RUN = 0x67, // run xy;
112 AWAIT = 0x68, // await xy;
113 DEFER = 0x69, // maybe xy;
114 FUNCTION = 0x6a, // function ()
115 ASSERT = 0x6b, // assert
116 ITERATOR = 0x6c, // iterator ()
117 NEXT = 0x6d, // next it
118 FREEZE = 0x6e, // freeze
119 SEAL = 0x6f, // seal
120 HAS = 0x70, // x has y
121 KEYS = 0x71, // keys x
122 GET_TYPE = 0x72, // type $aa
123 GET = 0x73, // get file://..., get @user::34
124 RANGE = 0x74, // ..
125 RESOLVE_RELATIVE_PATH =
126 0x75, // ./abc
127 DO = 0x76, // do xy;
128 DEFAULT = 0x77, // x default y
129 COLLAPSE = 0x78, // collapse x
130 RESPONSE = 0x79, // response x
131 CLONE_COLLAPSE = 0x88, // collapse
132
133 // comparators 0x80 - 0x8f
134 EQUAL_VALUE = 0x80, // ==
135 NOT_EQUAL_VALUE = 0x81, // ~=
136 EQUAL = 0x82, // ===
137 NOT_EQUAL = 0x83, // ~==
138 GREATER = 0x84, // >
139 LESS = 0x85, // <
140 GREATER_EQUAL = 0x86, // >=
141 LESS_EQUAL = 0x87, // <=
142
143 // logical + algebraic operators 0x90 - 0x9f
144 AND = 0x90, // &
145 OR = 0x91, // |
146 ADD = 0x92, // +
147 SUBTRACT = 0x93, // -
148 MULTIPLY = 0x94, // *
149 DIVIDE = 0x95, // /
150 NOT = 0x96, // !
151 MODULO = 0x97, // %
152 POWER = 0x98, // ^
153 INCREMENT = 0x99, // ++
154 DECREMENT = 0x9a, // --
155
156 // pointers & variables 0xa0 - 0xbf
157
158
159 INTERNAL_VAR = 0xa4, // #xyz 0x0000-0x00ff = variables passed on between scopes, 0x0100-0xfdff = normal variables, 0xfe00-0xffff = it variables (#it.0, #it.1, ...) for function arguments
160 SET_INTERNAL_VAR = 0xa5, // #aa = ...
161 INIT_INTERNAL_VAR = 0xa6, // #aa := ...
162 INTERNAL_VAR_ACTION = 0xa7, // #x += ...
163 SET_INTERNAL_VAR_REFERENCE =
164 0xa8, // #x $= ...
165
166 LABEL = 0xa9, // $x
167 SET_LABEL = 0xaa, // $x = ...,
168 INIT_LABEL = 0xab, // $x := ...
169 LABEL_ACTION = 0xac, // $x += ...
170
171 POINTER = 0xad, // $x
172 SET_POINTER = 0xae, // $aa = ...
173 INIT_POINTER = 0xaf, // $aa := ...
174 POINTER_ACTION = 0xb0, // $aa += ...
175 CREATE_POINTER = 0xb1, // $$ ()
176
177 CHILD_GET = 0xb2, // .y
178 CHILD_SET = 0xb3, // .y = a
179 CHILD_SET_REFERENCE = 0xb4, // .y $= a
180 CHILD_ACTION = 0xb5, // .y += a, ...
181 CHILD_GET_REF = 0xb6, // ->y
182
183 WILDCARD = 0xb7, // *
184
185 // values 0xc0 - 0xdf
186
187 TEXT = 0xc0,
188 INT_8 = 0xc1, // byte
189 INT_16 = 0xc2,
190 INT_32 = 0xc3,
191 INT_64 = 0xc4,
192 FLOAT_64 = 0xc5,
193 TRUE = 0xc6,
194 FALSE = 0xc7,
195 NULL = 0xc8,
196 VOID = 0xc9,
197 BUFFER = 0xca,
198 SCOPE_BLOCK_START = 0xcb,
199 QUANTITY = 0xcc,
200 FLOAT_AS_INT_32 = 0xcd,
201 FLOAT_AS_INT_8 = 0xde,
202 BIG_INT = 0xdf,
203
204 SHORT_TEXT = 0xce, // string with max. 255 characters
205
206 PERSON_ALIAS = 0xcf,
207 PERSON_ALIAS_WILDCARD =
208 0xd0,
209 INSTITUTION_ALIAS = 0xd1,
210 INSTITUTION_ALIAS_WILDCARD =
211 0xd2,
212 BOT = 0xd3,
213 BOT_WILDCARD = 0xd4,
214
215 ENDPOINT = 0xd5,
216 ENDPOINT_WILDCARD = 0xd6,
217
218 URL = 0xd8, //file://... , https://...
219
220 TYPE = 0xd9, // <type>
221 EXTENDED_TYPE = 0xda, // <type/xy()>
222
223 CONJUNCTION = 0xdb, // x&y&z
224 DISJUNCTION = 0xdc, // x|y|z
225
226 TIME = 0xdd, // ~2022-10-10~
227
228 // arrays, objects and tuples 0xe0 - 0xef
229
230 ARRAY_START = 0xe0, // array / or array
231 ARRAY_END = 0xe1,
232 OBJECT_START = 0xe2, // {}
233 OBJECT_END = 0xe3,
234 TUPLE_START = 0xe4, // (a,b,c)
235 TUPLE_END = 0xe5,
236 ELEMENT_WITH_KEY = 0xe6, // for object elements
237 ELEMENT_WITH_INT_KEY= 0xe7, // for array elements
238 ELEMENT_WITH_DYNAMIC_KEY =
239 0xe8, // for object elements with dynamic key
240 KEY_PERMISSION = 0xe9, // for object elements with permission prefix
241 ELEMENT = 0xea, // for array elements
242 INTERNAL_OBJECT_SLOT= 0xef, // for object internal slots
243
244 // special instructions 0xf0 - 0xff
245
246 SYNC = 0xf0, // <==
247 STOP_SYNC = 0xf1, // </=
248
249 STREAM = 0xf2, // << stream
250 STOP_STREAM = 0xf3, // </ stream
251
252 EXTEND = 0xf4, // ...
253
254 YEET = 0xf5, // !
255
256 REMOTE = 0xf6, // ::
257
258 _SYNC_SILENT = 0xf7, // <==:
259
260}