aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)Author
2016-04-28stdlib: Correct association typesHans Bolinder
'...' is allowed at the end of of association types.
2016-04-28stdlib: Add shadow comments for BIFs in mapsBjörn-Egil Dahlberg
Type information is stored in erl_bif_types for certain BIFs. This fact must be stated in the type specification for the stubs that are superceded by erl_bif_types. * Shadowed by erl_bif_types: maps:from_list/1 * Shadowed by erl_bif_types: maps:get/2 * Shadowed by erl_bif_types: maps:is_key/2 * Shadowed by erl_bif_types: maps:merge/2 * Shadowed by erl_bif_types: maps:put/3 * Shadowed by erl_bif_types: maps:to_list/1 * Shadowed by erl_bif_types: maps:update/3
2016-04-28erts: Add exact association types to the abstract format docHans Bolinder
2016-04-28stdlib: Add pretty-printing of exact map typesHans Bolinder
2016-04-28stdlib: Correct a type in module eppHans Bolinder
2016-04-28erl_types: Don't consider opaque keys singletonMagnus Lång
Opaque singleton keys have the unfortunate property, unlike any other singleton type, to overlap with other singleton types that do not have the same internal representation. Therefore, we must not keep opaque singletons in the Pairs list in a map type.
2016-04-28erl_types: Fix t_subtract/2 correctness bugMagnus 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-28erl_types: Fix crash merging maps with opaque keysMagnus 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.
2016-04-28dialyzer_typesig: Fix bad external typeMagnus Lång
28a4a5057ab9 mistakenly used the non-existing type cerl:tree() instead of cerl:cerl().
2016-04-28dialyzer: Fix another pattern literal bugMagnus Lång
dialyzer_typesig:traverse/3 would perform an unsafe optimisation when given a cons pattern that contained a map and could be folded into a literal with cerl:fold_literal/1. In this case, when traversing the map a type variable would be generated, but this variable would be dropped by the erl_types:t_cons/2 constructor by in turn calling t_sup(), producing the overapproximation any(). However, in this particular case, dialyzer_typesig:traverse/3 is not allowed to overapproximate, since its result is used in an EQ-constraint. Although erl_types:t_tuple/1 does not overapproximate like t_cons/2, which makes the bug unlikely to affect tuples too, the fix was nevertheless applied defensively to the case of tuples as well. Also, fix a bug where dialyzer_utils:refold_pattern/1 would generate syntax nodes with two {label, _} attributes.
2016-04-28Bump Dialyzer versionMagnus Lång
Because the type representation has changed, old PLTs are not compatible. We update the version to 2.10 because of this.
2016-04-28dialyzer: Improve map pattern typesettingMagnus Lång
2016-04-28dialyzer_contracts: Consider #{} a violationMagnus Lång
This is analogous to the case of nil. Since #{} is a base-case of almost all map types, contract and success typing sharing #{} does not mean much, and is often sign of a violation.
2016-04-28dialyzer_typesig: Fix simplification bugMagnus Lång
mk_constraint_list/2 was simplifying (C OR TriviallyTrue) to (C), which is obviously wrong.
2016-04-28dialyzer_dataflow: Fix try in guardsMagnus Lång
The assumption that 'try' nodes were only used to wrap entire guards is no longer true. We're still swallowing warnings when the handler returns successfully. Unfortunately, bind_guard/5 would need to be refactored to return a new state in order to generate those warnings.
2016-04-28dialyzer: Unfold cerl patterns containing mapsMagnus Lång
Dialyzer relies heavily on the assumption that the type of a literal that is used as a pattern is the type of any value that can match that pattern. For maps, that is not true, and it was causing bad analysis results. A new help function dialyzer_utils:refold_pattern/1 identifies maps in literal patterns, and unfolds and labels them, allowing them to be properly analysed.
2016-04-28dialyzer_dataflow: Add map supportMagnus Lång
2016-04-28dialyzer_typesig: Add map supportMagnus Lång
2016-04-28Enhance map specs in erts, stdlib, runtime_toolsMagnus Lång
Using the new type syntax, we can specify which keys are required, and which are optional in a way Dialyzer could use.
2016-04-28Update primary bootstrapHans Bolinder
2016-04-28erl_parse: Add parsing for new map type syntaxMagnus Lång
erl_types typesets mandatory keys with :=, and uses "..." as a shorthand for "any() => any()". Add these to erl_parse so that all representable types can be written in type-specs.
2016-04-28erl_bif_types: Add a selection of maps BIFsMagnus Lång
* maps:from_list/1 * maps:get/2 * maps:is_key/2 * maps:merge/2 * maps:put/3 * maps:size/1 * maps:to_list/1 * maps:update/3
2016-04-28erl_types: Add a map type representationMagnus Lång
The type of a map is represented as a three-tuple {Pairs, DefaultKey, DefaultValue}. DefaultKey and DefaultValue are types. Pairs is a list of three-tuples {Key, mandatory | optional, Value}, where Key and Value are types. All types Key must be singleton, or "known at compile time," as the EEP put it. Examples: #{integer()=>list()} {[], integer(), list()} #{a=>char(), b=>atom()} {[{a, optional, char()}, {b, optional, atom()}], none(), none()} map() {[], any(), any()} A more formal description of the representation and its invariants can be found in erl_types.erl Special thanks to Daniel S. McCain (@dsmccain) that co-authored a very early version of this with me back in April 2014, although only the singleton type logic remains from that version.
2016-04-28Merge branch 'egil/maps-api-additions/PR-1025/OTP-13522'Björn-Egil Dahlberg
* egil/maps-api-additions/PR-1025/OTP-13522: stdlib: Document maps:update_with/3,4 stdlib: Add tests for maps:update_with/3,4 stdlib: Add maps:update_with/3,4 erts: Add tests for maps:take/2 stdlib: Document maps:take/2 erts: Add BIF maps:take/2
2016-04-28Merge branch 'bjorn/compiler/cuddle-with-tests'Björn Gustavsson
* bjorn/compiler/cuddle-with-tests: compilation_SUITE: Use explicit exports Remove support for running tests on a separate Erlang node Move code from compilation_SUITE to beam_block_SUITE Move list comprehension tests to lc_SUITE Move catch tests to trycatch_SUITE Remove compilation_SUITE:long_string/1 Move pattern-matching tests to match_SUITE Remove toothless test compile_SUITE:missing_testheap/1 misc_SUITE: Add missing export of integer_encoding/0 Move test cases from compilation_SUITE to beam_utils_SUITE Move complex_guard/1 from compilation_SUITE to guard_SUITE Remove compilation_SUITE:guards/1 Move tests from compilation_SUITE to record_SUITE Move bit syntax test cases from compilation_SUITE to bs_match_SUITE Remove useless test case compilation_SUITE:otp_2141/1 compilation_SUITE: Run the Core linter for all compilations
2016-04-27stdlib: Document maps:update_with/3,4Björn-Egil Dahlberg
2016-04-27stdlib: Add tests for maps:update_with/3,4Björn-Egil Dahlberg
2016-04-27stdlib: Add maps:update_with/3,4Björn-Egil Dahlberg
Maps equivalent to dict:update/3,4
2016-04-27erts: Add tests for maps:take/2Björn-Egil Dahlberg
2016-04-27stdlib: Document maps:take/2Björn-Egil Dahlberg
2016-04-27compilation_SUITE: Use explicit exportsBjörn Gustavsson
With 'export_all' it is easy to add a new test case function and forget to add its name to the list of test cases to run. While we are it, remove unused functions and add the forgotten test case on_load_inline/1.
2016-04-27Remove support for running tests on a separate Erlang nodeBjörn Gustavsson
It has not been used for ages.
2016-04-27Move code from compilation_SUITE to beam_block_SUITEBjörn Gustavsson
2016-04-27Move list comprehension tests to lc_SUITEBjörn Gustavsson
2016-04-27Move catch tests to trycatch_SUITEBjörn Gustavsson
2016-04-27Remove compilation_SUITE:long_string/1Björn Gustavsson
long_string/1 was written to test that long string were handled efficiently in beam_asm. Strings used to be stored in the string table chunk, but are currently literals. There does not seem that this test case is likely to find any bugs.
2016-04-27Move pattern-matching tests to match_SUITEBjörn Gustavsson
2016-04-27Remove toothless test compile_SUITE:missing_testheap/1Björn Gustavsson
missing_testheap/1 is no longer relevant for the following reasons: 1) Because of the literal pool introduced in R12, no test_heap instructions are needed in the guards. 2) beam_validator would abort the compilation if any needed test_heap instructions were missing.
2016-04-27misc_SUITE: Add missing export of integer_encoding/0Björn Gustavsson
The integer_encoding/1 test is supposed to be run with a tighter timetrap ensure that encoding of integer in BEAM files is efficient enough.
2016-04-27Move test cases from compilation_SUITE to beam_utils_SUITEBjörn Gustavsson
beam_utils_SUITE didn't exist when the two test cases were written.
2016-04-27Merge branch 'xumingthepoet/maint/PR-1008/OTP-13516'Zandra
* xumingthepoet/maint/PR-1008/OTP-13516: Update global_group_SUITE.erl Fix global_group.erl
2016-04-27Merge branch 'egil/erts/profile-erlang-boot'Björn-Egil Dahlberg
2016-04-27Merge branch 'c-rack/fix-erl-dist-protocol-typo/OTP-13517'Rickard Green
* c-rack/fix-erl-dist-protocol-typo/OTP-13517: Fix typo in description of EPMD_DUMP_REQ response
2016-04-27Fix typo in description of EPMD_DUMP_REQ responseConstantin Rack
According to the source code, there is a space before the newline for unused nodes and no space before the newline for active ones. In current documentation, it is exactly opposite. This commit fixes the documentation to match with source code.
2016-04-27Merge branch 'maint-18'Henrik Nord
Conflicts: OTP_VERSION lib/ssl/doc/src/ssl.xml lib/ssl/src/ssl_cipher.erl lib/ssl/src/tls_v1.erl lib/ssl/test/ssl_basic_SUITE.erl
2016-04-27Move complex_guard/1 from compilation_SUITE to guard_SUITEBjörn Gustavsson
2016-04-27Remove compilation_SUITE:guards/1Björn Gustavsson
Obsoleted by guard_SUITE (especially literal_type_tests/1).
2016-04-27Move tests from compilation_SUITE to record_SUITEBjörn Gustavsson
2016-04-27Move bit syntax test cases from compilation_SUITE to bs_match_SUITEBjörn Gustavsson
We used to put code that would crash the compiler into compilation_SUITE_data. That way we would have a failing test case to remind us to fix a bug. Nowadays, we generally fix the bug and write the test case at the same time. Therefore it makes more sense to put the test code directly into a test suite. Move out bin_syntax_1 through bin_syntax_5 test cases. Scrap bin_syntax_6 because it does not longer seems to be relevant. While we are it, rename the fun_shadow/1 test to size_shadow/1. Also make sure that the code produces the correct result.
2016-04-27Remove useless test case compilation_SUITE:otp_2141/1Björn Gustavsson