From d9daff6d87c217ba7d3cba00642710e473e9b226 Mon Sep 17 00:00:00 2001 From: Hans Bolinder Date: Fri, 26 Jun 2015 14:09:43 +0200 Subject: stdlib: Remove deprecated functions in erl_parse and erl_scan The recently added module erl_anno can no longer handle negative line numbers. --- lib/stdlib/doc/src/erl_scan.xml | 185 ++-------------------------------------- 1 file changed, 6 insertions(+), 179 deletions(-) (limited to 'lib/stdlib/doc') diff --git a/lib/stdlib/doc/src/erl_scan.xml b/lib/stdlib/doc/src/erl_scan.xml index 18e988e286..01b845a039 100644 --- a/lib/stdlib/doc/src/erl_scan.xml +++ b/lib/stdlib/doc/src/erl_scan.xml @@ -39,39 +39,15 @@ Erlang tokens.

- - - - - - - - - - - - - - - - - - - - - - - - @@ -87,9 +63,6 @@ - - - @@ -122,25 +95,23 @@ StartLocation, []).

StartLocation indicates the initial location when scanning starts. If StartLocation is a line, - attributes() as well as EndLocation and + Anno as well as EndLocation and ErrorLocation will be lines. If StartLocation is a pair of a line and a column - attributes() takes the form of an opaque compound + Anno takes the form of an opaque compound data type, and EndLocation and ErrorLocation will be pairs of a line and a column. The token - attributes contain information about the column and the + annotations contain information about the column and the line where the token begins, as well as the text of the token (if the text option is given), all of which can - be accessed by calling token_info/1,2, attributes_info/1,2, + be accessed by calling column/1, line/1, location/1, and text/1.

A token is a tuple containing information about - syntactic category, the token attributes, and the actual + syntactic category, the token annotations, and the actual terminal symbol. For punctuation characters (e.g. ;, |) and reserved words, the category and the symbol coincide, and the token is represented by a two-tuple. @@ -172,7 +143,7 @@

Short for [return_comments, return_white_spaces].

text -

Include the token's text in the token attributes. The +

Include the token's text in the token annotation. The text is the part of the input corresponding to the token.

@@ -305,150 +276,6 @@

- - - Return information about a token - -

Returns a list containing information about the token - Token. The order of the - TokenInfoTuples is not - defined. See token_info/2 for - information about specific - TokenInfoTuples.

-

Note that if token_info(Token, TokenItem) returns - undefined for some TokenItem, the - item is not included in TokenInfo.

-
-
- - - - - - Return information about a token - -

Returns a list containing information about the token - Token. If one single - TokenItem is given the returned value is - the corresponding - TokenInfoTuple, or undefined if the - TokenItem has no value. If a list of - TokenItems is given the result is a list of - TokenInfoTuple. The - TokenInfoTuples will - appear with the corresponding TokenItems in - the same order as the TokenItems - appear in the list of TokenItems. - TokenItems with no value are not included - in the list of TokenInfoTuple.

-

The following TokenInfoTuples with corresponding - TokenItems are valid:

- - {category, - category()} -

The category of the token.

-
- {column, - column()} -

The column where the token begins.

-
- {length, integer() > 0} -

The length of the token's text.

-
- {line, - line()} -

The line where the token begins.

-
- {location, - location()} -

The line and column where the token begins, or - just the line if the column unknown.

-
- {symbol, - symbol()} -

The token's symbol.

-
- {text, string()} -

The token's text.

-
-
-
-
- - - Return information about token attributes - -

Returns a list containing information about the token - attributes Attributes. The order of the - AttributeInfoTuples is not defined. - See attributes_info/2 for - information about specific - AttributeInfoTuples.

-

Note that if attributes_info(Token, AttributeItem) - returns undefined for some AttributeItem in - the list above, the item is not included in - AttributesInfo.

-
-
- - - - Return information about a token attributes - - -

Returns a list containing information about the token - attributes Attributes. If one single - AttributeItem is given the returned value is the - corresponding AttributeInfoTuple, - or undefined if the AttributeItem - has no value. If a list of AttributeItem - is given the result is a list of - AttributeInfoTuple. - The AttributeInfoTuples - will appear with the corresponding AttributeItems - in the same order as the AttributeItems - appear in the list of AttributeItems. - AttributeItems with no - value are not included in the list of - AttributeInfoTuple.

