From c1aa31ae868e978cb073fe018a3867d900fef7b1 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 - 2016: the Unicode change affected what was considered whitespace (#300 / 24dad16327b7cbbdf67805e45e58c54abe558f63) - 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 8bcd603733f..c1dbf44ffb0 100644 --- a/spec.html +++ b/spec.html @@ -41513,8 +41513,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, where Unicode 5.1 is mandated. In particular, this caused U+180E (MONGOLIAN VOWEL SEPARATOR), which was in the Zs category and thus treated as whitespace in ECMAScript 2015, to be moved to the Cf category (as of Unicode 6.3.0). This will cause whitespace-sensitive methods to behave differently - consider: `"\u180e".trim().length` which would be `0` in previous editions, but `1` in ECMAScript 2016 and later.

: 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.

@@ -41552,6 +41554,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.notify` has been renamed `Atomics.wake` to prevent confusion with `Atomics.wait`

+

& in ECMAScript 2019, the number of Jobs enqueued by `await` was reduced.

Colophon