| Summary: | Redeclaration of a function* inside a block definition | ||
|---|---|---|---|
| Product: | WebKit | Reporter: | Jefferson Junior <junior.jefferson> |
| Component: | JavaScriptCore | Assignee: | Nobody <webkit-unassigned> |
| Status: | NEW --- | ||
| Severity: | Normal | CC: | rwaldron, webkit-bug-importer |
| Priority: | P2 | Keywords: | InRadar |
| Version: | Other | ||
| Hardware: | PC | ||
| OS: | Linux | ||
This bug affects every combination with a lexical declaration in a block, in non-strict mode code (strict mode code is correct).
{ async function f() {} async function f() {} }
{ async function f() {} async function* f() {} }
{ async function* f() {} async function f() {} }
{ async function* f() {} async function* f() {} }
{ async function f() {} class f {} }
{ async function* f() {} class f {} }
{ async function f() {} const f = 0 }
{ async function* f() {} const f = 0 }
{ async function f() {} function f() {} }
{ async function* f() {} function f() {} }
{ async function f() {} function* f() {} }
{ async function* f() {} function* f() {} }
{ async function f() {} let f }
{ async function* f() {} let f }
{ async function f() {} var f }
{ async function* f() {} var f }
{ class f {} async function f() {} }
{ class f {} async function* f() {} }
{ class f {} function f() {} }
{ class f {} function* f() {} }
{ const f = 0; async function f() {} }
{ const f = 0; async function* f() {} }
{ const f = 0; function f() {} }
{ const f = 0; function* f() {} }
{ function f() {} async function f() {} }
{ function f() {} async function* f() {} }
{ function f() {} class f {} }
{ function f() {} const f = 0 }
{ function f() {} function* f() {} }
{ function f() {} let f }
{ function f() {} var f }
{ function* f() {} async function f() {} }
{ function* f() {} async function* f() {} }
{ function* f() {} class f {} }
{ function* f() {} const f = 0 }
{ function* f() {} function f() {} }
{ function* f() {} function* f() {} }
{ function* f() {} let f }
{ function* f() {} var f }
{ async function f() {}; { var f; } }
{ async function* f() {}; { var f; } }
{ function f() {} { var f; } }
{ function* f() {}; { var f; } }
{ let f; async function f() {} }
{ let f; async function* f() {} }
{ let f; function f() {} }
{ let f; function* f() {} }
{ var f; async function f() {} }
{ var f; async function* f() {} }
{ var f; function f() {} }
{ var f; function* f() {} }
{ async function f() {}; var f; }
{ async function* f() {}; var f; }
{ function f() {}; var f; }
{ function* f() {}; var f; }
These fail in both strict mode code and non-strict mode code:
{ { var f; } async function f() {}; }
{ { var f; } async function* f() {}; }
{ { var f; } function f() {} }
{ { var f; } function* f() {}; }
{ var f; async function f() {} }
{ var f; async function* f() {} }
{ var f; function f() {} }
{ var f; function* f() {} }
In all cases show here, a SyntaxError exception should be thrown at parse time.
Fixing this issue would bring JSC into 100% interop with V8 and SpiderMonkey |
Hi everyone, I found a case of redeclaration of a generator function inside a block definition. version: 262693 OS: Linux Ubuntu 19.10 x64 steps to reproduce: { function* f() { yield 1 } function f() { print(2) } } f() Actual results: 2 Expected results: SyntaxError: Identifier 'f' has already been declared V8, SpiderMonkey works as expected. cinfuzz