-

The following AttributeInfoTuples with - corresponding AttributeItems are valid:

- - {column, - column()} -

The column where the token begins.

-
- {length, integer() > 0} -

The length of the token's text.

-
- {line, - line()} -

The line where the token begins.

-
- {location, - location()} -

The line and column where the token begins, or - just the line if the column unknown.

-
- {text, string()} -

The token's text.

-
-
-
-
- - - Set a token attribute value - -

Sets the value of the line attribute of the token - attributes Attributes.

-

The SetAttributeFun is called with the value of - the line attribute, and is to return the new value of - the line attribute.

-
-
Format an error descriptor -- cgit v1.2.3 From b21f71c1bb79d3979505ad6ad1e496472b38c6b9 Mon Sep 17 00:00:00 2001 From: Hans Bolinder Date: Thu, 17 Dec 2015 12:41:44 +0100 Subject: stdlib: Update erl_parse(3) Calls to map_anno(), fold_anno(), and mapfold_anno() with lists of erl_parse trees have been replaced. Those functions accept lists of erl_parse trees, but it was not the intention when the functions were introduced, and it is not documented. --- lib/stdlib/doc/src/erl_parse.xml | 120 ++++++++++++++++++++++++--------------- 1 file changed, 73 insertions(+), 47 deletions(-) (limited to 'lib/stdlib/doc') diff --git a/lib/stdlib/doc/src/erl_parse.xml b/lib/stdlib/doc/src/erl_parse.xml index 0938b5dec3..13be488c33 100644 --- a/lib/stdlib/doc/src/erl_parse.xml +++ b/lib/stdlib/doc/src/erl_parse.xml @@ -4,7 +4,7 @@
- 19962015 + 19962016 Ericsson AB. All Rights Reserved. @@ -44,20 +44,32 @@ - -

Parse tree for Erlang clause.

+ abstract_clause() +

+ Abstract form of an Erlang clause.

- -

Parse tree for Erlang expression.

+ abstract_expr() +

+ Abstract form of an Erlang expression.

- -

Parse tree for Erlang form.

+ abstract_form() +

+ Abstract form of an Erlang form.

+ + abstract_type() +

+ Abstract form of an Erlang type.

+
+
+ + + @@ -180,7 +192,7 @@

Converts the Erlang data structure Data into an abstract form of type AbsTerm.

The Line option is the line that will - be assigned to each node of the abstract form.

+ be assigned to each node of AbsTerm.

The Encoding option is used for selecting which integer lists will be considered as strings. The default is to use the encoding returned by @@ -196,47 +208,53 @@ - Map a function over the annotations of an abstract form + Map a function over the annotations of a erl_parse tree -

Modifies the abstract form Abstr by applying - Fun on every collection of annotations of the - abstract form. The abstract form is traversed in a - depth-first, left-to-right, fashion. +

Modifies the erl_parse tree Abstr + by applying Fun on each collection of + annotations of the nodes of the erl_parse tree. The + erl_parse tree is traversed in a depth-first, + left-to-right, fashion.

- Fold a function over the annotations of an abstract form + Fold a function over the annotations of a erl_parse tree -

Updates an accumulator by applying Fun on - every collection of annotations of the abstract form - Abstr. The first call to Fun has - AccIn as argument, and the returned accumulator - AccOut is passed to the next call, and so on. - The final value of the accumulator is returned. The abstract - form is traversed in a depth-first, left-to-right, fashion. +

Updates an accumulator by applying Fun on + each collection of annotations of the erl_parse tree + Abstr. The first call to + Fun has AccIn as + argument, and the returned accumulator + AccOut is passed to the next call, and + so on. The final value of the accumulator is returned. The + erl_parse tree is traversed in a depth-first, left-to-right, + fashion.

- Map and fold a function over the annotations of an abstract form + Map and fold a function over the annotations of a + erl_parse tree -

Modifies the abstract form Abstr by applying - Fun on every collection of annotations of the - abstract form, while at the same time updating an - accumulator. The first call to Fun has - AccIn as second argument, and the returned - accumulator AccOut is passed to the next call, - and so on. The modified abstract form as well as the the - final value of the accumulator is returned. The abstract - form is traversed in a depth-first, left-to-right, fashion. +

