Fix dbg_undef for args
This commit is contained in:
parent
6b7bc06c38
commit
c1bf063093
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
{erl_opts, [debug_info]}.
|
{erl_opts, [debug_info]}.
|
||||||
|
|
||||||
{deps, [ {aebytecode, {git, "https://github.com/aeternity/aebytecode.git", {ref, "dd6ec9b"}}}
|
{deps, [ {aebytecode, {git, "https://github.com/aeternity/aebytecode.git", {ref, "3446cd3"}}}
|
||||||
, {getopt, "1.0.1"}
|
, {getopt, "1.0.1"}
|
||||||
, {eblake2, "1.0.0"}
|
, {eblake2, "1.0.0"}
|
||||||
, {jsx, {git, "https://github.com/talentdeficit/jsx.git", {tag, "2.8.0"}}}
|
, {jsx, {git, "https://github.com/talentdeficit/jsx.git", {tag, "2.8.0"}}}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{"1.2.0",
|
{"1.2.0",
|
||||||
[{<<"aebytecode">>,
|
[{<<"aebytecode">>,
|
||||||
{git,"https://github.com/aeternity/aebytecode.git",
|
{git,"https://github.com/aeternity/aebytecode.git",
|
||||||
{ref,"dd6ec9bc9ba7017f10538fd61abd9b89d7a5d8a3"}},
|
{ref,"3446cd3df6d0a2592f331999fe518f3ee083d4c1"}},
|
||||||
0},
|
0},
|
||||||
{<<"aeserialization">>,
|
{<<"aeserialization">>,
|
||||||
{git,"https://github.com/aeternity/aeserialization.git",
|
{git,"https://github.com/aeternity/aeserialization.git",
|
||||||
|
@ -128,9 +128,8 @@ function_to_scode(ChildContracts, ContractName, Functions, Name, Attrs0, Args, B
|
|||||||
[ add_variables_register(Env, Arg, Register) ||
|
[ add_variables_register(Env, Arg, Register) ||
|
||||||
proplists:get_value(debug_info, Options, false),
|
proplists:get_value(debug_info, Options, false),
|
||||||
{Arg, Register} <- Env#env.vars ],
|
{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, to_scode(Env, Body)),
|
SCode = dbg_scoped_vars(Env, ArgsNames, to_scode(Env, Body)),
|
||||||
SCode = to_scode(Env, Body),
|
|
||||||
{Attrs, {ArgTypes, ResType1}, SCode}.
|
{Attrs, {ArgTypes, ResType1}, SCode}.
|
||||||
|
|
||||||
get_variables_registers() ->
|
get_variables_registers() ->
|
||||||
@ -772,7 +771,7 @@ dbgloc(Env, Ann) ->
|
|||||||
case {Line, Col} of
|
case {Line, Col} of
|
||||||
{undefined, _} -> [];
|
{undefined, _} -> [];
|
||||||
{_, undefined} -> [];
|
{_, undefined} -> [];
|
||||||
{Line, Col} -> [{'DBGLOC', {immediate, File}, {immediate, Line}, {immediate, Col}}]
|
{_, _} -> [{'DBGLOC', {immediate, File}, {immediate, Line}, {immediate, Col}}]
|
||||||
end
|
end
|
||||||
end.
|
end.
|
||||||
|
|
||||||
@ -785,17 +784,42 @@ dbg_scoped_var(Env = #env{saved_fresh_names = SavedFreshNames}, Var, SCode) ->
|
|||||||
case proplists:get_value(debug_info, Env#env.options, false) of
|
case proplists:get_value(debug_info, Env#env.options, false) of
|
||||||
false -> SCode;
|
false -> SCode;
|
||||||
true ->
|
true ->
|
||||||
Register = lookup_var(Env, Var),
|
|
||||||
case maps:get(Var, SavedFreshNames, Var) of
|
case maps:get(Var, SavedFreshNames, Var) of
|
||||||
"%" ++ _ -> SCode;
|
"%" ++ _ -> SCode;
|
||||||
"_" -> SCode;
|
"_" -> SCode;
|
||||||
VarName ->
|
VarName ->
|
||||||
Def = [{'DBG_DEF', {immediate, VarName}, Register}],
|
Register = lookup_var(Env, Var),
|
||||||
Undef = [{'DBG_UNDEF', {immediate, VarName}, Register}],
|
Def = [{'DBG_DEF', {immediate, VarName}, Register}],
|
||||||
Def ++ SCode ++ Undef
|
Undef = [{'DBG_UNDEF', {immediate, VarName}, Register}],
|
||||||
|
Def ++ dbg_undef(Undef, SCode)
|
||||||
end
|
end
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
dbg_undef(_Undef, missing) ->
|
||||||
|
missing;
|
||||||
|
dbg_undef(Undef, loop) ->
|
||||||
|
[Undef, loop];
|
||||||
|
dbg_undef(Undef, switch_body) ->
|
||||||
|
[switch_body, Undef];
|
||||||
|
dbg_undef(Undef, {switch, Arg, Type, Alts, Catch}) ->
|
||||||
|
NewAlts = [ dbg_undef(Undef, Alt) || Alt <- Alts ],
|
||||||
|
NewCatch = dbg_undef(Undef, Catch),
|
||||||
|
NewSwitch = {switch, Arg, Type, NewAlts, NewCatch},
|
||||||
|
NewSwitch;
|
||||||
|
dbg_undef(Undef, SCode) when is_list(SCode) ->
|
||||||
|
lists:droplast(SCode) ++ [dbg_undef(Undef, lists:last(SCode))];
|
||||||
|
dbg_undef(Undef, SCode) when is_tuple(SCode); is_atom(SCode) ->
|
||||||
|
[Mnemonic | _] =
|
||||||
|
case is_tuple(SCode) of
|
||||||
|
true -> tuple_to_list(SCode);
|
||||||
|
false -> [SCode]
|
||||||
|
end,
|
||||||
|
Op = aeb_fate_opcodes:m_to_op(Mnemonic),
|
||||||
|
case aeb_fate_opcodes:end_bb(Op) of
|
||||||
|
true -> [Undef, SCode];
|
||||||
|
false -> [SCode, Undef]
|
||||||
|
end.
|
||||||
|
|
||||||
%% -- Phase II ---------------------------------------------------------------
|
%% -- Phase II ---------------------------------------------------------------
|
||||||
%% Optimize
|
%% Optimize
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user