From 8adc6ca6aa839b93f52fb082f52c0ffb04b78d42 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Tue, 4 Apr 2023 19:05:24 -0700 Subject: [PATCH] Fix crash when private id in array assignment --- src/compiler/transformers/classFields.ts | 8 ++++---- ...arserPrivateIdentifierInArrayAssignment.errors.txt | 11 +++++++++++ .../parserPrivateIdentifierInArrayAssignment.js | 6 ++++++ .../parserPrivateIdentifierInArrayAssignment.symbols | 4 ++++ .../parserPrivateIdentifierInArrayAssignment.types | 7 +++++++ .../parserPrivateIdentifierInArrayAssignment.ts | 1 + 6 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 tests/baselines/reference/parserPrivateIdentifierInArrayAssignment.errors.txt create mode 100644 tests/baselines/reference/parserPrivateIdentifierInArrayAssignment.js create mode 100644 tests/baselines/reference/parserPrivateIdentifierInArrayAssignment.symbols create mode 100644 tests/baselines/reference/parserPrivateIdentifierInArrayAssignment.types create mode 100755 tests/cases/compiler/parserPrivateIdentifierInArrayAssignment.ts diff --git a/src/compiler/transformers/classFields.ts b/src/compiler/transformers/classFields.ts index cd06d48aed70d..5407e4f7a0e0a 100644 --- a/src/compiler/transformers/classFields.ts +++ b/src/compiler/transformers/classFields.ts @@ -2981,11 +2981,11 @@ export function transformClassFields(context: TransformationContext): (x: Source } function visitArrayAssignmentElement(node: Expression): Expression { - Debug.assertNode(node, isArrayBindingOrAssignmentElement); - if (isSpreadElement(node)) return visitAssignmentRestElement(node); - if (!isOmittedExpression(node)) return visitAssignmentElement(node); + if (isArrayBindingOrAssignmentElement(node)) { + if (isSpreadElement(node)) return visitAssignmentRestElement(node); + if (!isOmittedExpression(node)) return visitAssignmentElement(node); + } return visitEachChild(node, visitor, context); - } function visitAssignmentProperty(node: PropertyAssignment) { diff --git a/tests/baselines/reference/parserPrivateIdentifierInArrayAssignment.errors.txt b/tests/baselines/reference/parserPrivateIdentifierInArrayAssignment.errors.txt new file mode 100644 index 0000000000000..7f4ed01bc6ab5 --- /dev/null +++ b/tests/baselines/reference/parserPrivateIdentifierInArrayAssignment.errors.txt @@ -0,0 +1,11 @@ +tests/cases/compiler/parserPrivateIdentifierInArrayAssignment.ts(1,2): error TS2364: The left-hand side of an assignment expression must be a variable or a property access. +tests/cases/compiler/parserPrivateIdentifierInArrayAssignment.ts(1,8): error TS1109: Expression expected. + + +==== tests/cases/compiler/parserPrivateIdentifierInArrayAssignment.ts (2 errors) ==== + [#abc]= + ~~~~ +!!! error TS2364: The left-hand side of an assignment expression must be a variable or a property access. + +!!! error TS1109: Expression expected. + \ No newline at end of file diff --git a/tests/baselines/reference/parserPrivateIdentifierInArrayAssignment.js b/tests/baselines/reference/parserPrivateIdentifierInArrayAssignment.js new file mode 100644 index 0000000000000..e4cdd66647ff4 --- /dev/null +++ b/tests/baselines/reference/parserPrivateIdentifierInArrayAssignment.js @@ -0,0 +1,6 @@ +//// [parserPrivateIdentifierInArrayAssignment.ts] +[#abc]= + + +//// [parserPrivateIdentifierInArrayAssignment.js] +#abc = [0]; diff --git a/tests/baselines/reference/parserPrivateIdentifierInArrayAssignment.symbols b/tests/baselines/reference/parserPrivateIdentifierInArrayAssignment.symbols new file mode 100644 index 0000000000000..a2f582a5ba398 --- /dev/null +++ b/tests/baselines/reference/parserPrivateIdentifierInArrayAssignment.symbols @@ -0,0 +1,4 @@ +=== tests/cases/compiler/parserPrivateIdentifierInArrayAssignment.ts === + +[#abc]= + diff --git a/tests/baselines/reference/parserPrivateIdentifierInArrayAssignment.types b/tests/baselines/reference/parserPrivateIdentifierInArrayAssignment.types new file mode 100644 index 0000000000000..8c7531c314117 --- /dev/null +++ b/tests/baselines/reference/parserPrivateIdentifierInArrayAssignment.types @@ -0,0 +1,7 @@ +=== tests/cases/compiler/parserPrivateIdentifierInArrayAssignment.ts === +[#abc]= +>[#abc]= : any +>[#abc] : [any] + +> : any + diff --git a/tests/cases/compiler/parserPrivateIdentifierInArrayAssignment.ts b/tests/cases/compiler/parserPrivateIdentifierInArrayAssignment.ts new file mode 100755 index 0000000000000..f59bd76e18200 --- /dev/null +++ b/tests/cases/compiler/parserPrivateIdentifierInArrayAssignment.ts @@ -0,0 +1 @@ +[#abc]=