* Prepared for REPL usage
Exposed expr parsing
ets init in constant
Exposing and fixing
exposed expr
This will be squashed either
Expose letdef
Error handling
exposed autoimport
remove unnecessary changes
Fix types
Parser update
Expose body parser
remove map_get warning
make dialyzer happy
* Formatting
Co-Authored-By: Hans Svensson <hanssv@gmail.com>
Co-authored-by: Hans Svensson <hanssv@gmail.com>
* Updated tests, banned type decls and toplevel letvals
* Properly ban nested contracts
* Fix including by path
* Fix error message test
* Fix prettpr attr display. Make dialyzer happy
* More tests
* Fixed type printing
* Updated docs
* Allow block with separate type signature and definition of a function
For instance,
```
function
add : (int, int) => int
add(x, y) = x + y
```
cc #196
* Allow pattern matching in left-hand sides
* Changelog
* Fix type spec
* partial case-on-constructor
* Changelog for pattern-matching lets
* Add opcode for ecrecover
* Update aebytecode
* Extend signature bytes type used for ecrecover
* Add ecrecover to changelog
* Add some type specs
* Please dialyzer
* Added standard List library and list comprehensions
Added List library.
Flatmaps WIP
Fixed dependency in flat_map
fcode generation
Updated tests to use custom list lib
Added comprehension test
Added stdlib
sanity
Test
* Extended stdlib for lists. Added error message for redefinition of stdlibx
* Fixed type template
* Improved stdlib
* More functions
* Fixed cyclic includes
* Refixed imports and added few tests
* Added fail test
* Undelete removed type spec
* Remove typo
* Fix iter function
* Fixed typo
* Added if guards and let statements in list comp
* Added more fail tests
* Option stliv
* 2 and 3 tuple stdlib
* Updated stdlib to new syntax. Added recursor and changed all/any functions
* Fixed performance issues. Changed include management
* Fixed hash type
Problem: having public as the default makes it very easy to accidentally
export local function by forgetting the `private` modifier.
Solution: functions are private by default and must be declared as `entrypoint`s
to be exported. So `entrypoint foo() = ...` instead of `function foo() = ...`.
We still accept the `private` modifier although it is redundant.
* Update to changes in icode format
* Start on new intermediate code for FATE
* Compile `let` to FATE
* Fix and improve broken bytecode optimisations
* Basic tuple patterns
* Compile shallow matching on tuples
* Liveness analysis for local variables
* Fix minor bug
* Use RETURNR when possible
* Nicer debug printing
* Refactor optimization rules
* Compile tuple construction
* Improve instruction analysis and generalize some optimizations
* Compile nested pattern matching to case trees
(Only tuple and variable patterns so far)
* Reannotate and repeat optimization pass once it done
Could try hard to keep annotations more precise, but would be more error prone
* Get rid of unnecessary STORE instructions
* Keep better track of liveness annotations when swapping instructions
* 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.
* Pattern matching on booleans
* wip: rewrite case tree compiler to handle catch-alls
still with debug printing, and can't compile it yet
* Add missing case in renaming
* Compile case trees all the way to Fate assembly
* Simplify variables bindings in environment
* Shortcut let x = y in ...
* compile list literals
* Fix various bugs in pattern match compilation
* Pretty printer for fcode
* Fix renaming bug
* Another renaming bug
* Handle switch_body in optimizations
* Remove optimization for if-then-else
* Tag instructions in annotated scode
* Remove 'if' from fcode
* Fix dialyzer things
* Remove unused argument
* Compile pattern matching on integer literals
* Compile list patterns
* Use op_view in more places
* allow leaving out fields from record patterns
* compile records (patterns and construction)
* Compile record update
* Use SETELEMENT instruction
* Compile variants
* Remove incorrect push for tuple switches
* Optimize matching on single constructors datatypes
* Use the fact that SWITCH and JUMPIF can use args and vars
* string literals and pattern matching on the same
* Compile character literals
* Minor refactoring of op instruction handling
* compile address literals
* Get rid of unit in AST
* Unary operators
* Compile function calls
(to fully saturated top-level functions only)
* fix breakage after unary operators
* variables are now lists of names in fcode
* pretty printing for function calls
* use STORE ?a instead of PUSH during optimizations
* no-op fcode optimization pass
* some constant propagation optimizations
* Case on constructor optimization
* fix minor bugs
* Compile all the operators
* Compile maps
* Simplify JUMPIF on true/false
* Fixed left-over reference to STR_EQ
* Add compile-time evaluation for more operators
* Distinguish local vars and top-level names already in fcode
* Compile builtins
* Compile bytes(N)
Compile to FATE strings for now
* Improve inlining of PUSH
* Fix name resolution bug
* Change map_get/set to operators in fcode
* Compile lambdas and higher-order functions
* Optimize single variable closure envs
* Handle unapplied builtins and top-level functions
* Missing case in fcode pretty printer
* Fix variable binding bug in fcode compiler
* Compiler side of state updates
No support in FATE yet though
* Compile statements
* Compile events
But no FATE support for events yet
* Compile remote calls
* Clearer distinction between applied and unapplied top-level things (def/builtin) in fcode
* Tag for literals in fcode to make code cleaner
* We now have block hash at height in FATE
* Update aebytecode commit
* Get rid of catchall todos
* Jump some hoops to please Dialyzer
Add an include directive to include namespaces into a contract. Only allowed at the top level.
To allow includes, either call through aeso_compiler:file or set the option `allow_include` (and add `include_path`(s)).