From 4892b749c8ba22192275dd7ed6f4a2644ff5b376 Mon Sep 17 00:00:00 2001 From: radrow Date: Fri, 16 Sep 2022 11:03:44 +0200 Subject: [PATCH 1/7] Include all functions in the symbols map --- src/aeso_fcode_to_fate.erl | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/aeso_fcode_to_fate.erl b/src/aeso_fcode_to_fate.erl index 9e19be5..82b1ce3 100644 --- a/src/aeso_fcode_to_fate.erl +++ b/src/aeso_fcode_to_fate.erl @@ -70,6 +70,8 @@ code_error(Err) -> %% -- Main ------------------------------------------------------------------- +-define(funids, '$funids'). + %% @doc Main entry point. compile(FCode, Options) -> compile(#{}, FCode, Options). @@ -80,10 +82,15 @@ compile(ChildContracts, FCode, Options) -> SFuns1 = optimize_scode(SFuns, Options), FateCode = to_basic_blocks(SFuns1), ?debug(compile, Options, "~s\n", [aeb_fate_asm:pp(FateCode)]), + setelement(2, FateCode, get(?funids)), + erase(?funids), FateCode. make_function_id(X) -> - aeb_fate_code:symbol_identifier(make_function_name(X)). + FunIds = case get(?funids) of undefined -> #{}; FI -> FI end, + Id = aeb_fate_code:symbol_identifier(make_function_name(X)), + put(?funids, maps:put(X, Id, FunIds)), + Id. make_function_name(event) -> <<"Chain.event">>; make_function_name({entrypoint, Name}) -> Name; -- 2.30.2 From d13c1fdaa8645af3f34b4113a8bbbcb0c422907f Mon Sep 17 00:00:00 2001 From: radrow Date: Fri, 16 Sep 2022 11:38:20 +0200 Subject: [PATCH 2/7] . --- src/aeso_fcode_to_fate.erl | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/aeso_fcode_to_fate.erl b/src/aeso_fcode_to_fate.erl index 82b1ce3..759e619 100644 --- a/src/aeso_fcode_to_fate.erl +++ b/src/aeso_fcode_to_fate.erl @@ -70,8 +70,6 @@ code_error(Err) -> %% -- Main ------------------------------------------------------------------- --define(funids, '$funids'). - %% @doc Main entry point. compile(FCode, Options) -> compile(#{}, FCode, Options). @@ -81,16 +79,22 @@ compile(ChildContracts, FCode, Options) -> SFuns = functions_to_scode(ChildContracts, ContractName, Functions, Options), SFuns1 = optimize_scode(SFuns, Options), FateCode = to_basic_blocks(SFuns1), + Symbols = element(3, FateCode), + ChildSymbols = maps:from_list( + [ {make_function_id(FName), make_function_name(FName)} + || {_, #{functions := ChildFuns}} <- maps:to_list(ChildContracts), + FName <- maps:keys(ChildFuns) + ]), + io:format("C ~p\n\n", [maps:merge(Symbols, ChildSymbols)]), + io:format("B ~p\n\n", [Symbols]), + io:format("A ~p\n\n", [ChildSymbols]), + io:format("KURWA ~p\n\n", [FateCode]), + FateCode1 = setelement(3, FateCode, maps:merge(Symbols, ChildSymbols)), ?debug(compile, Options, "~s\n", [aeb_fate_asm:pp(FateCode)]), - setelement(2, FateCode, get(?funids)), - erase(?funids), - FateCode. + FateCode1. make_function_id(X) -> - FunIds = case get(?funids) of undefined -> #{}; FI -> FI end, - Id = aeb_fate_code:symbol_identifier(make_function_name(X)), - put(?funids, maps:put(X, Id, FunIds)), - Id. + aeb_fate_code:symbol_identifier(make_function_name(X)). make_function_name(event) -> <<"Chain.event">>; make_function_name({entrypoint, Name}) -> Name; -- 2.30.2 From e3335358ee701d800214ef16b0c5c2c83758c161 Mon Sep 17 00:00:00 2001 From: radrow Date: Fri, 16 Sep 2022 11:44:11 +0200 Subject: [PATCH 3/7] remove improper wording --- src/aeso_fcode_to_fate.erl | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/aeso_fcode_to_fate.erl b/src/aeso_fcode_to_fate.erl index 759e619..63fc7b8 100644 --- a/src/aeso_fcode_to_fate.erl +++ b/src/aeso_fcode_to_fate.erl @@ -79,16 +79,12 @@ compile(ChildContracts, FCode, Options) -> SFuns = functions_to_scode(ChildContracts, ContractName, Functions, Options), SFuns1 = optimize_scode(SFuns, Options), FateCode = to_basic_blocks(SFuns1), - Symbols = element(3, FateCode), + Symbols = aeb_fate_code:symbols(FateCode), ChildSymbols = maps:from_list( [ {make_function_id(FName), make_function_name(FName)} || {_, #{functions := ChildFuns}} <- maps:to_list(ChildContracts), FName <- maps:keys(ChildFuns) ]), - io:format("C ~p\n\n", [maps:merge(Symbols, ChildSymbols)]), - io:format("B ~p\n\n", [Symbols]), - io:format("A ~p\n\n", [ChildSymbols]), - io:format("KURWA ~p\n\n", [FateCode]), FateCode1 = setelement(3, FateCode, maps:merge(Symbols, ChildSymbols)), ?debug(compile, Options, "~s\n", [aeb_fate_asm:pp(FateCode)]), FateCode1. -- 2.30.2 From 0af50160fe1c9dd463cd35606df86bf6fb71793c Mon Sep 17 00:00:00 2001 From: Gaith Hallak Date: Fri, 7 Oct 2022 13:49:14 +0300 Subject: [PATCH 4/7] Use update_symbols exported from aebytecode --- rebar.config | 2 +- rebar.lock | 2 +- src/aeso_fcode_to_fate.erl | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/rebar.config b/rebar.config index 1df3a58..ef5bd8e 100644 --- a/rebar.config +++ b/rebar.config @@ -2,7 +2,7 @@ {erl_opts, [debug_info]}. -{deps, [ {aebytecode, {git, "https://github.com/aeternity/aebytecode.git", {tag, "v3.1.1"}}} +{deps, [ {aebytecode, {git, "https://github.com/aeternity/aebytecode.git", {tag, "v3.2.0"}}} , {getopt, "1.0.1"} , {eblake2, "1.0.0"} , {jsx, {git, "https://github.com/talentdeficit/jsx.git", {tag, "2.8.0"}}} diff --git a/rebar.lock b/rebar.lock index a1be66e..85a9709 100644 --- a/rebar.lock +++ b/rebar.lock @@ -1,7 +1,7 @@ {"1.2.0", [{<<"aebytecode">>, {git,"https://github.com/aeternity/aebytecode.git", - {ref,"8269dbd71e9011921c60141636f1baa270a0e784"}}, + {ref,"2a0a397afad6b45da52572170f718194018bf33c"}}, 0}, {<<"aeserialization">>, {git,"https://github.com/aeternity/aeserialization.git", diff --git a/src/aeso_fcode_to_fate.erl b/src/aeso_fcode_to_fate.erl index 63fc7b8..3d00356 100644 --- a/src/aeso_fcode_to_fate.erl +++ b/src/aeso_fcode_to_fate.erl @@ -79,13 +79,12 @@ compile(ChildContracts, FCode, Options) -> SFuns = functions_to_scode(ChildContracts, ContractName, Functions, Options), SFuns1 = optimize_scode(SFuns, Options), FateCode = to_basic_blocks(SFuns1), - Symbols = aeb_fate_code:symbols(FateCode), ChildSymbols = maps:from_list( [ {make_function_id(FName), make_function_name(FName)} || {_, #{functions := ChildFuns}} <- maps:to_list(ChildContracts), FName <- maps:keys(ChildFuns) ]), - FateCode1 = setelement(3, FateCode, maps:merge(Symbols, ChildSymbols)), + FateCode1 = aeb_fate_code:update_symbols(FateCode, ChildSymbols), ?debug(compile, Options, "~s\n", [aeb_fate_asm:pp(FateCode)]), FateCode1. -- 2.30.2 From ac614e136639b609b645e068122546f5b9b29720 Mon Sep 17 00:00:00 2001 From: Gaith Hallak Date: Fri, 7 Oct 2022 14:04:28 +0300 Subject: [PATCH 5/7] Extract adding child symbols into a separate fun --- src/aeso_fcode_to_fate.erl | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/aeso_fcode_to_fate.erl b/src/aeso_fcode_to_fate.erl index 3d00356..d0a7d7c 100644 --- a/src/aeso_fcode_to_fate.erl +++ b/src/aeso_fcode_to_fate.erl @@ -79,12 +79,7 @@ compile(ChildContracts, FCode, Options) -> SFuns = functions_to_scode(ChildContracts, ContractName, Functions, Options), SFuns1 = optimize_scode(SFuns, Options), FateCode = to_basic_blocks(SFuns1), - ChildSymbols = maps:from_list( - [ {make_function_id(FName), make_function_name(FName)} - || {_, #{functions := ChildFuns}} <- maps:to_list(ChildContracts), - FName <- maps:keys(ChildFuns) - ]), - FateCode1 = aeb_fate_code:update_symbols(FateCode, ChildSymbols), + FateCode1 = add_child_symbols(ChildContracts, FateCode), ?debug(compile, Options, "~s\n", [aeb_fate_asm:pp(FateCode)]), FateCode1. @@ -95,6 +90,11 @@ make_function_name(event) -> <<"Chain.event">>; make_function_name({entrypoint, Name}) -> Name; make_function_name({local_fun, Xs}) -> list_to_binary("." ++ string:join(Xs, ".")). +add_child_symbols(ChildContracts, FateCode) -> + Funs = lists:flatten([ maps:keys(ChildFuns) || {_, #{functions := ChildFuns}} <- maps:to_list(ChildContracts) ]), + Symbols = maps:from_list([ {make_function_id(FName), make_function_name(FName)} || FName <- Funs ]), + aeb_fate_code:update_symbols(FateCode, Symbols). + functions_to_scode(ChildContracts, ContractName, Functions, Options) -> FunNames = maps:keys(Functions), maps:from_list( -- 2.30.2 From 66d05535ee989179573a8e3b850e6655252e730c Mon Sep 17 00:00:00 2001 From: Gaith Hallak Date: Fri, 7 Oct 2022 15:11:55 +0300 Subject: [PATCH 6/7] Make child contracts symbols optional --- src/aeso_fcode_to_fate.erl | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/aeso_fcode_to_fate.erl b/src/aeso_fcode_to_fate.erl index d0a7d7c..631b1f1 100644 --- a/src/aeso_fcode_to_fate.erl +++ b/src/aeso_fcode_to_fate.erl @@ -79,9 +79,11 @@ compile(ChildContracts, FCode, Options) -> SFuns = functions_to_scode(ChildContracts, ContractName, Functions, Options), SFuns1 = optimize_scode(SFuns, Options), FateCode = to_basic_blocks(SFuns1), - FateCode1 = add_child_symbols(ChildContracts, FateCode), ?debug(compile, Options, "~s\n", [aeb_fate_asm:pp(FateCode)]), - FateCode1. + case proplists:get_value(include_child_contract_symbols, Options, false) of + false -> FateCode; + true -> add_child_symbols(ChildContracts, FateCode) + end. make_function_id(X) -> aeb_fate_code:symbol_identifier(make_function_name(X)). -- 2.30.2 From 36f46bb1631abc050a486a31af13ab01a3984370 Mon Sep 17 00:00:00 2001 From: Gaith Hallak Date: Fri, 7 Oct 2022 15:42:03 +0300 Subject: [PATCH 7/7] Document include_child_contract_symbols option --- docs/aeso_compiler.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/aeso_compiler.md b/docs/aeso_compiler.md index 1fd6f94..31b2001 100644 --- a/docs/aeso_compiler.md +++ b/docs/aeso_compiler.md @@ -51,6 +51,8 @@ The **pp_** options all print to standard output the following: `pp_assembler` - print the generated assembler code +The option `include_child_contract_symbols` includes the symbols of child contracts functions in the generated fate code. It is turned off by default to avoid making contracts bigger on chain. + #### check_call(ContractString, Options) -> CheckRet Types -- 2.30.2