From 16f66d9995391a544dba6acd735bbc2ecc278e05 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Fri, 13 Sep 2019 14:05:47 -0700 Subject: [PATCH] Editorial: update Annex E with incompatibilities from previous editions (#1698) - 2016: the Unicode change affected what was considered whitespace (#300 / 24dad16327b7cbbdf67805e45e58c54abe558f63) - 2017: the latest version of Unicode is mandated (#620) - 2018: changed tagged template literal objects to be cached per source location rather than per realm (#890) - 2019: Atomics.wake was renamed to Atomics.notify (#1220) - 2019: `await` was changed to require fewer ticks (#1250) --- spec.html | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/spec.html b/spec.html index ab1b9769cd2..7a3323a68a0 100644 --- a/spec.html +++ b/spec.html @@ -42788,8 +42788,10 @@

Corrections and Clarifications in ECMAScript 2015 with Possible Compatibilit

Additions and Changes That Introduce Incompatibilities with Prior Editions

-

: In ECMAScript 2015, ToNumber applied to a String value now recognizes and converts |BinaryIntegerLiteral| and |OctalIntegerLiteral| numeric strings. In previous editions such strings were converted to *NaN*.

: In ECMAScript 2015, Function calls are not allowed to return a Reference value.

+

: In ECMAScript 2015, ToNumber applied to a String value now recognizes and converts |BinaryIntegerLiteral| and |OctalIntegerLiteral| numeric strings. In previous editions such strings were converted to *NaN*.

+

: In ECMAScript 2018, Template objects are canonicalized based on Parse Node (source location), instead of per Realm as in previous editions.

+

: In ECMASCript 2016, Unicode 8.0.0 or higher is mandated, as opposed to ECMAScript 2015 which mandated Unicode 5.1. In particular, this caused U+180E MONGOLIAN VOWEL SEPARATOR, which was in the `Space_Separator` (`Zs`) category and thus treated as whitespace in ECMAScript 2015, to be moved to the `Format` (`Cf`) category (as of Unicode 6.3.0). This causes whitespace-sensitive methods to behave differently. For example, `"\u180E".trim().length` was `0` in previous editions, but `1` in ECMAScript 2016 and later. Additionally, ECMAScript 2017 mandated always using the latest version of the Unicode standard.

: In ECMAScript 2015, the valid code points for an |IdentifierName| are specified in terms of the Unicode properties “ID_Start” and “ID_Continue”. In previous editions, the valid |IdentifierName| or |Identifier| code points were specified by enumerating various Unicode code point categories.

: In ECMAScript 2015, Automatic Semicolon Insertion adds a semicolon at the end of a do-while statement if the semicolon is missing. This change aligns the specification with the actual behaviour of most existing implementations.

: In ECMAScript 2015, it is no longer an early error to have duplicate property names in Object Initializers.

@@ -42827,6 +42829,8 @@

Additions and Changes That Introduce Incompatibilities with Prior Editions In ECMAScript 2015, If the _pattern_ argument is a RegExp instance and the _flags_ argument is not *undefined*, a new RegExp instance is created just like _pattern_ except that _pattern_'s flags are replaced by the argument _flags_. In previous editions a *TypeError* exception was thrown when _pattern_ was a RegExp instance and _flags_ was not *undefined*.

In ECMAScript 2015, the RegExp prototype object is not a RegExp instance. In previous editions it was a RegExp instance whose pattern is the empty string.

In ECMAScript 2015, `"source"`, `"global"`, `"ignoreCase"`, and `"multiline"` are accessor properties defined on the RegExp prototype object. In previous editions they were data properties defined on RegExp instances.

+

: In ECMAScript 2019, `Atomics.wake` has been renamed to `Atomics.notify` to prevent confusion with `Atomics.wait`.

+

, : In ECMAScript 2019, the number of Jobs enqueued by `await` was reduced, which could create an observable difference in resolution order between a `then()` call and an `await` expression.

Colophon