Axel Rauschmayer (2015-02-14T21:45:59.000Z)
> On 14 Feb 2015, at 22:26, Mark S. Miller <erights at google.com> wrote:
> 
> On Sat, Feb 14, 2015 at 1:21 PM, Axel Rauschmayer <axel at rauschma.de <mailto:axel at rauschma.de>> wrote:
> But it’s not an error! Either of the following two classes fail later, when you instantiate them, but not right away.
> 
> ```js
> const X = null;
> class C extends X {}
> 
> class D extends null {}
> ```
> 
> I didn't mean to imply an early error. The "extends X" can only produce a dynamic error, so I'm arguing that "extends null" should do the same.

When I say “early”, I don’t mean “static”, I mean: dynamically, when the class definition is evaluated, not later when the class is instantiated via `new`.

I’m not seeing a dynamic error in the spec when the `extends` clause is null (step 6e): https://people.mozilla.org/~jorendorff/es6-draft.html#sec-runtime-semantics-classdefinitionevaluation <https://people.mozilla.org/~jorendorff/es6-draft.html#sec-runtime-semantics-classdefinitionevaluation>


> 
> Or dynamically switching from "derived" to "base" (but you seem to be saying that doing this dynamically is not a good idea).
> 
> Dynamically switching from derived to base does not work, because our super semantics depends statically on the difference.


Ah, checked statically, I wasn’t aware! Hadn’t found the check beforehand. Searched some more and it is indeed there, in 14.5.1.

-- 
Dr. Axel Rauschmayer
axel at rauschma.de
rauschma.de



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20150214/69797d2e/attachment-0001.html>
d at domenic.me (2015-02-21T00:45:36.364Z)
On 14 Feb 2015, at 22:26, Mark S. Miller <erights at google.com> wrote:

> I didn't mean to imply an early error. The "extends X" can only produce a dynamic error, so I'm arguing that "extends null" should do the same.

When I say “early”, I don’t mean “static”, I mean: dynamically, when the class definition is evaluated, not later when the class is instantiated via `new`.

I’m not seeing a dynamic error in the spec when the `extends` clause is null (step 6e): https://people.mozilla.org/~jorendorff/es6-draft.html#sec-runtime-semantics-classdefinitionevaluation <https://people.mozilla.org/~jorendorff/es6-draft.html#sec-runtime-semantics-classdefinitionevaluation>


> 
> Or dynamically switching from "derived" to "base" (but you seem to be saying that doing this dynamically is not a good idea).
> 
> Dynamically switching from derived to base does not work, because our super semantics depends statically on the difference.


Ah, checked statically, I wasn’t aware! Hadn’t found the check beforehand. Searched some more and it is indeed there, in 14.5.1.