Merge fortuna to master #136

Merged
gorillainduction merged 30 commits from fortuna into master 2019-03-13 18:57:29 +09:00
Showing only changes of commit 08e169c3b2 - Show all commits

View File

@ -153,27 +153,28 @@ deserialize(<<?FUNCTION:8, A, B, C, D, Rest/binary>>,
Env2 = Env#{function => {<<A,B,C,D>>, Sig}}, Env2 = Env#{function => {<<A,B,C,D>>, Sig}},
deserialize(Rest2, Env2); deserialize(Rest2, Env2);
deserialize(<<?FUNCTION:8, A, B, C, D, Rest/binary>>, deserialize(<<?FUNCTION:8, A, B, C, D, Rest/binary>>,
#{ function := F #{ function := {F, Sig}
, bb := BB , bb := BB
, current_bb_code := Code , current_bb_code := Code
, code := Program , code := Program
, functions := Funs} = Env) -> , functions := Funs} = Env) ->
{Sig, Rest2} = deserialize_signature(Rest), {NewSig, Rest2} = deserialize_signature(Rest),
case Code of case Code of
[] -> [] ->
Env2 = Env#{ bb => 0 Env2 = Env#{ bb => 0
, current_bb_code => [] , current_bb_code => []
, function => {<<A,B,C,D>>, Sig} , function => {<<A,B,C,D>>, NewSig}
, code => #{} , code => #{}
, functions => Funs#{F => Program}}, , functions => Funs#{F => {Sig, Program}}},
deserialize(Rest2, Env2); deserialize(Rest2, Env2);
_ -> _ ->
Env2 = Env#{ bb => 0 Env2 = Env#{ bb => 0
, current_bb_code => [] , current_bb_code => []
, function => {<<A,B,C,D>>, Sig} , function => {<<A,B,C,D>>, NewSig}
, code => #{} , code => #{}
, functions => , functions =>
Funs#{F => Program#{ BB => lists:reverse(Code)}}}, Funs#{F => {Sig,
Program#{ BB => lists:reverse(Code)}}}},
deserialize(Rest2, Env2) deserialize(Rest2, Env2)
end; end;
deserialize(<<Op:8, Rest/binary>>, deserialize(<<Op:8, Rest/binary>>,
@ -190,7 +191,7 @@ deserialize(<<Op:8, Rest/binary>>,
false -> false ->
deserialize(Rest2, Env#{ current_bb_code => OpCode}) deserialize(Rest2, Env#{ current_bb_code => OpCode})
end; end;
deserialize(<<>>, #{ function := F deserialize(<<>>, #{ function := {F, Sig}
, bb := BB , bb := BB
, current_bb_code := Code , current_bb_code := Code
, code := Program , code := Program
@ -204,7 +205,7 @@ deserialize(<<>>, #{ function := F
, current_bb_code => [] , current_bb_code => []
, function => none , function => none
, code => #{} , code => #{}
, functions => Funs#{F => FunctionCode}}. , functions => Funs#{F => {Sig, FunctionCode}}}.
deserialize_op(?ELEMENT, Rest, Code) -> deserialize_op(?ELEMENT, Rest, Code) ->
{Type, Rest2} = deserialize_type(Rest), {Type, Rest2} = deserialize_type(Rest),