-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtmp.txt
453 lines (232 loc) · 18.6 KB
/
tmp.txt
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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
//TODO this is super outdated, either fix it or remove the file
//TODO this is super outdated, either fix it or remove the file
//TODO this is super outdated, either fix it or remove the file
//TODO this is super outdated, either fix it or remove the file
//TODO this is super outdated, either fix it or remove the file
//TODO this is super outdated, either fix it or remove the file
//TODO this is super outdated, either fix it or remove the file
//TODO this is super outdated, either fix it or remove the file
//TODO this is super outdated, either fix it or remove the file
//TODO this is super outdated, either fix it or remove the file
Syntax: <option> <path/to/file>
-o Outputs executable [ Default file path: <source>.bin ]
--output-syntax Outputs syntactic tree [ Default file path: <source>.txt ]
--output-semantic Outputs semantic tree [ Default file path: <source>.txt ]
--output-1 Outputs Layer 1 [ Default file path: <source>.txt ]
--output-0 Outputs Layer 0 [ Default file path: <source>.txt ]
--output-glsl Outputs GLSL code [ Default file path: <source>.comp ]
--output-cpp Outputs C++ code [ Default file path: <source>.cpp ]
--output-asm Outputs Assembly code [ Default file path: <source>.asm ]
Syntax: <option>
-O0 No optimizations
-O1 Equivalent to //TODO
-O2 Equivalent to //TODO
-O3 Equivalent to --o-rewrite --o-values
-Of Complete optimization. Includes standard modules and context dependant optimizations. Requires -f
--o-rewrite Rewrites inefficient functions
--o-values Replaces compile time expressions with literals or constants
--o-unused-functions Removes unused functions
--o-unused-vvalues Removes unused values
Syntax: <option>
-g0 No debug informations
-g1 Equivalent to //TODO
-g2 Equivalent to //TODO
-g3 Equivalent to //TODO
--g-//TODO
Syntax: <option>
//TODO PROB USELESS-f Full build. All the source files are preprocessed and compiled, including the core module and the standard modules
--max-iterations-optimization Maximum number of iterations for compile time optimizations [ Default value: 16777216 ]
--max-iterations-value Maximum number of iterations for compile time expressions definition [ Default value: 16777216 ]
--max-depth-optimization Maximum function depth for compilt time optimizations [ Default value: 16777216 ]
--max-depth-value Maximum function depth for compile time expressions definition [ Default value: 16777216 ]
. ╭─ │
. │ ╭───────────────╮╮╮ ╭───────────────╮╮╮ ╭───────────────╮╮╮ ╭───────────────╮╮╮ │ High level languages - Photon Engine
. │ │ Engine .ubr │││ │ Source .ubr │││ │ Source .lux │││ │ Engine .lux │││ │
. │ ╰───────┬───────╯╯╯ ╰──────┬─┬──────╯╯╯ ╰─────┬─┬─┬─────╯╯╯ ╰──────┬─┬──────╯╯╯ │
. │ │ │ ╰──────────────╮ ╭─────────────╯ │ │ │ │ │
. │ │ ├────────────────│─│───────────────╯ │ │ │ │
. │ ├──────────────────│────────────────│─│─────────────────│────────────────╯ │ │
. │ pc │ pc ╰╮ │ │ pc ╭─╯ pc ╭╯ │
. │ ╭───────┴───────╮╮╮ ╭───────┴───────╮╮╮ │ │ ╭───────┴───────╮╮╮ ╭───────┴───────╮╮╮ │ Precompiled binaries
. │ │ Engine .pcubr │││ │ Source .pcubr │││ │ │ │ Source .pclux │││ │ Engine .pclux │││ │
. │ ╰───────┬───────╯╯╯ ╰───────┬───────╯╯╯ │ │ ╰──────┬─┬──────╯╯╯ ╰───────┬───────╯╯╯ │
. │ ╰───────────────────┼───────────────┴─┴──────────────┴─│──────────────────╯ │
. COMPILE TIME │ pc │ pc ╭╯ │
. │ ╭───────┴───────╮ ╭───────┴───────╮╮╮ │ Individual source file containing all the code
. │ │ .ubr │ │ .lux │││ │ One per module
. │ ╰───────┬───────╯ ╰───────┬───────╯╯╯ │
. │ ╭───────────────────────┴─────────────────────────────────┴───────────────────────╮ │
. │ pc │ pc │ │
. │ ╭───┴───╮ ╭─────────────╮╮╮ ╭─────────────╮╮╮ ╭─────────────╮╮╮ ╭─────────────╮╮╮ ╭───┴───╮╮╮ │ Output languages
. │ │ .cpp │ │ Engine .hpp │││ │ Vulkan .hpp │││ │ C++ .hpp │││ │ Engine .cpp │││ │ .comp │││ │ Inline GLSL and inline C++ blocks are pasted
. │ ╰───┬───╯ ╰─────┬─┬─────╯╯╯ ╰─────┬─┬─────╯╯╯ ╰─────┬─┬─────╯╯╯ ╰──────┬──────╯╯╯ ╰───┬───╯╯╯ │
. │ │ │ ╰───────────────│─┴───────────────│─┴────────────────┤ g++ │ │
. │ ├───────────┴─────────────────┴─────────────────╯ ╭──────┴──────╮╮╮ │ │
. │ │ │ Engine .o │││ │ │
. │ │ ╰──────┬──────╯╯╯ │ │
. ╰─ ╰──┬───────────────────────────────────────────────────────────────╯ │ │
. ╭─ g++ │ glslangValidator │ │
. │ ╭──────┴──────╮ ╭───────────────╮ ╭───────────────╮ ╭───┴───╮╮╮ │ Output binaries
. │ │ BIN │ │ libc++ │ │ Vulkan driver │ │ SPIRV │││ │ Used in runtime
. │ ╰──────┬──────╯ ╰───────┬───────╯ ╰───────┬───────╯ ╰───┬───╯╯╯ │
. │ ╰────────────────┴─────────────────────┬─────────────────────────┴─────────────╯ │
. │ │ │
. │ │ │
. RUNTIME │ │ │
. │ ╭─────────────────────────────────────────────┴─────────────────────────────────────────────╮ │
. │ │ │ │
. │ │ APPLICATION │ │
. │ │ │ │
. │ ╰───────────────────────────────────────────────────────────────────────────────────────────╯ │
. ╰─ │
___________________________________
| | |
| priority | Unary |
|__________|_______________________|
| | |
| 1 | n++ n-- a[n] |
| 2 | ++n --n +n |
| 3 | |
| 4 | m++ n-- |
| 5 | |
| 6 | |
| 7 | |
| 8 | |
| 9 | |
| 10 | |
| 11 | |
| 12 | |
| 13 | ++n --n +n -n ~n !n |
| 14 | |
| 15 | |
| 16 | |
|__________|_______________________|
//TODO remove enums
//TODO ???? meta keyword escaping
Extra layer
Adds:
Abbreviated template syntax
For-n statement
For-range statement
For-each statement
Descending:
Abbreviated template syntax
rewritten as a template declaration
For-n statement
rewritten as a for statement
For-range statement
rewritten as a for statement
For-each statement
rewritten as a for statement
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Surface layer
Adds:
For statement
Match statement
Once statement
Defer statement
Descending:
For statement
rewritten as a while statement
+ 1 variable declaration
+ 1 experession statement
Match statement
rewritten as an if-else chain
Once statement
rewritten as an if statement
+ 1 variable declaration
+ 1 experession statement
Defer statement
rewritten as a stack push
+ 1 variable declaration (stack of Func)
+ 1 while loop before every return statement
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Template layer
Adds:
Struct template
Function template
Operator template
Descending:
Struct template
replaced with the generated struct declarations
Function template
replaced with the generated function declarations
Operator template
replaced with the generated operator declarations
//TODO name mangling in required in order to find the template calls
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Namespace layer
Adds:
Scope concept
Namespace
Operator
Operator template
Descending:
Operator declaration
rewritten as a function declaration
Operator template declaration
rewritten as a funciton template declaration
Scope, namespace
removed though name mangling
Name mangling:
Each elements starts with a letter
a<n> = Alphanumeric identifier of n characters
e<n> = prEfix symbolic identifier of n characters
t<n> = posTfix symbolic identifier of n characters
n<n> = iNfix symbolic identifier of n characters
Symbolic identifiers are translated
! $ % & ( ) * + - / : < = > ? @ ^ ` | ~ ; { } [ ] .
a b c d e f g h i j k l m n o p q r s t u v w x y z
var += f<int>(2) + 54 % n;
n2hm(a3var, n1h(a1f<a3int>(2), n1c(54, a1n)));
idk.a.n = x ? a : ++Math.k.PI;
n1m(a3idka1aa1n, n1on1(a1x, a1a, e2hh(a4Matha1ka2PI)));
quindi
- reference counter + pointer arithmetic con pointer da 16 byte
- 2 tipi per ogni struct automatici + function overload generati automaticamente
la dimensione e il padding delle cose non si può dare per scontato ma tanto non si usa praticamente mai. sizeof ovunque.
. │ ╭───────────────────╮ ╭───────────────────╮╮╮ │ Abstract representation of the syntactic elements
. -oy │ │ Syntactic tree │ │ Syntactic tree │││ │
. │ ╰───────────────────╯ ╰───────────────────╯╯╯ │
. │ pc │ pc │ │
. │ ╭───────────────────╮ ╭───────────────────╮╮╮ │ Abstract representation of the program logic
. -oe │ │ Semantic tree │ │ Semantic tree │││ │
. │ ╰───────────────────╯ ╰───────────────────╯╯╯ │
. │ pc │ pc │ │
. │ ╭───────────────────╮ ╭───────────────────╮╮╮ │ Removes templates, namespaces, tuples, typeof, aliases
. -o1 │ │ Layer 1 │ │ Layer 1 │││ │ Translates the names of symbols
. │ ╰───────────────────╯ ╰───────────────────╯╯╯ │
. │ pc │ pc │ │
. │ ╭───────────────────╮ ╭───────────────────╮╮╮ │ Removes typenames, enums, =:, !:, for loops, once, then, while-else, match
. -o0 │ │ Layer 0 │ │ Layer 0 │││ │
. │ ╰───────────────────╯ ╰───────────────────╯╯╯ │
Preprocessing
Conditionals evaluation
File inclusion +
Macro expansion
Compilation
Tokenization
Syntax analysis
Syntax tree creation
Syntax errors output
Semantic analysis
Template instantiation
Symbol tables creation
Final symbol names assignment
Symbol indexing
Semantic tree creation
Semantic errors output
Const evaluation
Code unwrapping
Constness errors output
Const optimizaion
Static analysis
Logical errors output
Optimizations
TODO
Translation
GLSL/C++ output
SPIRV/binary output
Language-specific optimizations
TODO
*already declared* and *name conflict* are different