Modifies the erl_parse tree Abstr + by applying Fun on each collection of + annotations of the nodes of the erl_parse tree, while + at the same time updating an accumulator. The first call to + Fun has AccIn as + second argument, and the returned accumulator + AccOut is passed to the next call, and + so on. The modified erl_parse tree as well as the the + final value of the accumulator are returned. The + erl_parse tree is traversed in a depth-first, + left-to-right, fashion.

@@ -246,12 +264,15 @@ Create new annotations -

Creates an abstract form from a term which has the same - structure as an abstract form, but locations where the - abstract form has annotations. For each location, erl_anno:new/1 is - called, and the annotations replace the location. +

Assumes that Term is a term with the same + structure as a erl_parse tree, but with locations where a + erl_parse tree has collections of annotations. + Returns a erl_parse tree where each location L + has been replaced by the value returned by erl_anno:new(L). + The term Term is traversed in a + depth-first, left-to-right, fashion.

@@ -261,12 +282,14 @@ Return annotations as terms -

Assumes that Term is a term with the same - structure as an abstract form, but with terms, T say, on - those places where an abstract form has annotations. Returns - an abstract form where every term T has been replaced by the - value returned by calling erl_anno:from_term(T). The - term Term is traversed in a depth-first, +

Assumes that Term is a term with the same + structure as a erl_parse tree, but with terms, + T say, where a erl_parse tree has collections + of annotations. Returns a erl_parse tree where each + term T has been replaced by the value returned by + + erl_anno:from_term(T). The term + Term is traversed in a depth-first, left-to-right, fashion.

@@ -277,10 +300,13 @@ Return the representation of annotations -

Returns a term where every collection of annotations Anno of - Abstr has been replaced by the term returned by - calling erl_anno:to_term(Anno). The abstract form is - traversed in a depth-first, left-to-right, fashion. +

Returns a term where each collection of annotations + Anno of the nodes of the erl_parse tree + Abstr has been replaced by the term + returned by + erl_anno:to_term(Anno). The + erl_parse tree is traversed in a depth-first, + left-to-right, fashion.

-- cgit v1.2.3 From dc8e62f33ad0ca7a772ec74d67b6d3e157f639b4 Mon Sep 17 00:00:00 2001 From: Rickard Green Date: Wed, 13 Jan 2016 18:33:42 +0100 Subject: Introduce time warp safe replacement for safe_fixed option The new time warp safe option is safe_fixed_monotonic_time which gives erlang:monotonic_time(). The safe_fixed option was also slightly changed. It now gives erlang:timestamp() instead of erlang:now(). This has however not been documented, so it is considered a compatible change. The above effects both ets, and dets. This commit also include the bugfix OTP-13239 for dets:info(Tab, safe_fixed). The timestamp in the result returned by dets:info(Tab, safe_fixed) was unintentionally broken as a result of the time API rewrites in OTP 18.0. --- lib/stdlib/doc/src/dets.xml | 31 ++++++++++++++++++++++++++++--- lib/stdlib/doc/src/ets.xml | 41 ++++++++++++++++++++++++++++++++++------- 2 files changed, 62 insertions(+), 10 deletions(-) (limited to 'lib/stdlib/doc') diff --git a/lib/stdlib/doc/src/dets.xml b/lib/stdlib/doc/src/dets.xml index a0d3f95b6a..48400733d1 100644 --- a/lib/stdlib/doc/src/dets.xml +++ b/lib/stdlib/doc/src/dets.xml @@ -399,15 +399,40 @@ kept in RAM.

-

{safe_fixed, SafeFixed}. If the table - is fixed, SafeFixed is a tuple {FixedAtTime, [{Pid,RefCount}]}. FixedAtTime is the time when +

{safe_fixed_monotonic_time, SafeFixed}. If the table + is fixed, SafeFixed is a tuple {FixedAtTime, [{Pid,RefCount}]}. + FixedAtTime is the time when the table was first fixed, and Pid is the pid of the process that fixes the table RefCount times. There may be any number of processes in the list. If the table is not fixed, SafeFixed is the atom false.

+

FixedAtTime will correspond to the result + returned by + erlang:monotonic_time/0 + at the time of fixation. The usage of safe_fixed_monotonic_time is + time warp + safe.

-

