Age | Commit message (Collapse) | Author |
|
* ia/inets/deprecate:
inets: Fix race condition in httpc
inets: Remove use of httpd_conf:clean/1 and httpd_conf:custom_clean/3
inets: Remove use of httpd_conf:make_integer/1
inets: Deprecate functions in util module httpd_conf.erl
|
|
These functions should not be used, there exists better
functions in the standard libraries.
|
|
* sverk/ets-file2tab-preserve-opts/OTP-12814:
stdlib: Make ets:file2tab preserve read/write_concurrency
stdlib: Fix ets_SUITE:tabfile_ext4
|
|
In OTP 17 it is possible to mix types such as dict:dict() and
dict:dict(_, _) outside of the dict module (and similarly for some
other opaque types in STDLIB), but the results are unfortunately
possibly invalid warnings in users' code. In OTP 18 parameterized
opaque types with the same name but with different number of
parameters are no longer compatible when seen from outside of the
module where the types are declared.
The types in STDLIB have been updated accordingly; for instance
-opaque dict() :: dict(_, _).
has been replaced by
-type dict() :: dict(_, _).
|
|
|
|
Add new functions erl_parse:type_inop_prec() and
erl_parse:type_preop_prec().
Get rid of paren_type used for parentheses in types.
|
|
Several people have requested that the assert macros in EUnit should be
moved out to a separate header file. This patch puts them in
stdlib/include/assert.hrl, which gets included by the eunit.hrl file.
Thus, nothing changes for eunit users, but the asserts can now also be
included separately.
|
|
* josevalim/jv-annotate-form-type:
Annotate used types in erl_lint
OTP-12800
|
|
* fishcakez/supervisor_ignore:
Don't store child that returns ignore in simple supervisor
OTP-12793
|
|
With parametrized types and specs, modules using
orddict can be statically checked with dialyzer.
Although orddict have not been builtin types, it is
good and more natural to have its exported types and
specs aligned to builtin types.
|
|
* erlang/pr/745:
Typofix: piecemeal
|
|
|
|
This is a follow up to commit b5ee5c6.
Similar to function calls, we also need to annotate used types
on call site since this information is used later on when showing
undefined type errors.
Notice we don't need to annotate the type export because
it is an attribute and those are always properly annotated.
|
|
* egil/opt-compile-time/OTP-12774:
stdlib: Relax erl_anno_SUITE:is_anno/1 test
Update primary bootstrap
compiler: Use Maps as type information
compiler: Use Maps instead of dict in beam_jump
compiler: Use cerl_sets instead of gb_sets in beam_type
compiler: Use Maps instead of gb_trees in beam_dead
compiler: Use cerl_sets instead of gb_sets in beam_jump
compiler: Use cerl_sets instead of sets in v3_kernel
compiler: Use cerl_sets instead of gb_sets in sys_core_fold
compiler: Add cerl_sets module
compiler: Scope uses gb_sets not gb_trees
beam_dict: Use Maps to map function name indices
beam_dict: Use Maps to map line indices
beam_dict: Use Maps to map atom indices
v3_codegen: Use Maps to map local functions
v3_life: Refactor variable db
compiler: Use lc instead of map/1 in v3_codegen
stdlib: Optimize erl_anno:is_string/1
Conflicts:
bootstrap/lib/kernel/ebin/inet_dns.beam
bootstrap/lib/stdlib/ebin/erl_anno.beam
bootstrap/lib/stdlib/ebin/erl_lint.beam
|
|
|
|
* josevalim/jv-annotate-form:
Only annotate forms when linting in the compiler
OTP-12772
|
|
If a child of a simple_one_for_one returns ignore from its start
function no longer store the child for any restart type. It is not
possible to restart or delete the child because the supervisor is a
simple_one_for_one.
Previously a simple_one_for_one would crash, potentially without
shutting down all of its children, when it tried to shutdown a child
with undefined pid.
Previous only one undefined pid child was stored in a simple_one_for_one
supervisor no matter how many times the child start function returned
ignore.
|
|
* bjorn/stdlib/erl_lint:
Remove final (?) vestiges of support for parameterized modules
|
|
A lot of time spent on linting is due to eval_file_attribute/2
function that recursively traverses all the AST, annotating
the file name on the AST nodes. This traversal happens so
it is easier to add errors and warnings later on by simply
introspecting the node.
This patch changes eval_file_attribute/2 to only annotate
forms (i.e. attributes and functions) and rely on the #lint
record to keep the proper file information (which it already
did before this patch).
To summarize, both pre scan and pos scan will use the annotated
file attribute in forms, however form/2 already maintains the
proper file in #lint, which we pass around when retrieving the
location information.
After this patch, linting of a regular erlang module with 500LOC
became twice faster when measured with eprof.
|
|
* sverk/ets-tab2file-syn/OTP-12737:
stdlib: Add 'sync' option to ets:tab2file/3
|
|
erl_anno:is_string/1 is frequently called from erl_lint
and thus affects compile time.
Using is_list/1 for is_string/1 is sufficient in this case.
|
|
Parameterized modules were removed in cdf8060868575, but a few
vestiges still remained in erl_lint.
|
|
|
|
* josevalim/jv-nowarn-bif-clash:
Cache nowarn_bif_clash functions in erl_lint
OTP-12754
|
|
* josevalim/patch-4:
Speed up linting by not traversing filenames in erl_anno
|
|
* richcarl/add-uptime-function:
Add uptime() shell command
OTP-12752
|
|
|
|
|
|
|
|
|
|
Compilation on Erlang 18.0-rc2 is about 10% slower than in Erlang 17.
After some debugging, we have noticed that linting is on average 30%
to 50% slower being the main responsible for the performance reduction.
Later profiling revealed is_filename/1 to be the biggest culprit. The change
in this commit brings compilation times to about the same times as Erlang 17.
Note this commit doesn't change the compiler behaviour compared to Erlang
17 because we didn't sanity check the value given to the file annotation in the
past. I would say checking the filename is not worth it if it means compilation
becomes 10% slower on average. After all, there are many places in the
compiler where it will fail if we give it a malformed tree, I wouldn't then special
case file annotation.
|
|
When compiling parser files, because they rely heavily
on inline annotations, retrieving the nowarn_bif_clash
information from the compiler options is expensive.
This patch stores nowarn_bif_clash in the lint record.
By using erlc +'{eprof,lint_module}' when compiling the
erlang parser, we noticed the time spent on
nowarn_function/2 reduced from 30% to 0.01%.
|
|
to improve the chance of some real disk persistence
before tab2file returns.
|
|
This commit adds a new function, ssl:connection_information/[1,2]
to retrive the connection information from a SSLSocket.
And also, this deprecates a function ssl:connection_info/1, and
reimplements connection_info/1 with the new function.
|
|
|
|
Together with vertex and edge, label is a core type of digraph module
according to documentation and therefore should be exported as well.
|
|
* bjorn/stdlib/fix-filename-split/OTP-12716:
Correct filename:split(<<"">>)
|
|
* dgud/stdlib/rand/OTP-12586:
stdlib: Document and add normal distributed random value function
stdlib: Add new random functionality/module
|
|
filename:split("") returns [], while filename:split(<<"">>) returns
[<<"/">>].
Since the support in the filename module for binary arguments is
much more recent than support for strings, change
filename:split(<<"">>) so that it returns [].
Noticed-by: KOUCHANG
|
|
* peppe/jcl_mode_improvements:
Fix problem with unitialized edlin text buffer
Fix shell crash when in switch command mode
OTP-12673
|
|
It is needed in various tests. It uses the Ziggurat algorithm, which
is the fastest that I know.
|
|
As the erl_anno module is used by the compiler, it must be included
in the set of modules that are used when building the primary
bootstrap.
|
|
As long as the Erlang Compiler and qlc do not agree on the location of
LC warnings, qlc's own warnings about patterns and filters that always
fail have been silenced.
|
|
|
|
Introduce erl_anno, an abstraction of the second element of tokens and
tuples in the abstract format. The convention that negative line
numbers can be used for silencing compiler warnings will no longer
work in OTP 19; instead the annotation 'generated' is to be used.
|
|
The old random module contains an old algorithm which have flaws
and the api requires the user to invoke seed and or checking if seed have
been invoked, if a non constant seed is to be used.
The api contains the following features:
- The user can invoke rand:unform/[0|1] directly and get a non constant seeding.
- The api is split in functional and non functional functions,
i.e. usage of _s functions will not affect the process dictionary.
- The api contains several algorithms with different characteristics and
can be extended with new algorithms in the future.
- Contains state of the art random number generators.
- Default algorithm is taylor made for erlang to be fast on 64bits machines.
|
|
* bjorn/use-monotonic-time:
supervisor: Correct restart handling
test_server: Use erlang:monotonic_time/0
compile: Teach 'time' option to show three significant decimals
timer: Use monotonic_time/0 in tc/1,2,3
|
|
|
|
fbaa0bec replaced the use of now/0 with erlang:monotonic_time/1 but at
the same time introduced a bug in inPeriod/3 so that it would always
return 'true' (the subtraction Time - Now would always result in
a non-positive number that would always be less than Period).
The symptoms of the bug is that when a child has been restarted the
maximum number of times allowed, the supervisor will terminate,
regardless of how much time that elapses between the restarts.
There was no test case that detected this problem. Add the missing
test case to ensure that this bug stays killed.
Reported-by: Rafał Studnicki
|
|
Also make it possible to copy text buffer from current group
process to the JCL mode
|