Fix bug in type checker

This commit is contained in:
Ulf Norell 2019-06-20 16:01:46 +02:00
parent 592869bf75
commit d38367e023
3 changed files with 18 additions and 1 deletions

View File

@ -1814,6 +1814,10 @@ occurs_check1(R, {tuple_t, _, Ts}) ->
occurs_check(R, Ts); occurs_check(R, Ts);
occurs_check1(R, {named_arg_t, _, _, T, _}) -> occurs_check1(R, {named_arg_t, _, _, T, _}) ->
occurs_check(R, T); occurs_check(R, T);
occurs_check1(R, {record_t, Fields}) ->
occurs_check(R, Fields);
occurs_check1(R, {field_t, _, _, T}) ->
occurs_check(R, T);
occurs_check1(R, [H | T]) -> occurs_check1(R, [H | T]) ->
occurs_check(R, H) orelse occurs_check(R, T); occurs_check(R, H) orelse occurs_check(R, T);
occurs_check1(_, []) -> false. occurs_check1(_, []) -> false.

View File

@ -114,7 +114,8 @@ compilable_contracts() ->
"bitcoin_auth", "bitcoin_auth",
"address_literals", "address_literals",
"bytes_equality", "bytes_equality",
"address_chain" "address_chain",
"namespace_bug"
]. ].
not_yet_compilable(fate) -> not_yet_compilable(fate) ->

View File

@ -0,0 +1,12 @@
namespace Foo =
record bla = {x : int, y : bool}
function bar() : Foo.bla = {x = 17, y = true}
contract Bug =
// Crashed the type checker
function foo () = Foo.bar()