Bug 212886
| 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 | ||
Jefferson Junior
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
| Attachments | ||
|---|---|---|
| Add attachment proposed patch, testcase, etc. |
Radar WebKit Bug Importer
<rdar://problem/64188468>
Rick Waldron
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.
Rick Waldron
Fixing this issue would bring JSC into 100% interop with V8 and SpiderMonkey