
* 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
40 lines
1.2 KiB
Erlang
40 lines
1.2 KiB
Erlang
%% -*- mode: erlang; indent-tabs-mode: nil -*-
|
|
|
|
{erl_opts, [debug_info]}.
|
|
|
|
{deps, [ {aebytecode, {git, "https://github.com/aeternity/aebytecode.git",
|
|
{ref, "2555868"}}}
|
|
, {getopt, "1.0.1"}
|
|
, {jsx, {git, "https://github.com/talentdeficit/jsx.git",
|
|
{tag, "2.8.0"}}}
|
|
]}.
|
|
|
|
{escript_incl_apps, [aesophia, aebytecode, getopt]}.
|
|
{escript_main_app, aesophia}.
|
|
{escript_name, aesophia}.
|
|
{escript_emu_args, "%%! \n"}.
|
|
{provider_hooks, [{post, [{compile, escriptize}]}]}.
|
|
|
|
{post_hooks, [{"(linux|darwin|solaris|freebsd|netbsd|openbsd)",
|
|
escriptize,
|
|
"cp \"$REBAR_BUILD_DIR/bin/aesophia\" ./aesophia"},
|
|
{"win32",
|
|
escriptize,
|
|
"robocopy \"%REBAR_BUILD_DIR%/bin/\" ./ aesophia* "
|
|
"/njs /njh /nfl /ndl & exit /b 0"} % silence things
|
|
]}.
|
|
|
|
{dialyzer, [
|
|
{warnings, [unknown]},
|
|
{plt_apps, all_deps},
|
|
{base_plt_apps, [erts, kernel, stdlib, crypto, mnesia]}
|
|
]}.
|
|
|
|
{relx, [{release, {aesophia, "2.1.0"},
|
|
[aesophia, aebytecode, getopt]},
|
|
|
|
{dev_mode, true},
|
|
{include_erts, false},
|
|
|
|
{extended_start_script, true}]}.
|