diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index d241ed7226..6da1e74c3c 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -3061,7 +3061,7 @@ namespace ts { if (!(name.kind === SyntaxKind.ComputedPropertyName || name.kind === SyntaxKind.ElementAccessExpression)) { return false; } - const expr = isElementAccessExpression(name) ? name.argumentExpression : name.expression; + const expr = isElementAccessExpression(name) ? skipParentheses(name.argumentExpression) : name.expression; return !isStringOrNumericLiteralLike(expr) && !isSignedNumericLiteral(expr) && !isWellKnownSymbolSyntactically(expr); diff --git a/tests/baselines/reference/propertyAssignmentOnParenthesizedNumber.symbols b/tests/baselines/reference/propertyAssignmentOnParenthesizedNumber.symbols new file mode 100644 index 0000000000..9cdc888f1f --- /dev/null +++ b/tests/baselines/reference/propertyAssignmentOnParenthesizedNumber.symbols @@ -0,0 +1,8 @@ +=== tests/cases/conformance/salsa/bug38934.js === +var x = {}; +>x : Symbol(x, Decl(bug38934.js, 0, 3)) + +// should not crash and also should not result in a property '0' on x. +x[(0)] = 1; +>x : Symbol(x, Decl(bug38934.js, 0, 3)) + diff --git a/tests/baselines/reference/propertyAssignmentOnParenthesizedNumber.types b/tests/baselines/reference/propertyAssignmentOnParenthesizedNumber.types new file mode 100644 index 0000000000..78c24be33c --- /dev/null +++ b/tests/baselines/reference/propertyAssignmentOnParenthesizedNumber.types @@ -0,0 +1,14 @@ +=== tests/cases/conformance/salsa/bug38934.js === +var x = {}; +>x : {} +>{} : {} + +// should not crash and also should not result in a property '0' on x. +x[(0)] = 1; +>x[(0)] = 1 : 1 +>x[(0)] : any +>x : {} +>(0) : 0 +>0 : 0 +>1 : 1 + diff --git a/tests/cases/conformance/salsa/propertyAssignmentOnParenthesizedNumber.ts b/tests/cases/conformance/salsa/propertyAssignmentOnParenthesizedNumber.ts new file mode 100644 index 0000000000..7bfd76959a --- /dev/null +++ b/tests/cases/conformance/salsa/propertyAssignmentOnParenthesizedNumber.ts @@ -0,0 +1,8 @@ +// @allowJs: true +// @checkJs: true +// @noEmit: true +// @Filename: bug38934.js + +var x = {}; +// should not crash and also should not result in a property '0' on x. +x[(0)] = 1;