Age | Commit message (Collapse) | Author | |
---|---|---|---|
2017-09-12 | dialyzer: Modify handling of singleton map key types | Hans Bolinder | |
The test case loop.erl shows that there is a problem with certain singleton key types. Here the internal representation toggles between #{a | b => ...} and #{a => ..., b => ...} The choice is to turn #{a | b => ...} into #{a => ..., b => ...} early (t_from_form()). The aim is to keep as much info as possible (in pairs). However, including complex singleton keys (tuples, maps) in this scheme is potentially too costly, and a bit complicated. So one more choice is made: let atoms and number (and nothing else) be singleton types, and let complex keys go into the default key. | |||
2016-04-28 | erl_types: Fix t_subtract/2 correctness bug | Magnus Lång | |
t_subtract/2 would break its postcondition by always returning the underapproximation none() when given a variable on the right hand side. This broke map type parsing, since it relied on t_subtract/2 to tell it when map keys would shadow each other. | |||
2016-04-28 | erl_types: Fix crash merging maps with opaque keys | Magnus Lång | |
Opaque keys in maps broke an assumption in erl_types:mapmerge_otherv/3 (that the infinimum of a singleton type and some other type would either be none() or that same singleton type), causing a case_clause crash. |