diff --git a/spec.html b/spec.html
index 80bf41f6fe..19530ef8ea 100644
--- a/spec.html
+++ b/spec.html
@@ -1353,7 +1353,7 @@
Object Internal Methods and Internal Slots
summarizes the essential internal methods used by this specification that are applicable to all objects created or manipulated by ECMAScript code. Every object must have algorithms for all of the essential internal methods. However, all objects do not necessarily use the same algorithms for those methods.
The “Signature” column of and other similar tables describes the invocation pattern for each internal method. The invocation pattern always includes a parenthesized list of descriptive parameter names. If a parameter name is the same as an ECMAScript type name then the name describes the required type of the parameter value. If an internal method explicitly returns a value, its parameter list is followed by the symbol “→” and the type name of the returned value. The type names used in signatures refer to the types defined in clause augmented by the following additional names. “any” means the value may be any ECMAScript language type.
In addition to its parameters, an internal method always has access to the object that is the target of the method invocation.
- An internal method implicitly returns a Completion Record.
+ An internal method implicitly returns a Completion Record, either a normal completion that wraps a value of the return type shown in its invocation pattern, or a throw completion.
@@ -1555,10 +1555,19 @@ Definitions:
All references to SameValue are according to the definition of the SameValue algorithm.
+ Return value:
+ The value returned by any internal method must be a Completion Record with either:
+
+ - [[Type]] = ~normal~, [[Target]] = ~empty~, and [[Value]] = a value of the "normal return type" shown below for that internal method, or
+ - [[Type]] = ~throw~, [[Target]] = ~empty~, and [[Value]] = any ECMAScript language value.
+
+
+ An internal method must not return a completion with [[Type]] = ~continue~, ~break~, or ~return~.
+
[[GetPrototypeOf]] ( )
-
- The Type of the return value must be either Object or Null.
+ The normal return type is either Object or Null.
-
If target is non-extensible, and [[GetPrototypeOf]] returns a value _V_, then any future calls to [[GetPrototypeOf]] should return the SameValue as _V_.
@@ -1570,7 +1579,7 @@
[[GetPrototypeOf]] ( )
[[SetPrototypeOf]] ( _V_ )
-
- The Type of the return value must be Boolean.
+ The normal return type is Boolean.
-
If target is non-extensible, [[SetPrototypeOf]] must return *false*, unless _V_ is the SameValue as the target's observed [[GetPrototypeOf]] value.
@@ -1579,7 +1588,7 @@
[[SetPrototypeOf]] ( _V_ )
[[IsExtensible]] ( )
-
- The Type of the return value must be Boolean.
+ The normal return type is Boolean.
-
If [[IsExtensible]] returns *false*, all future calls to [[IsExtensible]] on the target must return *false*.
@@ -1588,7 +1597,7 @@
[[IsExtensible]] ( )
[[PreventExtensions]] ( )
-
- The Type of the return value must be Boolean.
+ The normal return type is Boolean.
-
If [[PreventExtensions]] returns *true*, all future calls to [[IsExtensible]] on the target must return *false* and the target is now considered non-extensible.
@@ -1597,7 +1606,7 @@
[[PreventExtensions]] ( )
[[GetOwnProperty]] ( _P_ )
-
- The Type of the return value must be either Property Descriptor or Undefined.
+ The normal return type is either Property Descriptor or Undefined.
-
If the Type of the return value is Property Descriptor, the return value must be a complete property descriptor.
@@ -1621,7 +1630,7 @@
[[GetOwnProperty]] ( _P_ )
[[DefineOwnProperty]] ( _P_, _Desc_ )
-
- The Type of the return value must be Boolean.
+ The normal return type is Boolean.
-
[[DefineOwnProperty]] must return *false* if _P_ has previously been observed as a non-configurable own property of the target, unless either:
@@ -1641,7 +1650,7 @@
[[DefineOwnProperty]] ( _P_, _Desc_ )
[[HasProperty]] ( _P_ )
-
- The Type of the return value must be Boolean.
+ The normal return type is Boolean.
-
If _P_ was previously observed as a non-configurable own data or accessor property of the target, [[HasProperty]] must return *true*.
@@ -1650,7 +1659,7 @@
[[HasProperty]] ( _P_ )
[[Get]] ( _P_, _Receiver_ )
-
- The return value must be an ECMAScript language value.
+ The normal return type is any ECMAScript language type.
-
If _P_ was previously observed as a non-configurable, non-writable own data property of the target with value _V_, then [[Get]] must return the SameValue as _V_.
@@ -1662,7 +1671,7 @@
[[Get]] ( _P_, _Receiver_ )
[[Set]] ( _P_, _V_, _Receiver_ )
-
- The Type of the return value must be Boolean.
+ The normal return type is Boolean.
-
If _P_ was previously observed as a non-configurable, non-writable own data property of the target, then [[Set]] must return *false* unless _V_ is the SameValue as _P_'s [[Value]] attribute.
@@ -1674,7 +1683,7 @@
[[Set]] ( _P_, _V_, _Receiver_ )
[[Delete]] ( _P_ )
-
- The Type of the return value must be Boolean.
+ The normal return type is Boolean.
-
If _P_ was previously observed as a non-configurable own data or accessor property of the target, [[Delete]] must return *false*.
@@ -1683,7 +1692,7 @@
[[Delete]] ( _P_ )
[[OwnPropertyKeys]] ( )
-
- The return value must be a List.
+ The normal return type is List.
-
The returned List must not contain any duplicate entries.
@@ -1701,13 +1710,13 @@
[[OwnPropertyKeys]] ( )
[[Call]] ( )
-
- The return value must be an ECMAScript language value.
+ The normal return type is any ECMAScript language type.
[[Construct]] ( )
-
- The Type of the return value must be Object.
+ The normal return type is Object.