{version, integer(), the version of the format of +

+ {safe_fixed, SafeFixed}. The same as + {safe_fixed_monotonic_time, SafeFixed} with the exception + of the format and value of FixedAtTime. +

+

+ FixedAtTime will correspond to the result returned by + erlang:timestamp/0 + at the time of fixation. Note that when the system is using + single or multi + time warp + modes this might produce strange results. This + since the usage of safe_fixed is not + time warp + safe. Time warp safe code need to use + safe_fixed_monotonic_time instead.

+
+ +

{version, integer()}, the version of the format of the table.

diff --git a/lib/stdlib/doc/src/ets.xml b/lib/stdlib/doc/src/ets.xml index 7b01109ff8..447fe51130 100644 --- a/lib/stdlib/doc/src/ets.xml +++ b/lib/stdlib/doc/src/ets.xml @@ -488,14 +488,39 @@ Error: fun containing local Erlang function calls Item=fixed, Value=boolean()

Indicates if the table is fixed by any process or not.
- -

Item=safe_fixed, Value={FirstFixed,Info}|false

+ +

Item=safe_fixed|safe_fixed_monotonic_time, Value={FixationTime,Info}|false

-

If the table has been fixed using safe_fixtable/2, - the call returns a tuple where FirstFixed is the +

If the table has been fixed using + safe_fixtable/2, + the call returns a tuple where FixationTime is the time when the table was first fixed by a process, which may or may not be one of the processes it is fixed by right now.

+

The format and value of FixationTime depends on + Item:

+ + safe_fixed +

FixationTime will correspond to the result + returned by + erlang:timestamp/0 + at the time of fixation. Note that when the system is using + single or multi + time warp + modes this might produce strange results. This + since the usage of safe_fixed is not + time warp + safe. Time warp safe code need to use + safe_fixed_monotonic_time instead.

+ + safe_fixed_monotonic_time +

FixationTime will correspond to the result + returned by + erlang:monotonic_time/0 + at the time of fixation. The usage of safe_fixed_monotonic_time is + time warp + safe.

+

Info is a possibly empty lists of tuples {Pid,RefCount}, one tuple for every process the table is fixed by right now. RefCount is the value @@ -1135,9 +1160,11 @@ clean_all_with_value(Tab,X,Key) -> table but never releases it, the memory used by the deleted objects will never be freed. The performance of operations on the table will also degrade significantly.

-

Use info/2 to retrieve information about which - processes have fixed which tables. A system with a lot of - processes fixing tables may need a monitor which sends alarms +

Use + info(Tab, + safe_fixed_monotonic_time) to retrieve information + about which processes have fixed which tables. A system with a lot + of processes fixing tables may need a monitor which sends alarms when tables have been fixed for too long.

Note that for tables of the ordered_set type, safe_fixtable/2 is not necessary as calls to -- cgit v1.2.3 From 264a5e804d6e23bf6c6916887669760cbf243caa Mon Sep 17 00:00:00 2001 From: Rory Byrne Date: Thu, 28 May 2015 19:41:25 +0100 Subject: Speed up supervisor:count_children/1; simple_one_for_one Speed up supervisor:count_children/1 for simple_one_for_one supervisors. This is achieved by avoiding looping through all the child process and verifying that each one is alive. For a supervisor with 100,000 'temporary' children the count-time will drop from approx 25ms to about 0.005ms. For a supervisor with 100,000 'permanent' or 'transient' children the count-time will drop from approx 30ms to about 0.005ms. This avoids having the supervisor block for an extended period while the count takes place. Under normal circumstances the accuracy of the result should also improve since the duration is too short for many processes to die during the count. --- lib/stdlib/doc/src/supervisor.xml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'lib/stdlib/doc') diff --git a/lib/stdlib/doc/src/supervisor.xml b/lib/stdlib/doc/src/supervisor.xml index 24ff251ce3..815bf4a489 100644 --- a/lib/stdlib/doc/src/supervisor.xml +++ b/lib/stdlib/doc/src/supervisor.xml @@ -543,7 +543,10 @@

active - the count of all actively running child processes - managed by this supervisor.

+ managed by this supervisor. In the case of simple_one_for_one + supervisors, no check is carried out to ensure that each child process + is still alive, though the result provided here is likely to be very + accurate unless the supervisor is heavily overloaded.

supervisors - the count of all children marked as -- cgit v1.2.3