Skip to content

Commit a1d3a3e

Browse files
committed
Fix last test and clean up
1 parent 55b48d4 commit a1d3a3e

File tree

1 file changed

+10
-14
lines changed

1 file changed

+10
-14
lines changed

src/compiler/checker.ts

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26345,23 +26345,19 @@ namespace ts {
2634526345
if (!(ctor && ctor.kind === SyntaxKind.Constructor)) {
2634626346
return true;
2634726347
}
26348-
// 1. no valueDeclaration -- some kind of synthetic property, don't allow the write
26349-
// 2. normal property declaration -- its parent and the ctor's parent should both be a class
26350-
// 3. parameter property declaration -- its parent should BE the ctor itself
26351-
// 4. this.property assignment in a class -- it should be a binaryexpression, and ctor.parent should be the symbol.parent.valueDeclaration
26352-
// 5. this.property assignment in a ctor func -- it should be a binaryexp, and ctor should be the symbol.parent.valueDeclaration
26353-
// If func.parent is a class and symbol is a (readonly) property of that class, or
26354-
// if func is a constructor and symbol is a (readonly) parameter property declared in it,
26355-
// then symbol is writeable here.
2635626348
if (symbol.valueDeclaration) {
26357-
const isLocalParameterProperty = ctor === symbol.valueDeclaration.parent;
26349+
const isAssignmentDeclaration = isBinaryExpression(symbol.valueDeclaration);
2635826350
const isLocalPropertyDeclaration = ctor.parent === symbol.valueDeclaration.parent;
26359-
const isLocalThisPropertyAssignment = symbol.parent && symbol.parent.valueDeclaration === ctor.parent; // TODO: Make sure that symbol.parent is a function and class
26360-
const isLocalThisPropertyAssignmentConstructorFunction = symbol.parent && symbol.parent.valueDeclaration === ctor; // TODO: Make sure that symbol.parent is a function and class
26361-
const isLocalProperty = isLocalPropertyDeclaration || isLocalParameterProperty || isLocalThisPropertyAssignment || isLocalThisPropertyAssignmentConstructorFunction ;
26362-
return !isLocalProperty;
26351+
const isLocalParameterProperty = ctor === symbol.valueDeclaration.parent;
26352+
const isLocalThisPropertyAssignment = isAssignmentDeclaration && symbol.parent?.valueDeclaration === ctor.parent;
26353+
const isLocalThisPropertyAssignmentConstructorFunction = isAssignmentDeclaration && symbol.parent?.valueDeclaration === ctor;
26354+
const isWriteableSymbol =
26355+
isLocalPropertyDeclaration
26356+
|| isLocalParameterProperty
26357+
|| isLocalThisPropertyAssignment
26358+
|| isLocalThisPropertyAssignmentConstructorFunction;
26359+
return !isWriteableSymbol;
2636326360
}
26364-
return false;
2636526361
}
2636626362
return true;
2636726363
}

0 commit comments

Comments
 (0)