Age | Commit message (Collapse) | Author | |
---|---|---|---|
2017-11-30 | Add syntax in try/catch to retrieve the stacktrace directly | Björn Gustavsson | |
This commit adds a new syntax for retrieving the stacktrace without calling erlang:get_stacktrace/0. That allow us to deprecate erlang:get_stacktrace/0 and ultimately remove it. The problem with erlang:get_stacktrace/0 is that it can keep huge terms in a process for an indefinite time after an exception. The stacktrace can be huge after a 'function_clause' exception or a failed call to a BIF or operator, because the arguments for the call will be included in the stacktrace. For example: 1> catch abs(lists:seq(1, 1000)). {'EXIT',{badarg,[{erlang,abs, [[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20|...]], []}, {erl_eval,do_apply,6,[{file,"erl_eval.erl"},{line,674}]}, {erl_eval,expr,5,[{file,"erl_eval.erl"},{line,431}]}, {shell,exprs,7,[{file,"shell.erl"},{line,687}]}, {shell,eval_exprs,7,[{file,"shell.erl"},{line,642}]}, {shell,eval_loop,3,[{file,"shell.erl"},{line,627}]}]}} 2> erlang:get_stacktrace(). [{erlang,abs, [[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22, 23,24|...]], []}, {erl_eval,do_apply,6,[{file,"erl_eval.erl"},{line,674}]}, {erl_eval,expr,5,[{file,"erl_eval.erl"},{line,431}]}, {shell,exprs,7,[{file,"shell.erl"},{line,687}]}, {shell,eval_exprs,7,[{file,"shell.erl"},{line,642}]}, {shell,eval_loop,3,[{file,"shell.erl"},{line,627}]}] 3> We can extend the syntax for clauses in try/catch to optionally bind the stacktrace to a variable. Here is an example using the current syntax: try Expr catch C:E -> Stk = erlang:get_stacktrace(), . . . In the new syntax, it would look like: try Expr catch C:E:Stk -> . . . Only a variable (not a pattern) is allowed in the stacktrace position, to discourage matching of the stacktrace. (Matching would also be expensive, because the raw format of the stacktrace would have to be converted to the cooked form before matching.) Note that: try Expr catch E -> . . . is a shorthand for: try Expr catch throw:E -> . . . If the stacktrace is to be retrieved for a throw, the 'throw:' prefix must be explicitly included: try Expr catch throw:E:Stk -> . . . | |||
2017-11-28 | Merge branch 'maint' | Hans Bolinder | |
* maint: dialyzer: Extend the map implementation's handling of ?unit dialyzer: Use string:find() instead of string:str() | |||
2017-11-22 | dialyzer: Extend the map implementation's handling of ?unit | Hans Bolinder | |
The Maps implementation handles ?unit in more cases. Exactly when t_is_none_or_unit() is to be called is not clear to me. The added cases are about a map type being ?unit, but the key or the value of an association can also be ?unit, but that is not always checked. | |||
2017-11-22 | dialyzer: Use string:find() instead of string:str() | Hans Bolinder | |
2017-11-20 | Merge branch 'lukas/stdlib/maps_iterators/OTP-14012' | Lukas Larsson | |
* lukas/stdlib/maps_iterators/OTP-14012: erts: Limit size of first iterator for hashmaps Update primary bootstrap Update preloaded modules erts: Remove erts_internal:maps_to_list/2 stdlib: Make io_lib and io_lib_pretty use maps iterator erts: Implement batching maps:iterator erts: Implement maps path iterator erts: Implement map iterator using a stack stdlib: Introduce maps iterator API Conflicts: bootstrap/lib/stdlib/ebin/io_lib.beam bootstrap/lib/stdlib/ebin/io_lib_pretty.beam erts/emulator/beam/bif.tab erts/preloaded/ebin/erlang.beam erts/preloaded/ebin/erts_internal.beam erts/preloaded/ebin/zlib.beam | |||
2017-11-14 | Merge branch 'maint' | Hans Bolinder | |
* maint: dialyzer: Display error messages without call stack | |||
2017-11-10 | dialyzer: Display error messages without call stack | Hans Bolinder | |
As of commit 12b379 many of the reasons displayed after "Analysis failed with error:" erroneously include a call stack. The bug is now corrected. The bug was pointed out in http://erlang.org/pipermail/erlang-questions/2017-October/093838.html. | |||
2017-10-13 | erts: Implement maps path iterator | Lukas Larsson | |
2017-10-10 | Merge branch 'maint' | Lars Thorsen | |
2017-10-10 | Merge branch 'lars/doc-cleanup/OTP-14475' into maint | Lars Thorsen | |
* lars/doc-cleanup/OTP-14475: [edoc] Remove unused module otpsgml_layout.erl Remove unused files from the documentation build | |||
2017-09-28 | Remove unused files from the documentation build | Lars Thorsen | |
2017-09-26 | Merge branch 'maint' | Henrik Nord | |
2017-09-22 | Update release notes | Erlang/OTP | |
2017-09-22 | Update version numbers | Erlang/OTP | |
2017-09-20 | Merge branch 'maint' | Dan Gudmundsson | |
* maint: erts, stdlib: Fix xmllint warning Update runtime deps to depend on new stdlib functionality | |||
2017-09-19 | Update runtime deps to depend on new stdlib functionality | Dan Gudmundsson | |
~tw and new string functions are new since OTP-20 (stdlib-3.4) | |||
2017-09-18 | Merge branch 'maint' | Hans Bolinder | |
* maint: dialyzer: Adjust a test case dialyzer: Modify handling of singleton map key types Dialyzer: Rewrite one map type invariant Dialyzer: Rewrite some of the docs of map types | |||
2017-09-18 | Merge branch 'hasse/dialyzer/map_fixes/OTP-14572' into maint | Hans Bolinder | |
* hasse/dialyzer/map_fixes/OTP-14572: dialyzer: Adjust a test case dialyzer: Modify handling of singleton map key types Dialyzer: Rewrite one map type invariant Dialyzer: Rewrite some of the docs of map types | |||
2017-09-15 | Merge branch 'siri/string-new-api' | Siri Hansen | |
* siri/string-new-api: (28 commits) hipe (test): Do not use deprecated functions in string(3) dialyzer (test): Do not use deprecated functions in string(3) eunit (test): Do not use deprecated functions in string(3) system (test): Do not use deprecated functions in string(3) system (test): Do not use deprecated functions in string(3) mnesia (test): Do not use deprecated functions in string(3) Deprecate old string functions observer: Do not use deprecated functions in string(3) common_test: Do not use deprecated functions in string(3) eldap: Do not use deprecated functions in string(3) et: Do not use deprecated functions in string(3) os_mon: Do not use deprecated functions in string(3) debugger: Do not use deprecated functions in string(3) runtime_tools: Do not use deprecated functions in string(3) asn1: Do not use deprecated functions in string(3) compiler: Do not use deprecated functions in string(3) sasl: Do not use deprecated functions in string(3) reltool: Do not use deprecated functions in string(3) kernel: Do not use deprecated functions in string(3) hipe: Do not use deprecated functions in string(3) ... Conflicts: lib/eunit/src/eunit_lib.erl lib/observer/src/crashdump_viewer.erl lib/reltool/src/reltool_target.erl | |||
2017-09-15 | dialyzer (test): Do not use deprecated functions in string(3) | Dan Gudmundsson | |
2017-09-15 | Merge branch 'maint' | Hans Bolinder | |
* maint: dialyzer: Improve check of unknown types | |||
2017-09-15 | dialyzer: Improve check of unknown types | Hans Bolinder | |
The implementation of OTP-14218 (commit 6d3b38a) has a weakness: only a very limited part of the type form is checked. This is now fixed: types not used by specs are checked equally well as types used by specs. The new function erl_types:t_from_form_check_remote() checks usage of remote types. It does not expand used local types, and has (almost) no limits on depth and size. | |||
2017-09-12 | Merge branch 'maint' | Hans Bolinder | |
* maint: dialyzer: Do not fix ETS tables when merging PLTs | |||
2017-09-12 | dialyzer: Do not fix ETS tables when merging PLTs | Hans Bolinder | |
This commit removes the call to ets:safe_fixtable/2 introduced in commit 9458495. ETS memory can now be reclaimed while merging PLTs. | |||
2017-09-12 | dialyzer: Adjust a test case | Hans Bolinder | |
Huge maps are truncated differently by the pretty printer. The reason is that erl_types:is_singleton_type/1 no longer recognizes complex singleton types, which results in a less precise representation of map types. | |||
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. | |||
2017-09-07 | Merge branch 'maint' | Siri Hansen | |
2017-09-06 | Merge pull request #1490 from josevalim/jv-gen-server-continue | Raimo Niskanen | |
Add {continue, Term} and handle_continue/2 to gen_server | |||
2017-09-05 | dialyzer: Improve handling of Unicode | Hans Bolinder | |
2017-08-25 | Merge branch 'maint' | Henrik Nord | |
2017-08-25 | Prepare release | Erlang/OTP | |
2017-08-24 | dialyzer: Fix a bug where merging PLT:s could lose info | Hans Bolinder | |
A missing call to ets:safe_fixtable/2 meant that information was sometimes lost when merging PLT:s. | |||
2017-08-05 | Add {continue, Term} and handle_continue/2 to gen_server | José Valim | |
If the gen_server process needs to perform an action immediately after initialization or to break the execution of a callback into multiple steps, it can return {continue, term()} in place of the time-out or hibernation value, which will immediately invoke the handle_continue/2 callback with the given term. This provides a more accessible approach to after initialization compared to proc_lib+enter_loop that is also guaranteed to be safe. It also allows callbacks that need to do lengthy or stateful work to checkpoint the state throughout multiple iterations. This can be useful, for example, when implementing behaviours on top of gen_server. | |||
2017-07-06 | dialyzer: Do not use deprecated functions in string(3) | Hans Bolinder | |
2017-07-04 | No longer support OTP 19 beam files in Dialyzer | José Valim | |
This commit removes the old code branches that attempted to translate Erlang Abstract Format to Core and relies exclusively on the new debug_info chunk. This is a follow up to #1367. | |||
2017-06-21 | Prepare release | Erlang/OTP | |
2017-06-13 | dialyzer: Run more of analyses in subprocess | Hans Bolinder | |
Memory consumption is marginally reduced. | |||
2017-06-13 | dialyzer: Do not use two records for PLTs | Hans Bolinder | |
Instead of two records, #plt{} with dict:s and #mini_plt{} with ETS tables, one record is used for representing PLT:s in RAM. The #mini_plt{} is the one now used throughout analyses, but it is called #plt{}. When writing the PLT to file, another record is used, #file_plt{} (as before). When creating #file_plt{}, the #plt{} is deleted (it cannot be used for further analyses). | |||
2017-06-13 | dialyzer: Improve compression of an ETS table | Hans Bolinder | |
2017-06-13 | dialyzer: Minor optimizations | Hans Bolinder | |
Avoid some ETS-lookups. Marginal speed-ups. | |||
2017-06-13 | dialyzer: Warn about unused unknown types | Hans Bolinder | |
2017-06-13 | dialyzer: Correct a mistake | Hans Bolinder | |
The arguments of calls to a debug function are no longer evaluated. | |||
2017-06-13 | dialyzer: Rearrange some code to save memory | Hans Bolinder | |
2017-06-13 | dialyzer: Optimize by avoiding some table lookups | Hans Bolinder | |
In typesig: do not look up the module's types unless it is necessary. | |||
2017-06-09 | dialyzer: Improve handling of Unicode | Hans Bolinder | |
2017-05-31 | Revert "Prepare release" | Hans Nilsson | |
This reverts commit eaf8ca41dfa4850437ad270d3897399c9358ced0. | |||
2017-05-30 | Prepare release | Erlang/OTP | |
2017-05-05 | Revert "Prepare release" | Raimo Niskanen | |
This reverts commit dc57404252c47520f352834ad9be45ad684f96c9. | |||
2017-05-04 | Prepare release | Erlang/OTP | |
2017-05-04 | Update copyright year | Raimo Niskanen | |