diff --git a/src/aeso_ast_infer_types.erl b/src/aeso_ast_infer_types.erl index 9582495..5b69ff6 100644 --- a/src/aeso_ast_infer_types.erl +++ b/src/aeso_ast_infer_types.erl @@ -816,7 +816,7 @@ infer(Contracts, Options) -> ets_insert(type_vars_variance, {"list", [covariant]}), ets_insert(type_vars_variance, {"option", [covariant]}), ets_insert(type_vars_variance, {"oracle", [contravariant, covariant]}), - ets_insert(type_vars_variance, {"oracle_query", [covariant, contravariant]}), + ets_insert(type_vars_variance, {"oracle_query", [covariant, covariant]}), when_warning(warn_unused_functions, fun() -> create_unused_functions() end), check_modifiers(Env, Contracts), diff --git a/test/aeso_compiler_tests.erl b/test/aeso_compiler_tests.erl index bacc128..35d7485 100644 --- a/test/aeso_compiler_tests.erl +++ b/test/aeso_compiler_tests.erl @@ -1025,27 +1025,27 @@ failing_contracts() -> <>, - <>, - <>, + <>, + <>, <>, <>, - <>, <>, <>]) + "when checking the type of the pattern `q14 : oracle_query(Cat, Cat)` against the expected type `oracle_query(Animal, Cat)`">>, + <>]) ]. -define(Path(File), "code_errors/" ??File). diff --git a/test/contracts/polymorphism_variance_switching_oracles.aes b/test/contracts/polymorphism_variance_switching_oracles.aes index 2cee15b..42849d6 100644 --- a/test/contracts/polymorphism_variance_switching_oracles.aes +++ b/test/contracts/polymorphism_variance_switching_oracles.aes @@ -28,20 +28,20 @@ main contract Main = let o16 : oracle(Cat, Cat) = oracle() : oracle(Cat, Cat) // success let q01 : oracle_query(Animal, Animal) = query() : oracle_query(Animal, Animal) // success - let q02 : oracle_query(Animal, Animal) = query() : oracle_query(Animal, Cat) // fail + let q02 : oracle_query(Animal, Animal) = query() : oracle_query(Animal, Cat) // success let q03 : oracle_query(Animal, Animal) = query() : oracle_query(Cat, Animal) // success - let q04 : oracle_query(Animal, Animal) = query() : oracle_query(Cat, Cat) // fail - let q05 : oracle_query(Animal, Cat) = query() : oracle_query(Animal, Animal) // success + let q04 : oracle_query(Animal, Animal) = query() : oracle_query(Cat, Cat) // success + let q05 : oracle_query(Animal, Cat) = query() : oracle_query(Animal, Animal) // fail let q06 : oracle_query(Animal, Cat) = query() : oracle_query(Animal, Cat) // success - let q07 : oracle_query(Animal, Cat) = query() : oracle_query(Cat, Animal) // success + let q07 : oracle_query(Animal, Cat) = query() : oracle_query(Cat, Animal) // fail let q08 : oracle_query(Animal, Cat) = query() : oracle_query(Cat, Cat) // success let q09 : oracle_query(Cat, Animal) = query() : oracle_query(Animal, Animal) // fail let q10 : oracle_query(Cat, Animal) = query() : oracle_query(Animal, Cat) // fail let q11 : oracle_query(Cat, Animal) = query() : oracle_query(Cat, Animal) // success - let q12 : oracle_query(Cat, Animal) = query() : oracle_query(Cat, Cat) // fail + let q12 : oracle_query(Cat, Animal) = query() : oracle_query(Cat, Cat) // success let q13 : oracle_query(Cat, Cat) = query() : oracle_query(Animal, Animal) // fail let q14 : oracle_query(Cat, Cat) = query() : oracle_query(Animal, Cat) // fail - let q15 : oracle_query(Cat, Cat) = query() : oracle_query(Cat, Animal) // success + let q15 : oracle_query(Cat, Cat) = query() : oracle_query(Cat, Animal) // fail let q16 : oracle_query(Cat, Cat) = query() : oracle_query(Cat, Cat) // success () \ No newline at end of file