Compare commits

...

19 Commits

Author SHA1 Message Date
zxq9 02a6731f58 Add a zomp preparation script 2023-04-28 16:19:53 +09:00
zxq9 6ca65805bd Package for ZX/Zomp 2023-03-16 16:11:17 +09:00
Gaith Hallak 2a0a397afa Bump version to 3.2.0 (#112)
* Bump version to 3.2.0

* Bump version in rebar.config
2022-10-07 13:25:57 +03:00
Radosław Rowicki 093bcd6204 Merge pull request #111 from aeternity/enable-fate-code-mods
Export FATE code setters
2022-10-03 14:33:59 +02:00
radrow 6601ad2d38 Enable FATE code modifications 2022-09-16 10:54:48 +02:00
Dincho Todorov 578ebe2a8a Switch to OTP23 (#110) 2022-08-29 14:26:17 +03:00
Radosław Rowicki 8269dbd71e Update rebar3 and aeserialization (#109)
* Update rebar3 and aeserialization

* Version
2022-07-27 17:22:42 +04:00
Hans Svensson 08cc0a9fcd Merge pull request #108 from aeternity/fix_doc_generation
Fix document generation script
2021-12-10 14:00:20 +01:00
Hans Svensson 84f20ab683 Fix document generation script 2021-12-10 11:53:54 +01:00
Hans Svensson 7497345928 Merge pull request #106 from aeternity/ceres_extension
Add OPCODES for bitwise operations, addr_to_byte and poseidon hash
2021-11-25 08:33:33 +01:00
Hans Svensson 822a269f75 Add OPCODES for bitwise operations, addr_to_byte and poseidon hash 2021-11-18 16:31:07 +01:00
seanhinde 0699f35b03 Merge pull request #107 from aeternity/otp-24-support
Fix OTP-24 warnings and add OTP-24 compatible rebar3
2021-11-09 16:27:23 +01:00
Sean Hinde 3829e29a63 Fix dialyzer complaint about reading core erlang 2021-11-08 17:56:57 +01:00
Sean Hinde 52e9d30f76 Fix OTP-24 warnings and add OTP-24 compatible rebar3 2021-11-08 17:35:17 +01:00
Hans Svensson da7f00ae5d Merge pull request #105 from aeternity/doc-gen
Ease the process of doc generation
2021-11-04 08:45:26 +01:00
radrow 326fca709f Add opcodes gen 2021-06-08 13:33:33 +02:00
radrow e860e217a0 Better clone&create docs 2021-06-08 13:09:39 +02:00
radrow bc48b5d62f Styling in doc gen 2021-06-08 11:43:36 +02:00
radrow 7b9c1b856b Upgrade doc generation 2021-06-08 11:26:18 +02:00
19 changed files with 224 additions and 76 deletions
+1 -1
View File
@@ -3,7 +3,7 @@ version: 2.1
executors: executors:
aebuilder: aebuilder:
docker: docker:
- image: aeternity/builder - image: aeternity/builder:bionic-otp23
user: builder user: builder
working_directory: ~/aebytecode working_directory: ~/aebytecode
+1
View File
@@ -0,0 +1 @@
{"src/*", [debug_info, {i, "include/"}, {outdir, "ebin/"}]}.
+1 -1
View File
@@ -30,7 +30,7 @@ test: local
@$(REBAR) as local eunit @$(REBAR) as local eunit
ebin/%.beam: src/%.erl ebin/%.beam: src/%.erl
erlc -o $(dir $@) $< erlc +debug_info -o $(dir $@) $<
$(GENERATED_SRC): $(GENERATOR_DEPS) $(GENERATED_SRC): $(GENERATOR_DEPS)
erl -pa ebin/ -noshell -s aeb_fate_generate_ops gen_and_halt src/ include/ erl -pa ebin/ -noshell -s aeb_fate_generate_ops gen_and_halt src/ include/
+15
View File
@@ -0,0 +1,15 @@
{application,aebytecode,
[{description,"A library and stand alone assembler for aeternity bytecode. This version supports AEVM bytecode and FATE bytecode."},
{registered,[]},
{included_applications,[]},
{applications,[stdlib,kernel]},
{vsn,"3.2.0"},
{modules,[aeb_fate_code_tests,aeb_fate_data_tests,
aeb_fate_encoding_tests,aefate_code_eqc,aefate_eqc,
aefate_type_eqc,aeb_aevm_abi,aeb_aevm_data,aeb_asm,
aeb_disassemble,aeb_fate_abi,aeb_fate_asm,
aeb_fate_code,aeb_fate_data,aeb_fate_encoding,
aeb_fate_generate_docs,aeb_fate_generate_ops,
aeb_fate_maps,aeb_heap,aeb_memory,aeb_opcodes,
aeb_primops,aefateasm,aeb_data_test,aeb_fate_asm_test,
aeb_serialize_test,aebytecode_SUITE]}]}.
+2 -2
View File
@@ -6,7 +6,7 @@
{deps, [ {eblake2, "1.0.0"} {deps, [ {eblake2, "1.0.0"}
, {aeserialization, {git, "https://github.com/aeternity/aeserialization.git", , {aeserialization, {git, "https://github.com/aeternity/aeserialization.git",
{ref, "47aaa8f"}}} {ref, "eb68fe3"}}}
, {getopt, "1.0.1"} , {getopt, "1.0.1"}
]}. ]}.
@@ -29,7 +29,7 @@
]}. ]}.
{relx, [{release, {aebytecode, "2.0.1"}, {relx, [{release, {aebytecode, "3.2.0"},
[aebytecode, eblake2, getopt]}, [aebytecode, eblake2, getopt]},
{dev_mode, true}, {dev_mode, true},
+7 -4
View File
@@ -1,7 +1,7 @@
{"1.1.0", {"1.2.0",
[{<<"aeserialization">>, [{<<"aeserialization">>,
{git,"https://github.com/aeternity/aeserialization.git", {git,"https://github.com/aeternity/aeserialization.git",
{ref,"47aaa8f5434b365c50a35bfd1490340b19241991"}}, {ref,"eb68fe331bd476910394966b7f5ede7a74d37e35"}},
0}, 0},
{<<"base58">>, {<<"base58">>,
{git,"https://github.com/aeternity/erl-base58.git", {git,"https://github.com/aeternity/erl-base58.git",
@@ -10,11 +10,14 @@
{<<"eblake2">>,{pkg,<<"eblake2">>,<<"1.0.0">>},0}, {<<"eblake2">>,{pkg,<<"eblake2">>,<<"1.0.0">>},0},
{<<"enacl">>, {<<"enacl">>,
{git,"https://github.com/aeternity/enacl.git", {git,"https://github.com/aeternity/enacl.git",
{ref,"26180f42c0b3a450905d2efd8bc7fd5fd9cece75"}}, {ref,"793ddb502f7fe081302e1c42227dca70b09f8e17"}},
1}, 1},
{<<"getopt">>,{pkg,<<"getopt">>,<<"1.0.1">>},0}]}. {<<"getopt">>,{pkg,<<"getopt">>,<<"1.0.1">>},0}]}.
[ [
{pkg_hash,[ {pkg_hash,[
{<<"eblake2">>, <<"EC8AD20E438AAB3F2E8D5D118C366A0754219195F8A0F536587440F8F9BCF2EF">>}, {<<"eblake2">>, <<"EC8AD20E438AAB3F2E8D5D118C366A0754219195F8A0F536587440F8F9BCF2EF">>},
{<<"getopt">>, <<"C73A9FA687B217F2FF79F68A3B637711BB1936E712B521D8CE466B29CBF7808A">>}]} {<<"getopt">>, <<"C73A9FA687B217F2FF79F68A3B637711BB1936E712B521D8CE466B29CBF7808A">>}]},
{pkg_hash_ext,[
{<<"eblake2">>, <<"3C4D300A91845B25D501929A26AC2E6F7157480846FAB2347A4C11AE52E08A99">>},
{<<"getopt">>, <<"53E1AB83B9CEB65C9672D3E7A35B8092E9BDC9B3EE80721471A161C10C59959C">>}]}
]. ].
BIN
View File
Binary file not shown.
+1 -1
View File
@@ -35,7 +35,7 @@
, to_hexstring/1 , to_hexstring/1
]). ]).
-include_lib("aebytecode/include/aeb_opcodes.hrl"). -include("aeb_opcodes.hrl").
pp(Asm) -> pp(Asm) ->
+1 -1
View File
@@ -13,7 +13,7 @@
format_address/1 format_address/1
]). ]).
-include_lib("aebytecode/include/aeb_opcodes.hrl"). -include("aeb_opcodes.hrl").
pp(Binary) -> pp(Binary) ->
+1 -1
View File
@@ -16,7 +16,7 @@
, get_function_type_from_function_hash/2 , get_function_type_from_function_hash/2
, abi_version/0 ]). , abi_version/0 ]).
-include("../include/aeb_fate_data.hrl"). -include("aeb_fate_data.hrl").
%%%=================================================================== %%%===================================================================
%%% API %%% API
+4 -4
View File
@@ -94,8 +94,8 @@
, to_asm/1 , to_asm/1
]). ]).
-include_lib("aebytecode/include/aeb_fate_opcodes.hrl"). -include("aeb_fate_opcodes.hrl").
-include_lib("aebytecode/include/aeb_fate_data.hrl"). -include("aeb_fate_data.hrl").
-define(HASH_BYTES, 32). -define(HASH_BYTES, 32).
assemble_file(InFile, OutFile, Options) -> assemble_file(InFile, OutFile, Options) ->
@@ -356,7 +356,7 @@ parse_tuple(Tokens) ->
parse_variant([{start_variant,_line} parse_variant([{start_variant,_line}
, {'[', _line} , {'[', _}
| Rest]) -> | Rest]) ->
{Arities, Rest2} = parse_list(Rest), {Arities, Rest2} = parse_list(Rest),
%% Make sure Arities is a list of bytes. %% Make sure Arities is a list of bytes.
@@ -364,7 +364,7 @@ parse_variant([{start_variant,_line}
is_integer(A), A < 256], is_integer(A), A < 256],
[{'|',_} [{'|',_}
, {int,_line, Tag} , {int,_, Tag}
, {'|',_} , {'|',_}
, {'(',_} | Rest3] = Rest2, , {'(',_} | Rest3] = Rest2,
{Elements , [{end_variant, _} | Rest4]} = parse_tuple(Rest3), {Elements , [{end_variant, _} | Rest4]} = parse_tuple(Rest3),
+2 -4
View File
@@ -24,14 +24,12 @@
, symbols/1 , symbols/1
]). ]).
-include("../include/aeb_fate_opcodes.hrl"). -include("aeb_fate_opcodes.hrl").
-include("../include/aeb_fate_data.hrl"). -include("aeb_fate_data.hrl").
-ifdef(EQC).
-export([ update_annotations/2 -export([ update_annotations/2
, update_functions/2 , update_functions/2
, update_symbols/2]). , update_symbols/2]).
-endif.
-record(fcode, { functions = #{} :: map() -record(fcode, { functions = #{} :: map()
, symbols = #{} :: map() , symbols = #{} :: map()
+132
View File
@@ -0,0 +1,132 @@
-module(aeb_fate_generate_docs).
-export([generate_documentation/2, generate_documentation/3]).
-export(
[ gen_protocol_opcodes_flags_and_gas/1
, gen_protocol_description_of_operations/1
, gen_protocol_opcodes/1
]).
-define(LIMA_PROTOCOL_VSN, 4).
-define(IRIS_PROTOCOL_VSN, 5).
generate_documentation(Filename, Fields) ->
generate_documentation(Filename, Fields, fun(_) -> true end).
generate_documentation(Filename, Fields, Filter) when is_function(Filter, 1) ->
{ok, File} = file:open(Filename, [write, {encoding, utf8}]),
Header =
lists:flatten(
"|" ++ [" " ++ header_name(F) ++ " |" || F <- Fields] ++ "\n"
),
Separator =
lists:flatten(
"|" ++ [" " ++ ["-" || _ <- header_name(F)] ++ " |" || F <- Fields] ++ "\n"
),
Instructions =
lists:flatten(
[gen_doc_for_op(Op, Fields)
++ "\n" || Op <- aeb_fate_generate_ops:get_ops(), Filter(Op)]),
io:format(File, "~ts~ts~ts\n", [Header, Separator, Instructions]),
file:close(File).
header_name(opname) ->
"Name";
header_name(opcode) ->
"Opcode";
header_name(arity) ->
"Arity";
header_name(end_bb) ->
"Ends basic block";
header_name(in_auth) ->
"Allowed in auth";
header_name(offchain) ->
"Allowed offchain";
header_name(format) ->
"Args";
header_name(doc) ->
"Description";
header_name(gas) ->
"Gas cost";
header_name(arg_types) ->
"Arg types";
header_name(res_type) ->
"Res type".
gen_doc_for_op(#{ opname := OpName
, opcode := OpCode
, arity := Arity
, end_bb := EndBB
, in_auth := InAuth
, offchain := AllowedOffchain
, format := FateFormat
, doc := Doc
, gas := Gas
, arg_types := ArgTypes
, res_type := ResType
}, Fields) ->
"| " ++
string:join(
[ case Field of
opname -> io_lib:format("`~s`", [OpName]);
opcode -> io_lib:format("0x~.16b", [OpCode]);
arity -> io_lib:format("~p", [Arity]);
end_bb -> io_lib:format("~p", [EndBB]);
in_auth -> io_lib:format("~p", [InAuth]);
offchain -> io_lib:format("~p", [AllowedOffchain]);
format ->
case FateFormat of
[] -> "";
_ -> lists:join(
" ",
[format_arg_doc(A) ||
A <-
lists:zip(FateFormat,
lists:seq(0,length(FateFormat)-1))])
end;
doc -> Doc;
gas when is_integer(Gas) -> io_lib:format("~p", [Gas]);
gas when is_list(Gas) ->
lists:flatten(
string:join(
[ io_lib:format(
"~p (~s)",
[GasVal, protocol_name(Prot)]
)
|| {Prot, GasVal} <- Gas
], ", "));
arg_types -> io_lib:format("~p", [ArgTypes]);
res_type -> io_lib:format("~p", [ResType])
end
|| Field <- Fields
],
" | ") ++ " |".
protocol_name(?LIMA_PROTOCOL_VSN) ->
"lima";
protocol_name(?IRIS_PROTOCOL_VSN) ->
"iris".
format_arg_doc({a, N}) -> io_lib:format("Arg~w", [N]);
format_arg_doc({is,_N}) -> "Identifier";
format_arg_doc({ii,_N}) -> "Integer";
format_arg_doc({li,_N}) -> "[Integers]";
format_arg_doc({t,_N}) -> "Type".
%% --- protocol documentation ---
gen_protocol_description_of_operations(Filename) ->
generate_documentation(
Filename, [opname, format, doc, arg_types, res_type]
).
gen_protocol_opcodes_flags_and_gas(Filename) ->
generate_documentation(
Filename, [opcode, opname, end_bb, in_auth, offchain, gas]
).
gen_protocol_opcodes(Filename) ->
generate_documentation(
Filename, [opcode, opname]
).
+15 -53
View File
@@ -2,7 +2,6 @@
-export([ gen_and_halt/1 -export([ gen_and_halt/1
, generate/0 , generate/0
, generate_documentation/1
, get_ops/0 , get_ops/0
, test_asm_generator/1 ]). , test_asm_generator/1 ]).
@@ -46,7 +45,7 @@ check_numbering(_, []) -> true.
-define(GAS_IRIS(A, B), [{?IRIS_PROTOCOL_VSN, B}, {?LIMA_PROTOCOL_VSN, A}]). -define(GAS_IRIS(A, B), [{?IRIS_PROTOCOL_VSN, B}, {?LIMA_PROTOCOL_VSN, A}]).
ops_defs() -> ops_defs() ->
%% Opname, Opcode, end_bb, in_auth offchain, gas, format, Constructor, ArgType, ResType, Documentation %% Opname, Opcode, end_bb, in_auth,offchain, gas, format, Constructor, ArgType, ResType, Documentation
[ { 'RETURN', 16#00, true, true, true, ?GAS(10), [], return, {}, any, "Return from function call, top of stack is return value . The type of the retun value has to match the return type of the function."} [ { 'RETURN', 16#00, true, true, true, ?GAS(10), [], return, {}, any, "Return from function call, top of stack is return value . The type of the retun value has to match the return type of the function."}
, { 'RETURNR', 16#01, true, true, true, ?GAS(10), [a], returnr, {any}, any, "Push Arg0 and return from function. The type of the retun value has to match the return type of the function."} , { 'RETURNR', 16#01, true, true, true, ?GAS(10), [a], returnr, {any}, any, "Push Arg0 and return from function. The type of the retun value has to match the return type of the function."}
, { 'CALL', 16#02, true, true, true, ?GAS(10), [a], call, {string}, any, "Call the function Arg0 with args on stack. The types of the arguments has to match the argument typs of the function."} , { 'CALL', 16#02, true, true, true, ?GAS(10), [a], call, {string}, any, "Call the function Arg0 with args on stack. The types of the arguments has to match the argument typs of the function."}
@@ -226,13 +225,23 @@ ops_defs() ->
, { 'CALL_PGR', 16#a2, true, false, true, ?GAS(100), [a,is,a,a,a,a,a], call_pgr, {contract, string, typerep, typerep, integer, integer, bool}, variant, "Potentially protected remote call. Arg5 is protected flag, otherwise as CALL_GR."} , { 'CALL_PGR', 16#a2, true, false, true, ?GAS(100), [a,is,a,a,a,a,a], call_pgr, {contract, string, typerep, typerep, integer, integer, bool}, variant, "Potentially protected remote call. Arg5 is protected flag, otherwise as CALL_GR."}
, { 'CREATE', 16#a3, true, false, true, ?GAS(10000), [a,a,a], create, {contract_bytearray, typerep, integer}, contract, "Deploys a contract with a bytecode Arg1 and value Arg3. The `init` arguments should be placed on the stack and match the type in Arg2. Writes contract address to stack top."} , { 'CREATE', 16#a3, true, false, true, ?GAS(10000), [a,a,a], create, {contract_bytearray, typerep, integer}, contract, "Deploys a contract with a bytecode Arg1 and value Arg3. The `init` arguments should be placed on the stack and match the type in Arg2. Writes contract address to the top of the accumulator stack. If an account on the resulting address did exist before the call, the `payable` flag will be updated."}
, { 'CLONE', 16#a4, true, false, true, ?GAS(5000), [a,a,a,a], clone, {contract, typerep, integer, bool}, any, "Clones the contract under Arg1 and deploys it with value of Arg3. The `init` arguments should be placed on the stack and match the type in Arg2. Writes contract (or `None` on fail when protected) to stack top."} , { 'CLONE', 16#a4, true, false, true, ?GAS(5000), [a,a,a,a], clone, {contract, typerep, integer, bool}, any, "Clones the contract under Arg1 and deploys it with value of Arg3. The `init` arguments should be placed on the stack and match the type in Arg2. Writes contract (or `None` on fail when protected) to the top of the accumulator stack. Does not copy the existing contract's store it will be initialized by a fresh call to the `init` function. If an account on the resulting address did exist before the call, the `payable` flag will be updated."}
, { 'CLONE_G', 16#a5, true, false, true, ?GAS(5000), [a,a,a,a,a], clone_g, {contract, typerep, integer, integer, bool}, any, "Like `CLONE` but additionally limits gas of `init` call to Arg3"} , { 'CLONE_G', 16#a5, true, false, true, ?GAS(5000), [a,a,a,a,a], clone_g, {contract, typerep, integer, integer, bool}, any, "Like `CLONE` but additionally limits the gas of the `init` call by Arg3"}
, { 'BYTECODE_HASH', 16#a6, false, true, true, ?GAS(100), [a,a], bytecode_hash, {contract}, variant, "Arg0 := hash of the deserialized contract's bytecode under address given in Arg1 (or `None` on fail)."} , { 'BYTECODE_HASH', 16#a6, false, true, true, ?GAS(100), [a,a], bytecode_hash, {contract}, variant, "Arg0 := hash of the deserialized contract's bytecode under address given in Arg1 (or `None` on fail). Fails on AEVM contracts and contracts deployed before Iris."}
, { 'FEE', 16#a7, false, true, true, ?GAS(10), [a], fee, {}, integer, "Arg0 := The fee for the current call tx."} , { 'FEE', 16#a7, false, true, true, ?GAS(10), [a], fee, {}, integer, "Arg0 := The fee for the current call tx."}
, { 'ADDRESS_TO_BYTES', 16#a8, false, true, true, ?GAS(10), [a, a], addr_to_bytes, {address}, bytes, "Arg0 := the byte representation of the address"}
, { 'POSEIDON', 16#a9, false, true, true, ?GAS(6000), [a, a, a], poseidon, {integer, integer}, integer, "Arg0 := the Poseidon hash of Arg1 and Arg2 - all integers in the BLS12-381 scalar field"}
, { 'MULMOD', 16#aa, false, true, true, ?GAS(10), [a, a, a, a], mulmod, {integer, integer, integer}, integer, "Arg0 := (Arg1 * Arg2) mod Arg3"}
, { 'BAND', 16#ab, false, true, true, ?GAS(10), [a, a, a], bin_and, {integer, integer}, integer, "Arg0 := Arg1 & Arg2"}
, { 'BOR', 16#ac, false, true, true, ?GAS(10), [a, a, a], bin_or, {integer, integer}, integer, "Arg0 := Arg1 | Arg2"}
, { 'BXOR', 16#ad, false, true, true, ?GAS(10), [a, a, a], bin_xor, {integer, integer}, integer, "Arg0 := Arg1 ^ Arg2"}
, { 'BNOT', 16#ae, false, true, true, ?GAS(10), [a, a], bin_not, {integer}, integer, "Arg0 := ~Arg1"}
, { 'BSL', 16#af, false, true, true, ?GAS(10), [a, a, a], bin_sl, {integer, integer}, integer, "Arg0 := Arg1 << Arg2"}
, { 'BSR', 16#b0, false, true, true, ?GAS(10), [a, a, a], bin_sr, {integer, integer}, integer, "Arg0 := Arg1 >> Arg2"}
, { 'DEACTIVATE', 16#fa, false, true, true, ?GAS(10), [], deactivate, {}, none, "Mark the current contract for deactivation."} , { 'DEACTIVATE', 16#fa, false, true, true, ?GAS(10), [], deactivate, {}, none, "Mark the current contract for deactivation."}
, { 'ABORT', 16#fb, true, true, true, ?GAS(10), [a], abort, {string}, none, "Abort execution (dont use all gas) with error message in Arg0."} , { 'ABORT', 16#fb, true, true, true, ?GAS(10), [a], abort, {string}, none, "Abort execution (dont use all gas) with error message in Arg0."}
, { 'EXIT', 16#fc, true, true, true, ?GAS(10), [a], exit, {string}, none, "Abort execution (use upp all gas) with error message in Arg0."} , { 'EXIT', 16#fc, true, true, true, ?GAS(10), [a], exit, {string}, none, "Abort execution (use upp all gas) with error message in Arg0."}
@@ -778,50 +787,3 @@ gen_variant() ->
3 -> "(| 2 | 0 | ( " ++ imm_arg() ++ ", " ++ imm_arg() ++ " ) |)" 3 -> "(| 2 | 0 | ( " ++ imm_arg() ++ ", " ++ imm_arg() ++ " ) |)"
end. end.
%% TODO: add gas cost and end_bb/in_auth?
generate_documentation(Filename) ->
{ok, File} = file:open(Filename, [write]),
Instructions = lists:flatten([gen_doc(Op)++"\n" || Op <- get_ops()]),
io:format(File,
"### Operations\n\n"
"| OpCode | Name | Args | Description |\n"
"| --- | --- | --- | --- |\n"
"~s"
, [Instructions]),
io:format(File, "\n", []),
file:close(File).
gen_doc(#{ opname := Name
, opcode := OpCode
, arity := _Arity
, end_bb := _EndBB
, format := FateFormat
, macro := _Macro
, type_name := _TypeName
, doc := Doc
, gas := _Gas
, type := _Type
, constructor := _Constructor
, constructor_type := _ConstructorType
}) ->
Arguments =
case FateFormat of
[] -> "";
_ -> lists:join(" ",
[format_arg_doc(A) ||
A <-
lists:zip(FateFormat,
lists:seq(0,length(FateFormat)-1))])
end,
io_lib:format("| 0x~.16b | ~w | ~s | ~s |\n",
[ OpCode
, Name
, Arguments
, Doc]).
format_arg_doc({a, N}) -> io_lib:format("Arg~w", [N]);
format_arg_doc({is,_N}) -> "Identifier";
format_arg_doc({ii,_N}) -> "Integer";
format_arg_doc({li,_N}) -> "[Integers]";
format_arg_doc({t,_N}) -> "Type".
+2 -2
View File
@@ -22,8 +22,8 @@
-export_type([binary_value/0, heap_value/0, offset/0, heap_fragment/0]). -export_type([binary_value/0, heap_value/0, offset/0, heap_fragment/0]).
-include_lib("aebytecode/include/aeb_typerep_def.hrl"). -include("aeb_typerep_def.hrl").
-include_lib("aebytecode/include/aeb_heap.hrl"). -include("aeb_heap.hrl").
-type word() :: non_neg_integer(). -type word() :: non_neg_integer().
-type pointer() :: word(). -type pointer() :: word().
+1 -1
View File
@@ -17,7 +17,7 @@
, swap/1 , swap/1
]). ]).
-include_lib("aebytecode/include/aeb_opcodes.hrl"). -include("aeb_opcodes.hrl").
%%==================================================================== %%====================================================================
+1 -1
View File
@@ -1,6 +1,6 @@
{application, aebytecode, {application, aebytecode,
[{description, "Bytecode definitions, serialization and deserialization for aeternity."}, [{description, "Bytecode definitions, serialization and deserialization for aeternity."},
{vsn, "2.1.0"}, {vsn, "3.2.0"},
{registered, []}, {registered, []},
{applications, {applications,
[kernel, [kernel,
+19
View File
@@ -0,0 +1,19 @@
{a_email,[]}.
{author,"Aeternity Authors"}.
{c_email,[]}.
{copyright,"Aeternity Authors"}.
{deps,[{"otpr","aeserialization",{0,1,0}},
{"otpr","eblake2",{1,0,0}},
{"otpr","getopt",{1,0,2}}]}.
{desc,"A library and stand alone assembler for aeternity bytecode. This version supports AEVM bytecode and FATE bytecode."}.
{file_exts,[]}.
{key_name,none}.
{license,skip}.
{modules,[]}.
{name,"AE Bytecode"}.
{package_id,{"otpr","aebytecode",{3,2,0}}}.
{prefix,none}.
{repo_url,"https://github.com/aeternity/aebytecode"}.
{tags,["aeternity","blockchain","fate","bytecode","crypto","ae"]}.
{type,lib}.
{ws_url,[]}.
Executable
+18
View File
@@ -0,0 +1,18 @@
#! /bin/bash
# This is a small pre-packaging source generation and include correction script that should be
# run before packaging this project for use with ZX/Zomp.
rm -rf _build
rm -f src/aeb_fate_opcodes.erl src/aeb_fate_ops.erl include/aeb_fate_opcodes.hrl src/aeb_fate_asm_scan.xrl src/aeb_fate_pp.erl
make sources
cd src
for f in $(ls --ignore=aeb_fate_generate_ops.erl | grep erl)
do
echo "Updating includes in: $f"
sed -i 's/aebytecode\/include\///g' "$f"
sed -i 's/\.\.\/include\///g' "$f"
sed -i 's/include_lib/include/g' "$f"
done
rm -f ebin/*.beam
cp aebytecode.app ebin/