Remove the variable-register map from debug output
This commit is contained in:
parent
864189ee5e
commit
ed3e62b40a
@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
- API functions for encoding/decoding Sophia values to/from FATE.
|
- API functions for encoding/decoding Sophia values to/from FATE.
|
||||||
### Changed
|
### Changed
|
||||||
### Removed
|
### Removed
|
||||||
|
- Remove the mapping from variables to FATE registers from the compilation output.
|
||||||
### Fixed
|
### Fixed
|
||||||
- Warning about unused include when there is no include.
|
- Warning about unused include when there is no include.
|
||||||
|
|
||||||
|
@ -53,8 +53,6 @@ The **pp_** options all print to standard output the following:
|
|||||||
|
|
||||||
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.
|
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.
|
||||||
|
|
||||||
The option `debug_info` includes information related to debugging in the compiler output. Currently this option only includes the mapping from variables to registers.
|
|
||||||
|
|
||||||
#### Options to control which compiler optimizations should run:
|
#### Options to control which compiler optimizations should run:
|
||||||
|
|
||||||
By default all optimizations are turned on, to disable an optimization, it should be
|
By default all optimizations are turned on, to disable an optimization, it should be
|
||||||
|
@ -119,7 +119,7 @@ from_string1(ContractString, Options) ->
|
|||||||
, warnings := Warnings } = string_to_code(ContractString, Options),
|
, warnings := Warnings } = string_to_code(ContractString, Options),
|
||||||
#{ child_con_env := ChildContracts } = FCodeEnv,
|
#{ child_con_env := ChildContracts } = FCodeEnv,
|
||||||
SavedFreshNames = maps:get(saved_fresh_names, FCodeEnv, #{}),
|
SavedFreshNames = maps:get(saved_fresh_names, FCodeEnv, #{}),
|
||||||
{FateCode, VarsRegs} = aeso_fcode_to_fate:compile(ChildContracts, FCode, SavedFreshNames, Options),
|
FateCode = aeso_fcode_to_fate:compile(ChildContracts, FCode, SavedFreshNames, Options),
|
||||||
pp_assembler(FateCode, Options),
|
pp_assembler(FateCode, Options),
|
||||||
ByteCode = aeb_fate_code:serialize(FateCode, []),
|
ByteCode = aeb_fate_code:serialize(FateCode, []),
|
||||||
{ok, Version} = version(),
|
{ok, Version} = version(),
|
||||||
@ -132,13 +132,7 @@ from_string1(ContractString, Options) ->
|
|||||||
payable => maps:get(payable, FCode),
|
payable => maps:get(payable, FCode),
|
||||||
warnings => Warnings
|
warnings => Warnings
|
||||||
},
|
},
|
||||||
ResDbg = Res#{ variables_registers => VarsRegs },
|
{ok, maybe_generate_aci(Res, FoldedTypedAst, Options)}.
|
||||||
FinalRes =
|
|
||||||
case proplists:get_value(debug_info, Options, false) of
|
|
||||||
true -> ResDbg;
|
|
||||||
false -> Res
|
|
||||||
end,
|
|
||||||
{ok, maybe_generate_aci(FinalRes, FoldedTypedAst, Options)}.
|
|
||||||
|
|
||||||
maybe_generate_aci(Result, FoldedTypedAst, Options) ->
|
maybe_generate_aci(Result, FoldedTypedAst, Options) ->
|
||||||
case proplists:get_value(aci, Options) of
|
case proplists:get_value(aci, Options) of
|
||||||
@ -204,7 +198,7 @@ add_extra_call(Contract0, Call, Options) ->
|
|||||||
#{fcode := OrgFcode
|
#{fcode := OrgFcode
|
||||||
, fcode_env := #{child_con_env := ChildContracts}
|
, fcode_env := #{child_con_env := ChildContracts}
|
||||||
, ast := Ast} = string_to_code(Contract0, Options),
|
, ast := Ast} = string_to_code(Contract0, Options),
|
||||||
{FateCode, _} = aeso_fcode_to_fate:compile(ChildContracts, OrgFcode, #{}, []),
|
FateCode = aeso_fcode_to_fate:compile(ChildContracts, OrgFcode, #{}, []),
|
||||||
%% collect all hashes and compute the first name without hash collision to
|
%% collect all hashes and compute the first name without hash collision to
|
||||||
SymbolHashes = maps:keys(aeb_fate_code:symbols(FateCode)),
|
SymbolHashes = maps:keys(aeb_fate_code:symbols(FateCode)),
|
||||||
CallName = first_none_match(?CALL_NAME, SymbolHashes,
|
CallName = first_none_match(?CALL_NAME, SymbolHashes,
|
||||||
|
@ -81,24 +81,16 @@ code_error(Err) ->
|
|||||||
compile(FCode, SavedFreshNames, Options) ->
|
compile(FCode, SavedFreshNames, Options) ->
|
||||||
compile(#{}, FCode, SavedFreshNames, Options).
|
compile(#{}, FCode, SavedFreshNames, Options).
|
||||||
compile(ChildContracts, FCode, SavedFreshNames, Options) ->
|
compile(ChildContracts, FCode, SavedFreshNames, Options) ->
|
||||||
try
|
|
||||||
compile1(ChildContracts, FCode, SavedFreshNames, Options)
|
|
||||||
after
|
|
||||||
put(variables_registers, undefined)
|
|
||||||
end.
|
|
||||||
|
|
||||||
compile1(ChildContracts, FCode, SavedFreshNames, Options) ->
|
|
||||||
#{ contract_name := ContractName,
|
#{ contract_name := ContractName,
|
||||||
functions := Functions } = FCode,
|
functions := Functions } = FCode,
|
||||||
SFuns = functions_to_scode(ChildContracts, ContractName, Functions, SavedFreshNames, Options),
|
SFuns = functions_to_scode(ChildContracts, ContractName, Functions, SavedFreshNames, Options),
|
||||||
SFuns1 = optimize_scode(SFuns, Options),
|
SFuns1 = optimize_scode(SFuns, Options),
|
||||||
FateCode = to_basic_blocks(SFuns1),
|
FateCode = to_basic_blocks(SFuns1),
|
||||||
?debug(compile, Options, "~s\n", [aeb_fate_asm:pp(FateCode)]),
|
?debug(compile, Options, "~s\n", [aeb_fate_asm:pp(FateCode)]),
|
||||||
FateCode2 = case proplists:get_value(include_child_contract_symbols, Options, false) of
|
case proplists:get_value(include_child_contract_symbols, Options, false) of
|
||||||
false -> FateCode;
|
false -> FateCode;
|
||||||
true -> add_child_symbols(ChildContracts, FateCode)
|
true -> add_child_symbols(ChildContracts, FateCode)
|
||||||
end,
|
end.
|
||||||
{FateCode2, get_variables_registers()}.
|
|
||||||
|
|
||||||
make_function_id(X) ->
|
make_function_id(X) ->
|
||||||
aeb_fate_code:symbol_identifier(make_function_name(X)).
|
aeb_fate_code:symbol_identifier(make_function_name(X)).
|
||||||
@ -131,31 +123,10 @@ function_to_scode(ChildContracts, ContractName, Functions, Name, Attrs0, Args, B
|
|||||||
end,
|
end,
|
||||||
Attrs = lists:filter(FilterAttrs, Attrs0),
|
Attrs = lists:filter(FilterAttrs, Attrs0),
|
||||||
Env = init_env(ChildContracts, ContractName, Functions, Name, Args, SavedFreshNames, Options),
|
Env = init_env(ChildContracts, ContractName, Functions, Name, Args, SavedFreshNames, Options),
|
||||||
[ add_variables_register(Env, Arg, Register) ||
|
|
||||||
proplists:get_value(debug_info, Options, false),
|
|
||||||
{Arg, Register} <- Env#env.vars ],
|
|
||||||
ArgsNames = [ X || {X, _} <- lists:reverse(Env#env.vars) ],
|
ArgsNames = [ X || {X, _} <- lists:reverse(Env#env.vars) ],
|
||||||
SCode = dbg_scoped_vars(Env, ArgsNames, dbg_loc(Env, Attrs0) ++ to_scode(Env, Body)),
|
SCode = dbg_scoped_vars(Env, ArgsNames, dbg_loc(Env, Attrs0) ++ to_scode(Env, Body)),
|
||||||
{Attrs, {ArgTypes, ResType1}, SCode}.
|
{Attrs, {ArgTypes, ResType1}, SCode}.
|
||||||
|
|
||||||
get_variables_registers() ->
|
|
||||||
case get(variables_registers) of
|
|
||||||
undefined -> #{};
|
|
||||||
Vs -> Vs
|
|
||||||
end.
|
|
||||||
|
|
||||||
add_variables_register(Env = #env{saved_fresh_names = SavedFreshNames}, Name, Register) ->
|
|
||||||
Olds = get_variables_registers(),
|
|
||||||
RealName = maps:get(Name, SavedFreshNames, Name),
|
|
||||||
FunName =
|
|
||||||
case Env#env.current_function of
|
|
||||||
event -> "Chain.event";
|
|
||||||
{entrypoint, BinName} -> binary_to_list(BinName);
|
|
||||||
{local_fun, QualName} -> lists:last(QualName)
|
|
||||||
end,
|
|
||||||
New = {Env#env.contract, FunName, RealName},
|
|
||||||
put(variables_registers, Olds#{New => Register}).
|
|
||||||
|
|
||||||
-define(tvars, '$tvars').
|
-define(tvars, '$tvars').
|
||||||
|
|
||||||
typesig_to_scode(Args, Res) ->
|
typesig_to_scode(Args, Res) ->
|
||||||
@ -214,7 +185,6 @@ next_var(#env{ vars = Vars }) ->
|
|||||||
1 + lists:max([-1 | [J || {_, {var, J}} <- Vars]]).
|
1 + lists:max([-1 | [J || {_, {var, J}} <- Vars]]).
|
||||||
|
|
||||||
bind_var(Name, Var, Env = #env{ vars = Vars }) ->
|
bind_var(Name, Var, Env = #env{ vars = Vars }) ->
|
||||||
proplists:get_value(debug_info, Env#env.options, false) andalso add_variables_register(Env, Name, Var),
|
|
||||||
Env#env{ vars = [{Name, Var} | Vars] }.
|
Env#env{ vars = [{Name, Var} | Vars] }.
|
||||||
|
|
||||||
bind_local(Name, Env) ->
|
bind_local(Name, Env) ->
|
||||||
@ -241,7 +211,7 @@ serialize_contract_code(Env, C) ->
|
|||||||
Options = Env#env.options,
|
Options = Env#env.options,
|
||||||
SavedFreshNames = Env#env.saved_fresh_names,
|
SavedFreshNames = Env#env.saved_fresh_names,
|
||||||
FCode = maps:get(C, Env#env.child_contracts),
|
FCode = maps:get(C, Env#env.child_contracts),
|
||||||
{FateCode, _} = compile1(Env#env.child_contracts, FCode, SavedFreshNames, Options),
|
FateCode = compile(Env#env.child_contracts, FCode, SavedFreshNames, Options),
|
||||||
ByteCode = aeb_fate_code:serialize(FateCode, []),
|
ByteCode = aeb_fate_code:serialize(FateCode, []),
|
||||||
{ok, Version} = aeso_compiler:version(),
|
{ok, Version} = aeso_compiler:version(),
|
||||||
OriginalSourceCode = proplists:get_value(original_src, Options, ""),
|
OriginalSourceCode = proplists:get_value(original_src, Options, ""),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user