Skip to content

Commit 71ef24b

Browse files
author
Kevin Smith
committed
Class names should be parsed in strict mode
1 parent 630f662 commit 71ef24b

File tree

3 files changed

+10
-5
lines changed

3 files changed

+10
-5
lines changed

lib/Parser/Parse.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7859,6 +7859,9 @@ ParseNodeClass * Parser::ParseClassDecl(BOOL isDeclaration, LPCOLESTR pNameHint,
78597859
cbMinConstructor = this->GetScanner()->IecpMinTok();
78607860
}
78617861

7862+
BOOL strictSave = m_fUseStrictMode;
7863+
m_fUseStrictMode = TRUE;
7864+
78627865
this->GetScanner()->Scan();
78637866
if (m_token.tk == tkID)
78647867
{
@@ -7875,9 +7878,6 @@ ParseNodeClass * Parser::ParseClassDecl(BOOL isDeclaration, LPCOLESTR pNameHint,
78757878
GetCurrentFunctionNode()->grfpn |= PNodeFlags::fpnArguments_overriddenByDecl;
78767879
}
78777880

7878-
BOOL strictSave = m_fUseStrictMode;
7879-
m_fUseStrictMode = TRUE;
7880-
78817881
ParseNodeVar * pnodeDeclName = nullptr;
78827882
if (isDeclaration)
78837883
{

test/es6/classes.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,12 @@ var tests = [
7272
assert.throws(function () { eval("class { }") }, SyntaxError);
7373
}
7474
},
75+
{
76+
name: "Class names are parsed in strict mode",
77+
body: function () {
78+
assert.throws(function () { eval("class l\u0065t { }") }, SyntaxError);
79+
}
80+
},
7581
{
7682
name: "Class methods may not have an octal name",
7783
body: function () {

test/es6/generators-syntax.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ var tests = [
9696
assert.throws(function () { eval("function* gf() { var gfe = function* yield() { } }"); }, SyntaxError, "Cannot name generator function expression 'yield' in generator body", "The use of a keyword for an identifier is invalid");
9797

9898
assert.throws(function () { eval("function* gf() { class yield { } }"); }, SyntaxError, "Cannot name class 'yield' in generator body", "The use of a keyword for an identifier is invalid");
99+
assert.throws(function () { eval("function f() { class yield { } }"); }, SyntaxError, "Can name class 'yield'");
99100

100101
// TODO: Is this correct or a spec bug that will be fixed?
101102
// var yield = 10; function* gf() { var o = { yield }; } gf();
@@ -134,8 +135,6 @@ var tests = [
134135
assert.doesNotThrow(function () { eval("function f() { function* yield() { } }"); }, "Can name generator function 'yield' in non-generator body");
135136
assert.doesNotThrow(function () { eval("function f() { var fe = function yield() { } }"); }, "Can name function expression 'yield' in non-generator body");
136137

137-
assert.doesNotThrow(function () { eval("function f() { class yield { } }"); }, "Can name class 'yield' in non-generator body");
138-
139138
assert.doesNotThrow(function () { eval("function f() { var o = { yield: 10 } }"); }, "Can name object literal property 'yield' in non-generator body");
140139
assert.doesNotThrow(function () { eval("function f() { var o = { get yield() { } } }"); }, "Can name accessor method 'yield' in non-generator body");
141140
assert.doesNotThrow(function () { eval("function f() { var o = { yield() { } } }"); }, "Can name concise method 'yield' in non-generator body");

0 commit comments

Comments
 (0)