Bug 153441 - Global lexical declarations should shadow configurable global properties
Summary: Global lexical declarations should shadow configurable global properties
Status: RESOLVED DUPLICATE of bug 148763
Alias: None
Product: WebKit
Classification: Unclassified
Component: JavaScriptCore (show other bugs)
Version: WebKit Nightly Build
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Ryosuke Niwa
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2016-01-25 13:18 PST by Elliott Sprehn
Modified: 2016-06-23 11:30 PDT (History)
6 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Elliott Sprehn 2016-01-25 13:18:54 PST
ex.

class Node { }

SyntaxError: Can't create duplicate variable that shadows a global property: 'Node'

but you can write

var Node = class Node { }

this works fine in Chrome and Firefox 45.
Comment 1 Elliott Sprehn 2016-06-23 11:13:10 PDT
This is still broken, I think something is wrong in your lexical scoping.
Comment 2 Elliott Sprehn 2016-06-23 11:14:58 PDT
I just checked today's nightly: r202375 and it still happens.
Comment 3 Adam Klein 2016-06-23 11:22:11 PDT
In general, it seems that JSC refuses to create lexical bindings that shadow configurable properties on the global object, contra the spec (see https://tc39.github.io/ecma262/#sec-hasrestrictedglobalproperty). Here's a DOM-less repro:

>>> let Array = 5
Exception: SyntaxError: Can't create duplicate variable that shadows a global property: 'Array'

or one with a self-created property:

>>> Object.defineProperty(this, 'foo', {value: 5, configurable: true, writable: true})
[object global]
>>> let foo = 10
Exception: SyntaxError: Can't create duplicate variable that shadows a global property: 'Foo'
Comment 4 Saam Barati 2016-06-23 11:30:12 PDT

*** This bug has been marked as a duplicate of bug 148763 ***