aboutsummaryrefslogtreecommitdiffstats
path: root/lib/compiler/test/property_test/beam_types_prop.erl
AgeCommit message (Collapse)Author
2019-07-05compiler: Introduce union typesJohn Högberg
Consider the type `{ok, #record{}} | {error,atom()}`; in our current type representation this will be flattened down to `{ok | error, #record{} | atom()}`, which is fairly useful but has no connection between the elements. Testing that the first element is 'error' lets us skip checking that it's 'ok' on failure, but the second element is still `#record{} | atom()` and we'll eventually need to test that, even though it can only be a `#record{}`. Another example would be `false | {value, term()}`, the return value of lists:keyfind/3, which we're forced to flatten to `any` since there's nothing in common between an atom and a tuple. Union types let us express these types directly, greatly improving type optimization.
2019-07-05beam_types_SUITE: Fix shrinking of bitstringsJohn Högberg
2019-07-05beam_types: Extend the type lattice testsJohn Högberg
2019-06-12compiler: Move "known functions" to beam_typesJohn Högberg
2019-06-12compiler: Break out SSA/beam type definitions into a separate moduleJohn Högberg