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}