Fate compiler #553

Merged
zxq9 merged 87 commits from fate-compiler into master 2019-05-07 22:48:47 +09:00

87 Commits

Author SHA1 Message Date
Ulf Norell
a2b762c066 Jump some hoops to please Dialyzer 2019-05-07 13:58:19 +02:00
Ulf Norell
519850e1fd Get rid of catchall todos 2019-05-07 13:42:13 +02:00
Ulf Norell
63332c5cd1 Update aebytecode commit 2019-05-07 13:18:48 +02:00
Ulf Norell
bd33990786 We now have block hash at height in FATE 2019-05-07 13:18:42 +02:00
Ulf Norell
8233c780e4 Tag for literals in fcode to make code cleaner 2019-05-07 13:18:40 +02:00
Ulf Norell
182f30133b Clearer distinction between applied and unapplied top-level things (def/builtin) in fcode 2019-05-07 13:18:02 +02:00
Ulf Norell
2ef94b03ec Compile remote calls 2019-05-07 13:17:58 +02:00
Ulf Norell
49b00715c5 Compile events
But no FATE support for events yet
2019-05-07 13:16:39 +02:00
Ulf Norell
b43e8d9f68 Compile statements 2019-05-07 13:16:39 +02:00
Ulf Norell
fac136bded Compiler side of state updates
No support in FATE yet though
2019-05-07 13:16:39 +02:00
Ulf Norell
db48be1805 Fix variable binding bug in fcode compiler 2019-05-07 13:16:39 +02:00
Ulf Norell
16f00701d7 Missing case in fcode pretty printer 2019-05-07 13:16:39 +02:00
Ulf Norell
110466b08c Handle unapplied builtins and top-level functions 2019-05-07 13:16:39 +02:00
Ulf Norell
4c872c4690 Optimize single variable closure envs 2019-05-07 13:16:39 +02:00
Ulf Norell
26b7c5bf12 Compile lambdas and higher-order functions 2019-05-07 13:16:39 +02:00
Ulf Norell
ff0f2b57d2 Change map_get/set to operators in fcode 2019-05-07 13:16:39 +02:00
Ulf Norell
c06e032199 Fix name resolution bug 2019-05-07 13:16:39 +02:00
Ulf Norell
4371bf7db4 Improve inlining of PUSH 2019-05-07 13:16:39 +02:00
Ulf Norell
2291f8d4c1 Compile bytes(N)
Compile to FATE strings for now
2019-05-07 13:16:39 +02:00
Ulf Norell
1f40d2a321 Compile builtins 2019-05-07 13:16:39 +02:00
Ulf Norell
6f17477c72 Distinguish local vars and top-level names already in fcode 2019-05-07 13:16:39 +02:00
Ulf Norell
1d39464190 Add compile-time evaluation for more operators 2019-05-07 13:16:39 +02:00
Ulf Norell
b5330882ba Fixed left-over reference to STR_EQ 2019-05-07 13:16:39 +02:00
Ulf Norell
ef120a7194 Simplify JUMPIF on true/false 2019-05-07 13:16:39 +02:00
Ulf Norell
4a8fb5ba05 Compile maps 2019-05-07 13:16:39 +02:00
Ulf Norell
cd454fb538 Compile all the operators 2019-05-07 13:16:39 +02:00
Ulf Norell
8559ab0628 fix minor bugs 2019-05-07 13:16:39 +02:00
Ulf Norell
0307a82433 Case on constructor optimization 2019-05-07 13:16:39 +02:00
Ulf Norell
389a5c4e62 some constant propagation optimizations 2019-05-07 13:16:39 +02:00
Ulf Norell
4c2288274d no-op fcode optimization pass 2019-05-07 13:16:39 +02:00
Ulf Norell
081a4d28b6 use STORE ?a instead of PUSH during optimizations 2019-05-07 13:16:39 +02:00
Ulf Norell
690d55eefe pretty printing for function calls 2019-05-07 13:16:39 +02:00
Ulf Norell
97db2b9800 variables are now lists of names in fcode 2019-05-07 13:16:39 +02:00
Ulf Norell
e13e81d1ca fix breakage after unary operators 2019-05-07 13:16:39 +02:00
Ulf Norell
8a5c64ad45 Compile function calls
(to fully saturated top-level functions only)
2019-05-07 13:16:39 +02:00
Ulf Norell
a4bbe2bc2f Unary operators 2019-05-07 13:16:39 +02:00
Ulf Norell
88139fe99c Get rid of unit in AST 2019-05-07 13:16:39 +02:00
Ulf Norell
272c247b4d compile address literals 2019-05-07 13:16:39 +02:00
Ulf Norell
c419b105bf Minor refactoring of op instruction handling 2019-05-07 13:16:39 +02:00
Ulf Norell
3c6e06e99a Compile character literals 2019-05-07 13:16:39 +02:00
Ulf Norell
b7153b1d75 string literals and pattern matching on the same 2019-05-07 13:16:39 +02:00
Ulf Norell
0ce144db13 Use the fact that SWITCH and JUMPIF can use args and vars 2019-05-07 13:16:39 +02:00
Ulf Norell
960ffb383f Optimize matching on single constructors datatypes 2019-05-07 13:16:39 +02:00
Ulf Norell
6806554d77 Remove incorrect push for tuple switches 2019-05-07 13:16:39 +02:00
Ulf Norell
9ac5a36265 Compile variants 2019-05-07 13:16:39 +02:00
Ulf Norell
ed60cd8ddc Use SETELEMENT instruction 2019-05-07 13:16:39 +02:00
Ulf Norell
f896b84221 Compile record update 2019-05-07 13:16:39 +02:00
Ulf Norell
5c77237316 compile records (patterns and construction) 2019-05-07 13:16:38 +02:00
Ulf Norell
53f88c4c06 allow leaving out fields from record patterns 2019-05-07 13:16:38 +02:00
Ulf Norell
bdc5e17ab7 Use op_view in more places 2019-05-07 13:16:38 +02:00
Ulf Norell
d333b5f11f Compile list patterns 2019-05-07 13:16:38 +02:00
Ulf Norell
6042294f96 Compile pattern matching on integer literals 2019-05-07 13:16:38 +02:00
Ulf Norell
25f80da827 Remove unused argument 2019-05-07 13:16:38 +02:00
Ulf Norell
96bff0c32f Fix dialyzer things 2019-05-07 13:16:38 +02:00
Ulf Norell
ff58ec0cba Remove 'if' from fcode 2019-05-07 13:16:38 +02:00
Ulf Norell
46c538b7bf Tag instructions in annotated scode 2019-05-07 13:16:38 +02:00
Ulf Norell
758f836bf6 Remove optimization for if-then-else 2019-05-07 13:16:38 +02:00
Ulf Norell
b3131504b0 Handle switch_body in optimizations 2019-05-07 13:16:38 +02:00
Ulf Norell
ee7bc126fc Another renaming bug 2019-05-07 13:16:38 +02:00
Ulf Norell
cca83a5dfa Fix renaming bug 2019-05-07 13:16:38 +02:00
Ulf Norell
f73a0934d4 Pretty printer for fcode 2019-05-07 13:16:38 +02:00
Ulf Norell
771e4aa967 Fix various bugs in pattern match compilation 2019-05-07 13:16:38 +02:00
Ulf Norell
e597a3780a compile list literals 2019-05-07 13:16:38 +02:00
Ulf Norell
42c7fde413 Shortcut let x = y in ... 2019-05-07 13:16:38 +02:00
Ulf Norell
961af8ba93 Simplify variables bindings in environment 2019-05-07 13:16:38 +02:00
Ulf Norell
66413ae7fe Compile case trees all the way to Fate assembly 2019-05-07 13:16:38 +02:00
Ulf Norell
3a095cde7e Add missing case in renaming 2019-05-07 13:16:38 +02:00
Ulf Norell
e2c48e1069 wip: rewrite case tree compiler to handle catch-alls
still with debug printing, and can't compile it yet
2019-05-07 13:16:38 +02:00
Ulf Norell
ab13222d29 Pattern matching on booleans 2019-05-07 13:16:38 +02:00
Ulf Norell
59845dec54 Limit the number of iterations for the optimization loop
Should finish in one iteration, but we shouldn't loop if there are bugs
or corner cases where it doesn't.
2019-05-07 13:16:38 +02:00
Ulf Norell
4814cfbf96 Keep better track of liveness annotations when swapping instructions 2019-05-07 13:16:38 +02:00
Ulf Norell
d05130a569 Get rid of unnecessary STORE instructions 2019-05-07 13:16:38 +02:00
Ulf Norell
4b6191aa25 Reannotate and repeat optimization pass once it done
Could try hard to keep annotations more precise, but would be more error prone
2019-05-07 13:16:38 +02:00
Ulf Norell
41387ce0b1 Compile nested pattern matching to case trees
(Only tuple and variable patterns so far)
2019-05-07 13:16:38 +02:00
Ulf Norell
ac25a8fc55 Improve instruction analysis and generalize some optimizations 2019-05-07 13:16:38 +02:00
Ulf Norell
788840f0fa Compile tuple construction 2019-05-07 13:16:38 +02:00
Ulf Norell
3ec156a4b4 Refactor optimization rules 2019-05-07 13:16:38 +02:00
Ulf Norell
185487afda Nicer debug printing 2019-05-07 13:16:38 +02:00
Ulf Norell
e224aadff7 Use RETURNR when possible 2019-05-07 13:16:38 +02:00
Ulf Norell
47a48812b8 Fix minor bug 2019-05-07 13:16:38 +02:00
Ulf Norell
68ee18fe70 Liveness analysis for local variables 2019-05-07 13:16:38 +02:00
Ulf Norell
200f80cc89 Compile shallow matching on tuples 2019-05-07 13:16:38 +02:00
Ulf Norell
d37ef8cec2 Basic tuple patterns 2019-05-07 13:16:38 +02:00
Ulf Norell
216fbc6144 Fix and improve broken bytecode optimisations 2019-05-07 13:16:38 +02:00
Ulf Norell
33bb8a37d0 Compile let to FATE 2019-05-07 13:16:38 +02:00
Ulf Norell
bc8b2d1c81 Start on new intermediate code for FATE 2019-05-07 13:16:38 +02:00
Ulf Norell
d2dbb98b7f Update to changes in icode format 2019-05-07 13:16:38 +02:00