Merge pull request #70 from aeternity/PT-166147620-prepare_v3
PT-166147620 Prepare for v3.0.0
This commit is contained in:
commit
dcae96ed21
25
CHANGELOG.md
25
CHANGELOG.md
@ -6,11 +6,29 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
### Added
|
### Added
|
||||||
- `stateful` annotations are now properly enforced. Functions must be marked stateful
|
|
||||||
in order to update the state or spend tokens.
|
|
||||||
### Changed
|
### Changed
|
||||||
### Removed
|
### Removed
|
||||||
|
|
||||||
|
## [3.0.0] - 2019-05-21
|
||||||
|
### Added
|
||||||
|
- `stateful` annotations are now properly enforced. Functions must be marked stateful
|
||||||
|
in order to update the state or spend tokens.
|
||||||
|
- Primitives `Contract.creator`, `Address.is_contract`, `Address.is_oracle`,
|
||||||
|
`Oracle.check` and `Oracle.check_query` has been added to Sophia.
|
||||||
|
- A byte array type `bytes(N)` has been added to generalize `hash (== bytes(32))` and
|
||||||
|
`signature (== bytes(64))` and allow for byte arrays of arbitrary fixed length.
|
||||||
|
- `Crypto.ecverify_secp256k1` has been added.
|
||||||
|
### Changed
|
||||||
|
- Address literals (+ Oracle, Oracle query and remote contracts) have been changed
|
||||||
|
from `#<hex>` to address as `ak_<base58check>`, oracle `ok_<base58check>`,
|
||||||
|
oracle query `oq_<base58check>` and remote contract `ct_<base58check>`.
|
||||||
|
- The compilation and typechecking of `letfun` (e.g. `let m(f, xs) = map(f, xs)`) was
|
||||||
|
not working properly and has been fixed.
|
||||||
|
### Removed
|
||||||
|
- `let rec` has been removed from the language, it has never worked.
|
||||||
|
- The standalone CLI compiler is served in the repo `aeternity/aesophia_cli` and has
|
||||||
|
been completely removed from `aesophia`.
|
||||||
|
|
||||||
## [2.1.0] - 2019-04-11
|
## [2.1.0] - 2019-04-11
|
||||||
### Added
|
### Added
|
||||||
- Stubs (not yet wired up) for compilation to FATE
|
- Stubs (not yet wired up) for compilation to FATE
|
||||||
@ -37,6 +55,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
- Simplify calldata creation - instead of passing a compiled contract, simply
|
- Simplify calldata creation - instead of passing a compiled contract, simply
|
||||||
pass a (stubbed) contract string.
|
pass a (stubbed) contract string.
|
||||||
|
|
||||||
[Unreleased]: https://github.com/aeternity/aesophia/compare/v2.1.0...HEAD
|
[Unreleased]: https://github.com/aeternity/aesophia/compare/v3.0.0...HEAD
|
||||||
|
[3.0.0]: https://github.com/aeternity/aesophia/compare/v2.1.0...v3.0.0
|
||||||
[2.1.0]: https://github.com/aeternity/aesophia/compare/v2.0.0...v2.1.0
|
[2.1.0]: https://github.com/aeternity/aesophia/compare/v2.0.0...v2.1.0
|
||||||
[2.0.0]: https://github.com/aeternity/aesophia/tag/v2.0.0
|
[2.0.0]: https://github.com/aeternity/aesophia/tag/v2.0.0
|
||||||
|
17
rebar.config
17
rebar.config
@ -9,28 +9,13 @@
|
|||||||
{tag, "2.8.0"}}}
|
{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, [
|
{dialyzer, [
|
||||||
{warnings, [unknown]},
|
{warnings, [unknown]},
|
||||||
{plt_apps, all_deps},
|
{plt_apps, all_deps},
|
||||||
{base_plt_apps, [erts, kernel, stdlib, crypto, mnesia]}
|
{base_plt_apps, [erts, kernel, stdlib, crypto, mnesia]}
|
||||||
]}.
|
]}.
|
||||||
|
|
||||||
{relx, [{release, {aesophia, "2.1.0"},
|
{relx, [{release, {aesophia, "3.0.0"},
|
||||||
[aesophia, aebytecode, getopt]},
|
[aesophia, aebytecode, getopt]},
|
||||||
|
|
||||||
{dev_mode, true},
|
{dev_mode, true},
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{application, aesophia,
|
{application, aesophia,
|
||||||
[{description, "Contract Language for aeternity"},
|
[{description, "Contract Language for aeternity"},
|
||||||
{vsn, "2.1.0"},
|
{vsn, "3.0.0"},
|
||||||
{registered, []},
|
{registered, []},
|
||||||
{applications,
|
{applications,
|
||||||
[kernel,
|
[kernel,
|
||||||
|
@ -1,78 +0,0 @@
|
|||||||
-module(aesophia).
|
|
||||||
|
|
||||||
-export([main/1]).
|
|
||||||
|
|
||||||
-define(OPT_SPEC,
|
|
||||||
[ {src_file, undefined, undefined, string, "Sophia source code file"}
|
|
||||||
, {version, $V, "version", undefined, "Print compiler version"}
|
|
||||||
, {verbose, $v, "verbose", undefined, "Verbose output"}
|
|
||||||
, {help, $h, "help", undefined, "Show this message"}
|
|
||||||
, {outfile, $o, "out", string, "Output file (experimental)"} ]).
|
|
||||||
|
|
||||||
usage() ->
|
|
||||||
getopt:usage(?OPT_SPEC, "aesophia").
|
|
||||||
|
|
||||||
main(Args) ->
|
|
||||||
case getopt:parse(?OPT_SPEC, Args) of
|
|
||||||
{ok, {Opts, []}} ->
|
|
||||||
case Opts of
|
|
||||||
[version] ->
|
|
||||||
print_vsn();
|
|
||||||
[help] ->
|
|
||||||
usage();
|
|
||||||
_ ->
|
|
||||||
compile(Opts)
|
|
||||||
end;
|
|
||||||
|
|
||||||
{ok, {_, NonOpts}} ->
|
|
||||||
io:format("Can't understand ~p\n\n", [NonOpts]),
|
|
||||||
usage();
|
|
||||||
|
|
||||||
{error, {Reason, Data}} ->
|
|
||||||
io:format("Error: ~s ~p\n\n", [Reason, Data]),
|
|
||||||
usage()
|
|
||||||
end.
|
|
||||||
|
|
||||||
|
|
||||||
compile(Opts) ->
|
|
||||||
case proplists:get_value(src_file, Opts, undefined) of
|
|
||||||
undefined ->
|
|
||||||
io:format("Error: no input source file\n\n"),
|
|
||||||
usage();
|
|
||||||
File ->
|
|
||||||
compile(File, Opts)
|
|
||||||
end.
|
|
||||||
|
|
||||||
compile(File, Opts) ->
|
|
||||||
Verbose = proplists:get_value(verbose, Opts, false),
|
|
||||||
OutFile = proplists:get_value(outfile, Opts, undefined),
|
|
||||||
|
|
||||||
try
|
|
||||||
Res = aeso_compiler:file(File, [pp_ast || Verbose]),
|
|
||||||
write_outfile(OutFile, Res),
|
|
||||||
io:format("\nCompiled successfully!\n")
|
|
||||||
catch
|
|
||||||
%% The compiler errors.
|
|
||||||
error:{type_errors, Errors} ->
|
|
||||||
io:format("\n~s\n", [string:join(["** Type errors\n" | Errors], "\n")]);
|
|
||||||
error:{parse_errors, Errors} ->
|
|
||||||
io:format("\n~s\n", [string:join(["** Parse errors\n" | Errors], "\n")]);
|
|
||||||
error:{code_errors, Errors} ->
|
|
||||||
ErrorStrings = [ io_lib:format("~p", [E]) || E <- Errors ],
|
|
||||||
io:format("\n~s\n", [string:join(["** Code errors\n" | ErrorStrings], "\n")]);
|
|
||||||
%% General programming errors in the compiler.
|
|
||||||
error:Error ->
|
|
||||||
Where = hd(erlang:get_stacktrace()),
|
|
||||||
ErrorString = io_lib:format("Error: ~p in\n ~p", [Error,Where]),
|
|
||||||
io:format("\n~s\n", [ErrorString])
|
|
||||||
end.
|
|
||||||
|
|
||||||
write_outfile(undefined, _) -> ok;
|
|
||||||
write_outfile(Out, ResMap) ->
|
|
||||||
%% Lazy approach
|
|
||||||
file:write_file(Out, term_to_binary(ResMap)),
|
|
||||||
io:format("Output written to: ~s\n", [Out]).
|
|
||||||
|
|
||||||
print_vsn() ->
|
|
||||||
{ok, Vsn} = aeso_compiler:version(),
|
|
||||||
io:format("Compiler version: ~s\n", [Vsn]).
|
|
Loading…
x
Reference in New Issue
Block a user