Improve assert message in binder (#38270)
* Improve assert message in binder Looking at the code, I don't think the assert can ever fire, but it clearly does, or did in the past. This will make it easier for people to create a repro. * fix lint * Use BindableStaticNameExpression not BindableStaticAccessExpression This type does allow identifiers, but those are ruled out earlier, so I added an assert for that case.
This commit is contained in:
parent
fd71eb2c85
commit
1a88430a7e
|
@ -2977,15 +2977,13 @@ namespace ts {
|
|||
// util.property = function ...
|
||||
bindExportsPropertyAssignment(node as BindableStaticPropertyAssignmentExpression);
|
||||
}
|
||||
else if (hasDynamicName(node)) {
|
||||
bindAnonymousDeclaration(node, SymbolFlags.Property | SymbolFlags.Assignment, InternalSymbolName.Computed);
|
||||
const sym = bindPotentiallyMissingNamespaces(parentSymbol, node.left.expression, isTopLevelNamespaceAssignment(node.left), /*isPrototype*/ false, /*containerIsClass*/ false);
|
||||
addLateBoundAssignmentDeclarationToSymbol(node, sym);
|
||||
}
|
||||
else {
|
||||
if (hasDynamicName(node)) {
|
||||
bindAnonymousDeclaration(node, SymbolFlags.Property | SymbolFlags.Assignment, InternalSymbolName.Computed);
|
||||
const sym = bindPotentiallyMissingNamespaces(parentSymbol, node.left.expression, isTopLevelNamespaceAssignment(node.left), /*isPrototype*/ false, /*containerIsClass*/ false);
|
||||
addLateBoundAssignmentDeclarationToSymbol(node, sym);
|
||||
}
|
||||
else {
|
||||
bindStaticPropertyAssignment(cast(node.left, isBindableStaticAccessExpression));
|
||||
}
|
||||
bindStaticPropertyAssignment(cast(node.left, isBindableStaticNameExpression));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2993,7 +2991,8 @@ namespace ts {
|
|||
* For nodes like `x.y = z`, declare a member 'y' on 'x' if x is a function (or IIFE) or class or {}, or not declared.
|
||||
* Also works for expression statements preceded by JSDoc, like / ** @type number * / x.y;
|
||||
*/
|
||||
function bindStaticPropertyAssignment(node: BindableStaticAccessExpression) {
|
||||
function bindStaticPropertyAssignment(node: BindableStaticNameExpression) {
|
||||
Debug.assert(!isIdentifier(node));
|
||||
node.expression.parent = node;
|
||||
bindPropertyAssignment(node.expression, node, /*isPrototypeProperty*/ false, /*containerIsClass*/ false);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue