Gaith Hallak e46226a693
Polymorphism support (#357)
* Add polymorphism to syntax tree and parser

* Add polymorphism to infer types

* Fix pretty printing

* Add new tests and fix old tests

* Fix the comparison between unit and empty tuple

* Report undefined interface errors before checking implemented interfaces

* Add test for implementing multiple interfaces

* Add test for implementing two interfaces with entrypoints of same names and different types

* Add tests for interfaces implementing interfaces

* Draft: Add variance switching

* Revert "Draft: Add variance switching"

This reverts commit 92dc6ac169cfbff447ed59de04994f564876b3fb.

* Add variance switching

* Fix broken tests

* Fix broken abi tests

* Add tests for variance switching

* Fix tests after rebase

* Variance switching for custom datatypes

* Fix dialyzer warning

* Add testing for custom types variance switching

* Make opposite_variance a separate function

* Make is_subtype/4 a separate function

* Fix warning

* Mark tvars as invariant

* Add type_vars_uvar ets table to ets_tables()

* Don't destroy and recreate type errors table when not needed

* Fixes from the reviews

* Use is_list to check if a var is a list

* Compare named args in fun_t

* Test only for covariance and contravariance

* Remove arrows_in_type and use infer_type_vars_variance instead

* Add tests for option and type aliases

* Fix previous commit

* Rename check_implemented_interfaces_recursive to check_implemented_interfaces1

* Make interfaces declare functions from extended interfaces

* Restore test.aes

* Add test for variance switching in records

* Enable variance switching for record types

* Handle builtin types type variables separately

* Add tests for oracles and oracle queries

* Replace compare_types with non-throwing version of unify

* Add the context to unification error

* Test variance switching for bivariant records

* Give clear names to the records in records variance switching test

* Handle comments about polymorphism_variance_switching.aes

* Rename datatypes in custom types variance switching test for readability

* Change the variance of the oracle_query type vars

* Add test for accessing maps with the wrong type

* Default to invariant when the variance of the type vars is unknown

* Rename test files to have common prefix

* Rename functions in variance switching tests for readability

* Fix variance inference

* Eliminate redundant tests

* Test all cases for bivariant
2022-06-17 13:09:07 +04:00
..
2022-05-10 15:33:59 +02:00
2020-02-03 12:52:00 +01:00
2019-06-14 10:27:07 +02:00
2020-04-02 15:32:26 +02:00
2019-06-28 09:42:28 +02:00
2019-06-28 09:42:28 +02:00
2019-09-12 21:17:01 +02:00
2019-06-28 09:42:28 +02:00
2019-02-08 14:16:06 +01:00
2019-06-28 09:42:28 +02:00
2019-06-28 09:42:28 +02:00
2021-05-24 14:30:57 +02:00
2019-06-28 09:42:28 +02:00
2019-06-28 09:42:28 +02:00
2019-06-28 09:42:28 +02:00
2019-02-08 14:16:06 +01:00
2019-02-08 14:16:06 +01:00
2019-09-03 16:51:04 +02:00
2019-07-22 13:56:45 +02:00
2019-07-22 13:56:45 +02:00
2019-06-28 09:42:28 +02:00
2019-06-28 09:42:28 +02:00
2019-02-08 14:16:06 +01:00
2019-01-25 16:09:31 +01:00
2019-07-22 13:56:45 +02:00
2019-06-28 09:42:28 +02:00
2020-01-15 09:41:03 +01:00
2019-08-05 14:33:53 +02:00
2022-06-17 13:09:07 +04:00
2022-05-10 15:33:59 +02:00
2020-02-24 15:35:54 +01:00
2019-06-28 09:42:28 +02:00
2019-09-03 16:51:04 +02:00
2019-09-03 16:51:04 +02:00