typescript 5.1.0-dev.20230305 → 5.1.0-dev.20230307

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -54,7 +54,7 @@ var path = __toESM(require("path"));
54
54
 
55
55
  // src/compiler/corePublic.ts
56
56
  var versionMajorMinor = "5.1";
57
- var version = `${versionMajorMinor}.0-dev.20230305`;
57
+ var version = `${versionMajorMinor}.0-dev.20230307`;
58
58
 
59
59
  // src/compiler/core.ts
60
60
  var emptyArray = [];
@@ -266,21 +266,6 @@ function some(array, predicate) {
266
266
  }
267
267
  return false;
268
268
  }
269
- function getRangesWhere(arr, pred, cb) {
270
- let start;
271
- for (let i = 0; i < arr.length; i++) {
272
- if (pred(arr[i])) {
273
- start = start === void 0 ? i : start;
274
- } else {
275
- if (start !== void 0) {
276
- cb(start, i);
277
- start = void 0;
278
- }
279
- }
280
- }
281
- if (start !== void 0)
282
- cb(start, arr.length);
283
- }
284
269
  function concatenate(array1, array2) {
285
270
  if (!some(array2))
286
271
  return array1;
@@ -497,41 +482,6 @@ function multiMapRemove(key, value) {
497
482
  }
498
483
  }
499
484
  }
500
- function createQueue(items) {
501
- const elements = (items == null ? void 0 : items.slice()) || [];
502
- let headIndex = 0;
503
- function isEmpty() {
504
- return headIndex === elements.length;
505
- }
506
- function enqueue(...items2) {
507
- elements.push(...items2);
508
- }
509
- function dequeue() {
510
- if (isEmpty()) {
511
- throw new Error("Queue is empty");
512
- }
513
- const result = elements[headIndex];
514
- elements[headIndex] = void 0;
515
- headIndex++;
516
- if (headIndex > 100 && headIndex > elements.length >> 1) {
517
- const newLength = elements.length - headIndex;
518
- elements.copyWithin(
519
- /*target*/
520
- 0,
521
- /*start*/
522
- headIndex
523
- );
524
- elements.length = newLength;
525
- headIndex = 0;
526
- }
527
- return result;
528
- }
529
- return {
530
- enqueue,
531
- dequeue,
532
- isEmpty
533
- };
534
- }
535
485
  function isArray(value) {
536
486
  return Array.isArray(value);
537
487
  }
@@ -541,9 +491,6 @@ function toArray(value) {
541
491
  function isString(text) {
542
492
  return typeof text === "string";
543
493
  }
544
- function tryCast(value, test) {
545
- return value !== void 0 && test(value) ? value : void 0;
546
- }
547
494
  function cast(value, test) {
548
495
  if (value !== void 0 && test(value))
549
496
  return value;
@@ -9307,39 +9254,6 @@ function createTextChangeRange(span, newLength) {
9307
9254
  return { span, newLength };
9308
9255
  }
9309
9256
  var unchangedTextChangeRange = createTextChangeRange(createTextSpan(0, 0), 0);
9310
- function isParameterPropertyDeclaration(node, parent) {
9311
- return isParameter(node) && hasSyntacticModifier(node, 16476 /* ParameterPropertyModifier */) && parent.kind === 173 /* Constructor */;
9312
- }
9313
- function walkUpBindingElementsAndPatterns(binding) {
9314
- let node = binding.parent;
9315
- while (isBindingElement(node.parent)) {
9316
- node = node.parent.parent;
9317
- }
9318
- return node.parent;
9319
- }
9320
- function getCombinedFlags(node, getFlags) {
9321
- if (isBindingElement(node)) {
9322
- node = walkUpBindingElementsAndPatterns(node);
9323
- }
9324
- let flags = getFlags(node);
9325
- if (node.kind === 257 /* VariableDeclaration */) {
9326
- node = node.parent;
9327
- }
9328
- if (node && node.kind === 258 /* VariableDeclarationList */) {
9329
- flags |= getFlags(node);
9330
- node = node.parent;
9331
- }
9332
- if (node && node.kind === 240 /* VariableStatement */) {
9333
- flags |= getFlags(node);
9334
- }
9335
- return flags;
9336
- }
9337
- function getCombinedModifierFlags(node) {
9338
- return getCombinedFlags(node, getEffectiveModifierFlags);
9339
- }
9340
- function getCombinedNodeFlags(node) {
9341
- return getCombinedFlags(node, (n) => n.flags);
9342
- }
9343
9257
  function findAncestor(node, callback) {
9344
9258
  while (node) {
9345
9259
  const result = callback(node);
@@ -9377,10 +9291,6 @@ function unescapeLeadingUnderscores(identifier) {
9377
9291
  function idText(identifierOrPrivateName) {
9378
9292
  return unescapeLeadingUnderscores(identifierOrPrivateName.escapedText);
9379
9293
  }
9380
- function identifierToKeywordKind(node) {
9381
- const token = stringToToken(node.escapedText);
9382
- return token ? tryCast(token, isKeyword) : void 0;
9383
- }
9384
9294
  function symbolName(symbol) {
9385
9295
  if (symbol.valueDeclaration && isPrivateIdentifierClassElementDeclaration(symbol.valueDeclaration)) {
9386
9296
  return idText(symbol.valueDeclaration.name);
@@ -9431,15 +9341,6 @@ function getDeclarationIdentifier(node) {
9431
9341
  const name = getNameOfDeclaration(node);
9432
9342
  return name && isIdentifier(name) ? name : void 0;
9433
9343
  }
9434
- function nodeHasName(statement, name) {
9435
- if (isNamedDeclaration(statement) && isIdentifier(statement.name) && idText(statement.name) === idText(name)) {
9436
- return true;
9437
- }
9438
- if (isVariableStatement(statement) && some(statement.declarationList.declarations, (d) => nodeHasName(d, name))) {
9439
- return true;
9440
- }
9441
- return false;
9442
- }
9443
9344
  function getNameOfJSDocTypedef(declaration) {
9444
9345
  return declaration.name || nameForNamelessJSDocTypedef(declaration);
9445
9346
  }
@@ -9654,18 +9555,6 @@ function isOptionalChain(node) {
9654
9555
  const kind = node.kind;
9655
9556
  return !!(node.flags & 32 /* OptionalChain */) && (kind === 208 /* PropertyAccessExpression */ || kind === 209 /* ElementAccessExpression */ || kind === 210 /* CallExpression */ || kind === 232 /* NonNullExpression */);
9656
9557
  }
9657
- function isOptionalChainRoot(node) {
9658
- return isOptionalChain(node) && !isNonNullExpression(node) && !!node.questionDotToken;
9659
- }
9660
- function isExpressionOfOptionalChainRoot(node) {
9661
- return isOptionalChainRoot(node.parent) && node.parent.expression === node;
9662
- }
9663
- function isOutermostOptionalChain(node) {
9664
- return !isOptionalChain(node.parent) || isOptionalChainRoot(node.parent) || node !== node.parent.expression;
9665
- }
9666
- function isNullishCoalesce(node) {
9667
- return node.kind === 223 /* BinaryExpression */ && node.operatorToken.kind === 60 /* QuestionQuestionToken */;
9668
- }
9669
9558
  function skipPartiallyEmittedExpressions(node) {
9670
9559
  return skipOuterExpressions(node, 8 /* PartiallyEmittedExpressions */);
9671
9560
  }
@@ -9753,12 +9642,6 @@ function isBindingName(node) {
9753
9642
  function isFunctionLike(node) {
9754
9643
  return !!node && isFunctionLikeKind(node.kind);
9755
9644
  }
9756
- function isFunctionLikeOrClassStaticBlockDeclaration(node) {
9757
- return !!node && (isFunctionLikeKind(node.kind) || isClassStaticBlockDeclaration(node));
9758
- }
9759
- function isFunctionLikeDeclaration(node) {
9760
- return node && isFunctionLikeDeclarationKind(node.kind);
9761
- }
9762
9645
  function isFunctionLikeDeclarationKind(kind) {
9763
9646
  switch (kind) {
9764
9647
  case 259 /* FunctionDeclaration */:
@@ -9792,15 +9675,9 @@ function isClassElement(node) {
9792
9675
  const kind = node.kind;
9793
9676
  return kind === 173 /* Constructor */ || kind === 169 /* PropertyDeclaration */ || kind === 171 /* MethodDeclaration */ || kind === 174 /* GetAccessor */ || kind === 175 /* SetAccessor */ || kind === 178 /* IndexSignature */ || kind === 172 /* ClassStaticBlockDeclaration */ || kind === 237 /* SemicolonClassElement */;
9794
9677
  }
9795
- function isClassLike(node) {
9796
- return node && (node.kind === 260 /* ClassDeclaration */ || node.kind === 228 /* ClassExpression */);
9797
- }
9798
9678
  function isAccessor(node) {
9799
9679
  return node && (node.kind === 174 /* GetAccessor */ || node.kind === 175 /* SetAccessor */);
9800
9680
  }
9801
- function isAutoAccessorPropertyDeclaration(node) {
9802
- return isPropertyDeclaration(node) && hasAccessorModifier(node);
9803
- }
9804
9681
  function isMethodOrAccessor(node) {
9805
9682
  switch (node.kind) {
9806
9683
  case 171 /* MethodDeclaration */:
@@ -9950,9 +9827,6 @@ function isExpressionKind(kind) {
9950
9827
  return isUnaryExpressionKind(kind);
9951
9828
  }
9952
9829
  }
9953
- function isForInOrOfStatement(node) {
9954
- return node.kind === 246 /* ForInStatement */ || node.kind === 247 /* ForOfStatement */;
9955
- }
9956
9830
  function isConciseBody(node) {
9957
9831
  return isBlock(node) || isExpression(node);
9958
9832
  }
@@ -9967,114 +9841,6 @@ function isNamedImportBindings(node) {
9967
9841
  const kind = node.kind;
9968
9842
  return kind === 272 /* NamedImports */ || kind === 271 /* NamespaceImport */;
9969
9843
  }
9970
- function canHaveSymbol(node) {
9971
- switch (node.kind) {
9972
- case 216 /* ArrowFunction */:
9973
- case 223 /* BinaryExpression */:
9974
- case 205 /* BindingElement */:
9975
- case 210 /* CallExpression */:
9976
- case 176 /* CallSignature */:
9977
- case 260 /* ClassDeclaration */:
9978
- case 228 /* ClassExpression */:
9979
- case 172 /* ClassStaticBlockDeclaration */:
9980
- case 173 /* Constructor */:
9981
- case 182 /* ConstructorType */:
9982
- case 177 /* ConstructSignature */:
9983
- case 209 /* ElementAccessExpression */:
9984
- case 263 /* EnumDeclaration */:
9985
- case 302 /* EnumMember */:
9986
- case 274 /* ExportAssignment */:
9987
- case 275 /* ExportDeclaration */:
9988
- case 278 /* ExportSpecifier */:
9989
- case 259 /* FunctionDeclaration */:
9990
- case 215 /* FunctionExpression */:
9991
- case 181 /* FunctionType */:
9992
- case 174 /* GetAccessor */:
9993
- case 79 /* Identifier */:
9994
- case 270 /* ImportClause */:
9995
- case 268 /* ImportEqualsDeclaration */:
9996
- case 273 /* ImportSpecifier */:
9997
- case 178 /* IndexSignature */:
9998
- case 261 /* InterfaceDeclaration */:
9999
- case 341 /* JSDocCallbackTag */:
10000
- case 343 /* JSDocEnumTag */:
10001
- case 320 /* JSDocFunctionType */:
10002
- case 344 /* JSDocParameterTag */:
10003
- case 351 /* JSDocPropertyTag */:
10004
- case 326 /* JSDocSignature */:
10005
- case 349 /* JSDocTypedefTag */:
10006
- case 325 /* JSDocTypeLiteral */:
10007
- case 288 /* JsxAttribute */:
10008
- case 289 /* JsxAttributes */:
10009
- case 290 /* JsxSpreadAttribute */:
10010
- case 197 /* MappedType */:
10011
- case 171 /* MethodDeclaration */:
10012
- case 170 /* MethodSignature */:
10013
- case 264 /* ModuleDeclaration */:
10014
- case 199 /* NamedTupleMember */:
10015
- case 277 /* NamespaceExport */:
10016
- case 267 /* NamespaceExportDeclaration */:
10017
- case 271 /* NamespaceImport */:
10018
- case 211 /* NewExpression */:
10019
- case 14 /* NoSubstitutionTemplateLiteral */:
10020
- case 8 /* NumericLiteral */:
10021
- case 207 /* ObjectLiteralExpression */:
10022
- case 166 /* Parameter */:
10023
- case 208 /* PropertyAccessExpression */:
10024
- case 299 /* PropertyAssignment */:
10025
- case 169 /* PropertyDeclaration */:
10026
- case 168 /* PropertySignature */:
10027
- case 175 /* SetAccessor */:
10028
- case 300 /* ShorthandPropertyAssignment */:
10029
- case 308 /* SourceFile */:
10030
- case 301 /* SpreadAssignment */:
10031
- case 10 /* StringLiteral */:
10032
- case 262 /* TypeAliasDeclaration */:
10033
- case 184 /* TypeLiteral */:
10034
- case 165 /* TypeParameter */:
10035
- case 257 /* VariableDeclaration */:
10036
- return true;
10037
- default:
10038
- return false;
10039
- }
10040
- }
10041
- function canHaveLocals(node) {
10042
- switch (node.kind) {
10043
- case 216 /* ArrowFunction */:
10044
- case 238 /* Block */:
10045
- case 176 /* CallSignature */:
10046
- case 266 /* CaseBlock */:
10047
- case 295 /* CatchClause */:
10048
- case 172 /* ClassStaticBlockDeclaration */:
10049
- case 191 /* ConditionalType */:
10050
- case 173 /* Constructor */:
10051
- case 182 /* ConstructorType */:
10052
- case 177 /* ConstructSignature */:
10053
- case 245 /* ForStatement */:
10054
- case 246 /* ForInStatement */:
10055
- case 247 /* ForOfStatement */:
10056
- case 259 /* FunctionDeclaration */:
10057
- case 215 /* FunctionExpression */:
10058
- case 181 /* FunctionType */:
10059
- case 174 /* GetAccessor */:
10060
- case 178 /* IndexSignature */:
10061
- case 341 /* JSDocCallbackTag */:
10062
- case 343 /* JSDocEnumTag */:
10063
- case 320 /* JSDocFunctionType */:
10064
- case 326 /* JSDocSignature */:
10065
- case 349 /* JSDocTypedefTag */:
10066
- case 197 /* MappedType */:
10067
- case 171 /* MethodDeclaration */:
10068
- case 170 /* MethodSignature */:
10069
- case 264 /* ModuleDeclaration */:
10070
- case 175 /* SetAccessor */:
10071
- case 308 /* SourceFile */:
10072
- case 262 /* TypeAliasDeclaration */:
10073
- return true;
10074
- default:
10075
- return false;
10076
- }
10077
- }
10078
9844
  function isDeclarationKind(kind) {
10079
9845
  return kind === 216 /* ArrowFunction */ || kind === 205 /* BindingElement */ || kind === 260 /* ClassDeclaration */ || kind === 228 /* ClassExpression */ || kind === 172 /* ClassStaticBlockDeclaration */ || kind === 173 /* Constructor */ || kind === 263 /* EnumDeclaration */ || kind === 302 /* EnumMember */ || kind === 278 /* ExportSpecifier */ || kind === 259 /* FunctionDeclaration */ || kind === 215 /* FunctionExpression */ || kind === 174 /* GetAccessor */ || kind === 270 /* ImportClause */ || kind === 268 /* ImportEqualsDeclaration */ || kind === 273 /* ImportSpecifier */ || kind === 261 /* InterfaceDeclaration */ || kind === 288 /* JsxAttribute */ || kind === 171 /* MethodDeclaration */ || kind === 170 /* MethodSignature */ || kind === 264 /* ModuleDeclaration */ || kind === 267 /* NamespaceExportDeclaration */ || kind === 271 /* NamespaceImport */ || kind === 277 /* NamespaceExport */ || kind === 166 /* Parameter */ || kind === 299 /* PropertyAssignment */ || kind === 169 /* PropertyDeclaration */ || kind === 168 /* PropertySignature */ || kind === 175 /* SetAccessor */ || kind === 300 /* ShorthandPropertyAssignment */ || kind === 262 /* TypeAliasDeclaration */ || kind === 165 /* TypeParameter */ || kind === 257 /* VariableDeclaration */ || kind === 349 /* JSDocTypedefTag */ || kind === 341 /* JSDocCallbackTag */ || kind === 351 /* JSDocPropertyTag */;
10080
9846
  }
@@ -10090,12 +9856,6 @@ function isDeclaration(node) {
10090
9856
  }
10091
9857
  return isDeclarationKind(node.kind);
10092
9858
  }
10093
- function isDeclarationStatement(node) {
10094
- return isDeclarationStatementKind(node.kind);
10095
- }
10096
- function isStatementButNotDeclaration(node) {
10097
- return isStatementKindButNotDeclarationKind(node.kind);
10098
- }
10099
9859
  function isStatement(node) {
10100
9860
  const kind = node.kind;
10101
9861
  return isStatementKindButNotDeclarationKind(kind) || isDeclarationStatementKind(kind) || isBlockStatement(node);
@@ -10155,15 +9915,6 @@ function isStringLiteralLike(node) {
10155
9915
  }
10156
9916
 
10157
9917
  // src/compiler/utilities.ts
10158
- function createSymbolTable(symbols) {
10159
- const result = /* @__PURE__ */ new Map();
10160
- if (symbols) {
10161
- for (const symbol of symbols) {
10162
- result.set(symbol.escapedName, symbol);
10163
- }
10164
- }
10165
- return result;
10166
- }
10167
9918
  var stringWriter = createSingleLineStringWriter();
10168
9919
  function createSingleLineStringWriter() {
10169
9920
  var str = "";
@@ -10257,36 +10008,6 @@ function nodeIsMissing(node) {
10257
10008
  function nodeIsPresent(node) {
10258
10009
  return !nodeIsMissing(node);
10259
10010
  }
10260
- function getTokenPosOfNode(node, sourceFile, includeJsDoc) {
10261
- if (nodeIsMissing(node)) {
10262
- return node.pos;
10263
- }
10264
- if (isJSDocNode(node) || node.kind === 11 /* JsxText */) {
10265
- return skipTrivia(
10266
- (sourceFile || getSourceFileOfNode(node)).text,
10267
- node.pos,
10268
- /*stopAfterLineBreak*/
10269
- false,
10270
- /*stopAtComments*/
10271
- true
10272
- );
10273
- }
10274
- if (includeJsDoc && hasJSDocNodes(node)) {
10275
- return getTokenPosOfNode(node.jsDoc[0], sourceFile);
10276
- }
10277
- if (node.kind === 354 /* SyntaxList */ && node._children.length > 0) {
10278
- return getTokenPosOfNode(node._children[0], sourceFile, includeJsDoc);
10279
- }
10280
- return skipTrivia(
10281
- (sourceFile || getSourceFileOfNode(node)).text,
10282
- node.pos,
10283
- /*stopAfterLineBreak*/
10284
- false,
10285
- /*stopAtComments*/
10286
- false,
10287
- isInJSDoc(node)
10288
- );
10289
- }
10290
10011
  function getSourceTextOfNodeFromSourceFile(sourceFile, node, includeTrivia = false) {
10291
10012
  return getTextOfNodeFromSourceText(sourceFile.text, node, includeTrivia);
10292
10013
  }
@@ -10303,71 +10024,16 @@ function getTextOfNodeFromSourceText(sourceText, node, includeTrivia = false) {
10303
10024
  }
10304
10025
  return text;
10305
10026
  }
10306
- function getTextOfNode(node, includeTrivia = false) {
10307
- return getSourceTextOfNodeFromSourceFile(getSourceFileOfNode(node), node, includeTrivia);
10308
- }
10309
10027
  function getEmitFlags(node) {
10310
10028
  const emitNode = node.emitNode;
10311
10029
  return emitNode && emitNode.flags || 0;
10312
10030
  }
10313
- function isBlockOrCatchScoped(declaration) {
10314
- return (getCombinedNodeFlags(declaration) & 3 /* BlockScoped */) !== 0 || isCatchClauseVariableDeclarationOrBindingElement(declaration);
10315
- }
10316
- function isCatchClauseVariableDeclarationOrBindingElement(declaration) {
10317
- const node = getRootDeclaration(declaration);
10318
- return node.kind === 257 /* VariableDeclaration */ && node.parent.kind === 295 /* CatchClause */;
10319
- }
10320
- function isAmbientModule(node) {
10321
- return isModuleDeclaration(node) && (node.name.kind === 10 /* StringLiteral */ || isGlobalScopeAugmentation(node));
10322
- }
10323
10031
  function isModuleWithStringLiteralName(node) {
10324
10032
  return isModuleDeclaration(node) && node.name.kind === 10 /* StringLiteral */;
10325
10033
  }
10326
- function isEffectiveModuleDeclaration(node) {
10327
- return isModuleDeclaration(node) || isIdentifier(node);
10328
- }
10329
10034
  function isGlobalScopeAugmentation(module2) {
10330
10035
  return !!(module2.flags & 1024 /* GlobalAugmentation */);
10331
10036
  }
10332
- function isModuleAugmentationExternal(node) {
10333
- switch (node.parent.kind) {
10334
- case 308 /* SourceFile */:
10335
- return isExternalModule(node.parent);
10336
- case 265 /* ModuleBlock */:
10337
- return isAmbientModule(node.parent.parent) && isSourceFile(node.parent.parent.parent) && !isExternalModule(node.parent.parent.parent);
10338
- }
10339
- return false;
10340
- }
10341
- function isBlockScope(node, parentNode) {
10342
- switch (node.kind) {
10343
- case 308 /* SourceFile */:
10344
- case 266 /* CaseBlock */:
10345
- case 295 /* CatchClause */:
10346
- case 264 /* ModuleDeclaration */:
10347
- case 245 /* ForStatement */:
10348
- case 246 /* ForInStatement */:
10349
- case 247 /* ForOfStatement */:
10350
- case 173 /* Constructor */:
10351
- case 171 /* MethodDeclaration */:
10352
- case 174 /* GetAccessor */:
10353
- case 175 /* SetAccessor */:
10354
- case 259 /* FunctionDeclaration */:
10355
- case 215 /* FunctionExpression */:
10356
- case 216 /* ArrowFunction */:
10357
- case 169 /* PropertyDeclaration */:
10358
- case 172 /* ClassStaticBlockDeclaration */:
10359
- return true;
10360
- case 238 /* Block */:
10361
- return !isFunctionLikeOrClassStaticBlockDeclaration(parentNode);
10362
- }
10363
- return false;
10364
- }
10365
- function getEnclosingBlockScopeContainer(node) {
10366
- return findAncestor(node.parent, (current) => isBlockScope(current, current.parent));
10367
- }
10368
- function declarationNameToString(name) {
10369
- return !name || getFullWidth(name) === 0 ? "(Missing)" : getTextOfNode(name);
10370
- }
10371
10037
  function isComputedNonLiteralName(name) {
10372
10038
  return name.kind === 164 /* ComputedPropertyName */ && !isStringOrNumericLiteralLike(name.expression);
10373
10039
  }
@@ -10433,7 +10099,7 @@ function getErrorSpanForArrowFunction(sourceFile, node) {
10433
10099
  function getErrorSpanForNode(sourceFile, node) {
10434
10100
  let errorNode = node;
10435
10101
  switch (node.kind) {
10436
- case 308 /* SourceFile */:
10102
+ case 308 /* SourceFile */: {
10437
10103
  const pos2 = skipTrivia(
10438
10104
  sourceFile.text,
10439
10105
  0,
@@ -10444,6 +10110,7 @@ function getErrorSpanForNode(sourceFile, node) {
10444
10110
  return createTextSpan(0, 0);
10445
10111
  }
10446
10112
  return getSpanOfTokenAtPosition(sourceFile, pos2);
10113
+ }
10447
10114
  case 257 /* VariableDeclaration */:
10448
10115
  case 205 /* BindingElement */:
10449
10116
  case 260 /* ClassDeclaration */:
@@ -10466,10 +10133,16 @@ function getErrorSpanForNode(sourceFile, node) {
10466
10133
  case 216 /* ArrowFunction */:
10467
10134
  return getErrorSpanForArrowFunction(sourceFile, node);
10468
10135
  case 292 /* CaseClause */:
10469
- case 293 /* DefaultClause */:
10136
+ case 293 /* DefaultClause */: {
10470
10137
  const start = skipTrivia(sourceFile.text, node.pos);
10471
10138
  const end = node.statements.length > 0 ? node.statements[0].pos : node.end;
10472
10139
  return createTextSpanFromBounds(start, end);
10140
+ }
10141
+ case 250 /* ReturnStatement */:
10142
+ case 226 /* YieldExpression */: {
10143
+ const pos2 = skipTrivia(sourceFile.text, node.pos);
10144
+ return getSpanOfTokenAtPosition(sourceFile, pos2);
10145
+ }
10473
10146
  }
10474
10147
  if (errorNode === void 0) {
10475
10148
  return getSpanOfTokenAtPosition(sourceFile, node.pos);
@@ -10492,9 +10165,6 @@ function isExternalOrCommonJsModule(file) {
10492
10165
  function isJsonSourceFile(file) {
10493
10166
  return file.scriptKind === 6 /* JSON */;
10494
10167
  }
10495
- function isEnumConst(node) {
10496
- return !!(getCombinedModifierFlags(node) & 2048 /* Const */);
10497
- }
10498
10168
  function isPrologueDirective(node) {
10499
10169
  return node.kind === 241 /* ExpressionStatement */ && node.expression.kind === 10 /* StringLiteral */;
10500
10170
  }
@@ -10533,197 +10203,28 @@ function isVariableLike(node) {
10533
10203
  function isFunctionBlock(node) {
10534
10204
  return node && node.kind === 238 /* Block */ && isFunctionLike(node.parent);
10535
10205
  }
10536
- function isObjectLiteralMethod(node) {
10537
- return node && node.kind === 171 /* MethodDeclaration */ && node.parent.kind === 207 /* ObjectLiteralExpression */;
10538
- }
10539
- function isObjectLiteralOrClassExpressionMethodOrAccessor(node) {
10540
- return (node.kind === 171 /* MethodDeclaration */ || node.kind === 174 /* GetAccessor */ || node.kind === 175 /* SetAccessor */) && (node.parent.kind === 207 /* ObjectLiteralExpression */ || node.parent.kind === 228 /* ClassExpression */);
10541
- }
10542
- function getContainingClass(node) {
10543
- return findAncestor(node.parent, isClassLike);
10544
- }
10545
- function getThisContainer(node, includeArrowFunctions, includeClassComputedPropertyName) {
10546
- Debug.assert(node.kind !== 308 /* SourceFile */);
10547
- while (true) {
10548
- node = node.parent;
10549
- if (!node) {
10550
- return Debug.fail();
10551
- }
10552
- switch (node.kind) {
10553
- case 164 /* ComputedPropertyName */:
10554
- if (includeClassComputedPropertyName && isClassLike(node.parent.parent)) {
10555
- return node;
10556
- }
10557
- node = node.parent.parent;
10558
- break;
10559
- case 167 /* Decorator */:
10560
- if (node.parent.kind === 166 /* Parameter */ && isClassElement(node.parent.parent)) {
10561
- node = node.parent.parent;
10562
- } else if (isClassElement(node.parent)) {
10563
- node = node.parent;
10564
- }
10565
- break;
10566
- case 216 /* ArrowFunction */:
10567
- if (!includeArrowFunctions) {
10568
- continue;
10569
- }
10570
- case 259 /* FunctionDeclaration */:
10571
- case 215 /* FunctionExpression */:
10572
- case 264 /* ModuleDeclaration */:
10573
- case 172 /* ClassStaticBlockDeclaration */:
10574
- case 169 /* PropertyDeclaration */:
10575
- case 168 /* PropertySignature */:
10576
- case 171 /* MethodDeclaration */:
10577
- case 170 /* MethodSignature */:
10578
- case 173 /* Constructor */:
10579
- case 174 /* GetAccessor */:
10580
- case 175 /* SetAccessor */:
10581
- case 176 /* CallSignature */:
10582
- case 177 /* ConstructSignature */:
10583
- case 178 /* IndexSignature */:
10584
- case 263 /* EnumDeclaration */:
10585
- case 308 /* SourceFile */:
10586
- return node;
10587
- }
10588
- }
10589
- }
10590
- function isInTopLevelContext(node) {
10591
- if (isIdentifier(node) && (isClassDeclaration(node.parent) || isFunctionDeclaration(node.parent)) && node.parent.name === node) {
10592
- node = node.parent;
10593
- }
10594
- const container = getThisContainer(
10595
- node,
10596
- /*includeArrowFunctions*/
10597
- true,
10598
- /*includeClassComputedPropertyName*/
10599
- false
10600
- );
10601
- return isSourceFile(container);
10602
- }
10603
- function getImmediatelyInvokedFunctionExpression(func) {
10604
- if (func.kind === 215 /* FunctionExpression */ || func.kind === 216 /* ArrowFunction */) {
10605
- let prev = func;
10606
- let parent = func.parent;
10607
- while (parent.kind === 214 /* ParenthesizedExpression */) {
10608
- prev = parent;
10609
- parent = parent.parent;
10610
- }
10611
- if (parent.kind === 210 /* CallExpression */ && parent.expression === prev) {
10612
- return parent;
10613
- }
10614
- }
10615
- }
10616
10206
  function isSuperProperty(node) {
10617
10207
  const kind = node.kind;
10618
10208
  return (kind === 208 /* PropertyAccessExpression */ || kind === 209 /* ElementAccessExpression */) && node.expression.kind === 106 /* SuperKeyword */;
10619
10209
  }
10620
- function isThisInitializedDeclaration(node) {
10621
- var _a2;
10622
- return !!node && isVariableDeclaration(node) && ((_a2 = node.initializer) == null ? void 0 : _a2.kind) === 108 /* ThisKeyword */;
10623
- }
10624
- function isPartOfTypeQuery(node) {
10625
- while (node.kind === 163 /* QualifiedName */ || node.kind === 79 /* Identifier */) {
10626
- node = node.parent;
10627
- }
10628
- return node.kind === 183 /* TypeQuery */;
10629
- }
10630
10210
  function isInJSFile(node) {
10631
10211
  return !!node && !!(node.flags & 262144 /* JavaScriptFile */);
10632
10212
  }
10633
- function isInJSDoc(node) {
10634
- return !!node && !!(node.flags & 8388608 /* JSDoc */);
10635
- }
10636
- function isRequireCall(callExpression, requireStringLiteralLikeArgument) {
10637
- if (callExpression.kind !== 210 /* CallExpression */) {
10638
- return false;
10639
- }
10640
- const { expression, arguments: args } = callExpression;
10641
- if (expression.kind !== 79 /* Identifier */ || expression.escapedText !== "require") {
10642
- return false;
10643
- }
10644
- if (args.length !== 1) {
10645
- return false;
10646
- }
10647
- const arg = args[0];
10648
- return !requireStringLiteralLikeArgument || isStringLiteralLike(arg);
10213
+ function isStringDoubleQuoted(str, sourceFile) {
10214
+ return getSourceTextOfNodeFromSourceFile(sourceFile, str).charCodeAt(0) === 34 /* doubleQuote */;
10649
10215
  }
10650
- function isVariableDeclarationInitializedToBareOrAccessedRequire(node) {
10651
- return isVariableDeclarationInitializedWithRequireHelper(
10216
+ function getRightMostAssignedExpression(node) {
10217
+ while (isAssignmentExpression(
10652
10218
  node,
10653
- /*allowAccessedRequire*/
10654
- true
10655
- );
10656
- }
10657
- function isVariableDeclarationInitializedWithRequireHelper(node, allowAccessedRequire) {
10658
- return isVariableDeclaration(node) && !!node.initializer && isRequireCall(
10659
- allowAccessedRequire ? getLeftmostAccessExpression(node.initializer) : node.initializer,
10660
- /*requireStringLiteralLikeArgument*/
10219
+ /*excludeCompoundAssignments*/
10661
10220
  true
10662
- );
10221
+ )) {
10222
+ node = node.right;
10223
+ }
10224
+ return node;
10663
10225
  }
10664
- function isStringDoubleQuoted(str, sourceFile) {
10665
- return getSourceTextOfNodeFromSourceFile(sourceFile, str).charCodeAt(0) === 34 /* doubleQuote */;
10666
- }
10667
- function isAssignmentDeclaration(decl) {
10668
- return isBinaryExpression(decl) || isAccessExpression(decl) || isIdentifier(decl) || isCallExpression(decl);
10669
- }
10670
- function hasExpandoValueProperty(node, isPrototypeAssignment) {
10671
- return forEach(node.properties, (p) => isPropertyAssignment(p) && isIdentifier(p.name) && p.name.escapedText === "value" && p.initializer && getExpandoInitializer(p.initializer, isPrototypeAssignment));
10672
- }
10673
- function getAssignedExpandoInitializer(node) {
10674
- if (node && node.parent && isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 63 /* EqualsToken */) {
10675
- const isPrototypeAssignment = isPrototypeAccess(node.parent.left);
10676
- return getExpandoInitializer(node.parent.right, isPrototypeAssignment) || getDefaultedExpandoInitializer(node.parent.left, node.parent.right, isPrototypeAssignment);
10677
- }
10678
- if (node && isCallExpression(node) && isBindableObjectDefinePropertyCall(node)) {
10679
- const result = hasExpandoValueProperty(node.arguments[2], node.arguments[1].text === "prototype");
10680
- if (result) {
10681
- return result;
10682
- }
10683
- }
10684
- }
10685
- function getExpandoInitializer(initializer, isPrototypeAssignment) {
10686
- if (isCallExpression(initializer)) {
10687
- const e = skipParentheses(initializer.expression);
10688
- return e.kind === 215 /* FunctionExpression */ || e.kind === 216 /* ArrowFunction */ ? initializer : void 0;
10689
- }
10690
- if (initializer.kind === 215 /* FunctionExpression */ || initializer.kind === 228 /* ClassExpression */ || initializer.kind === 216 /* ArrowFunction */) {
10691
- return initializer;
10692
- }
10693
- if (isObjectLiteralExpression(initializer) && (initializer.properties.length === 0 || isPrototypeAssignment)) {
10694
- return initializer;
10695
- }
10696
- }
10697
- function getDefaultedExpandoInitializer(name, initializer, isPrototypeAssignment) {
10698
- const e = isBinaryExpression(initializer) && (initializer.operatorToken.kind === 56 /* BarBarToken */ || initializer.operatorToken.kind === 60 /* QuestionQuestionToken */) && getExpandoInitializer(initializer.right, isPrototypeAssignment);
10699
- if (e && isSameEntityName(name, initializer.left)) {
10700
- return e;
10701
- }
10702
- }
10703
- function isSameEntityName(name, initializer) {
10704
- if (isPropertyNameLiteral(name) && isPropertyNameLiteral(initializer)) {
10705
- return getTextOfIdentifierOrLiteral(name) === getTextOfIdentifierOrLiteral(initializer);
10706
- }
10707
- if (isMemberName(name) && isLiteralLikeAccess(initializer) && (initializer.expression.kind === 108 /* ThisKeyword */ || isIdentifier(initializer.expression) && (initializer.expression.escapedText === "window" || initializer.expression.escapedText === "self" || initializer.expression.escapedText === "global"))) {
10708
- return isSameEntityName(name, getNameOrArgument(initializer));
10709
- }
10710
- if (isLiteralLikeAccess(name) && isLiteralLikeAccess(initializer)) {
10711
- return getElementOrPropertyAccessName(name) === getElementOrPropertyAccessName(initializer) && isSameEntityName(name.expression, initializer.expression);
10712
- }
10713
- return false;
10714
- }
10715
- function getRightMostAssignedExpression(node) {
10716
- while (isAssignmentExpression(
10717
- node,
10718
- /*excludeCompoundAssignments*/
10719
- true
10720
- )) {
10721
- node = node.right;
10722
- }
10723
- return node;
10724
- }
10725
- function isExportsIdentifier(node) {
10726
- return isIdentifier(node) && node.escapedText === "exports";
10226
+ function isExportsIdentifier(node) {
10227
+ return isIdentifier(node) && node.escapedText === "exports";
10727
10228
  }
10728
10229
  function isModuleIdentifier(node) {
10729
10230
  return isIdentifier(node) && node.escapedText === "module";
@@ -10742,9 +10243,6 @@ function isBindableObjectDefinePropertyCall(expr) {
10742
10243
  true
10743
10244
  );
10744
10245
  }
10745
- function isLiteralLikeAccess(node) {
10746
- return isPropertyAccessExpression(node) || isLiteralLikeElementAccess(node);
10747
- }
10748
10246
  function isLiteralLikeElementAccess(node) {
10749
10247
  return isElementAccessExpression(node) && isStringOrNumericLiteralLike(node.argumentExpression);
10750
10248
  }
@@ -10765,12 +10263,6 @@ function isBindableStaticElementAccessExpression(node, excludeThisKeyword) {
10765
10263
  function isBindableStaticNameExpression(node, excludeThisKeyword) {
10766
10264
  return isEntityNameExpression(node) || isBindableStaticAccessExpression(node, excludeThisKeyword);
10767
10265
  }
10768
- function getNameOrArgument(expr) {
10769
- if (isPropertyAccessExpression(expr)) {
10770
- return expr.name;
10771
- }
10772
- return expr.argumentExpression;
10773
- }
10774
10266
  function getAssignmentDeclarationKindWorker(expr) {
10775
10267
  if (isCallExpression(expr)) {
10776
10268
  if (!isBindableObjectDefinePropertyCall(expr)) {
@@ -10860,33 +10352,6 @@ function getInitializerOfBinaryExpression(expr) {
10860
10352
  }
10861
10353
  return expr.right;
10862
10354
  }
10863
- function isSpecialPropertyDeclaration(expr) {
10864
- return isInJSFile(expr) && expr.parent && expr.parent.kind === 241 /* ExpressionStatement */ && (!isElementAccessExpression(expr) || isLiteralLikeElementAccess(expr)) && !!getJSDocTypeTag(expr.parent);
10865
- }
10866
- function setValueDeclaration(symbol, node) {
10867
- const { valueDeclaration } = symbol;
10868
- if (!valueDeclaration || !(node.flags & 16777216 /* Ambient */ && !isInJSFile(node) && !(valueDeclaration.flags & 16777216 /* Ambient */)) && (isAssignmentDeclaration(valueDeclaration) && !isAssignmentDeclaration(node)) || valueDeclaration.kind !== node.kind && isEffectiveModuleDeclaration(valueDeclaration)) {
10869
- symbol.valueDeclaration = node;
10870
- }
10871
- }
10872
- function isFunctionSymbol(symbol) {
10873
- if (!symbol || !symbol.valueDeclaration) {
10874
- return false;
10875
- }
10876
- const decl = symbol.valueDeclaration;
10877
- return decl.kind === 259 /* FunctionDeclaration */ || isVariableDeclaration(decl) && decl.initializer && isFunctionLike(decl.initializer);
10878
- }
10879
- function isJSDocConstructSignature(node) {
10880
- const param = isJSDocFunctionType(node) ? firstOrUndefined(node.parameters) : void 0;
10881
- const name = tryCast(param && param.name, isIdentifier);
10882
- return !!name && name.escapedText === "new";
10883
- }
10884
- function isJSDocTypeAlias(node) {
10885
- return node.kind === 349 /* JSDocTypedefTag */ || node.kind === 341 /* JSDocCallbackTag */ || node.kind === 343 /* JSDocEnumTag */;
10886
- }
10887
- function getSourceOfAssignment(node) {
10888
- return isExpressionStatement(node) && isBinaryExpression(node.expression) && node.expression.operatorToken.kind === 63 /* EqualsToken */ ? getRightMostAssignedExpression(node.expression) : void 0;
10889
- }
10890
10355
  function getSourceOfDefaultedAssignment(node) {
10891
10356
  return isExpressionStatement(node) && isBinaryExpression(node.expression) && getAssignmentDeclarationKind(node.expression) !== 0 /* None */ && isBinaryExpression(node.expression.right) && (node.expression.right.operatorToken.kind === 56 /* BarBarToken */ || node.expression.right.operatorToken.kind === 60 /* QuestionQuestionToken */) ? node.expression.right.right : void 0;
10892
10357
  }
@@ -11021,149 +10486,19 @@ function getNextJSDocCommentLocation(node) {
11021
10486
  return parent.parent.parent;
11022
10487
  }
11023
10488
  }
11024
- function getEffectiveContainerForJSDocTemplateTag(node) {
11025
- if (isJSDoc(node.parent) && node.parent.tags) {
11026
- const typeAlias = find(node.parent.tags, isJSDocTypeAlias);
11027
- if (typeAlias) {
11028
- return typeAlias;
11029
- }
11030
- }
11031
- return getHostSignatureFromJSDoc(node);
11032
- }
11033
- function getHostSignatureFromJSDoc(node) {
11034
- const host = getEffectiveJSDocHost(node);
11035
- if (host) {
11036
- return isPropertySignature(host) && host.type && isFunctionLike(host.type) ? host.type : isFunctionLike(host) ? host : void 0;
11037
- }
11038
- return void 0;
11039
- }
11040
- function getEffectiveJSDocHost(node) {
11041
- const host = getJSDocHost(node);
11042
- if (host) {
11043
- return getSourceOfDefaultedAssignment(host) || getSourceOfAssignment(host) || getSingleInitializerOfVariableStatementOrPropertyDeclaration(host) || getSingleVariableOfVariableStatement(host) || getNestedModuleDeclaration(host) || host;
11044
- }
11045
- }
11046
- function getJSDocHost(node) {
11047
- const jsDoc = getJSDocRoot(node);
11048
- if (!jsDoc) {
11049
- return void 0;
11050
- }
11051
- const host = jsDoc.parent;
11052
- if (host && host.jsDoc && jsDoc === lastOrUndefined(host.jsDoc)) {
11053
- return host;
11054
- }
11055
- }
11056
- function getJSDocRoot(node) {
11057
- return findAncestor(node.parent, isJSDoc);
11058
- }
11059
- function getAssignmentTargetKind(node) {
11060
- let parent = node.parent;
11061
- while (true) {
11062
- switch (parent.kind) {
11063
- case 223 /* BinaryExpression */:
11064
- const binaryOperator = parent.operatorToken.kind;
11065
- return isAssignmentOperator(binaryOperator) && parent.left === node ? binaryOperator === 63 /* EqualsToken */ || isLogicalOrCoalescingAssignmentOperator(binaryOperator) ? 1 /* Definite */ : 2 /* Compound */ : 0 /* None */;
11066
- case 221 /* PrefixUnaryExpression */:
11067
- case 222 /* PostfixUnaryExpression */:
11068
- const unaryOperator = parent.operator;
11069
- return unaryOperator === 45 /* PlusPlusToken */ || unaryOperator === 46 /* MinusMinusToken */ ? 2 /* Compound */ : 0 /* None */;
11070
- case 246 /* ForInStatement */:
11071
- case 247 /* ForOfStatement */:
11072
- return parent.initializer === node ? 1 /* Definite */ : 0 /* None */;
11073
- case 214 /* ParenthesizedExpression */:
11074
- case 206 /* ArrayLiteralExpression */:
11075
- case 227 /* SpreadElement */:
11076
- case 232 /* NonNullExpression */:
11077
- node = parent;
11078
- break;
11079
- case 301 /* SpreadAssignment */:
11080
- node = parent.parent;
11081
- break;
11082
- case 300 /* ShorthandPropertyAssignment */:
11083
- if (parent.name !== node) {
11084
- return 0 /* None */;
11085
- }
11086
- node = parent.parent;
11087
- break;
11088
- case 299 /* PropertyAssignment */:
11089
- if (parent.name === node) {
11090
- return 0 /* None */;
11091
- }
11092
- node = parent.parent;
11093
- break;
11094
- default:
11095
- return 0 /* None */;
11096
- }
11097
- parent = node.parent;
11098
- }
11099
- }
11100
- function isAssignmentTarget(node) {
11101
- return getAssignmentTargetKind(node) !== 0 /* None */;
11102
- }
11103
10489
  function skipParentheses(node, excludeJSDocTypeAssertions) {
11104
10490
  const flags = excludeJSDocTypeAssertions ? 1 /* Parentheses */ | 16 /* ExcludeJSDocTypeAssertion */ : 1 /* Parentheses */;
11105
10491
  return skipOuterExpressions(node, flags);
11106
10492
  }
11107
- function isIdentifierName(node) {
11108
- const parent = node.parent;
11109
- switch (parent.kind) {
11110
- case 169 /* PropertyDeclaration */:
11111
- case 168 /* PropertySignature */:
11112
- case 171 /* MethodDeclaration */:
11113
- case 170 /* MethodSignature */:
11114
- case 174 /* GetAccessor */:
11115
- case 175 /* SetAccessor */:
11116
- case 302 /* EnumMember */:
11117
- case 299 /* PropertyAssignment */:
11118
- case 208 /* PropertyAccessExpression */:
11119
- return parent.name === node;
11120
- case 163 /* QualifiedName */:
11121
- return parent.right === node;
11122
- case 205 /* BindingElement */:
11123
- case 273 /* ImportSpecifier */:
11124
- return parent.propertyName === node;
11125
- case 278 /* ExportSpecifier */:
11126
- case 288 /* JsxAttribute */:
11127
- case 282 /* JsxSelfClosingElement */:
11128
- case 283 /* JsxOpeningElement */:
11129
- case 284 /* JsxClosingElement */:
11130
- return true;
11131
- }
11132
- return false;
11133
- }
11134
- function isAliasableExpression(e) {
11135
- return isEntityNameExpression(e) || isClassExpression(e);
11136
- }
11137
- function exportAssignmentIsAlias(node) {
11138
- const e = getExportAssignmentExpression(node);
11139
- return isAliasableExpression(e);
11140
- }
11141
- function getExportAssignmentExpression(node) {
11142
- return isExportAssignment(node) ? node.expression : node.right;
11143
- }
11144
10493
  function isKeyword(token) {
11145
10494
  return 81 /* FirstKeyword */ <= token && token <= 162 /* LastKeyword */;
11146
10495
  }
11147
- function isAsyncFunction(node) {
11148
- switch (node.kind) {
11149
- case 259 /* FunctionDeclaration */:
11150
- case 215 /* FunctionExpression */:
11151
- case 216 /* ArrowFunction */:
11152
- case 171 /* MethodDeclaration */:
11153
- return node.body !== void 0 && node.asteriskToken === void 0 && hasSyntacticModifier(node, 512 /* Async */);
11154
- }
11155
- return false;
11156
- }
11157
10496
  function isStringOrNumericLiteralLike(node) {
11158
10497
  return isStringLiteralLike(node) || isNumericLiteral(node);
11159
10498
  }
11160
10499
  function isSignedNumericLiteral(node) {
11161
10500
  return isPrefixUnaryExpression(node) && (node.operator === 39 /* PlusToken */ || node.operator === 40 /* MinusToken */) && isNumericLiteral(node.operand);
11162
10501
  }
11163
- function hasDynamicName(declaration) {
11164
- const name = getNameOfDeclaration(declaration);
11165
- return !!name && isDynamicName(name);
11166
- }
11167
10502
  function isDynamicName(name) {
11168
10503
  if (!(name.kind === 164 /* ComputedPropertyName */ || name.kind === 209 /* ElementAccessExpression */)) {
11169
10504
  return false;
@@ -11171,39 +10506,9 @@ function isDynamicName(name) {
11171
10506
  const expr = isElementAccessExpression(name) ? skipParentheses(name.argumentExpression) : name.expression;
11172
10507
  return !isStringOrNumericLiteralLike(expr) && !isSignedNumericLiteral(expr);
11173
10508
  }
11174
- function isPropertyNameLiteral(node) {
11175
- switch (node.kind) {
11176
- case 79 /* Identifier */:
11177
- case 10 /* StringLiteral */:
11178
- case 14 /* NoSubstitutionTemplateLiteral */:
11179
- case 8 /* NumericLiteral */:
11180
- return true;
11181
- default:
11182
- return false;
11183
- }
11184
- }
11185
10509
  function getTextOfIdentifierOrLiteral(node) {
11186
10510
  return isMemberName(node) ? idText(node) : node.text;
11187
10511
  }
11188
- function getEscapedTextOfIdentifierOrLiteral(node) {
11189
- return isMemberName(node) ? node.escapedText : escapeLeadingUnderscores(node.text);
11190
- }
11191
- function getSymbolNameForPrivateIdentifier(containingClassSymbol, description) {
11192
- return `__#${getSymbolId(containingClassSymbol)}@${description}`;
11193
- }
11194
- function isPushOrUnshiftIdentifier(node) {
11195
- return node.escapedText === "push" || node.escapedText === "unshift";
11196
- }
11197
- function isParameterDeclaration(node) {
11198
- const root = getRootDeclaration(node);
11199
- return root.kind === 166 /* Parameter */;
11200
- }
11201
- function getRootDeclaration(node) {
11202
- while (node.kind === 205 /* BindingElement */) {
11203
- node = node.parent.parent;
11204
- }
11205
- return node;
11206
- }
11207
10512
  function nodeIsSynthesized(range) {
11208
10513
  return positionIsSynthesized(range.pos) || positionIsSynthesized(range.end);
11209
10514
  }
@@ -11459,15 +10764,6 @@ function identifierIsThisKeyword(id) {
11459
10764
  function hasSyntacticModifier(node, flags) {
11460
10765
  return !!getSelectedSyntacticModifierFlags(node, flags);
11461
10766
  }
11462
- function isStatic(node) {
11463
- return isClassElement(node) && hasStaticModifier(node) || isClassStaticBlockDeclaration(node);
11464
- }
11465
- function hasStaticModifier(node) {
11466
- return hasSyntacticModifier(node, 32 /* Static */);
11467
- }
11468
- function hasAccessorModifier(node) {
11469
- return hasSyntacticModifier(node, 128 /* Accessor */);
11470
- }
11471
10767
  function getSelectedSyntacticModifierFlags(node, flags) {
11472
10768
  return getSyntacticModifierFlags(node) & flags;
11473
10769
  }
@@ -11483,13 +10779,6 @@ function getModifierFlagsWorker(node, includeJSDoc, alwaysIncludeJSDoc) {
11483
10779
  }
11484
10780
  return node.modifierFlagsCache & ~(536870912 /* HasComputedFlags */ | 4096 /* HasComputedJSDocModifiers */);
11485
10781
  }
11486
- function getEffectiveModifierFlags(node) {
11487
- return getModifierFlagsWorker(
11488
- node,
11489
- /*includeJSDoc*/
11490
- true
11491
- );
11492
- }
11493
10782
  function getSyntacticModifierFlags(node) {
11494
10783
  return getModifierFlagsWorker(
11495
10784
  node,
@@ -11573,53 +10862,24 @@ function modifierToFlag(token) {
11573
10862
  }
11574
10863
  return 0 /* None */;
11575
10864
  }
11576
- function isBinaryLogicalOperator(token) {
11577
- return token === 56 /* BarBarToken */ || token === 55 /* AmpersandAmpersandToken */;
11578
- }
11579
10865
  function isLogicalOrCoalescingAssignmentOperator(token) {
11580
10866
  return token === 75 /* BarBarEqualsToken */ || token === 76 /* AmpersandAmpersandEqualsToken */ || token === 77 /* QuestionQuestionEqualsToken */;
11581
10867
  }
11582
- function isLogicalOrCoalescingAssignmentExpression(expr) {
11583
- return isBinaryExpression(expr) && isLogicalOrCoalescingAssignmentOperator(expr.operatorToken.kind);
11584
- }
11585
- function isLogicalOrCoalescingBinaryOperator(token) {
11586
- return isBinaryLogicalOperator(token) || token === 60 /* QuestionQuestionToken */;
11587
- }
11588
- function isLogicalOrCoalescingBinaryExpression(expr) {
11589
- return isBinaryExpression(expr) && isLogicalOrCoalescingBinaryOperator(expr.operatorToken.kind);
11590
- }
11591
10868
  function isAssignmentOperator(token) {
11592
10869
  return token >= 63 /* FirstAssignment */ && token <= 78 /* LastAssignment */;
11593
10870
  }
11594
10871
  function isAssignmentExpression(node, excludeCompoundAssignment) {
11595
10872
  return isBinaryExpression(node) && (excludeCompoundAssignment ? node.operatorToken.kind === 63 /* EqualsToken */ : isAssignmentOperator(node.operatorToken.kind)) && isLeftHandSideExpression(node.left);
11596
10873
  }
11597
- function isDestructuringAssignment(node) {
11598
- if (isAssignmentExpression(
11599
- node,
11600
- /*excludeCompoundAssignment*/
11601
- true
11602
- )) {
11603
- const kind = node.left.kind;
11604
- return kind === 207 /* ObjectLiteralExpression */ || kind === 206 /* ArrayLiteralExpression */;
11605
- }
11606
- return false;
11607
- }
11608
10874
  function isEntityNameExpression(node) {
11609
10875
  return node.kind === 79 /* Identifier */ || isPropertyAccessEntityNameExpression(node);
11610
10876
  }
11611
- function isDottedName(node) {
11612
- return node.kind === 79 /* Identifier */ || node.kind === 108 /* ThisKeyword */ || node.kind === 106 /* SuperKeyword */ || node.kind === 233 /* MetaProperty */ || node.kind === 208 /* PropertyAccessExpression */ && isDottedName(node.expression) || node.kind === 214 /* ParenthesizedExpression */ && isDottedName(node.expression);
11613
- }
11614
10877
  function isPropertyAccessEntityNameExpression(node) {
11615
10878
  return isPropertyAccessExpression(node) && isIdentifier(node.name) && isEntityNameExpression(node.expression);
11616
10879
  }
11617
10880
  function isPrototypeAccess(node) {
11618
10881
  return isBindableStaticAccessExpression(node) && getElementOrPropertyAccessName(node) === "prototype";
11619
10882
  }
11620
- function isEmptyObjectLiteral(expression) {
11621
- return expression.kind === 207 /* ObjectLiteralExpression */ && expression.properties.length === 0;
11622
- }
11623
10883
  function tryExtractTSExtension(fileName) {
11624
10884
  return find(supportedTSExtensionsForExtractExtension, (extension) => fileExtensionIs(fileName, extension));
11625
10885
  }
@@ -11668,12 +10928,6 @@ function isTypeNodeKind(kind) {
11668
10928
  function isAccessExpression(node) {
11669
10929
  return node.kind === 208 /* PropertyAccessExpression */ || node.kind === 209 /* ElementAccessExpression */;
11670
10930
  }
11671
- function getLeftmostAccessExpression(expr) {
11672
- while (isAccessExpression(expr)) {
11673
- expr = expr.expression;
11674
- }
11675
- return expr;
11676
- }
11677
10931
  function getLeftmostExpression(node, stopAtCallExpressions) {
11678
10932
  while (true) {
11679
10933
  switch (node.kind) {
@@ -11923,12 +11177,6 @@ function getEmitModuleResolutionKind(compilerOptions) {
11923
11177
  function getIsolatedModules(options) {
11924
11178
  return !!(options.isolatedModules || options.verbatimModuleSyntax);
11925
11179
  }
11926
- function unreachableCodeIsError(options) {
11927
- return options.allowUnreachableCode === false;
11928
- }
11929
- function unusedLabelIsError(options) {
11930
- return options.allowUnusedLabels === false;
11931
- }
11932
11180
  function moduleResolutionSupportsPackageJsonExportsAndImports(moduleResolution) {
11933
11181
  return moduleResolution >= 3 /* Node16 */ && moduleResolution <= 99 /* NodeNext */ || moduleResolution === 100 /* Bundler */;
11934
11182
  }
@@ -11938,12 +11186,6 @@ function getResolveJsonModule(compilerOptions) {
11938
11186
  }
11939
11187
  return getEmitModuleResolutionKind(compilerOptions) === 100 /* Bundler */;
11940
11188
  }
11941
- function shouldPreserveConstEnums(compilerOptions) {
11942
- return !!(compilerOptions.preserveConstEnums || getIsolatedModules(compilerOptions));
11943
- }
11944
- function getStrictOptionValue(compilerOptions, flag) {
11945
- return compilerOptions[flag] === void 0 ? !!compilerOptions.strict : !!compilerOptions[flag];
11946
- }
11947
11189
  var reservedCharacterPattern = /[^\w\s\/]/g;
11948
11190
  var wildcardCharCodes = [42 /* asterisk */, 63 /* question */];
11949
11191
  var commonPackageFolders = ["node_modules", "bower_components", "jspm_packages"];
@@ -12231,11 +11473,6 @@ function matchPatternOrExact(patternOrStrings, candidate) {
12231
11473
  }
12232
11474
  return findBestPatternMatch(patterns, (_) => _, candidate);
12233
11475
  }
12234
- function sliceAfter(arr, value) {
12235
- const index = arr.indexOf(value);
12236
- Debug.assert(index !== -1);
12237
- return arr.slice(index);
12238
- }
12239
11476
  function addRelatedInfo(diagnostic, ...relatedInformation) {
12240
11477
  if (!relatedInformation.length) {
12241
11478
  return diagnostic;
@@ -17556,9 +16793,6 @@ function isMethodSignature(node) {
17556
16793
  function isMethodDeclaration(node) {
17557
16794
  return node.kind === 171 /* MethodDeclaration */;
17558
16795
  }
17559
- function isClassStaticBlockDeclaration(node) {
17560
- return node.kind === 172 /* ClassStaticBlockDeclaration */;
17561
- }
17562
16796
  function isConstructorDeclaration(node) {
17563
16797
  return node.kind === 173 /* Constructor */;
17564
16798
  }
@@ -17682,9 +16916,6 @@ function isFunctionExpression(node) {
17682
16916
  function isArrowFunction(node) {
17683
16917
  return node.kind === 216 /* ArrowFunction */;
17684
16918
  }
17685
- function isTypeOfExpression(node) {
17686
- return node.kind === 218 /* TypeOfExpression */;
17687
- }
17688
16919
  function isVoidExpression(node) {
17689
16920
  return node.kind === 219 /* VoidExpression */;
17690
16921
  }
@@ -17754,9 +16985,6 @@ function isEnumDeclaration(node) {
17754
16985
  function isModuleDeclaration(node) {
17755
16986
  return node.kind === 264 /* ModuleDeclaration */;
17756
16987
  }
17757
- function isModuleBlock(node) {
17758
- return node.kind === 265 /* ModuleBlock */;
17759
- }
17760
16988
  function isCaseBlock(node) {
17761
16989
  return node.kind === 266 /* CaseBlock */;
17762
16990
  }
@@ -17778,9 +17006,6 @@ function isAssertClause(node) {
17778
17006
  function isAssertEntry(node) {
17779
17007
  return node.kind === 297 /* AssertEntry */;
17780
17008
  }
17781
- function isNamespaceExport(node) {
17782
- return node.kind === 277 /* NamespaceExport */;
17783
- }
17784
17009
  function isImportSpecifier(node) {
17785
17010
  return node.kind === 273 /* ImportSpecifier */;
17786
17011
  }
@@ -17826,9 +17051,6 @@ function isCatchClause(node) {
17826
17051
  function isPropertyAssignment(node) {
17827
17052
  return node.kind === 299 /* PropertyAssignment */;
17828
17053
  }
17829
- function isShorthandPropertyAssignment(node) {
17830
- return node.kind === 300 /* ShorthandPropertyAssignment */;
17831
- }
17832
17054
  function isEnumMember(node) {
17833
17055
  return node.kind === 302 /* EnumMember */;
17834
17056
  }
@@ -17865,9 +17087,6 @@ function isJSDocOverrideTag(node) {
17865
17087
  function isJSDocDeprecatedTag(node) {
17866
17088
  return node.kind === 334 /* JSDocDeprecatedTag */;
17867
17089
  }
17868
- function isJSDocEnumTag(node) {
17869
- return node.kind === 343 /* JSDocEnumTag */;
17870
- }
17871
17090
  function isJSDocParameterTag(node) {
17872
17091
  return node.kind === 344 /* JSDocParameterTag */;
17873
17092
  }
@@ -18162,32 +17381,6 @@ var BinaryExpressionState;
18162
17381
  }
18163
17382
  }
18164
17383
  })(BinaryExpressionState || (BinaryExpressionState = {}));
18165
- var BinaryExpressionStateMachine = class {
18166
- constructor(onEnter, onLeft, onOperator, onRight, onExit, foldState) {
18167
- this.onEnter = onEnter;
18168
- this.onLeft = onLeft;
18169
- this.onOperator = onOperator;
18170
- this.onRight = onRight;
18171
- this.onExit = onExit;
18172
- this.foldState = foldState;
18173
- }
18174
- };
18175
- function createBinaryExpressionTrampoline(onEnter, onLeft, onOperator, onRight, onExit, foldState) {
18176
- const machine = new BinaryExpressionStateMachine(onEnter, onLeft, onOperator, onRight, onExit, foldState);
18177
- return trampoline;
18178
- function trampoline(node, outerState) {
18179
- const resultHolder = { value: void 0 };
18180
- const stateStack = [BinaryExpressionState.enter];
18181
- const nodeStack = [node];
18182
- const userStateStack = [void 0];
18183
- let stackIndex = 0;
18184
- while (stateStack[stackIndex] !== BinaryExpressionState.done) {
18185
- stackIndex = stateStack[stackIndex](machine, stackIndex, stateStack, nodeStack, userStateStack, resultHolder, outerState);
18186
- }
18187
- Debug.assertEqual(stackIndex, 0);
18188
- return resultHolder.value;
18189
- }
18190
- }
18191
17384
  function formatGeneratedNamePart(part, generateName) {
18192
17385
  return typeof part === "object" ? formatGeneratedName(
18193
17386
  /*privateName*/
@@ -29633,2870 +28826,7 @@ function traceIfEnabled(state, diagnostic, ...args) {
29633
28826
  }
29634
28827
  }
29635
28828
 
29636
- // src/compiler/binder.ts
29637
- function getModuleInstanceState(node, visited) {
29638
- if (node.body && !node.body.parent) {
29639
- setParent(node.body, node);
29640
- setParentRecursive(
29641
- node.body,
29642
- /*incremental*/
29643
- false
29644
- );
29645
- }
29646
- return node.body ? getModuleInstanceStateCached(node.body, visited) : 1 /* Instantiated */;
29647
- }
29648
- function getModuleInstanceStateCached(node, visited = /* @__PURE__ */ new Map()) {
29649
- const nodeId = getNodeId(node);
29650
- if (visited.has(nodeId)) {
29651
- return visited.get(nodeId) || 0 /* NonInstantiated */;
29652
- }
29653
- visited.set(nodeId, void 0);
29654
- const result = getModuleInstanceStateWorker(node, visited);
29655
- visited.set(nodeId, result);
29656
- return result;
29657
- }
29658
- function getModuleInstanceStateWorker(node, visited) {
29659
- switch (node.kind) {
29660
- case 261 /* InterfaceDeclaration */:
29661
- case 262 /* TypeAliasDeclaration */:
29662
- return 0 /* NonInstantiated */;
29663
- case 263 /* EnumDeclaration */:
29664
- if (isEnumConst(node)) {
29665
- return 2 /* ConstEnumOnly */;
29666
- }
29667
- break;
29668
- case 269 /* ImportDeclaration */:
29669
- case 268 /* ImportEqualsDeclaration */:
29670
- if (!hasSyntacticModifier(node, 1 /* Export */)) {
29671
- return 0 /* NonInstantiated */;
29672
- }
29673
- break;
29674
- case 275 /* ExportDeclaration */:
29675
- const exportDeclaration = node;
29676
- if (!exportDeclaration.moduleSpecifier && exportDeclaration.exportClause && exportDeclaration.exportClause.kind === 276 /* NamedExports */) {
29677
- let state = 0 /* NonInstantiated */;
29678
- for (const specifier of exportDeclaration.exportClause.elements) {
29679
- const specifierState = getModuleInstanceStateForAliasTarget(specifier, visited);
29680
- if (specifierState > state) {
29681
- state = specifierState;
29682
- }
29683
- if (state === 1 /* Instantiated */) {
29684
- return state;
29685
- }
29686
- }
29687
- return state;
29688
- }
29689
- break;
29690
- case 265 /* ModuleBlock */: {
29691
- let state = 0 /* NonInstantiated */;
29692
- forEachChild(node, (n) => {
29693
- const childState = getModuleInstanceStateCached(n, visited);
29694
- switch (childState) {
29695
- case 0 /* NonInstantiated */:
29696
- return;
29697
- case 2 /* ConstEnumOnly */:
29698
- state = 2 /* ConstEnumOnly */;
29699
- return;
29700
- case 1 /* Instantiated */:
29701
- state = 1 /* Instantiated */;
29702
- return true;
29703
- default:
29704
- Debug.assertNever(childState);
29705
- }
29706
- });
29707
- return state;
29708
- }
29709
- case 264 /* ModuleDeclaration */:
29710
- return getModuleInstanceState(node, visited);
29711
- case 79 /* Identifier */:
29712
- if (node.flags & 2048 /* IdentifierIsInJSDocNamespace */) {
29713
- return 0 /* NonInstantiated */;
29714
- }
29715
- }
29716
- return 1 /* Instantiated */;
29717
- }
29718
- function getModuleInstanceStateForAliasTarget(specifier, visited) {
29719
- const name = specifier.propertyName || specifier.name;
29720
- let p = specifier.parent;
29721
- while (p) {
29722
- if (isBlock(p) || isModuleBlock(p) || isSourceFile(p)) {
29723
- const statements = p.statements;
29724
- let found;
29725
- for (const statement of statements) {
29726
- if (nodeHasName(statement, name)) {
29727
- if (!statement.parent) {
29728
- setParent(statement, p);
29729
- setParentRecursive(
29730
- statement,
29731
- /*incremental*/
29732
- false
29733
- );
29734
- }
29735
- const state = getModuleInstanceStateCached(statement, visited);
29736
- if (found === void 0 || state > found) {
29737
- found = state;
29738
- }
29739
- if (found === 1 /* Instantiated */) {
29740
- return found;
29741
- }
29742
- }
29743
- }
29744
- if (found !== void 0) {
29745
- return found;
29746
- }
29747
- }
29748
- p = p.parent;
29749
- }
29750
- return 1 /* Instantiated */;
29751
- }
29752
- function initFlowNode(node) {
29753
- Debug.attachFlowNodeDebugInfo(node);
29754
- return node;
29755
- }
29756
- var binder = createBinder();
29757
- function createBinder() {
29758
- var file;
29759
- var options;
29760
- var languageVersion;
29761
- var parent;
29762
- var container;
29763
- var thisParentContainer;
29764
- var blockScopeContainer;
29765
- var lastContainer;
29766
- var delayedTypeAliases;
29767
- var seenThisKeyword;
29768
- var currentFlow;
29769
- var currentBreakTarget;
29770
- var currentContinueTarget;
29771
- var currentReturnTarget;
29772
- var currentTrueTarget;
29773
- var currentFalseTarget;
29774
- var currentExceptionTarget;
29775
- var preSwitchCaseFlow;
29776
- var activeLabelList;
29777
- var hasExplicitReturn;
29778
- var emitFlags;
29779
- var inStrictMode;
29780
- var inAssignmentPattern = false;
29781
- var symbolCount = 0;
29782
- var Symbol12;
29783
- var classifiableNames;
29784
- var unreachableFlow = { flags: 1 /* Unreachable */ };
29785
- var reportedUnreachableFlow = { flags: 1 /* Unreachable */ };
29786
- var bindBinaryExpressionFlow = createBindBinaryExpressionFlow();
29787
- return bindSourceFile2;
29788
- function createDiagnosticForNode2(node, message, arg0, arg1, arg2) {
29789
- return createDiagnosticForNodeInSourceFile(getSourceFileOfNode(node) || file, node, message, arg0, arg1, arg2);
29790
- }
29791
- function bindSourceFile2(f, opts) {
29792
- var _a2, _b;
29793
- file = f;
29794
- options = opts;
29795
- languageVersion = getEmitScriptTarget(options);
29796
- inStrictMode = bindInStrictMode(file, opts);
29797
- classifiableNames = /* @__PURE__ */ new Set();
29798
- symbolCount = 0;
29799
- Symbol12 = objectAllocator.getSymbolConstructor();
29800
- Debug.attachFlowNodeDebugInfo(unreachableFlow);
29801
- Debug.attachFlowNodeDebugInfo(reportedUnreachableFlow);
29802
- if (!file.locals) {
29803
- (_a2 = tracing) == null ? void 0 : _a2.push(
29804
- tracing.Phase.Bind,
29805
- "bindSourceFile",
29806
- { path: file.path },
29807
- /*separateBeginAndEnd*/
29808
- true
29809
- );
29810
- bind(file);
29811
- (_b = tracing) == null ? void 0 : _b.pop();
29812
- file.symbolCount = symbolCount;
29813
- file.classifiableNames = classifiableNames;
29814
- delayedBindJSDocTypedefTag();
29815
- }
29816
- file = void 0;
29817
- options = void 0;
29818
- languageVersion = void 0;
29819
- parent = void 0;
29820
- container = void 0;
29821
- thisParentContainer = void 0;
29822
- blockScopeContainer = void 0;
29823
- lastContainer = void 0;
29824
- delayedTypeAliases = void 0;
29825
- seenThisKeyword = false;
29826
- currentFlow = void 0;
29827
- currentBreakTarget = void 0;
29828
- currentContinueTarget = void 0;
29829
- currentReturnTarget = void 0;
29830
- currentTrueTarget = void 0;
29831
- currentFalseTarget = void 0;
29832
- currentExceptionTarget = void 0;
29833
- activeLabelList = void 0;
29834
- hasExplicitReturn = false;
29835
- inAssignmentPattern = false;
29836
- emitFlags = 0 /* None */;
29837
- }
29838
- function bindInStrictMode(file2, opts) {
29839
- if (getStrictOptionValue(opts, "alwaysStrict") && !file2.isDeclarationFile) {
29840
- return true;
29841
- } else {
29842
- return !!file2.externalModuleIndicator;
29843
- }
29844
- }
29845
- function createSymbol(flags, name) {
29846
- symbolCount++;
29847
- return new Symbol12(flags, name);
29848
- }
29849
- function addDeclarationToSymbol(symbol, node, symbolFlags) {
29850
- symbol.flags |= symbolFlags;
29851
- node.symbol = symbol;
29852
- symbol.declarations = appendIfUnique(symbol.declarations, node);
29853
- if (symbolFlags & (32 /* Class */ | 384 /* Enum */ | 1536 /* Module */ | 3 /* Variable */) && !symbol.exports) {
29854
- symbol.exports = createSymbolTable();
29855
- }
29856
- if (symbolFlags & (32 /* Class */ | 64 /* Interface */ | 2048 /* TypeLiteral */ | 4096 /* ObjectLiteral */) && !symbol.members) {
29857
- symbol.members = createSymbolTable();
29858
- }
29859
- if (symbol.constEnumOnlyModule && symbol.flags & (16 /* Function */ | 32 /* Class */ | 256 /* RegularEnum */)) {
29860
- symbol.constEnumOnlyModule = false;
29861
- }
29862
- if (symbolFlags & 111551 /* Value */) {
29863
- setValueDeclaration(symbol, node);
29864
- }
29865
- }
29866
- function getDeclarationName(node) {
29867
- if (node.kind === 274 /* ExportAssignment */) {
29868
- return node.isExportEquals ? "export=" /* ExportEquals */ : "default" /* Default */;
29869
- }
29870
- const name = getNameOfDeclaration(node);
29871
- if (name) {
29872
- if (isAmbientModule(node)) {
29873
- const moduleName = getTextOfIdentifierOrLiteral(name);
29874
- return isGlobalScopeAugmentation(node) ? "__global" : `"${moduleName}"`;
29875
- }
29876
- if (name.kind === 164 /* ComputedPropertyName */) {
29877
- const nameExpression = name.expression;
29878
- if (isStringOrNumericLiteralLike(nameExpression)) {
29879
- return escapeLeadingUnderscores(nameExpression.text);
29880
- }
29881
- if (isSignedNumericLiteral(nameExpression)) {
29882
- return tokenToString(nameExpression.operator) + nameExpression.operand.text;
29883
- } else {
29884
- Debug.fail("Only computed properties with literal names have declaration names");
29885
- }
29886
- }
29887
- if (isPrivateIdentifier(name)) {
29888
- const containingClass = getContainingClass(node);
29889
- if (!containingClass) {
29890
- return void 0;
29891
- }
29892
- const containingClassSymbol = containingClass.symbol;
29893
- return getSymbolNameForPrivateIdentifier(containingClassSymbol, name.escapedText);
29894
- }
29895
- return isPropertyNameLiteral(name) ? getEscapedTextOfIdentifierOrLiteral(name) : void 0;
29896
- }
29897
- switch (node.kind) {
29898
- case 173 /* Constructor */:
29899
- return "__constructor" /* Constructor */;
29900
- case 181 /* FunctionType */:
29901
- case 176 /* CallSignature */:
29902
- case 326 /* JSDocSignature */:
29903
- return "__call" /* Call */;
29904
- case 182 /* ConstructorType */:
29905
- case 177 /* ConstructSignature */:
29906
- return "__new" /* New */;
29907
- case 178 /* IndexSignature */:
29908
- return "__index" /* Index */;
29909
- case 275 /* ExportDeclaration */:
29910
- return "__export" /* ExportStar */;
29911
- case 308 /* SourceFile */:
29912
- return "export=" /* ExportEquals */;
29913
- case 223 /* BinaryExpression */:
29914
- if (getAssignmentDeclarationKind(node) === 2 /* ModuleExports */) {
29915
- return "export=" /* ExportEquals */;
29916
- }
29917
- Debug.fail("Unknown binary declaration kind");
29918
- break;
29919
- case 320 /* JSDocFunctionType */:
29920
- return isJSDocConstructSignature(node) ? "__new" /* New */ : "__call" /* Call */;
29921
- case 166 /* Parameter */:
29922
- Debug.assert(node.parent.kind === 320 /* JSDocFunctionType */, "Impossible parameter parent kind", () => `parent is: ${Debug.formatSyntaxKind(node.parent.kind)}, expected JSDocFunctionType`);
29923
- const functionType = node.parent;
29924
- const index = functionType.parameters.indexOf(node);
29925
- return "arg" + index;
29926
- }
29927
- }
29928
- function getDisplayName(node) {
29929
- return isNamedDeclaration(node) ? declarationNameToString(node.name) : unescapeLeadingUnderscores(Debug.checkDefined(getDeclarationName(node)));
29930
- }
29931
- function declareSymbol(symbolTable, parent2, node, includes, excludes, isReplaceableByMethod, isComputedName) {
29932
- Debug.assert(isComputedName || !hasDynamicName(node));
29933
- const isDefaultExport = hasSyntacticModifier(node, 1024 /* Default */) || isExportSpecifier(node) && node.name.escapedText === "default";
29934
- const name = isComputedName ? "__computed" /* Computed */ : isDefaultExport && parent2 ? "default" /* Default */ : getDeclarationName(node);
29935
- let symbol;
29936
- if (name === void 0) {
29937
- symbol = createSymbol(0 /* None */, "__missing" /* Missing */);
29938
- } else {
29939
- symbol = symbolTable.get(name);
29940
- if (includes & 2885600 /* Classifiable */) {
29941
- classifiableNames.add(name);
29942
- }
29943
- if (!symbol) {
29944
- symbolTable.set(name, symbol = createSymbol(0 /* None */, name));
29945
- if (isReplaceableByMethod)
29946
- symbol.isReplaceableByMethod = true;
29947
- } else if (isReplaceableByMethod && !symbol.isReplaceableByMethod) {
29948
- return symbol;
29949
- } else if (symbol.flags & excludes) {
29950
- if (symbol.isReplaceableByMethod) {
29951
- symbolTable.set(name, symbol = createSymbol(0 /* None */, name));
29952
- } else if (!(includes & 3 /* Variable */ && symbol.flags & 67108864 /* Assignment */)) {
29953
- if (isNamedDeclaration(node)) {
29954
- setParent(node.name, node);
29955
- }
29956
- let message = symbol.flags & 2 /* BlockScopedVariable */ ? Diagnostics.Cannot_redeclare_block_scoped_variable_0 : Diagnostics.Duplicate_identifier_0;
29957
- let messageNeedsName = true;
29958
- if (symbol.flags & 384 /* Enum */ || includes & 384 /* Enum */) {
29959
- message = Diagnostics.Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations;
29960
- messageNeedsName = false;
29961
- }
29962
- let multipleDefaultExports = false;
29963
- if (length(symbol.declarations)) {
29964
- if (isDefaultExport) {
29965
- message = Diagnostics.A_module_cannot_have_multiple_default_exports;
29966
- messageNeedsName = false;
29967
- multipleDefaultExports = true;
29968
- } else {
29969
- if (symbol.declarations && symbol.declarations.length && (node.kind === 274 /* ExportAssignment */ && !node.isExportEquals)) {
29970
- message = Diagnostics.A_module_cannot_have_multiple_default_exports;
29971
- messageNeedsName = false;
29972
- multipleDefaultExports = true;
29973
- }
29974
- }
29975
- }
29976
- const relatedInformation = [];
29977
- if (isTypeAliasDeclaration(node) && nodeIsMissing(node.type) && hasSyntacticModifier(node, 1 /* Export */) && symbol.flags & (2097152 /* Alias */ | 788968 /* Type */ | 1920 /* Namespace */)) {
29978
- relatedInformation.push(createDiagnosticForNode2(node, Diagnostics.Did_you_mean_0, `export type { ${unescapeLeadingUnderscores(node.name.escapedText)} }`));
29979
- }
29980
- const declarationName = getNameOfDeclaration(node) || node;
29981
- forEach(symbol.declarations, (declaration, index) => {
29982
- const decl = getNameOfDeclaration(declaration) || declaration;
29983
- const diag3 = createDiagnosticForNode2(decl, message, messageNeedsName ? getDisplayName(declaration) : void 0);
29984
- file.bindDiagnostics.push(
29985
- multipleDefaultExports ? addRelatedInfo(diag3, createDiagnosticForNode2(declarationName, index === 0 ? Diagnostics.Another_export_default_is_here : Diagnostics.and_here)) : diag3
29986
- );
29987
- if (multipleDefaultExports) {
29988
- relatedInformation.push(createDiagnosticForNode2(decl, Diagnostics.The_first_export_default_is_here));
29989
- }
29990
- });
29991
- const diag2 = createDiagnosticForNode2(declarationName, message, messageNeedsName ? getDisplayName(node) : void 0);
29992
- file.bindDiagnostics.push(addRelatedInfo(diag2, ...relatedInformation));
29993
- symbol = createSymbol(0 /* None */, name);
29994
- }
29995
- }
29996
- }
29997
- addDeclarationToSymbol(symbol, node, includes);
29998
- if (symbol.parent) {
29999
- Debug.assert(symbol.parent === parent2, "Existing symbol parent should match new one");
30000
- } else {
30001
- symbol.parent = parent2;
30002
- }
30003
- return symbol;
30004
- }
30005
- function declareModuleMember(node, symbolFlags, symbolExcludes) {
30006
- const hasExportModifier = !!(getCombinedModifierFlags(node) & 1 /* Export */) || jsdocTreatAsExported(node);
30007
- if (symbolFlags & 2097152 /* Alias */) {
30008
- if (node.kind === 278 /* ExportSpecifier */ || node.kind === 268 /* ImportEqualsDeclaration */ && hasExportModifier) {
30009
- return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes);
30010
- } else {
30011
- Debug.assertNode(container, canHaveLocals);
30012
- return declareSymbol(
30013
- container.locals,
30014
- /*parent*/
30015
- void 0,
30016
- node,
30017
- symbolFlags,
30018
- symbolExcludes
30019
- );
30020
- }
30021
- } else {
30022
- if (isJSDocTypeAlias(node))
30023
- Debug.assert(isInJSFile(node));
30024
- if (!isAmbientModule(node) && (hasExportModifier || container.flags & 64 /* ExportContext */)) {
30025
- if (!canHaveLocals(container) || !container.locals || hasSyntacticModifier(node, 1024 /* Default */) && !getDeclarationName(node)) {
30026
- return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes);
30027
- }
30028
- const exportKind = symbolFlags & 111551 /* Value */ ? 1048576 /* ExportValue */ : 0;
30029
- const local = declareSymbol(
30030
- container.locals,
30031
- /*parent*/
30032
- void 0,
30033
- node,
30034
- exportKind,
30035
- symbolExcludes
30036
- );
30037
- local.exportSymbol = declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes);
30038
- node.localSymbol = local;
30039
- return local;
30040
- } else {
30041
- Debug.assertNode(container, canHaveLocals);
30042
- return declareSymbol(
30043
- container.locals,
30044
- /*parent*/
30045
- void 0,
30046
- node,
30047
- symbolFlags,
30048
- symbolExcludes
30049
- );
30050
- }
30051
- }
30052
- }
30053
- function jsdocTreatAsExported(node) {
30054
- if (node.parent && isModuleDeclaration(node)) {
30055
- node = node.parent;
30056
- }
30057
- if (!isJSDocTypeAlias(node))
30058
- return false;
30059
- if (!isJSDocEnumTag(node) && !!node.fullName)
30060
- return true;
30061
- const declName = getNameOfDeclaration(node);
30062
- if (!declName)
30063
- return false;
30064
- if (isPropertyAccessEntityNameExpression(declName.parent) && isTopLevelNamespaceAssignment(declName.parent))
30065
- return true;
30066
- if (isDeclaration(declName.parent) && getCombinedModifierFlags(declName.parent) & 1 /* Export */)
30067
- return true;
30068
- return false;
30069
- }
30070
- function bindContainer(node, containerFlags) {
30071
- const saveContainer = container;
30072
- const saveThisParentContainer = thisParentContainer;
30073
- const savedBlockScopeContainer = blockScopeContainer;
30074
- if (containerFlags & 1 /* IsContainer */) {
30075
- if (node.kind !== 216 /* ArrowFunction */) {
30076
- thisParentContainer = container;
30077
- }
30078
- container = blockScopeContainer = node;
30079
- if (containerFlags & 32 /* HasLocals */) {
30080
- container.locals = createSymbolTable();
30081
- addToContainerChain(container);
30082
- }
30083
- } else if (containerFlags & 2 /* IsBlockScopedContainer */) {
30084
- blockScopeContainer = node;
30085
- if (containerFlags & 32 /* HasLocals */) {
30086
- blockScopeContainer.locals = void 0;
30087
- }
30088
- }
30089
- if (containerFlags & 4 /* IsControlFlowContainer */) {
30090
- const saveCurrentFlow = currentFlow;
30091
- const saveBreakTarget = currentBreakTarget;
30092
- const saveContinueTarget = currentContinueTarget;
30093
- const saveReturnTarget = currentReturnTarget;
30094
- const saveExceptionTarget = currentExceptionTarget;
30095
- const saveActiveLabelList = activeLabelList;
30096
- const saveHasExplicitReturn = hasExplicitReturn;
30097
- const isImmediatelyInvoked = containerFlags & 16 /* IsFunctionExpression */ && !hasSyntacticModifier(node, 512 /* Async */) && !node.asteriskToken && !!getImmediatelyInvokedFunctionExpression(node) || node.kind === 172 /* ClassStaticBlockDeclaration */;
30098
- if (!isImmediatelyInvoked) {
30099
- currentFlow = initFlowNode({ flags: 2 /* Start */ });
30100
- if (containerFlags & (16 /* IsFunctionExpression */ | 128 /* IsObjectLiteralOrClassExpressionMethodOrAccessor */)) {
30101
- currentFlow.node = node;
30102
- }
30103
- }
30104
- currentReturnTarget = isImmediatelyInvoked || node.kind === 173 /* Constructor */ || isInJSFile(node) && (node.kind === 259 /* FunctionDeclaration */ || node.kind === 215 /* FunctionExpression */) ? createBranchLabel() : void 0;
30105
- currentExceptionTarget = void 0;
30106
- currentBreakTarget = void 0;
30107
- currentContinueTarget = void 0;
30108
- activeLabelList = void 0;
30109
- hasExplicitReturn = false;
30110
- bindChildren(node);
30111
- node.flags &= ~2816 /* ReachabilityAndEmitFlags */;
30112
- if (!(currentFlow.flags & 1 /* Unreachable */) && containerFlags & 8 /* IsFunctionLike */ && nodeIsPresent(node.body)) {
30113
- node.flags |= 256 /* HasImplicitReturn */;
30114
- if (hasExplicitReturn)
30115
- node.flags |= 512 /* HasExplicitReturn */;
30116
- node.endFlowNode = currentFlow;
30117
- }
30118
- if (node.kind === 308 /* SourceFile */) {
30119
- node.flags |= emitFlags;
30120
- node.endFlowNode = currentFlow;
30121
- }
30122
- if (currentReturnTarget) {
30123
- addAntecedent(currentReturnTarget, currentFlow);
30124
- currentFlow = finishFlowLabel(currentReturnTarget);
30125
- if (node.kind === 173 /* Constructor */ || node.kind === 172 /* ClassStaticBlockDeclaration */ || isInJSFile(node) && (node.kind === 259 /* FunctionDeclaration */ || node.kind === 215 /* FunctionExpression */)) {
30126
- node.returnFlowNode = currentFlow;
30127
- }
30128
- }
30129
- if (!isImmediatelyInvoked) {
30130
- currentFlow = saveCurrentFlow;
30131
- }
30132
- currentBreakTarget = saveBreakTarget;
30133
- currentContinueTarget = saveContinueTarget;
30134
- currentReturnTarget = saveReturnTarget;
30135
- currentExceptionTarget = saveExceptionTarget;
30136
- activeLabelList = saveActiveLabelList;
30137
- hasExplicitReturn = saveHasExplicitReturn;
30138
- } else if (containerFlags & 64 /* IsInterface */) {
30139
- seenThisKeyword = false;
30140
- bindChildren(node);
30141
- Debug.assertNotNode(node, isIdentifier);
30142
- node.flags = seenThisKeyword ? node.flags | 128 /* ContainsThis */ : node.flags & ~128 /* ContainsThis */;
30143
- } else {
30144
- bindChildren(node);
30145
- }
30146
- container = saveContainer;
30147
- thisParentContainer = saveThisParentContainer;
30148
- blockScopeContainer = savedBlockScopeContainer;
30149
- }
30150
- function bindEachFunctionsFirst(nodes) {
30151
- bindEach(nodes, (n) => n.kind === 259 /* FunctionDeclaration */ ? bind(n) : void 0);
30152
- bindEach(nodes, (n) => n.kind !== 259 /* FunctionDeclaration */ ? bind(n) : void 0);
30153
- }
30154
- function bindEach(nodes, bindFunction = bind) {
30155
- if (nodes === void 0) {
30156
- return;
30157
- }
30158
- forEach(nodes, bindFunction);
30159
- }
30160
- function bindEachChild(node) {
30161
- forEachChild(node, bind, bindEach);
30162
- }
30163
- function bindChildren(node) {
30164
- const saveInAssignmentPattern = inAssignmentPattern;
30165
- inAssignmentPattern = false;
30166
- if (checkUnreachable(node)) {
30167
- bindEachChild(node);
30168
- bindJSDoc(node);
30169
- inAssignmentPattern = saveInAssignmentPattern;
30170
- return;
30171
- }
30172
- if (node.kind >= 240 /* FirstStatement */ && node.kind <= 256 /* LastStatement */ && !options.allowUnreachableCode) {
30173
- node.flowNode = currentFlow;
30174
- }
30175
- switch (node.kind) {
30176
- case 244 /* WhileStatement */:
30177
- bindWhileStatement(node);
30178
- break;
30179
- case 243 /* DoStatement */:
30180
- bindDoStatement(node);
30181
- break;
30182
- case 245 /* ForStatement */:
30183
- bindForStatement(node);
30184
- break;
30185
- case 246 /* ForInStatement */:
30186
- case 247 /* ForOfStatement */:
30187
- bindForInOrForOfStatement(node);
30188
- break;
30189
- case 242 /* IfStatement */:
30190
- bindIfStatement(node);
30191
- break;
30192
- case 250 /* ReturnStatement */:
30193
- case 254 /* ThrowStatement */:
30194
- bindReturnOrThrow(node);
30195
- break;
30196
- case 249 /* BreakStatement */:
30197
- case 248 /* ContinueStatement */:
30198
- bindBreakOrContinueStatement(node);
30199
- break;
30200
- case 255 /* TryStatement */:
30201
- bindTryStatement(node);
30202
- break;
30203
- case 252 /* SwitchStatement */:
30204
- bindSwitchStatement(node);
30205
- break;
30206
- case 266 /* CaseBlock */:
30207
- bindCaseBlock(node);
30208
- break;
30209
- case 292 /* CaseClause */:
30210
- bindCaseClause(node);
30211
- break;
30212
- case 241 /* ExpressionStatement */:
30213
- bindExpressionStatement(node);
30214
- break;
30215
- case 253 /* LabeledStatement */:
30216
- bindLabeledStatement(node);
30217
- break;
30218
- case 221 /* PrefixUnaryExpression */:
30219
- bindPrefixUnaryExpressionFlow(node);
30220
- break;
30221
- case 222 /* PostfixUnaryExpression */:
30222
- bindPostfixUnaryExpressionFlow(node);
30223
- break;
30224
- case 223 /* BinaryExpression */:
30225
- if (isDestructuringAssignment(node)) {
30226
- inAssignmentPattern = saveInAssignmentPattern;
30227
- bindDestructuringAssignmentFlow(node);
30228
- return;
30229
- }
30230
- bindBinaryExpressionFlow(node);
30231
- break;
30232
- case 217 /* DeleteExpression */:
30233
- bindDeleteExpressionFlow(node);
30234
- break;
30235
- case 224 /* ConditionalExpression */:
30236
- bindConditionalExpressionFlow(node);
30237
- break;
30238
- case 257 /* VariableDeclaration */:
30239
- bindVariableDeclarationFlow(node);
30240
- break;
30241
- case 208 /* PropertyAccessExpression */:
30242
- case 209 /* ElementAccessExpression */:
30243
- bindAccessExpressionFlow(node);
30244
- break;
30245
- case 210 /* CallExpression */:
30246
- bindCallExpressionFlow(node);
30247
- break;
30248
- case 232 /* NonNullExpression */:
30249
- bindNonNullExpressionFlow(node);
30250
- break;
30251
- case 349 /* JSDocTypedefTag */:
30252
- case 341 /* JSDocCallbackTag */:
30253
- case 343 /* JSDocEnumTag */:
30254
- bindJSDocTypeAlias(node);
30255
- break;
30256
- case 308 /* SourceFile */: {
30257
- bindEachFunctionsFirst(node.statements);
30258
- bind(node.endOfFileToken);
30259
- break;
30260
- }
30261
- case 238 /* Block */:
30262
- case 265 /* ModuleBlock */:
30263
- bindEachFunctionsFirst(node.statements);
30264
- break;
30265
- case 205 /* BindingElement */:
30266
- bindBindingElementFlow(node);
30267
- break;
30268
- case 166 /* Parameter */:
30269
- bindParameterFlow(node);
30270
- break;
30271
- case 207 /* ObjectLiteralExpression */:
30272
- case 206 /* ArrayLiteralExpression */:
30273
- case 299 /* PropertyAssignment */:
30274
- case 227 /* SpreadElement */:
30275
- inAssignmentPattern = saveInAssignmentPattern;
30276
- default:
30277
- bindEachChild(node);
30278
- break;
30279
- }
30280
- bindJSDoc(node);
30281
- inAssignmentPattern = saveInAssignmentPattern;
30282
- }
30283
- function isNarrowingExpression(expr) {
30284
- switch (expr.kind) {
30285
- case 79 /* Identifier */:
30286
- case 80 /* PrivateIdentifier */:
30287
- case 108 /* ThisKeyword */:
30288
- case 208 /* PropertyAccessExpression */:
30289
- case 209 /* ElementAccessExpression */:
30290
- return containsNarrowableReference(expr);
30291
- case 210 /* CallExpression */:
30292
- return hasNarrowableArgument(expr);
30293
- case 214 /* ParenthesizedExpression */:
30294
- case 232 /* NonNullExpression */:
30295
- return isNarrowingExpression(expr.expression);
30296
- case 223 /* BinaryExpression */:
30297
- return isNarrowingBinaryExpression(expr);
30298
- case 221 /* PrefixUnaryExpression */:
30299
- return expr.operator === 53 /* ExclamationToken */ && isNarrowingExpression(expr.operand);
30300
- case 218 /* TypeOfExpression */:
30301
- return isNarrowingExpression(expr.expression);
30302
- }
30303
- return false;
30304
- }
30305
- function isNarrowableReference(expr) {
30306
- return isDottedName(expr) || (isPropertyAccessExpression(expr) || isNonNullExpression(expr) || isParenthesizedExpression(expr)) && isNarrowableReference(expr.expression) || isBinaryExpression(expr) && expr.operatorToken.kind === 27 /* CommaToken */ && isNarrowableReference(expr.right) || isElementAccessExpression(expr) && (isStringOrNumericLiteralLike(expr.argumentExpression) || isEntityNameExpression(expr.argumentExpression)) && isNarrowableReference(expr.expression) || isAssignmentExpression(expr) && isNarrowableReference(expr.left);
30307
- }
30308
- function containsNarrowableReference(expr) {
30309
- return isNarrowableReference(expr) || isOptionalChain(expr) && containsNarrowableReference(expr.expression);
30310
- }
30311
- function hasNarrowableArgument(expr) {
30312
- if (expr.arguments) {
30313
- for (const argument of expr.arguments) {
30314
- if (containsNarrowableReference(argument)) {
30315
- return true;
30316
- }
30317
- }
30318
- }
30319
- if (expr.expression.kind === 208 /* PropertyAccessExpression */ && containsNarrowableReference(expr.expression.expression)) {
30320
- return true;
30321
- }
30322
- return false;
30323
- }
30324
- function isNarrowingTypeofOperands(expr1, expr2) {
30325
- return isTypeOfExpression(expr1) && isNarrowableOperand(expr1.expression) && isStringLiteralLike(expr2);
30326
- }
30327
- function isNarrowingBinaryExpression(expr) {
30328
- switch (expr.operatorToken.kind) {
30329
- case 63 /* EqualsToken */:
30330
- case 75 /* BarBarEqualsToken */:
30331
- case 76 /* AmpersandAmpersandEqualsToken */:
30332
- case 77 /* QuestionQuestionEqualsToken */:
30333
- return containsNarrowableReference(expr.left);
30334
- case 34 /* EqualsEqualsToken */:
30335
- case 35 /* ExclamationEqualsToken */:
30336
- case 36 /* EqualsEqualsEqualsToken */:
30337
- case 37 /* ExclamationEqualsEqualsToken */:
30338
- return isNarrowableOperand(expr.left) || isNarrowableOperand(expr.right) || isNarrowingTypeofOperands(expr.right, expr.left) || isNarrowingTypeofOperands(expr.left, expr.right);
30339
- case 102 /* InstanceOfKeyword */:
30340
- return isNarrowableOperand(expr.left);
30341
- case 101 /* InKeyword */:
30342
- return isNarrowingExpression(expr.right);
30343
- case 27 /* CommaToken */:
30344
- return isNarrowingExpression(expr.right);
30345
- }
30346
- return false;
30347
- }
30348
- function isNarrowableOperand(expr) {
30349
- switch (expr.kind) {
30350
- case 214 /* ParenthesizedExpression */:
30351
- return isNarrowableOperand(expr.expression);
30352
- case 223 /* BinaryExpression */:
30353
- switch (expr.operatorToken.kind) {
30354
- case 63 /* EqualsToken */:
30355
- return isNarrowableOperand(expr.left);
30356
- case 27 /* CommaToken */:
30357
- return isNarrowableOperand(expr.right);
30358
- }
30359
- }
30360
- return containsNarrowableReference(expr);
30361
- }
30362
- function createBranchLabel() {
30363
- return initFlowNode({ flags: 4 /* BranchLabel */, antecedents: void 0 });
30364
- }
30365
- function createLoopLabel() {
30366
- return initFlowNode({ flags: 8 /* LoopLabel */, antecedents: void 0 });
30367
- }
30368
- function createReduceLabel(target, antecedents, antecedent) {
30369
- return initFlowNode({ flags: 1024 /* ReduceLabel */, target, antecedents, antecedent });
30370
- }
30371
- function setFlowNodeReferenced(flow) {
30372
- flow.flags |= flow.flags & 2048 /* Referenced */ ? 4096 /* Shared */ : 2048 /* Referenced */;
30373
- }
30374
- function addAntecedent(label, antecedent) {
30375
- if (!(antecedent.flags & 1 /* Unreachable */) && !contains(label.antecedents, antecedent)) {
30376
- (label.antecedents || (label.antecedents = [])).push(antecedent);
30377
- setFlowNodeReferenced(antecedent);
30378
- }
30379
- }
30380
- function createFlowCondition(flags, antecedent, expression) {
30381
- if (antecedent.flags & 1 /* Unreachable */) {
30382
- return antecedent;
30383
- }
30384
- if (!expression) {
30385
- return flags & 32 /* TrueCondition */ ? antecedent : unreachableFlow;
30386
- }
30387
- if ((expression.kind === 110 /* TrueKeyword */ && flags & 64 /* FalseCondition */ || expression.kind === 95 /* FalseKeyword */ && flags & 32 /* TrueCondition */) && !isExpressionOfOptionalChainRoot(expression) && !isNullishCoalesce(expression.parent)) {
30388
- return unreachableFlow;
30389
- }
30390
- if (!isNarrowingExpression(expression)) {
30391
- return antecedent;
30392
- }
30393
- setFlowNodeReferenced(antecedent);
30394
- return initFlowNode({ flags, antecedent, node: expression });
30395
- }
30396
- function createFlowSwitchClause(antecedent, switchStatement, clauseStart, clauseEnd) {
30397
- setFlowNodeReferenced(antecedent);
30398
- return initFlowNode({ flags: 128 /* SwitchClause */, antecedent, switchStatement, clauseStart, clauseEnd });
30399
- }
30400
- function createFlowMutation(flags, antecedent, node) {
30401
- setFlowNodeReferenced(antecedent);
30402
- const result = initFlowNode({ flags, antecedent, node });
30403
- if (currentExceptionTarget) {
30404
- addAntecedent(currentExceptionTarget, result);
30405
- }
30406
- return result;
30407
- }
30408
- function createFlowCall(antecedent, node) {
30409
- setFlowNodeReferenced(antecedent);
30410
- return initFlowNode({ flags: 512 /* Call */, antecedent, node });
30411
- }
30412
- function finishFlowLabel(flow) {
30413
- const antecedents = flow.antecedents;
30414
- if (!antecedents) {
30415
- return unreachableFlow;
30416
- }
30417
- if (antecedents.length === 1) {
30418
- return antecedents[0];
30419
- }
30420
- return flow;
30421
- }
30422
- function isStatementCondition(node) {
30423
- const parent2 = node.parent;
30424
- switch (parent2.kind) {
30425
- case 242 /* IfStatement */:
30426
- case 244 /* WhileStatement */:
30427
- case 243 /* DoStatement */:
30428
- return parent2.expression === node;
30429
- case 245 /* ForStatement */:
30430
- case 224 /* ConditionalExpression */:
30431
- return parent2.condition === node;
30432
- }
30433
- return false;
30434
- }
30435
- function isLogicalExpression(node) {
30436
- while (true) {
30437
- if (node.kind === 214 /* ParenthesizedExpression */) {
30438
- node = node.expression;
30439
- } else if (node.kind === 221 /* PrefixUnaryExpression */ && node.operator === 53 /* ExclamationToken */) {
30440
- node = node.operand;
30441
- } else {
30442
- return isLogicalOrCoalescingBinaryExpression(node);
30443
- }
30444
- }
30445
- }
30446
- function isLogicalAssignmentExpression(node) {
30447
- return isLogicalOrCoalescingAssignmentExpression(skipParentheses(node));
30448
- }
30449
- function isTopLevelLogicalExpression(node) {
30450
- while (isParenthesizedExpression(node.parent) || isPrefixUnaryExpression(node.parent) && node.parent.operator === 53 /* ExclamationToken */) {
30451
- node = node.parent;
30452
- }
30453
- return !isStatementCondition(node) && !isLogicalExpression(node.parent) && !(isOptionalChain(node.parent) && node.parent.expression === node);
30454
- }
30455
- function doWithConditionalBranches(action, value, trueTarget, falseTarget) {
30456
- const savedTrueTarget = currentTrueTarget;
30457
- const savedFalseTarget = currentFalseTarget;
30458
- currentTrueTarget = trueTarget;
30459
- currentFalseTarget = falseTarget;
30460
- action(value);
30461
- currentTrueTarget = savedTrueTarget;
30462
- currentFalseTarget = savedFalseTarget;
30463
- }
30464
- function bindCondition(node, trueTarget, falseTarget) {
30465
- doWithConditionalBranches(bind, node, trueTarget, falseTarget);
30466
- if (!node || !isLogicalAssignmentExpression(node) && !isLogicalExpression(node) && !(isOptionalChain(node) && isOutermostOptionalChain(node))) {
30467
- addAntecedent(trueTarget, createFlowCondition(32 /* TrueCondition */, currentFlow, node));
30468
- addAntecedent(falseTarget, createFlowCondition(64 /* FalseCondition */, currentFlow, node));
30469
- }
30470
- }
30471
- function bindIterativeStatement(node, breakTarget, continueTarget) {
30472
- const saveBreakTarget = currentBreakTarget;
30473
- const saveContinueTarget = currentContinueTarget;
30474
- currentBreakTarget = breakTarget;
30475
- currentContinueTarget = continueTarget;
30476
- bind(node);
30477
- currentBreakTarget = saveBreakTarget;
30478
- currentContinueTarget = saveContinueTarget;
30479
- }
30480
- function setContinueTarget(node, target) {
30481
- let label = activeLabelList;
30482
- while (label && node.parent.kind === 253 /* LabeledStatement */) {
30483
- label.continueTarget = target;
30484
- label = label.next;
30485
- node = node.parent;
30486
- }
30487
- return target;
30488
- }
30489
- function bindWhileStatement(node) {
30490
- const preWhileLabel = setContinueTarget(node, createLoopLabel());
30491
- const preBodyLabel = createBranchLabel();
30492
- const postWhileLabel = createBranchLabel();
30493
- addAntecedent(preWhileLabel, currentFlow);
30494
- currentFlow = preWhileLabel;
30495
- bindCondition(node.expression, preBodyLabel, postWhileLabel);
30496
- currentFlow = finishFlowLabel(preBodyLabel);
30497
- bindIterativeStatement(node.statement, postWhileLabel, preWhileLabel);
30498
- addAntecedent(preWhileLabel, currentFlow);
30499
- currentFlow = finishFlowLabel(postWhileLabel);
30500
- }
30501
- function bindDoStatement(node) {
30502
- const preDoLabel = createLoopLabel();
30503
- const preConditionLabel = setContinueTarget(node, createBranchLabel());
30504
- const postDoLabel = createBranchLabel();
30505
- addAntecedent(preDoLabel, currentFlow);
30506
- currentFlow = preDoLabel;
30507
- bindIterativeStatement(node.statement, postDoLabel, preConditionLabel);
30508
- addAntecedent(preConditionLabel, currentFlow);
30509
- currentFlow = finishFlowLabel(preConditionLabel);
30510
- bindCondition(node.expression, preDoLabel, postDoLabel);
30511
- currentFlow = finishFlowLabel(postDoLabel);
30512
- }
30513
- function bindForStatement(node) {
30514
- const preLoopLabel = setContinueTarget(node, createLoopLabel());
30515
- const preBodyLabel = createBranchLabel();
30516
- const postLoopLabel = createBranchLabel();
30517
- bind(node.initializer);
30518
- addAntecedent(preLoopLabel, currentFlow);
30519
- currentFlow = preLoopLabel;
30520
- bindCondition(node.condition, preBodyLabel, postLoopLabel);
30521
- currentFlow = finishFlowLabel(preBodyLabel);
30522
- bindIterativeStatement(node.statement, postLoopLabel, preLoopLabel);
30523
- bind(node.incrementor);
30524
- addAntecedent(preLoopLabel, currentFlow);
30525
- currentFlow = finishFlowLabel(postLoopLabel);
30526
- }
30527
- function bindForInOrForOfStatement(node) {
30528
- const preLoopLabel = setContinueTarget(node, createLoopLabel());
30529
- const postLoopLabel = createBranchLabel();
30530
- bind(node.expression);
30531
- addAntecedent(preLoopLabel, currentFlow);
30532
- currentFlow = preLoopLabel;
30533
- if (node.kind === 247 /* ForOfStatement */) {
30534
- bind(node.awaitModifier);
30535
- }
30536
- addAntecedent(postLoopLabel, currentFlow);
30537
- bind(node.initializer);
30538
- if (node.initializer.kind !== 258 /* VariableDeclarationList */) {
30539
- bindAssignmentTargetFlow(node.initializer);
30540
- }
30541
- bindIterativeStatement(node.statement, postLoopLabel, preLoopLabel);
30542
- addAntecedent(preLoopLabel, currentFlow);
30543
- currentFlow = finishFlowLabel(postLoopLabel);
30544
- }
30545
- function bindIfStatement(node) {
30546
- const thenLabel = createBranchLabel();
30547
- const elseLabel = createBranchLabel();
30548
- const postIfLabel = createBranchLabel();
30549
- bindCondition(node.expression, thenLabel, elseLabel);
30550
- currentFlow = finishFlowLabel(thenLabel);
30551
- bind(node.thenStatement);
30552
- addAntecedent(postIfLabel, currentFlow);
30553
- currentFlow = finishFlowLabel(elseLabel);
30554
- bind(node.elseStatement);
30555
- addAntecedent(postIfLabel, currentFlow);
30556
- currentFlow = finishFlowLabel(postIfLabel);
30557
- }
30558
- function bindReturnOrThrow(node) {
30559
- bind(node.expression);
30560
- if (node.kind === 250 /* ReturnStatement */) {
30561
- hasExplicitReturn = true;
30562
- if (currentReturnTarget) {
30563
- addAntecedent(currentReturnTarget, currentFlow);
30564
- }
30565
- }
30566
- currentFlow = unreachableFlow;
30567
- }
30568
- function findActiveLabel(name) {
30569
- for (let label = activeLabelList; label; label = label.next) {
30570
- if (label.name === name) {
30571
- return label;
30572
- }
30573
- }
30574
- return void 0;
30575
- }
30576
- function bindBreakOrContinueFlow(node, breakTarget, continueTarget) {
30577
- const flowLabel = node.kind === 249 /* BreakStatement */ ? breakTarget : continueTarget;
30578
- if (flowLabel) {
30579
- addAntecedent(flowLabel, currentFlow);
30580
- currentFlow = unreachableFlow;
30581
- }
30582
- }
30583
- function bindBreakOrContinueStatement(node) {
30584
- bind(node.label);
30585
- if (node.label) {
30586
- const activeLabel = findActiveLabel(node.label.escapedText);
30587
- if (activeLabel) {
30588
- activeLabel.referenced = true;
30589
- bindBreakOrContinueFlow(node, activeLabel.breakTarget, activeLabel.continueTarget);
30590
- }
30591
- } else {
30592
- bindBreakOrContinueFlow(node, currentBreakTarget, currentContinueTarget);
30593
- }
30594
- }
30595
- function bindTryStatement(node) {
30596
- const saveReturnTarget = currentReturnTarget;
30597
- const saveExceptionTarget = currentExceptionTarget;
30598
- const normalExitLabel = createBranchLabel();
30599
- const returnLabel = createBranchLabel();
30600
- let exceptionLabel = createBranchLabel();
30601
- if (node.finallyBlock) {
30602
- currentReturnTarget = returnLabel;
30603
- }
30604
- addAntecedent(exceptionLabel, currentFlow);
30605
- currentExceptionTarget = exceptionLabel;
30606
- bind(node.tryBlock);
30607
- addAntecedent(normalExitLabel, currentFlow);
30608
- if (node.catchClause) {
30609
- currentFlow = finishFlowLabel(exceptionLabel);
30610
- exceptionLabel = createBranchLabel();
30611
- addAntecedent(exceptionLabel, currentFlow);
30612
- currentExceptionTarget = exceptionLabel;
30613
- bind(node.catchClause);
30614
- addAntecedent(normalExitLabel, currentFlow);
30615
- }
30616
- currentReturnTarget = saveReturnTarget;
30617
- currentExceptionTarget = saveExceptionTarget;
30618
- if (node.finallyBlock) {
30619
- const finallyLabel = createBranchLabel();
30620
- finallyLabel.antecedents = concatenate(concatenate(normalExitLabel.antecedents, exceptionLabel.antecedents), returnLabel.antecedents);
30621
- currentFlow = finallyLabel;
30622
- bind(node.finallyBlock);
30623
- if (currentFlow.flags & 1 /* Unreachable */) {
30624
- currentFlow = unreachableFlow;
30625
- } else {
30626
- if (currentReturnTarget && returnLabel.antecedents) {
30627
- addAntecedent(currentReturnTarget, createReduceLabel(finallyLabel, returnLabel.antecedents, currentFlow));
30628
- }
30629
- if (currentExceptionTarget && exceptionLabel.antecedents) {
30630
- addAntecedent(currentExceptionTarget, createReduceLabel(finallyLabel, exceptionLabel.antecedents, currentFlow));
30631
- }
30632
- currentFlow = normalExitLabel.antecedents ? createReduceLabel(finallyLabel, normalExitLabel.antecedents, currentFlow) : unreachableFlow;
30633
- }
30634
- } else {
30635
- currentFlow = finishFlowLabel(normalExitLabel);
30636
- }
30637
- }
30638
- function bindSwitchStatement(node) {
30639
- const postSwitchLabel = createBranchLabel();
30640
- bind(node.expression);
30641
- const saveBreakTarget = currentBreakTarget;
30642
- const savePreSwitchCaseFlow = preSwitchCaseFlow;
30643
- currentBreakTarget = postSwitchLabel;
30644
- preSwitchCaseFlow = currentFlow;
30645
- bind(node.caseBlock);
30646
- addAntecedent(postSwitchLabel, currentFlow);
30647
- const hasDefault = forEach(node.caseBlock.clauses, (c) => c.kind === 293 /* DefaultClause */);
30648
- node.possiblyExhaustive = !hasDefault && !postSwitchLabel.antecedents;
30649
- if (!hasDefault) {
30650
- addAntecedent(postSwitchLabel, createFlowSwitchClause(preSwitchCaseFlow, node, 0, 0));
30651
- }
30652
- currentBreakTarget = saveBreakTarget;
30653
- preSwitchCaseFlow = savePreSwitchCaseFlow;
30654
- currentFlow = finishFlowLabel(postSwitchLabel);
30655
- }
30656
- function bindCaseBlock(node) {
30657
- const clauses = node.clauses;
30658
- const isNarrowingSwitch = isNarrowingExpression(node.parent.expression);
30659
- let fallthroughFlow = unreachableFlow;
30660
- for (let i = 0; i < clauses.length; i++) {
30661
- const clauseStart = i;
30662
- while (!clauses[i].statements.length && i + 1 < clauses.length) {
30663
- bind(clauses[i]);
30664
- i++;
30665
- }
30666
- const preCaseLabel = createBranchLabel();
30667
- addAntecedent(preCaseLabel, isNarrowingSwitch ? createFlowSwitchClause(preSwitchCaseFlow, node.parent, clauseStart, i + 1) : preSwitchCaseFlow);
30668
- addAntecedent(preCaseLabel, fallthroughFlow);
30669
- currentFlow = finishFlowLabel(preCaseLabel);
30670
- const clause = clauses[i];
30671
- bind(clause);
30672
- fallthroughFlow = currentFlow;
30673
- if (!(currentFlow.flags & 1 /* Unreachable */) && i !== clauses.length - 1 && options.noFallthroughCasesInSwitch) {
30674
- clause.fallthroughFlowNode = currentFlow;
30675
- }
30676
- }
30677
- }
30678
- function bindCaseClause(node) {
30679
- const saveCurrentFlow = currentFlow;
30680
- currentFlow = preSwitchCaseFlow;
30681
- bind(node.expression);
30682
- currentFlow = saveCurrentFlow;
30683
- bindEach(node.statements);
30684
- }
30685
- function bindExpressionStatement(node) {
30686
- bind(node.expression);
30687
- maybeBindExpressionFlowIfCall(node.expression);
30688
- }
30689
- function maybeBindExpressionFlowIfCall(node) {
30690
- if (node.kind === 210 /* CallExpression */) {
30691
- const call = node;
30692
- if (call.expression.kind !== 106 /* SuperKeyword */ && isDottedName(call.expression)) {
30693
- currentFlow = createFlowCall(currentFlow, call);
30694
- }
30695
- }
30696
- }
30697
- function bindLabeledStatement(node) {
30698
- const postStatementLabel = createBranchLabel();
30699
- activeLabelList = {
30700
- next: activeLabelList,
30701
- name: node.label.escapedText,
30702
- breakTarget: postStatementLabel,
30703
- continueTarget: void 0,
30704
- referenced: false
30705
- };
30706
- bind(node.label);
30707
- bind(node.statement);
30708
- if (!activeLabelList.referenced && !options.allowUnusedLabels) {
30709
- errorOrSuggestionOnNode(unusedLabelIsError(options), node.label, Diagnostics.Unused_label);
30710
- }
30711
- activeLabelList = activeLabelList.next;
30712
- addAntecedent(postStatementLabel, currentFlow);
30713
- currentFlow = finishFlowLabel(postStatementLabel);
30714
- }
30715
- function bindDestructuringTargetFlow(node) {
30716
- if (node.kind === 223 /* BinaryExpression */ && node.operatorToken.kind === 63 /* EqualsToken */) {
30717
- bindAssignmentTargetFlow(node.left);
30718
- } else {
30719
- bindAssignmentTargetFlow(node);
30720
- }
30721
- }
30722
- function bindAssignmentTargetFlow(node) {
30723
- if (isNarrowableReference(node)) {
30724
- currentFlow = createFlowMutation(16 /* Assignment */, currentFlow, node);
30725
- } else if (node.kind === 206 /* ArrayLiteralExpression */) {
30726
- for (const e of node.elements) {
30727
- if (e.kind === 227 /* SpreadElement */) {
30728
- bindAssignmentTargetFlow(e.expression);
30729
- } else {
30730
- bindDestructuringTargetFlow(e);
30731
- }
30732
- }
30733
- } else if (node.kind === 207 /* ObjectLiteralExpression */) {
30734
- for (const p of node.properties) {
30735
- if (p.kind === 299 /* PropertyAssignment */) {
30736
- bindDestructuringTargetFlow(p.initializer);
30737
- } else if (p.kind === 300 /* ShorthandPropertyAssignment */) {
30738
- bindAssignmentTargetFlow(p.name);
30739
- } else if (p.kind === 301 /* SpreadAssignment */) {
30740
- bindAssignmentTargetFlow(p.expression);
30741
- }
30742
- }
30743
- }
30744
- }
30745
- function bindLogicalLikeExpression(node, trueTarget, falseTarget) {
30746
- const preRightLabel = createBranchLabel();
30747
- if (node.operatorToken.kind === 55 /* AmpersandAmpersandToken */ || node.operatorToken.kind === 76 /* AmpersandAmpersandEqualsToken */) {
30748
- bindCondition(node.left, preRightLabel, falseTarget);
30749
- } else {
30750
- bindCondition(node.left, trueTarget, preRightLabel);
30751
- }
30752
- currentFlow = finishFlowLabel(preRightLabel);
30753
- bind(node.operatorToken);
30754
- if (isLogicalOrCoalescingAssignmentOperator(node.operatorToken.kind)) {
30755
- doWithConditionalBranches(bind, node.right, trueTarget, falseTarget);
30756
- bindAssignmentTargetFlow(node.left);
30757
- addAntecedent(trueTarget, createFlowCondition(32 /* TrueCondition */, currentFlow, node));
30758
- addAntecedent(falseTarget, createFlowCondition(64 /* FalseCondition */, currentFlow, node));
30759
- } else {
30760
- bindCondition(node.right, trueTarget, falseTarget);
30761
- }
30762
- }
30763
- function bindPrefixUnaryExpressionFlow(node) {
30764
- if (node.operator === 53 /* ExclamationToken */) {
30765
- const saveTrueTarget = currentTrueTarget;
30766
- currentTrueTarget = currentFalseTarget;
30767
- currentFalseTarget = saveTrueTarget;
30768
- bindEachChild(node);
30769
- currentFalseTarget = currentTrueTarget;
30770
- currentTrueTarget = saveTrueTarget;
30771
- } else {
30772
- bindEachChild(node);
30773
- if (node.operator === 45 /* PlusPlusToken */ || node.operator === 46 /* MinusMinusToken */) {
30774
- bindAssignmentTargetFlow(node.operand);
30775
- }
30776
- }
30777
- }
30778
- function bindPostfixUnaryExpressionFlow(node) {
30779
- bindEachChild(node);
30780
- if (node.operator === 45 /* PlusPlusToken */ || node.operator === 46 /* MinusMinusToken */) {
30781
- bindAssignmentTargetFlow(node.operand);
30782
- }
30783
- }
30784
- function bindDestructuringAssignmentFlow(node) {
30785
- if (inAssignmentPattern) {
30786
- inAssignmentPattern = false;
30787
- bind(node.operatorToken);
30788
- bind(node.right);
30789
- inAssignmentPattern = true;
30790
- bind(node.left);
30791
- } else {
30792
- inAssignmentPattern = true;
30793
- bind(node.left);
30794
- inAssignmentPattern = false;
30795
- bind(node.operatorToken);
30796
- bind(node.right);
30797
- }
30798
- bindAssignmentTargetFlow(node.left);
30799
- }
30800
- function createBindBinaryExpressionFlow() {
30801
- return createBinaryExpressionTrampoline(
30802
- onEnter,
30803
- onLeft,
30804
- onOperator,
30805
- onRight,
30806
- onExit,
30807
- /*foldState*/
30808
- void 0
30809
- );
30810
- function onEnter(node, state) {
30811
- if (state) {
30812
- state.stackIndex++;
30813
- setParent(node, parent);
30814
- const saveInStrictMode = inStrictMode;
30815
- bindWorker(node);
30816
- const saveParent = parent;
30817
- parent = node;
30818
- state.skip = false;
30819
- state.inStrictModeStack[state.stackIndex] = saveInStrictMode;
30820
- state.parentStack[state.stackIndex] = saveParent;
30821
- } else {
30822
- state = {
30823
- stackIndex: 0,
30824
- skip: false,
30825
- inStrictModeStack: [void 0],
30826
- parentStack: [void 0]
30827
- };
30828
- }
30829
- const operator = node.operatorToken.kind;
30830
- if (isLogicalOrCoalescingBinaryOperator(operator) || isLogicalOrCoalescingAssignmentOperator(operator)) {
30831
- if (isTopLevelLogicalExpression(node)) {
30832
- const postExpressionLabel = createBranchLabel();
30833
- bindLogicalLikeExpression(node, postExpressionLabel, postExpressionLabel);
30834
- currentFlow = finishFlowLabel(postExpressionLabel);
30835
- } else {
30836
- bindLogicalLikeExpression(node, currentTrueTarget, currentFalseTarget);
30837
- }
30838
- state.skip = true;
30839
- }
30840
- return state;
30841
- }
30842
- function onLeft(left, state, node) {
30843
- if (!state.skip) {
30844
- const maybeBound = maybeBind2(left);
30845
- if (node.operatorToken.kind === 27 /* CommaToken */) {
30846
- maybeBindExpressionFlowIfCall(left);
30847
- }
30848
- return maybeBound;
30849
- }
30850
- }
30851
- function onOperator(operatorToken, state, _node) {
30852
- if (!state.skip) {
30853
- bind(operatorToken);
30854
- }
30855
- }
30856
- function onRight(right, state, node) {
30857
- if (!state.skip) {
30858
- const maybeBound = maybeBind2(right);
30859
- if (node.operatorToken.kind === 27 /* CommaToken */) {
30860
- maybeBindExpressionFlowIfCall(right);
30861
- }
30862
- return maybeBound;
30863
- }
30864
- }
30865
- function onExit(node, state) {
30866
- if (!state.skip) {
30867
- const operator = node.operatorToken.kind;
30868
- if (isAssignmentOperator(operator) && !isAssignmentTarget(node)) {
30869
- bindAssignmentTargetFlow(node.left);
30870
- if (operator === 63 /* EqualsToken */ && node.left.kind === 209 /* ElementAccessExpression */) {
30871
- const elementAccess = node.left;
30872
- if (isNarrowableOperand(elementAccess.expression)) {
30873
- currentFlow = createFlowMutation(256 /* ArrayMutation */, currentFlow, node);
30874
- }
30875
- }
30876
- }
30877
- }
30878
- const savedInStrictMode = state.inStrictModeStack[state.stackIndex];
30879
- const savedParent = state.parentStack[state.stackIndex];
30880
- if (savedInStrictMode !== void 0) {
30881
- inStrictMode = savedInStrictMode;
30882
- }
30883
- if (savedParent !== void 0) {
30884
- parent = savedParent;
30885
- }
30886
- state.skip = false;
30887
- state.stackIndex--;
30888
- }
30889
- function maybeBind2(node) {
30890
- if (node && isBinaryExpression(node) && !isDestructuringAssignment(node)) {
30891
- return node;
30892
- }
30893
- bind(node);
30894
- }
30895
- }
30896
- function bindDeleteExpressionFlow(node) {
30897
- bindEachChild(node);
30898
- if (node.expression.kind === 208 /* PropertyAccessExpression */) {
30899
- bindAssignmentTargetFlow(node.expression);
30900
- }
30901
- }
30902
- function bindConditionalExpressionFlow(node) {
30903
- const trueLabel = createBranchLabel();
30904
- const falseLabel = createBranchLabel();
30905
- const postExpressionLabel = createBranchLabel();
30906
- bindCondition(node.condition, trueLabel, falseLabel);
30907
- currentFlow = finishFlowLabel(trueLabel);
30908
- bind(node.questionToken);
30909
- bind(node.whenTrue);
30910
- addAntecedent(postExpressionLabel, currentFlow);
30911
- currentFlow = finishFlowLabel(falseLabel);
30912
- bind(node.colonToken);
30913
- bind(node.whenFalse);
30914
- addAntecedent(postExpressionLabel, currentFlow);
30915
- currentFlow = finishFlowLabel(postExpressionLabel);
30916
- }
30917
- function bindInitializedVariableFlow(node) {
30918
- const name = !isOmittedExpression(node) ? node.name : void 0;
30919
- if (isBindingPattern(name)) {
30920
- for (const child of name.elements) {
30921
- bindInitializedVariableFlow(child);
30922
- }
30923
- } else {
30924
- currentFlow = createFlowMutation(16 /* Assignment */, currentFlow, node);
30925
- }
30926
- }
30927
- function bindVariableDeclarationFlow(node) {
30928
- bindEachChild(node);
30929
- if (node.initializer || isForInOrOfStatement(node.parent.parent)) {
30930
- bindInitializedVariableFlow(node);
30931
- }
30932
- }
30933
- function bindBindingElementFlow(node) {
30934
- bind(node.dotDotDotToken);
30935
- bind(node.propertyName);
30936
- bindInitializer(node.initializer);
30937
- bind(node.name);
30938
- }
30939
- function bindParameterFlow(node) {
30940
- bindEach(node.modifiers);
30941
- bind(node.dotDotDotToken);
30942
- bind(node.questionToken);
30943
- bind(node.type);
30944
- bindInitializer(node.initializer);
30945
- bind(node.name);
30946
- }
30947
- function bindInitializer(node) {
30948
- if (!node) {
30949
- return;
30950
- }
30951
- const entryFlow = currentFlow;
30952
- bind(node);
30953
- if (entryFlow === unreachableFlow || entryFlow === currentFlow) {
30954
- return;
30955
- }
30956
- const exitFlow = createBranchLabel();
30957
- addAntecedent(exitFlow, entryFlow);
30958
- addAntecedent(exitFlow, currentFlow);
30959
- currentFlow = finishFlowLabel(exitFlow);
30960
- }
30961
- function bindJSDocTypeAlias(node) {
30962
- bind(node.tagName);
30963
- if (node.kind !== 343 /* JSDocEnumTag */ && node.fullName) {
30964
- setParent(node.fullName, node);
30965
- setParentRecursive(
30966
- node.fullName,
30967
- /*incremental*/
30968
- false
30969
- );
30970
- }
30971
- if (typeof node.comment !== "string") {
30972
- bindEach(node.comment);
30973
- }
30974
- }
30975
- function bindJSDocClassTag(node) {
30976
- bindEachChild(node);
30977
- const host = getHostSignatureFromJSDoc(node);
30978
- if (host && host.kind !== 171 /* MethodDeclaration */) {
30979
- addDeclarationToSymbol(host.symbol, host, 32 /* Class */);
30980
- }
30981
- }
30982
- function bindOptionalExpression(node, trueTarget, falseTarget) {
30983
- doWithConditionalBranches(bind, node, trueTarget, falseTarget);
30984
- if (!isOptionalChain(node) || isOutermostOptionalChain(node)) {
30985
- addAntecedent(trueTarget, createFlowCondition(32 /* TrueCondition */, currentFlow, node));
30986
- addAntecedent(falseTarget, createFlowCondition(64 /* FalseCondition */, currentFlow, node));
30987
- }
30988
- }
30989
- function bindOptionalChainRest(node) {
30990
- switch (node.kind) {
30991
- case 208 /* PropertyAccessExpression */:
30992
- bind(node.questionDotToken);
30993
- bind(node.name);
30994
- break;
30995
- case 209 /* ElementAccessExpression */:
30996
- bind(node.questionDotToken);
30997
- bind(node.argumentExpression);
30998
- break;
30999
- case 210 /* CallExpression */:
31000
- bind(node.questionDotToken);
31001
- bindEach(node.typeArguments);
31002
- bindEach(node.arguments);
31003
- break;
31004
- }
31005
- }
31006
- function bindOptionalChain(node, trueTarget, falseTarget) {
31007
- const preChainLabel = isOptionalChainRoot(node) ? createBranchLabel() : void 0;
31008
- bindOptionalExpression(node.expression, preChainLabel || trueTarget, falseTarget);
31009
- if (preChainLabel) {
31010
- currentFlow = finishFlowLabel(preChainLabel);
31011
- }
31012
- doWithConditionalBranches(bindOptionalChainRest, node, trueTarget, falseTarget);
31013
- if (isOutermostOptionalChain(node)) {
31014
- addAntecedent(trueTarget, createFlowCondition(32 /* TrueCondition */, currentFlow, node));
31015
- addAntecedent(falseTarget, createFlowCondition(64 /* FalseCondition */, currentFlow, node));
31016
- }
31017
- }
31018
- function bindOptionalChainFlow(node) {
31019
- if (isTopLevelLogicalExpression(node)) {
31020
- const postExpressionLabel = createBranchLabel();
31021
- bindOptionalChain(node, postExpressionLabel, postExpressionLabel);
31022
- currentFlow = finishFlowLabel(postExpressionLabel);
31023
- } else {
31024
- bindOptionalChain(node, currentTrueTarget, currentFalseTarget);
31025
- }
31026
- }
31027
- function bindNonNullExpressionFlow(node) {
31028
- if (isOptionalChain(node)) {
31029
- bindOptionalChainFlow(node);
31030
- } else {
31031
- bindEachChild(node);
31032
- }
31033
- }
31034
- function bindAccessExpressionFlow(node) {
31035
- if (isOptionalChain(node)) {
31036
- bindOptionalChainFlow(node);
31037
- } else {
31038
- bindEachChild(node);
31039
- }
31040
- }
31041
- function bindCallExpressionFlow(node) {
31042
- if (isOptionalChain(node)) {
31043
- bindOptionalChainFlow(node);
31044
- } else {
31045
- const expr = skipParentheses(node.expression);
31046
- if (expr.kind === 215 /* FunctionExpression */ || expr.kind === 216 /* ArrowFunction */) {
31047
- bindEach(node.typeArguments);
31048
- bindEach(node.arguments);
31049
- bind(node.expression);
31050
- } else {
31051
- bindEachChild(node);
31052
- if (node.expression.kind === 106 /* SuperKeyword */) {
31053
- currentFlow = createFlowCall(currentFlow, node);
31054
- }
31055
- }
31056
- }
31057
- if (node.expression.kind === 208 /* PropertyAccessExpression */) {
31058
- const propertyAccess = node.expression;
31059
- if (isIdentifier(propertyAccess.name) && isNarrowableOperand(propertyAccess.expression) && isPushOrUnshiftIdentifier(propertyAccess.name)) {
31060
- currentFlow = createFlowMutation(256 /* ArrayMutation */, currentFlow, node);
31061
- }
31062
- }
31063
- }
31064
- function addToContainerChain(next) {
31065
- if (lastContainer) {
31066
- lastContainer.nextContainer = next;
31067
- }
31068
- lastContainer = next;
31069
- }
31070
- function declareSymbolAndAddToSymbolTable(node, symbolFlags, symbolExcludes) {
31071
- switch (container.kind) {
31072
- case 264 /* ModuleDeclaration */:
31073
- return declareModuleMember(node, symbolFlags, symbolExcludes);
31074
- case 308 /* SourceFile */:
31075
- return declareSourceFileMember(node, symbolFlags, symbolExcludes);
31076
- case 228 /* ClassExpression */:
31077
- case 260 /* ClassDeclaration */:
31078
- return declareClassMember(node, symbolFlags, symbolExcludes);
31079
- case 263 /* EnumDeclaration */:
31080
- return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes);
31081
- case 184 /* TypeLiteral */:
31082
- case 325 /* JSDocTypeLiteral */:
31083
- case 207 /* ObjectLiteralExpression */:
31084
- case 261 /* InterfaceDeclaration */:
31085
- case 289 /* JsxAttributes */:
31086
- return declareSymbol(container.symbol.members, container.symbol, node, symbolFlags, symbolExcludes);
31087
- case 181 /* FunctionType */:
31088
- case 182 /* ConstructorType */:
31089
- case 176 /* CallSignature */:
31090
- case 177 /* ConstructSignature */:
31091
- case 326 /* JSDocSignature */:
31092
- case 178 /* IndexSignature */:
31093
- case 171 /* MethodDeclaration */:
31094
- case 170 /* MethodSignature */:
31095
- case 173 /* Constructor */:
31096
- case 174 /* GetAccessor */:
31097
- case 175 /* SetAccessor */:
31098
- case 259 /* FunctionDeclaration */:
31099
- case 215 /* FunctionExpression */:
31100
- case 216 /* ArrowFunction */:
31101
- case 320 /* JSDocFunctionType */:
31102
- case 172 /* ClassStaticBlockDeclaration */:
31103
- case 262 /* TypeAliasDeclaration */:
31104
- case 197 /* MappedType */:
31105
- if (container.locals)
31106
- Debug.assertNode(container, canHaveLocals);
31107
- return declareSymbol(
31108
- container.locals,
31109
- /*parent*/
31110
- void 0,
31111
- node,
31112
- symbolFlags,
31113
- symbolExcludes
31114
- );
31115
- }
31116
- }
31117
- function declareClassMember(node, symbolFlags, symbolExcludes) {
31118
- return isStatic(node) ? declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes) : declareSymbol(container.symbol.members, container.symbol, node, symbolFlags, symbolExcludes);
31119
- }
31120
- function declareSourceFileMember(node, symbolFlags, symbolExcludes) {
31121
- return isExternalModule(file) ? declareModuleMember(node, symbolFlags, symbolExcludes) : declareSymbol(
31122
- file.locals,
31123
- /*parent*/
31124
- void 0,
31125
- node,
31126
- symbolFlags,
31127
- symbolExcludes
31128
- );
31129
- }
31130
- function hasExportDeclarations(node) {
31131
- const body = isSourceFile(node) ? node : tryCast(node.body, isModuleBlock);
31132
- return !!body && body.statements.some((s) => isExportDeclaration(s) || isExportAssignment(s));
31133
- }
31134
- function setExportContextFlag(node) {
31135
- if (node.flags & 16777216 /* Ambient */ && !hasExportDeclarations(node)) {
31136
- node.flags |= 64 /* ExportContext */;
31137
- } else {
31138
- node.flags &= ~64 /* ExportContext */;
31139
- }
31140
- }
31141
- function bindModuleDeclaration(node) {
31142
- setExportContextFlag(node);
31143
- if (isAmbientModule(node)) {
31144
- if (hasSyntacticModifier(node, 1 /* Export */)) {
31145
- errorOnFirstToken(node, Diagnostics.export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always_visible);
31146
- }
31147
- if (isModuleAugmentationExternal(node)) {
31148
- declareModuleSymbol(node);
31149
- } else {
31150
- let pattern;
31151
- if (node.name.kind === 10 /* StringLiteral */) {
31152
- const { text } = node.name;
31153
- pattern = tryParsePattern(text);
31154
- if (pattern === void 0) {
31155
- errorOnFirstToken(node.name, Diagnostics.Pattern_0_can_have_at_most_one_Asterisk_character, text);
31156
- }
31157
- }
31158
- const symbol = declareSymbolAndAddToSymbolTable(node, 512 /* ValueModule */, 110735 /* ValueModuleExcludes */);
31159
- file.patternAmbientModules = append(file.patternAmbientModules, pattern && !isString(pattern) ? { pattern, symbol } : void 0);
31160
- }
31161
- } else {
31162
- const state = declareModuleSymbol(node);
31163
- if (state !== 0 /* NonInstantiated */) {
31164
- const { symbol } = node;
31165
- symbol.constEnumOnlyModule = !(symbol.flags & (16 /* Function */ | 32 /* Class */ | 256 /* RegularEnum */)) && state === 2 /* ConstEnumOnly */ && symbol.constEnumOnlyModule !== false;
31166
- }
31167
- }
31168
- }
31169
- function declareModuleSymbol(node) {
31170
- const state = getModuleInstanceState(node);
31171
- const instantiated = state !== 0 /* NonInstantiated */;
31172
- declareSymbolAndAddToSymbolTable(
31173
- node,
31174
- instantiated ? 512 /* ValueModule */ : 1024 /* NamespaceModule */,
31175
- instantiated ? 110735 /* ValueModuleExcludes */ : 0 /* NamespaceModuleExcludes */
31176
- );
31177
- return state;
31178
- }
31179
- function bindFunctionOrConstructorType(node) {
31180
- const symbol = createSymbol(131072 /* Signature */, getDeclarationName(node));
31181
- addDeclarationToSymbol(symbol, node, 131072 /* Signature */);
31182
- const typeLiteralSymbol = createSymbol(2048 /* TypeLiteral */, "__type" /* Type */);
31183
- addDeclarationToSymbol(typeLiteralSymbol, node, 2048 /* TypeLiteral */);
31184
- typeLiteralSymbol.members = createSymbolTable();
31185
- typeLiteralSymbol.members.set(symbol.escapedName, symbol);
31186
- }
31187
- function bindObjectLiteralExpression(node) {
31188
- return bindAnonymousDeclaration(node, 4096 /* ObjectLiteral */, "__object" /* Object */);
31189
- }
31190
- function bindJsxAttributes(node) {
31191
- return bindAnonymousDeclaration(node, 4096 /* ObjectLiteral */, "__jsxAttributes" /* JSXAttributes */);
31192
- }
31193
- function bindJsxAttribute(node, symbolFlags, symbolExcludes) {
31194
- return declareSymbolAndAddToSymbolTable(node, symbolFlags, symbolExcludes);
31195
- }
31196
- function bindAnonymousDeclaration(node, symbolFlags, name) {
31197
- const symbol = createSymbol(symbolFlags, name);
31198
- if (symbolFlags & (8 /* EnumMember */ | 106500 /* ClassMember */)) {
31199
- symbol.parent = container.symbol;
31200
- }
31201
- addDeclarationToSymbol(symbol, node, symbolFlags);
31202
- return symbol;
31203
- }
31204
- function bindBlockScopedDeclaration(node, symbolFlags, symbolExcludes) {
31205
- switch (blockScopeContainer.kind) {
31206
- case 264 /* ModuleDeclaration */:
31207
- declareModuleMember(node, symbolFlags, symbolExcludes);
31208
- break;
31209
- case 308 /* SourceFile */:
31210
- if (isExternalOrCommonJsModule(container)) {
31211
- declareModuleMember(node, symbolFlags, symbolExcludes);
31212
- break;
31213
- }
31214
- default:
31215
- Debug.assertNode(blockScopeContainer, canHaveLocals);
31216
- if (!blockScopeContainer.locals) {
31217
- blockScopeContainer.locals = createSymbolTable();
31218
- addToContainerChain(blockScopeContainer);
31219
- }
31220
- declareSymbol(
31221
- blockScopeContainer.locals,
31222
- /*parent*/
31223
- void 0,
31224
- node,
31225
- symbolFlags,
31226
- symbolExcludes
31227
- );
31228
- }
31229
- }
31230
- function delayedBindJSDocTypedefTag() {
31231
- if (!delayedTypeAliases) {
31232
- return;
31233
- }
31234
- const saveContainer = container;
31235
- const saveLastContainer = lastContainer;
31236
- const saveBlockScopeContainer = blockScopeContainer;
31237
- const saveParent = parent;
31238
- const saveCurrentFlow = currentFlow;
31239
- for (const typeAlias of delayedTypeAliases) {
31240
- const host = typeAlias.parent.parent;
31241
- container = findAncestor(host.parent, (n) => !!(getContainerFlags(n) & 1 /* IsContainer */)) || file;
31242
- blockScopeContainer = getEnclosingBlockScopeContainer(host) || file;
31243
- currentFlow = initFlowNode({ flags: 2 /* Start */ });
31244
- parent = typeAlias;
31245
- bind(typeAlias.typeExpression);
31246
- const declName = getNameOfDeclaration(typeAlias);
31247
- if ((isJSDocEnumTag(typeAlias) || !typeAlias.fullName) && declName && isPropertyAccessEntityNameExpression(declName.parent)) {
31248
- const isTopLevel = isTopLevelNamespaceAssignment(declName.parent);
31249
- if (isTopLevel) {
31250
- bindPotentiallyMissingNamespaces(
31251
- file.symbol,
31252
- declName.parent,
31253
- isTopLevel,
31254
- !!findAncestor(declName, (d) => isPropertyAccessExpression(d) && d.name.escapedText === "prototype"),
31255
- /*containerIsClass*/
31256
- false
31257
- );
31258
- const oldContainer = container;
31259
- switch (getAssignmentDeclarationPropertyAccessKind(declName.parent)) {
31260
- case 1 /* ExportsProperty */:
31261
- case 2 /* ModuleExports */:
31262
- if (!isExternalOrCommonJsModule(file)) {
31263
- container = void 0;
31264
- } else {
31265
- container = file;
31266
- }
31267
- break;
31268
- case 4 /* ThisProperty */:
31269
- container = declName.parent.expression;
31270
- break;
31271
- case 3 /* PrototypeProperty */:
31272
- container = declName.parent.expression.name;
31273
- break;
31274
- case 5 /* Property */:
31275
- container = isExportsOrModuleExportsOrAlias(file, declName.parent.expression) ? file : isPropertyAccessExpression(declName.parent.expression) ? declName.parent.expression.name : declName.parent.expression;
31276
- break;
31277
- case 0 /* None */:
31278
- return Debug.fail("Shouldn't have detected typedef or enum on non-assignment declaration");
31279
- }
31280
- if (container) {
31281
- declareModuleMember(typeAlias, 524288 /* TypeAlias */, 788968 /* TypeAliasExcludes */);
31282
- }
31283
- container = oldContainer;
31284
- }
31285
- } else if (isJSDocEnumTag(typeAlias) || !typeAlias.fullName || typeAlias.fullName.kind === 79 /* Identifier */) {
31286
- parent = typeAlias.parent;
31287
- bindBlockScopedDeclaration(typeAlias, 524288 /* TypeAlias */, 788968 /* TypeAliasExcludes */);
31288
- } else {
31289
- bind(typeAlias.fullName);
31290
- }
31291
- }
31292
- container = saveContainer;
31293
- lastContainer = saveLastContainer;
31294
- blockScopeContainer = saveBlockScopeContainer;
31295
- parent = saveParent;
31296
- currentFlow = saveCurrentFlow;
31297
- }
31298
- function checkContextualIdentifier(node) {
31299
- if (!file.parseDiagnostics.length && !(node.flags & 16777216 /* Ambient */) && !(node.flags & 8388608 /* JSDoc */) && !isIdentifierName(node)) {
31300
- const originalKeywordKind = identifierToKeywordKind(node);
31301
- if (originalKeywordKind === void 0) {
31302
- return;
31303
- }
31304
- if (inStrictMode && originalKeywordKind >= 117 /* FirstFutureReservedWord */ && originalKeywordKind <= 125 /* LastFutureReservedWord */) {
31305
- file.bindDiagnostics.push(createDiagnosticForNode2(
31306
- node,
31307
- getStrictModeIdentifierMessage(node),
31308
- declarationNameToString(node)
31309
- ));
31310
- } else if (originalKeywordKind === 133 /* AwaitKeyword */) {
31311
- if (isExternalModule(file) && isInTopLevelContext(node)) {
31312
- file.bindDiagnostics.push(createDiagnosticForNode2(
31313
- node,
31314
- Diagnostics.Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module,
31315
- declarationNameToString(node)
31316
- ));
31317
- } else if (node.flags & 32768 /* AwaitContext */) {
31318
- file.bindDiagnostics.push(createDiagnosticForNode2(
31319
- node,
31320
- Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here,
31321
- declarationNameToString(node)
31322
- ));
31323
- }
31324
- } else if (originalKeywordKind === 125 /* YieldKeyword */ && node.flags & 8192 /* YieldContext */) {
31325
- file.bindDiagnostics.push(createDiagnosticForNode2(
31326
- node,
31327
- Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here,
31328
- declarationNameToString(node)
31329
- ));
31330
- }
31331
- }
31332
- }
31333
- function getStrictModeIdentifierMessage(node) {
31334
- if (getContainingClass(node)) {
31335
- return Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode;
31336
- }
31337
- if (file.externalModuleIndicator) {
31338
- return Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode;
31339
- }
31340
- return Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode;
31341
- }
31342
- function checkPrivateIdentifier(node) {
31343
- if (node.escapedText === "#constructor") {
31344
- if (!file.parseDiagnostics.length) {
31345
- file.bindDiagnostics.push(createDiagnosticForNode2(
31346
- node,
31347
- Diagnostics.constructor_is_a_reserved_word,
31348
- declarationNameToString(node)
31349
- ));
31350
- }
31351
- }
31352
- }
31353
- function checkStrictModeBinaryExpression(node) {
31354
- if (inStrictMode && isLeftHandSideExpression(node.left) && isAssignmentOperator(node.operatorToken.kind)) {
31355
- checkStrictModeEvalOrArguments(node, node.left);
31356
- }
31357
- }
31358
- function checkStrictModeCatchClause(node) {
31359
- if (inStrictMode && node.variableDeclaration) {
31360
- checkStrictModeEvalOrArguments(node, node.variableDeclaration.name);
31361
- }
31362
- }
31363
- function checkStrictModeDeleteExpression(node) {
31364
- if (inStrictMode && node.expression.kind === 79 /* Identifier */) {
31365
- const span = getErrorSpanForNode(file, node.expression);
31366
- file.bindDiagnostics.push(createFileDiagnostic(file, span.start, span.length, Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode));
31367
- }
31368
- }
31369
- function isEvalOrArgumentsIdentifier(node) {
31370
- return isIdentifier(node) && (node.escapedText === "eval" || node.escapedText === "arguments");
31371
- }
31372
- function checkStrictModeEvalOrArguments(contextNode, name) {
31373
- if (name && name.kind === 79 /* Identifier */) {
31374
- const identifier = name;
31375
- if (isEvalOrArgumentsIdentifier(identifier)) {
31376
- const span = getErrorSpanForNode(file, name);
31377
- file.bindDiagnostics.push(createFileDiagnostic(
31378
- file,
31379
- span.start,
31380
- span.length,
31381
- getStrictModeEvalOrArgumentsMessage(contextNode),
31382
- idText(identifier)
31383
- ));
31384
- }
31385
- }
31386
- }
31387
- function getStrictModeEvalOrArgumentsMessage(node) {
31388
- if (getContainingClass(node)) {
31389
- return Diagnostics.Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of_0_For_more_information_see_https_Colon_Slash_Slashdeveloper_mozilla_org_Slashen_US_Slashdocs_SlashWeb_SlashJavaScript_SlashReference_SlashStrict_mode;
31390
- }
31391
- if (file.externalModuleIndicator) {
31392
- return Diagnostics.Invalid_use_of_0_Modules_are_automatically_in_strict_mode;
31393
- }
31394
- return Diagnostics.Invalid_use_of_0_in_strict_mode;
31395
- }
31396
- function checkStrictModeFunctionName(node) {
31397
- if (inStrictMode) {
31398
- checkStrictModeEvalOrArguments(node, node.name);
31399
- }
31400
- }
31401
- function getStrictModeBlockScopeFunctionDeclarationMessage(node) {
31402
- if (getContainingClass(node)) {
31403
- return Diagnostics.Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_definitions_are_automatically_in_strict_mode;
31404
- }
31405
- if (file.externalModuleIndicator) {
31406
- return Diagnostics.Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_are_automatically_in_strict_mode;
31407
- }
31408
- return Diagnostics.Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5;
31409
- }
31410
- function checkStrictModeFunctionDeclaration(node) {
31411
- if (languageVersion < 2 /* ES2015 */) {
31412
- if (blockScopeContainer.kind !== 308 /* SourceFile */ && blockScopeContainer.kind !== 264 /* ModuleDeclaration */ && !isFunctionLikeOrClassStaticBlockDeclaration(blockScopeContainer)) {
31413
- const errorSpan = getErrorSpanForNode(file, node);
31414
- file.bindDiagnostics.push(createFileDiagnostic(
31415
- file,
31416
- errorSpan.start,
31417
- errorSpan.length,
31418
- getStrictModeBlockScopeFunctionDeclarationMessage(node)
31419
- ));
31420
- }
31421
- }
31422
- }
31423
- function checkStrictModeNumericLiteral(node) {
31424
- if (languageVersion < 1 /* ES5 */ && inStrictMode && node.numericLiteralFlags & 32 /* Octal */) {
31425
- file.bindDiagnostics.push(createDiagnosticForNode2(node, Diagnostics.Octal_literals_are_not_allowed_in_strict_mode));
31426
- }
31427
- }
31428
- function checkStrictModePostfixUnaryExpression(node) {
31429
- if (inStrictMode) {
31430
- checkStrictModeEvalOrArguments(node, node.operand);
31431
- }
31432
- }
31433
- function checkStrictModePrefixUnaryExpression(node) {
31434
- if (inStrictMode) {
31435
- if (node.operator === 45 /* PlusPlusToken */ || node.operator === 46 /* MinusMinusToken */) {
31436
- checkStrictModeEvalOrArguments(node, node.operand);
31437
- }
31438
- }
31439
- }
31440
- function checkStrictModeWithStatement(node) {
31441
- if (inStrictMode) {
31442
- errorOnFirstToken(node, Diagnostics.with_statements_are_not_allowed_in_strict_mode);
31443
- }
31444
- }
31445
- function checkStrictModeLabeledStatement(node) {
31446
- if (inStrictMode && getEmitScriptTarget(options) >= 2 /* ES2015 */) {
31447
- if (isDeclarationStatement(node.statement) || isVariableStatement(node.statement)) {
31448
- errorOnFirstToken(node.label, Diagnostics.A_label_is_not_allowed_here);
31449
- }
31450
- }
31451
- }
31452
- function errorOnFirstToken(node, message, arg0, arg1, arg2) {
31453
- const span = getSpanOfTokenAtPosition(file, node.pos);
31454
- file.bindDiagnostics.push(createFileDiagnostic(file, span.start, span.length, message, arg0, arg1, arg2));
31455
- }
31456
- function errorOrSuggestionOnNode(isError, node, message) {
31457
- errorOrSuggestionOnRange(isError, node, node, message);
31458
- }
31459
- function errorOrSuggestionOnRange(isError, startNode, endNode, message) {
31460
- addErrorOrSuggestionDiagnostic(isError, { pos: getTokenPosOfNode(startNode, file), end: endNode.end }, message);
31461
- }
31462
- function addErrorOrSuggestionDiagnostic(isError, range, message) {
31463
- const diag2 = createFileDiagnostic(file, range.pos, range.end - range.pos, message);
31464
- if (isError) {
31465
- file.bindDiagnostics.push(diag2);
31466
- } else {
31467
- file.bindSuggestionDiagnostics = append(file.bindSuggestionDiagnostics, { ...diag2, category: 2 /* Suggestion */ });
31468
- }
31469
- }
31470
- function bind(node) {
31471
- if (!node) {
31472
- return;
31473
- }
31474
- setParent(node, parent);
31475
- if (tracing)
31476
- node.tracingPath = file.path;
31477
- const saveInStrictMode = inStrictMode;
31478
- bindWorker(node);
31479
- if (node.kind > 162 /* LastToken */) {
31480
- const saveParent = parent;
31481
- parent = node;
31482
- const containerFlags = getContainerFlags(node);
31483
- if (containerFlags === 0 /* None */) {
31484
- bindChildren(node);
31485
- } else {
31486
- bindContainer(node, containerFlags);
31487
- }
31488
- parent = saveParent;
31489
- } else {
31490
- const saveParent = parent;
31491
- if (node.kind === 1 /* EndOfFileToken */)
31492
- parent = node;
31493
- bindJSDoc(node);
31494
- parent = saveParent;
31495
- }
31496
- inStrictMode = saveInStrictMode;
31497
- }
31498
- function bindJSDoc(node) {
31499
- if (hasJSDocNodes(node)) {
31500
- if (isInJSFile(node)) {
31501
- for (const j of node.jsDoc) {
31502
- bind(j);
31503
- }
31504
- } else {
31505
- for (const j of node.jsDoc) {
31506
- setParent(j, node);
31507
- setParentRecursive(
31508
- j,
31509
- /*incremental*/
31510
- false
31511
- );
31512
- }
31513
- }
31514
- }
31515
- }
31516
- function updateStrictModeStatementList(statements) {
31517
- if (!inStrictMode) {
31518
- for (const statement of statements) {
31519
- if (!isPrologueDirective(statement)) {
31520
- return;
31521
- }
31522
- if (isUseStrictPrologueDirective(statement)) {
31523
- inStrictMode = true;
31524
- return;
31525
- }
31526
- }
31527
- }
31528
- }
31529
- function isUseStrictPrologueDirective(node) {
31530
- const nodeText = getSourceTextOfNodeFromSourceFile(file, node.expression);
31531
- return nodeText === '"use strict"' || nodeText === "'use strict'";
31532
- }
31533
- function bindWorker(node) {
31534
- switch (node.kind) {
31535
- case 79 /* Identifier */:
31536
- if (node.flags & 2048 /* IdentifierIsInJSDocNamespace */) {
31537
- let parentNode = node.parent;
31538
- while (parentNode && !isJSDocTypeAlias(parentNode)) {
31539
- parentNode = parentNode.parent;
31540
- }
31541
- bindBlockScopedDeclaration(parentNode, 524288 /* TypeAlias */, 788968 /* TypeAliasExcludes */);
31542
- break;
31543
- }
31544
- case 108 /* ThisKeyword */:
31545
- if (currentFlow && (isExpression(node) || parent.kind === 300 /* ShorthandPropertyAssignment */)) {
31546
- node.flowNode = currentFlow;
31547
- }
31548
- return checkContextualIdentifier(node);
31549
- case 163 /* QualifiedName */:
31550
- if (currentFlow && isPartOfTypeQuery(node)) {
31551
- node.flowNode = currentFlow;
31552
- }
31553
- break;
31554
- case 233 /* MetaProperty */:
31555
- case 106 /* SuperKeyword */:
31556
- node.flowNode = currentFlow;
31557
- break;
31558
- case 80 /* PrivateIdentifier */:
31559
- return checkPrivateIdentifier(node);
31560
- case 208 /* PropertyAccessExpression */:
31561
- case 209 /* ElementAccessExpression */:
31562
- const expr = node;
31563
- if (currentFlow && isNarrowableReference(expr)) {
31564
- expr.flowNode = currentFlow;
31565
- }
31566
- if (isSpecialPropertyDeclaration(expr)) {
31567
- bindSpecialPropertyDeclaration(expr);
31568
- }
31569
- if (isInJSFile(expr) && file.commonJsModuleIndicator && isModuleExportsAccessExpression(expr) && !lookupSymbolForName(blockScopeContainer, "module")) {
31570
- declareSymbol(
31571
- file.locals,
31572
- /*parent*/
31573
- void 0,
31574
- expr.expression,
31575
- 1 /* FunctionScopedVariable */ | 134217728 /* ModuleExports */,
31576
- 111550 /* FunctionScopedVariableExcludes */
31577
- );
31578
- }
31579
- break;
31580
- case 223 /* BinaryExpression */:
31581
- const specialKind = getAssignmentDeclarationKind(node);
31582
- switch (specialKind) {
31583
- case 1 /* ExportsProperty */:
31584
- bindExportsPropertyAssignment(node);
31585
- break;
31586
- case 2 /* ModuleExports */:
31587
- bindModuleExportsAssignment(node);
31588
- break;
31589
- case 3 /* PrototypeProperty */:
31590
- bindPrototypePropertyAssignment(node.left, node);
31591
- break;
31592
- case 6 /* Prototype */:
31593
- bindPrototypeAssignment(node);
31594
- break;
31595
- case 4 /* ThisProperty */:
31596
- bindThisPropertyAssignment(node);
31597
- break;
31598
- case 5 /* Property */:
31599
- const expression = node.left.expression;
31600
- if (isInJSFile(node) && isIdentifier(expression)) {
31601
- const symbol = lookupSymbolForName(blockScopeContainer, expression.escapedText);
31602
- if (isThisInitializedDeclaration(symbol == null ? void 0 : symbol.valueDeclaration)) {
31603
- bindThisPropertyAssignment(node);
31604
- break;
31605
- }
31606
- }
31607
- bindSpecialPropertyAssignment(node);
31608
- break;
31609
- case 0 /* None */:
31610
- break;
31611
- default:
31612
- Debug.fail("Unknown binary expression special property assignment kind");
31613
- }
31614
- return checkStrictModeBinaryExpression(node);
31615
- case 295 /* CatchClause */:
31616
- return checkStrictModeCatchClause(node);
31617
- case 217 /* DeleteExpression */:
31618
- return checkStrictModeDeleteExpression(node);
31619
- case 8 /* NumericLiteral */:
31620
- return checkStrictModeNumericLiteral(node);
31621
- case 222 /* PostfixUnaryExpression */:
31622
- return checkStrictModePostfixUnaryExpression(node);
31623
- case 221 /* PrefixUnaryExpression */:
31624
- return checkStrictModePrefixUnaryExpression(node);
31625
- case 251 /* WithStatement */:
31626
- return checkStrictModeWithStatement(node);
31627
- case 253 /* LabeledStatement */:
31628
- return checkStrictModeLabeledStatement(node);
31629
- case 194 /* ThisType */:
31630
- seenThisKeyword = true;
31631
- return;
31632
- case 179 /* TypePredicate */:
31633
- break;
31634
- case 165 /* TypeParameter */:
31635
- return bindTypeParameter(node);
31636
- case 166 /* Parameter */:
31637
- return bindParameter(node);
31638
- case 257 /* VariableDeclaration */:
31639
- return bindVariableDeclarationOrBindingElement(node);
31640
- case 205 /* BindingElement */:
31641
- node.flowNode = currentFlow;
31642
- return bindVariableDeclarationOrBindingElement(node);
31643
- case 169 /* PropertyDeclaration */:
31644
- case 168 /* PropertySignature */:
31645
- return bindPropertyWorker(node);
31646
- case 299 /* PropertyAssignment */:
31647
- case 300 /* ShorthandPropertyAssignment */:
31648
- return bindPropertyOrMethodOrAccessor(node, 4 /* Property */, 0 /* PropertyExcludes */);
31649
- case 302 /* EnumMember */:
31650
- return bindPropertyOrMethodOrAccessor(node, 8 /* EnumMember */, 900095 /* EnumMemberExcludes */);
31651
- case 176 /* CallSignature */:
31652
- case 177 /* ConstructSignature */:
31653
- case 178 /* IndexSignature */:
31654
- return declareSymbolAndAddToSymbolTable(node, 131072 /* Signature */, 0 /* None */);
31655
- case 171 /* MethodDeclaration */:
31656
- case 170 /* MethodSignature */:
31657
- return bindPropertyOrMethodOrAccessor(
31658
- node,
31659
- 8192 /* Method */ | (node.questionToken ? 16777216 /* Optional */ : 0 /* None */),
31660
- isObjectLiteralMethod(node) ? 0 /* PropertyExcludes */ : 103359 /* MethodExcludes */
31661
- );
31662
- case 259 /* FunctionDeclaration */:
31663
- return bindFunctionDeclaration(node);
31664
- case 173 /* Constructor */:
31665
- return declareSymbolAndAddToSymbolTable(
31666
- node,
31667
- 16384 /* Constructor */,
31668
- /*symbolExcludes:*/
31669
- 0 /* None */
31670
- );
31671
- case 174 /* GetAccessor */:
31672
- return bindPropertyOrMethodOrAccessor(node, 32768 /* GetAccessor */, 46015 /* GetAccessorExcludes */);
31673
- case 175 /* SetAccessor */:
31674
- return bindPropertyOrMethodOrAccessor(node, 65536 /* SetAccessor */, 78783 /* SetAccessorExcludes */);
31675
- case 181 /* FunctionType */:
31676
- case 320 /* JSDocFunctionType */:
31677
- case 326 /* JSDocSignature */:
31678
- case 182 /* ConstructorType */:
31679
- return bindFunctionOrConstructorType(node);
31680
- case 184 /* TypeLiteral */:
31681
- case 325 /* JSDocTypeLiteral */:
31682
- case 197 /* MappedType */:
31683
- return bindAnonymousTypeWorker(node);
31684
- case 335 /* JSDocClassTag */:
31685
- return bindJSDocClassTag(node);
31686
- case 207 /* ObjectLiteralExpression */:
31687
- return bindObjectLiteralExpression(node);
31688
- case 215 /* FunctionExpression */:
31689
- case 216 /* ArrowFunction */:
31690
- return bindFunctionExpression(node);
31691
- case 210 /* CallExpression */:
31692
- const assignmentKind = getAssignmentDeclarationKind(node);
31693
- switch (assignmentKind) {
31694
- case 7 /* ObjectDefinePropertyValue */:
31695
- return bindObjectDefinePropertyAssignment(node);
31696
- case 8 /* ObjectDefinePropertyExports */:
31697
- return bindObjectDefinePropertyExport(node);
31698
- case 9 /* ObjectDefinePrototypeProperty */:
31699
- return bindObjectDefinePrototypeProperty(node);
31700
- case 0 /* None */:
31701
- break;
31702
- default:
31703
- return Debug.fail("Unknown call expression assignment declaration kind");
31704
- }
31705
- if (isInJSFile(node)) {
31706
- bindCallExpression(node);
31707
- }
31708
- break;
31709
- case 228 /* ClassExpression */:
31710
- case 260 /* ClassDeclaration */:
31711
- inStrictMode = true;
31712
- return bindClassLikeDeclaration(node);
31713
- case 261 /* InterfaceDeclaration */:
31714
- return bindBlockScopedDeclaration(node, 64 /* Interface */, 788872 /* InterfaceExcludes */);
31715
- case 262 /* TypeAliasDeclaration */:
31716
- return bindBlockScopedDeclaration(node, 524288 /* TypeAlias */, 788968 /* TypeAliasExcludes */);
31717
- case 263 /* EnumDeclaration */:
31718
- return bindEnumDeclaration(node);
31719
- case 264 /* ModuleDeclaration */:
31720
- return bindModuleDeclaration(node);
31721
- case 289 /* JsxAttributes */:
31722
- return bindJsxAttributes(node);
31723
- case 288 /* JsxAttribute */:
31724
- return bindJsxAttribute(node, 4 /* Property */, 0 /* PropertyExcludes */);
31725
- case 268 /* ImportEqualsDeclaration */:
31726
- case 271 /* NamespaceImport */:
31727
- case 273 /* ImportSpecifier */:
31728
- case 278 /* ExportSpecifier */:
31729
- return declareSymbolAndAddToSymbolTable(node, 2097152 /* Alias */, 2097152 /* AliasExcludes */);
31730
- case 267 /* NamespaceExportDeclaration */:
31731
- return bindNamespaceExportDeclaration(node);
31732
- case 270 /* ImportClause */:
31733
- return bindImportClause(node);
31734
- case 275 /* ExportDeclaration */:
31735
- return bindExportDeclaration(node);
31736
- case 274 /* ExportAssignment */:
31737
- return bindExportAssignment(node);
31738
- case 308 /* SourceFile */:
31739
- updateStrictModeStatementList(node.statements);
31740
- return bindSourceFileIfExternalModule();
31741
- case 238 /* Block */:
31742
- if (!isFunctionLikeOrClassStaticBlockDeclaration(node.parent)) {
31743
- return;
31744
- }
31745
- case 265 /* ModuleBlock */:
31746
- return updateStrictModeStatementList(node.statements);
31747
- case 344 /* JSDocParameterTag */:
31748
- if (node.parent.kind === 326 /* JSDocSignature */) {
31749
- return bindParameter(node);
31750
- }
31751
- if (node.parent.kind !== 325 /* JSDocTypeLiteral */) {
31752
- break;
31753
- }
31754
- case 351 /* JSDocPropertyTag */:
31755
- const propTag = node;
31756
- const flags = propTag.isBracketed || propTag.typeExpression && propTag.typeExpression.type.kind === 319 /* JSDocOptionalType */ ? 4 /* Property */ | 16777216 /* Optional */ : 4 /* Property */;
31757
- return declareSymbolAndAddToSymbolTable(propTag, flags, 0 /* PropertyExcludes */);
31758
- case 349 /* JSDocTypedefTag */:
31759
- case 341 /* JSDocCallbackTag */:
31760
- case 343 /* JSDocEnumTag */:
31761
- return (delayedTypeAliases || (delayedTypeAliases = [])).push(node);
31762
- case 342 /* JSDocOverloadTag */:
31763
- return bind(node.typeExpression);
31764
- }
31765
- }
31766
- function bindPropertyWorker(node) {
31767
- const isAutoAccessor = isAutoAccessorPropertyDeclaration(node);
31768
- const includes = isAutoAccessor ? 98304 /* Accessor */ : 4 /* Property */;
31769
- const excludes = isAutoAccessor ? 13247 /* AccessorExcludes */ : 0 /* PropertyExcludes */;
31770
- return bindPropertyOrMethodOrAccessor(node, includes | (node.questionToken ? 16777216 /* Optional */ : 0 /* None */), excludes);
31771
- }
31772
- function bindAnonymousTypeWorker(node) {
31773
- return bindAnonymousDeclaration(node, 2048 /* TypeLiteral */, "__type" /* Type */);
31774
- }
31775
- function bindSourceFileIfExternalModule() {
31776
- setExportContextFlag(file);
31777
- if (isExternalModule(file)) {
31778
- bindSourceFileAsExternalModule();
31779
- } else if (isJsonSourceFile(file)) {
31780
- bindSourceFileAsExternalModule();
31781
- const originalSymbol = file.symbol;
31782
- declareSymbol(file.symbol.exports, file.symbol, file, 4 /* Property */, 67108863 /* All */);
31783
- file.symbol = originalSymbol;
31784
- }
31785
- }
31786
- function bindSourceFileAsExternalModule() {
31787
- bindAnonymousDeclaration(file, 512 /* ValueModule */, `"${removeFileExtension(file.fileName)}"`);
31788
- }
31789
- function bindExportAssignment(node) {
31790
- if (!container.symbol || !container.symbol.exports) {
31791
- bindAnonymousDeclaration(node, 111551 /* Value */, getDeclarationName(node));
31792
- } else {
31793
- const flags = exportAssignmentIsAlias(node) ? 2097152 /* Alias */ : 4 /* Property */;
31794
- const symbol = declareSymbol(container.symbol.exports, container.symbol, node, flags, 67108863 /* All */);
31795
- if (node.isExportEquals) {
31796
- setValueDeclaration(symbol, node);
31797
- }
31798
- }
31799
- }
31800
- function bindNamespaceExportDeclaration(node) {
31801
- if (some(node.modifiers)) {
31802
- file.bindDiagnostics.push(createDiagnosticForNode2(node, Diagnostics.Modifiers_cannot_appear_here));
31803
- }
31804
- const diag2 = !isSourceFile(node.parent) ? Diagnostics.Global_module_exports_may_only_appear_at_top_level : !isExternalModule(node.parent) ? Diagnostics.Global_module_exports_may_only_appear_in_module_files : !node.parent.isDeclarationFile ? Diagnostics.Global_module_exports_may_only_appear_in_declaration_files : void 0;
31805
- if (diag2) {
31806
- file.bindDiagnostics.push(createDiagnosticForNode2(node, diag2));
31807
- } else {
31808
- file.symbol.globalExports = file.symbol.globalExports || createSymbolTable();
31809
- declareSymbol(file.symbol.globalExports, file.symbol, node, 2097152 /* Alias */, 2097152 /* AliasExcludes */);
31810
- }
31811
- }
31812
- function bindExportDeclaration(node) {
31813
- if (!container.symbol || !container.symbol.exports) {
31814
- bindAnonymousDeclaration(node, 8388608 /* ExportStar */, getDeclarationName(node));
31815
- } else if (!node.exportClause) {
31816
- declareSymbol(container.symbol.exports, container.symbol, node, 8388608 /* ExportStar */, 0 /* None */);
31817
- } else if (isNamespaceExport(node.exportClause)) {
31818
- setParent(node.exportClause, node);
31819
- declareSymbol(container.symbol.exports, container.symbol, node.exportClause, 2097152 /* Alias */, 2097152 /* AliasExcludes */);
31820
- }
31821
- }
31822
- function bindImportClause(node) {
31823
- if (node.name) {
31824
- declareSymbolAndAddToSymbolTable(node, 2097152 /* Alias */, 2097152 /* AliasExcludes */);
31825
- }
31826
- }
31827
- function setCommonJsModuleIndicator(node) {
31828
- if (file.externalModuleIndicator && file.externalModuleIndicator !== true) {
31829
- return false;
31830
- }
31831
- if (!file.commonJsModuleIndicator) {
31832
- file.commonJsModuleIndicator = node;
31833
- if (!file.externalModuleIndicator) {
31834
- bindSourceFileAsExternalModule();
31835
- }
31836
- }
31837
- return true;
31838
- }
31839
- function bindObjectDefinePropertyExport(node) {
31840
- if (!setCommonJsModuleIndicator(node)) {
31841
- return;
31842
- }
31843
- const symbol = forEachIdentifierInEntityName(
31844
- node.arguments[0],
31845
- /*parent*/
31846
- void 0,
31847
- (id, symbol2) => {
31848
- if (symbol2) {
31849
- addDeclarationToSymbol(symbol2, id, 1536 /* Module */ | 67108864 /* Assignment */);
31850
- }
31851
- return symbol2;
31852
- }
31853
- );
31854
- if (symbol) {
31855
- const flags = 4 /* Property */ | 1048576 /* ExportValue */;
31856
- declareSymbol(symbol.exports, symbol, node, flags, 0 /* None */);
31857
- }
31858
- }
31859
- function bindExportsPropertyAssignment(node) {
31860
- if (!setCommonJsModuleIndicator(node)) {
31861
- return;
31862
- }
31863
- const symbol = forEachIdentifierInEntityName(
31864
- node.left.expression,
31865
- /*parent*/
31866
- void 0,
31867
- (id, symbol2) => {
31868
- if (symbol2) {
31869
- addDeclarationToSymbol(symbol2, id, 1536 /* Module */ | 67108864 /* Assignment */);
31870
- }
31871
- return symbol2;
31872
- }
31873
- );
31874
- if (symbol) {
31875
- const isAlias = isAliasableExpression(node.right) && (isExportsIdentifier(node.left.expression) || isModuleExportsAccessExpression(node.left.expression));
31876
- const flags = isAlias ? 2097152 /* Alias */ : 4 /* Property */ | 1048576 /* ExportValue */;
31877
- setParent(node.left, node);
31878
- declareSymbol(symbol.exports, symbol, node.left, flags, 0 /* None */);
31879
- }
31880
- }
31881
- function bindModuleExportsAssignment(node) {
31882
- if (!setCommonJsModuleIndicator(node)) {
31883
- return;
31884
- }
31885
- const assignedExpression = getRightMostAssignedExpression(node.right);
31886
- if (isEmptyObjectLiteral(assignedExpression) || container === file && isExportsOrModuleExportsOrAlias(file, assignedExpression)) {
31887
- return;
31888
- }
31889
- if (isObjectLiteralExpression(assignedExpression) && every(assignedExpression.properties, isShorthandPropertyAssignment)) {
31890
- forEach(assignedExpression.properties, bindExportAssignedObjectMemberAlias);
31891
- return;
31892
- }
31893
- const flags = exportAssignmentIsAlias(node) ? 2097152 /* Alias */ : 4 /* Property */ | 1048576 /* ExportValue */ | 512 /* ValueModule */;
31894
- const symbol = declareSymbol(file.symbol.exports, file.symbol, node, flags | 67108864 /* Assignment */, 0 /* None */);
31895
- setValueDeclaration(symbol, node);
31896
- }
31897
- function bindExportAssignedObjectMemberAlias(node) {
31898
- declareSymbol(file.symbol.exports, file.symbol, node, 2097152 /* Alias */ | 67108864 /* Assignment */, 0 /* None */);
31899
- }
31900
- function bindThisPropertyAssignment(node) {
31901
- Debug.assert(isInJSFile(node));
31902
- const hasPrivateIdentifier = isBinaryExpression(node) && isPropertyAccessExpression(node.left) && isPrivateIdentifier(node.left.name) || isPropertyAccessExpression(node) && isPrivateIdentifier(node.name);
31903
- if (hasPrivateIdentifier) {
31904
- return;
31905
- }
31906
- const thisContainer = getThisContainer(
31907
- node,
31908
- /*includeArrowFunctions*/
31909
- false,
31910
- /*includeClassComputedPropertyName*/
31911
- false
31912
- );
31913
- switch (thisContainer.kind) {
31914
- case 259 /* FunctionDeclaration */:
31915
- case 215 /* FunctionExpression */:
31916
- let constructorSymbol = thisContainer.symbol;
31917
- if (isBinaryExpression(thisContainer.parent) && thisContainer.parent.operatorToken.kind === 63 /* EqualsToken */) {
31918
- const l = thisContainer.parent.left;
31919
- if (isBindableStaticAccessExpression(l) && isPrototypeAccess(l.expression)) {
31920
- constructorSymbol = lookupSymbolForPropertyAccess(l.expression.expression, thisParentContainer);
31921
- }
31922
- }
31923
- if (constructorSymbol && constructorSymbol.valueDeclaration) {
31924
- constructorSymbol.members = constructorSymbol.members || createSymbolTable();
31925
- if (hasDynamicName(node)) {
31926
- bindDynamicallyNamedThisPropertyAssignment(node, constructorSymbol, constructorSymbol.members);
31927
- } else {
31928
- declareSymbol(constructorSymbol.members, constructorSymbol, node, 4 /* Property */ | 67108864 /* Assignment */, 0 /* PropertyExcludes */ & ~4 /* Property */);
31929
- }
31930
- addDeclarationToSymbol(constructorSymbol, constructorSymbol.valueDeclaration, 32 /* Class */);
31931
- }
31932
- break;
31933
- case 173 /* Constructor */:
31934
- case 169 /* PropertyDeclaration */:
31935
- case 171 /* MethodDeclaration */:
31936
- case 174 /* GetAccessor */:
31937
- case 175 /* SetAccessor */:
31938
- case 172 /* ClassStaticBlockDeclaration */:
31939
- const containingClass = thisContainer.parent;
31940
- const symbolTable = isStatic(thisContainer) ? containingClass.symbol.exports : containingClass.symbol.members;
31941
- if (hasDynamicName(node)) {
31942
- bindDynamicallyNamedThisPropertyAssignment(node, containingClass.symbol, symbolTable);
31943
- } else {
31944
- declareSymbol(
31945
- symbolTable,
31946
- containingClass.symbol,
31947
- node,
31948
- 4 /* Property */ | 67108864 /* Assignment */,
31949
- 0 /* None */,
31950
- /*isReplaceableByMethod*/
31951
- true
31952
- );
31953
- }
31954
- break;
31955
- case 308 /* SourceFile */:
31956
- if (hasDynamicName(node)) {
31957
- break;
31958
- } else if (thisContainer.commonJsModuleIndicator) {
31959
- declareSymbol(thisContainer.symbol.exports, thisContainer.symbol, node, 4 /* Property */ | 1048576 /* ExportValue */, 0 /* None */);
31960
- } else {
31961
- declareSymbolAndAddToSymbolTable(node, 1 /* FunctionScopedVariable */, 111550 /* FunctionScopedVariableExcludes */);
31962
- }
31963
- break;
31964
- default:
31965
- Debug.failBadSyntaxKind(thisContainer);
31966
- }
31967
- }
31968
- function bindDynamicallyNamedThisPropertyAssignment(node, symbol, symbolTable) {
31969
- declareSymbol(
31970
- symbolTable,
31971
- symbol,
31972
- node,
31973
- 4 /* Property */,
31974
- 0 /* None */,
31975
- /*isReplaceableByMethod*/
31976
- true,
31977
- /*isComputedName*/
31978
- true
31979
- );
31980
- addLateBoundAssignmentDeclarationToSymbol(node, symbol);
31981
- }
31982
- function addLateBoundAssignmentDeclarationToSymbol(node, symbol) {
31983
- if (symbol) {
31984
- (symbol.assignmentDeclarationMembers || (symbol.assignmentDeclarationMembers = /* @__PURE__ */ new Map())).set(getNodeId(node), node);
31985
- }
31986
- }
31987
- function bindSpecialPropertyDeclaration(node) {
31988
- if (node.expression.kind === 108 /* ThisKeyword */) {
31989
- bindThisPropertyAssignment(node);
31990
- } else if (isBindableStaticAccessExpression(node) && node.parent.parent.kind === 308 /* SourceFile */) {
31991
- if (isPrototypeAccess(node.expression)) {
31992
- bindPrototypePropertyAssignment(node, node.parent);
31993
- } else {
31994
- bindStaticPropertyAssignment(node);
31995
- }
31996
- }
31997
- }
31998
- function bindPrototypeAssignment(node) {
31999
- setParent(node.left, node);
32000
- setParent(node.right, node);
32001
- bindPropertyAssignment(
32002
- node.left.expression,
32003
- node.left,
32004
- /*isPrototypeProperty*/
32005
- false,
32006
- /*containerIsClass*/
32007
- true
32008
- );
32009
- }
32010
- function bindObjectDefinePrototypeProperty(node) {
32011
- const namespaceSymbol = lookupSymbolForPropertyAccess(node.arguments[0].expression);
32012
- if (namespaceSymbol && namespaceSymbol.valueDeclaration) {
32013
- addDeclarationToSymbol(namespaceSymbol, namespaceSymbol.valueDeclaration, 32 /* Class */);
32014
- }
32015
- bindPotentiallyNewExpandoMemberToNamespace(
32016
- node,
32017
- namespaceSymbol,
32018
- /*isPrototypeProperty*/
32019
- true
32020
- );
32021
- }
32022
- function bindPrototypePropertyAssignment(lhs, parent2) {
32023
- const classPrototype = lhs.expression;
32024
- const constructorFunction = classPrototype.expression;
32025
- setParent(constructorFunction, classPrototype);
32026
- setParent(classPrototype, lhs);
32027
- setParent(lhs, parent2);
32028
- bindPropertyAssignment(
32029
- constructorFunction,
32030
- lhs,
32031
- /*isPrototypeProperty*/
32032
- true,
32033
- /*containerIsClass*/
32034
- true
32035
- );
32036
- }
32037
- function bindObjectDefinePropertyAssignment(node) {
32038
- let namespaceSymbol = lookupSymbolForPropertyAccess(node.arguments[0]);
32039
- const isToplevel = node.parent.parent.kind === 308 /* SourceFile */;
32040
- namespaceSymbol = bindPotentiallyMissingNamespaces(
32041
- namespaceSymbol,
32042
- node.arguments[0],
32043
- isToplevel,
32044
- /*isPrototypeProperty*/
32045
- false,
32046
- /*containerIsClass*/
32047
- false
32048
- );
32049
- bindPotentiallyNewExpandoMemberToNamespace(
32050
- node,
32051
- namespaceSymbol,
32052
- /*isPrototypeProperty*/
32053
- false
32054
- );
32055
- }
32056
- function bindSpecialPropertyAssignment(node) {
32057
- var _a2;
32058
- const parentSymbol = lookupSymbolForPropertyAccess(node.left.expression, container) || lookupSymbolForPropertyAccess(node.left.expression, blockScopeContainer);
32059
- if (!isInJSFile(node) && !isFunctionSymbol(parentSymbol)) {
32060
- return;
32061
- }
32062
- const rootExpr = getLeftmostAccessExpression(node.left);
32063
- if (isIdentifier(rootExpr) && ((_a2 = lookupSymbolForName(container, rootExpr.escapedText)) == null ? void 0 : _a2.flags) & 2097152 /* Alias */) {
32064
- return;
32065
- }
32066
- setParent(node.left, node);
32067
- setParent(node.right, node);
32068
- if (isIdentifier(node.left.expression) && container === file && isExportsOrModuleExportsOrAlias(file, node.left.expression)) {
32069
- bindExportsPropertyAssignment(node);
32070
- } else if (hasDynamicName(node)) {
32071
- bindAnonymousDeclaration(node, 4 /* Property */ | 67108864 /* Assignment */, "__computed" /* Computed */);
32072
- const sym = bindPotentiallyMissingNamespaces(
32073
- parentSymbol,
32074
- node.left.expression,
32075
- isTopLevelNamespaceAssignment(node.left),
32076
- /*isPrototype*/
32077
- false,
32078
- /*containerIsClass*/
32079
- false
32080
- );
32081
- addLateBoundAssignmentDeclarationToSymbol(node, sym);
32082
- } else {
32083
- bindStaticPropertyAssignment(cast(node.left, isBindableStaticNameExpression));
32084
- }
32085
- }
32086
- function bindStaticPropertyAssignment(node) {
32087
- Debug.assert(!isIdentifier(node));
32088
- setParent(node.expression, node);
32089
- bindPropertyAssignment(
32090
- node.expression,
32091
- node,
32092
- /*isPrototypeProperty*/
32093
- false,
32094
- /*containerIsClass*/
32095
- false
32096
- );
32097
- }
32098
- function bindPotentiallyMissingNamespaces(namespaceSymbol, entityName, isToplevel, isPrototypeProperty, containerIsClass) {
32099
- if ((namespaceSymbol == null ? void 0 : namespaceSymbol.flags) & 2097152 /* Alias */) {
32100
- return namespaceSymbol;
32101
- }
32102
- if (isToplevel && !isPrototypeProperty) {
32103
- const flags = 1536 /* Module */ | 67108864 /* Assignment */;
32104
- const excludeFlags = 110735 /* ValueModuleExcludes */ & ~67108864 /* Assignment */;
32105
- namespaceSymbol = forEachIdentifierInEntityName(entityName, namespaceSymbol, (id, symbol, parent2) => {
32106
- if (symbol) {
32107
- addDeclarationToSymbol(symbol, id, flags);
32108
- return symbol;
32109
- } else {
32110
- const table = parent2 ? parent2.exports : file.jsGlobalAugmentations || (file.jsGlobalAugmentations = createSymbolTable());
32111
- return declareSymbol(table, parent2, id, flags, excludeFlags);
32112
- }
32113
- });
32114
- }
32115
- if (containerIsClass && namespaceSymbol && namespaceSymbol.valueDeclaration) {
32116
- addDeclarationToSymbol(namespaceSymbol, namespaceSymbol.valueDeclaration, 32 /* Class */);
32117
- }
32118
- return namespaceSymbol;
32119
- }
32120
- function bindPotentiallyNewExpandoMemberToNamespace(declaration, namespaceSymbol, isPrototypeProperty) {
32121
- if (!namespaceSymbol || !isExpandoSymbol(namespaceSymbol)) {
32122
- return;
32123
- }
32124
- const symbolTable = isPrototypeProperty ? namespaceSymbol.members || (namespaceSymbol.members = createSymbolTable()) : namespaceSymbol.exports || (namespaceSymbol.exports = createSymbolTable());
32125
- let includes = 0 /* None */;
32126
- let excludes = 0 /* None */;
32127
- if (isFunctionLikeDeclaration(getAssignedExpandoInitializer(declaration))) {
32128
- includes = 8192 /* Method */;
32129
- excludes = 103359 /* MethodExcludes */;
32130
- } else if (isCallExpression(declaration) && isBindableObjectDefinePropertyCall(declaration)) {
32131
- if (some(declaration.arguments[2].properties, (p) => {
32132
- const id = getNameOfDeclaration(p);
32133
- return !!id && isIdentifier(id) && idText(id) === "set";
32134
- })) {
32135
- includes |= 65536 /* SetAccessor */ | 4 /* Property */;
32136
- excludes |= 78783 /* SetAccessorExcludes */;
32137
- }
32138
- if (some(declaration.arguments[2].properties, (p) => {
32139
- const id = getNameOfDeclaration(p);
32140
- return !!id && isIdentifier(id) && idText(id) === "get";
32141
- })) {
32142
- includes |= 32768 /* GetAccessor */ | 4 /* Property */;
32143
- excludes |= 46015 /* GetAccessorExcludes */;
32144
- }
32145
- }
32146
- if (includes === 0 /* None */) {
32147
- includes = 4 /* Property */;
32148
- excludes = 0 /* PropertyExcludes */;
32149
- }
32150
- declareSymbol(symbolTable, namespaceSymbol, declaration, includes | 67108864 /* Assignment */, excludes & ~67108864 /* Assignment */);
32151
- }
32152
- function isTopLevelNamespaceAssignment(propertyAccess) {
32153
- return isBinaryExpression(propertyAccess.parent) ? getParentOfBinaryExpression(propertyAccess.parent).parent.kind === 308 /* SourceFile */ : propertyAccess.parent.parent.kind === 308 /* SourceFile */;
32154
- }
32155
- function bindPropertyAssignment(name, propertyAccess, isPrototypeProperty, containerIsClass) {
32156
- let namespaceSymbol = lookupSymbolForPropertyAccess(name, container) || lookupSymbolForPropertyAccess(name, blockScopeContainer);
32157
- const isToplevel = isTopLevelNamespaceAssignment(propertyAccess);
32158
- namespaceSymbol = bindPotentiallyMissingNamespaces(namespaceSymbol, propertyAccess.expression, isToplevel, isPrototypeProperty, containerIsClass);
32159
- bindPotentiallyNewExpandoMemberToNamespace(propertyAccess, namespaceSymbol, isPrototypeProperty);
32160
- }
32161
- function isExpandoSymbol(symbol) {
32162
- if (symbol.flags & (16 /* Function */ | 32 /* Class */ | 1024 /* NamespaceModule */)) {
32163
- return true;
32164
- }
32165
- const node = symbol.valueDeclaration;
32166
- if (node && isCallExpression(node)) {
32167
- return !!getAssignedExpandoInitializer(node);
32168
- }
32169
- let init = !node ? void 0 : isVariableDeclaration(node) ? node.initializer : isBinaryExpression(node) ? node.right : isPropertyAccessExpression(node) && isBinaryExpression(node.parent) ? node.parent.right : void 0;
32170
- init = init && getRightMostAssignedExpression(init);
32171
- if (init) {
32172
- const isPrototypeAssignment = isPrototypeAccess(isVariableDeclaration(node) ? node.name : isBinaryExpression(node) ? node.left : node);
32173
- return !!getExpandoInitializer(isBinaryExpression(init) && (init.operatorToken.kind === 56 /* BarBarToken */ || init.operatorToken.kind === 60 /* QuestionQuestionToken */) ? init.right : init, isPrototypeAssignment);
32174
- }
32175
- return false;
32176
- }
32177
- function getParentOfBinaryExpression(expr) {
32178
- while (isBinaryExpression(expr.parent)) {
32179
- expr = expr.parent;
32180
- }
32181
- return expr.parent;
32182
- }
32183
- function lookupSymbolForPropertyAccess(node, lookupContainer = container) {
32184
- if (isIdentifier(node)) {
32185
- return lookupSymbolForName(lookupContainer, node.escapedText);
32186
- } else {
32187
- const symbol = lookupSymbolForPropertyAccess(node.expression);
32188
- return symbol && symbol.exports && symbol.exports.get(getElementOrPropertyAccessName(node));
32189
- }
32190
- }
32191
- function forEachIdentifierInEntityName(e, parent2, action) {
32192
- if (isExportsOrModuleExportsOrAlias(file, e)) {
32193
- return file.symbol;
32194
- } else if (isIdentifier(e)) {
32195
- return action(e, lookupSymbolForPropertyAccess(e), parent2);
32196
- } else {
32197
- const s = forEachIdentifierInEntityName(e.expression, parent2, action);
32198
- const name = getNameOrArgument(e);
32199
- if (isPrivateIdentifier(name)) {
32200
- Debug.fail("unexpected PrivateIdentifier");
32201
- }
32202
- return action(name, s && s.exports && s.exports.get(getElementOrPropertyAccessName(e)), s);
32203
- }
32204
- }
32205
- function bindCallExpression(node) {
32206
- if (!file.commonJsModuleIndicator && isRequireCall(
32207
- node,
32208
- /*checkArgumentIsStringLiteralLike*/
32209
- false
32210
- )) {
32211
- setCommonJsModuleIndicator(node);
32212
- }
32213
- }
32214
- function bindClassLikeDeclaration(node) {
32215
- if (node.kind === 260 /* ClassDeclaration */) {
32216
- bindBlockScopedDeclaration(node, 32 /* Class */, 899503 /* ClassExcludes */);
32217
- } else {
32218
- const bindingName = node.name ? node.name.escapedText : "__class" /* Class */;
32219
- bindAnonymousDeclaration(node, 32 /* Class */, bindingName);
32220
- if (node.name) {
32221
- classifiableNames.add(node.name.escapedText);
32222
- }
32223
- }
32224
- const { symbol } = node;
32225
- const prototypeSymbol = createSymbol(4 /* Property */ | 4194304 /* Prototype */, "prototype");
32226
- const symbolExport = symbol.exports.get(prototypeSymbol.escapedName);
32227
- if (symbolExport) {
32228
- if (node.name) {
32229
- setParent(node.name, node);
32230
- }
32231
- file.bindDiagnostics.push(createDiagnosticForNode2(symbolExport.declarations[0], Diagnostics.Duplicate_identifier_0, symbolName(prototypeSymbol)));
32232
- }
32233
- symbol.exports.set(prototypeSymbol.escapedName, prototypeSymbol);
32234
- prototypeSymbol.parent = symbol;
32235
- }
32236
- function bindEnumDeclaration(node) {
32237
- return isEnumConst(node) ? bindBlockScopedDeclaration(node, 128 /* ConstEnum */, 899967 /* ConstEnumExcludes */) : bindBlockScopedDeclaration(node, 256 /* RegularEnum */, 899327 /* RegularEnumExcludes */);
32238
- }
32239
- function bindVariableDeclarationOrBindingElement(node) {
32240
- if (inStrictMode) {
32241
- checkStrictModeEvalOrArguments(node, node.name);
32242
- }
32243
- if (!isBindingPattern(node.name)) {
32244
- const possibleVariableDecl = node.kind === 257 /* VariableDeclaration */ ? node : node.parent.parent;
32245
- if (isInJSFile(node) && getEmitModuleResolutionKind(options) !== 100 /* Bundler */ && isVariableDeclarationInitializedToBareOrAccessedRequire(possibleVariableDecl) && !getJSDocTypeTag(node) && !(getCombinedModifierFlags(node) & 1 /* Export */)) {
32246
- declareSymbolAndAddToSymbolTable(node, 2097152 /* Alias */, 2097152 /* AliasExcludes */);
32247
- } else if (isBlockOrCatchScoped(node)) {
32248
- bindBlockScopedDeclaration(node, 2 /* BlockScopedVariable */, 111551 /* BlockScopedVariableExcludes */);
32249
- } else if (isParameterDeclaration(node)) {
32250
- declareSymbolAndAddToSymbolTable(node, 1 /* FunctionScopedVariable */, 111551 /* ParameterExcludes */);
32251
- } else {
32252
- declareSymbolAndAddToSymbolTable(node, 1 /* FunctionScopedVariable */, 111550 /* FunctionScopedVariableExcludes */);
32253
- }
32254
- }
32255
- }
32256
- function bindParameter(node) {
32257
- if (node.kind === 344 /* JSDocParameterTag */ && container.kind !== 326 /* JSDocSignature */) {
32258
- return;
32259
- }
32260
- if (inStrictMode && !(node.flags & 16777216 /* Ambient */)) {
32261
- checkStrictModeEvalOrArguments(node, node.name);
32262
- }
32263
- if (isBindingPattern(node.name)) {
32264
- bindAnonymousDeclaration(node, 1 /* FunctionScopedVariable */, "__" + node.parent.parameters.indexOf(node));
32265
- } else {
32266
- declareSymbolAndAddToSymbolTable(node, 1 /* FunctionScopedVariable */, 111551 /* ParameterExcludes */);
32267
- }
32268
- if (isParameterPropertyDeclaration(node, node.parent)) {
32269
- const classDeclaration = node.parent.parent;
32270
- declareSymbol(classDeclaration.symbol.members, classDeclaration.symbol, node, 4 /* Property */ | (node.questionToken ? 16777216 /* Optional */ : 0 /* None */), 0 /* PropertyExcludes */);
32271
- }
32272
- }
32273
- function bindFunctionDeclaration(node) {
32274
- if (!file.isDeclarationFile && !(node.flags & 16777216 /* Ambient */)) {
32275
- if (isAsyncFunction(node)) {
32276
- emitFlags |= 2048 /* HasAsyncFunctions */;
32277
- }
32278
- }
32279
- checkStrictModeFunctionName(node);
32280
- if (inStrictMode) {
32281
- checkStrictModeFunctionDeclaration(node);
32282
- bindBlockScopedDeclaration(node, 16 /* Function */, 110991 /* FunctionExcludes */);
32283
- } else {
32284
- declareSymbolAndAddToSymbolTable(node, 16 /* Function */, 110991 /* FunctionExcludes */);
32285
- }
32286
- }
32287
- function bindFunctionExpression(node) {
32288
- if (!file.isDeclarationFile && !(node.flags & 16777216 /* Ambient */)) {
32289
- if (isAsyncFunction(node)) {
32290
- emitFlags |= 2048 /* HasAsyncFunctions */;
32291
- }
32292
- }
32293
- if (currentFlow) {
32294
- node.flowNode = currentFlow;
32295
- }
32296
- checkStrictModeFunctionName(node);
32297
- const bindingName = node.name ? node.name.escapedText : "__function" /* Function */;
32298
- return bindAnonymousDeclaration(node, 16 /* Function */, bindingName);
32299
- }
32300
- function bindPropertyOrMethodOrAccessor(node, symbolFlags, symbolExcludes) {
32301
- if (!file.isDeclarationFile && !(node.flags & 16777216 /* Ambient */) && isAsyncFunction(node)) {
32302
- emitFlags |= 2048 /* HasAsyncFunctions */;
32303
- }
32304
- if (currentFlow && isObjectLiteralOrClassExpressionMethodOrAccessor(node)) {
32305
- node.flowNode = currentFlow;
32306
- }
32307
- return hasDynamicName(node) ? bindAnonymousDeclaration(node, symbolFlags, "__computed" /* Computed */) : declareSymbolAndAddToSymbolTable(node, symbolFlags, symbolExcludes);
32308
- }
32309
- function getInferTypeContainer(node) {
32310
- const extendsType = findAncestor(node, (n) => n.parent && isConditionalTypeNode(n.parent) && n.parent.extendsType === n);
32311
- return extendsType && extendsType.parent;
32312
- }
32313
- function bindTypeParameter(node) {
32314
- var _a2, _b;
32315
- if (isJSDocTemplateTag(node.parent)) {
32316
- const container2 = getEffectiveContainerForJSDocTemplateTag(node.parent);
32317
- if (container2) {
32318
- Debug.assertNode(container2, canHaveLocals);
32319
- (_a2 = container2.locals) != null ? _a2 : container2.locals = createSymbolTable();
32320
- declareSymbol(
32321
- container2.locals,
32322
- /*parent*/
32323
- void 0,
32324
- node,
32325
- 262144 /* TypeParameter */,
32326
- 526824 /* TypeParameterExcludes */
32327
- );
32328
- } else {
32329
- declareSymbolAndAddToSymbolTable(node, 262144 /* TypeParameter */, 526824 /* TypeParameterExcludes */);
32330
- }
32331
- } else if (node.parent.kind === 192 /* InferType */) {
32332
- const container2 = getInferTypeContainer(node.parent);
32333
- if (container2) {
32334
- Debug.assertNode(container2, canHaveLocals);
32335
- (_b = container2.locals) != null ? _b : container2.locals = createSymbolTable();
32336
- declareSymbol(
32337
- container2.locals,
32338
- /*parent*/
32339
- void 0,
32340
- node,
32341
- 262144 /* TypeParameter */,
32342
- 526824 /* TypeParameterExcludes */
32343
- );
32344
- } else {
32345
- bindAnonymousDeclaration(node, 262144 /* TypeParameter */, getDeclarationName(node));
32346
- }
32347
- } else {
32348
- declareSymbolAndAddToSymbolTable(node, 262144 /* TypeParameter */, 526824 /* TypeParameterExcludes */);
32349
- }
32350
- }
32351
- function shouldReportErrorOnModuleDeclaration(node) {
32352
- const instanceState = getModuleInstanceState(node);
32353
- return instanceState === 1 /* Instantiated */ || instanceState === 2 /* ConstEnumOnly */ && shouldPreserveConstEnums(options);
32354
- }
32355
- function checkUnreachable(node) {
32356
- if (!(currentFlow.flags & 1 /* Unreachable */)) {
32357
- return false;
32358
- }
32359
- if (currentFlow === unreachableFlow) {
32360
- const reportError = (
32361
- // report error on all statements except empty ones
32362
- isStatementButNotDeclaration(node) && node.kind !== 239 /* EmptyStatement */ || // report error on class declarations
32363
- node.kind === 260 /* ClassDeclaration */ || // report error on instantiated modules or const-enums only modules if preserveConstEnums is set
32364
- node.kind === 264 /* ModuleDeclaration */ && shouldReportErrorOnModuleDeclaration(node)
32365
- );
32366
- if (reportError) {
32367
- currentFlow = reportedUnreachableFlow;
32368
- if (!options.allowUnreachableCode) {
32369
- const isError = unreachableCodeIsError(options) && !(node.flags & 16777216 /* Ambient */) && (!isVariableStatement(node) || !!(getCombinedNodeFlags(node.declarationList) & 3 /* BlockScoped */) || node.declarationList.declarations.some((d) => !!d.initializer));
32370
- eachUnreachableRange(node, (start, end) => errorOrSuggestionOnRange(isError, start, end, Diagnostics.Unreachable_code_detected));
32371
- }
32372
- }
32373
- }
32374
- return true;
32375
- }
32376
- }
32377
- function eachUnreachableRange(node, cb) {
32378
- if (isStatement(node) && isExecutableStatement(node) && isBlock(node.parent)) {
32379
- const { statements } = node.parent;
32380
- const slice = sliceAfter(statements, node);
32381
- getRangesWhere(slice, isExecutableStatement, (start, afterEnd) => cb(slice[start], slice[afterEnd - 1]));
32382
- } else {
32383
- cb(node, node);
32384
- }
32385
- }
32386
- function isExecutableStatement(s) {
32387
- return !isFunctionDeclaration(s) && !isPurelyTypeDeclaration(s) && !isEnumDeclaration(s) && // `var x;` may declare a variable used above
32388
- !(isVariableStatement(s) && !(getCombinedNodeFlags(s) & (1 /* Let */ | 2 /* Const */)) && s.declarationList.declarations.some((d) => !d.initializer));
32389
- }
32390
- function isPurelyTypeDeclaration(s) {
32391
- switch (s.kind) {
32392
- case 261 /* InterfaceDeclaration */:
32393
- case 262 /* TypeAliasDeclaration */:
32394
- return true;
32395
- case 264 /* ModuleDeclaration */:
32396
- return getModuleInstanceState(s) !== 1 /* Instantiated */;
32397
- case 263 /* EnumDeclaration */:
32398
- return hasSyntacticModifier(s, 2048 /* Const */);
32399
- default:
32400
- return false;
32401
- }
32402
- }
32403
- function isExportsOrModuleExportsOrAlias(sourceFile, node) {
32404
- let i = 0;
32405
- const q = createQueue();
32406
- q.enqueue(node);
32407
- while (!q.isEmpty() && i < 100) {
32408
- i++;
32409
- node = q.dequeue();
32410
- if (isExportsIdentifier(node) || isModuleExportsAccessExpression(node)) {
32411
- return true;
32412
- } else if (isIdentifier(node)) {
32413
- const symbol = lookupSymbolForName(sourceFile, node.escapedText);
32414
- if (!!symbol && !!symbol.valueDeclaration && isVariableDeclaration(symbol.valueDeclaration) && !!symbol.valueDeclaration.initializer) {
32415
- const init = symbol.valueDeclaration.initializer;
32416
- q.enqueue(init);
32417
- if (isAssignmentExpression(
32418
- init,
32419
- /*excludeCompoundAssignment*/
32420
- true
32421
- )) {
32422
- q.enqueue(init.left);
32423
- q.enqueue(init.right);
32424
- }
32425
- }
32426
- }
32427
- }
32428
- return false;
32429
- }
32430
- function getContainerFlags(node) {
32431
- switch (node.kind) {
32432
- case 228 /* ClassExpression */:
32433
- case 260 /* ClassDeclaration */:
32434
- case 263 /* EnumDeclaration */:
32435
- case 207 /* ObjectLiteralExpression */:
32436
- case 184 /* TypeLiteral */:
32437
- case 325 /* JSDocTypeLiteral */:
32438
- case 289 /* JsxAttributes */:
32439
- return 1 /* IsContainer */;
32440
- case 261 /* InterfaceDeclaration */:
32441
- return 1 /* IsContainer */ | 64 /* IsInterface */;
32442
- case 264 /* ModuleDeclaration */:
32443
- case 262 /* TypeAliasDeclaration */:
32444
- case 197 /* MappedType */:
32445
- case 178 /* IndexSignature */:
32446
- return 1 /* IsContainer */ | 32 /* HasLocals */;
32447
- case 308 /* SourceFile */:
32448
- return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */;
32449
- case 174 /* GetAccessor */:
32450
- case 175 /* SetAccessor */:
32451
- case 171 /* MethodDeclaration */:
32452
- if (isObjectLiteralOrClassExpressionMethodOrAccessor(node)) {
32453
- return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */ | 8 /* IsFunctionLike */ | 128 /* IsObjectLiteralOrClassExpressionMethodOrAccessor */;
32454
- }
32455
- case 173 /* Constructor */:
32456
- case 259 /* FunctionDeclaration */:
32457
- case 170 /* MethodSignature */:
32458
- case 176 /* CallSignature */:
32459
- case 326 /* JSDocSignature */:
32460
- case 320 /* JSDocFunctionType */:
32461
- case 181 /* FunctionType */:
32462
- case 177 /* ConstructSignature */:
32463
- case 182 /* ConstructorType */:
32464
- case 172 /* ClassStaticBlockDeclaration */:
32465
- return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */ | 8 /* IsFunctionLike */;
32466
- case 215 /* FunctionExpression */:
32467
- case 216 /* ArrowFunction */:
32468
- return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */ | 8 /* IsFunctionLike */ | 16 /* IsFunctionExpression */;
32469
- case 265 /* ModuleBlock */:
32470
- return 4 /* IsControlFlowContainer */;
32471
- case 169 /* PropertyDeclaration */:
32472
- return node.initializer ? 4 /* IsControlFlowContainer */ : 0;
32473
- case 295 /* CatchClause */:
32474
- case 245 /* ForStatement */:
32475
- case 246 /* ForInStatement */:
32476
- case 247 /* ForOfStatement */:
32477
- case 266 /* CaseBlock */:
32478
- return 2 /* IsBlockScopedContainer */ | 32 /* HasLocals */;
32479
- case 238 /* Block */:
32480
- return isFunctionLike(node.parent) || isClassStaticBlockDeclaration(node.parent) ? 0 /* None */ : 2 /* IsBlockScopedContainer */ | 32 /* HasLocals */;
32481
- }
32482
- return 0 /* None */;
32483
- }
32484
- function lookupSymbolForName(container, name) {
32485
- var _a2, _b, _c, _d, _e;
32486
- const local = (_b = (_a2 = tryCast(container, canHaveLocals)) == null ? void 0 : _a2.locals) == null ? void 0 : _b.get(name);
32487
- if (local) {
32488
- return (_c = local.exportSymbol) != null ? _c : local;
32489
- }
32490
- if (isSourceFile(container) && container.jsGlobalAugmentations && container.jsGlobalAugmentations.has(name)) {
32491
- return container.jsGlobalAugmentations.get(name);
32492
- }
32493
- if (canHaveSymbol(container)) {
32494
- return (_e = (_d = container.symbol) == null ? void 0 : _d.exports) == null ? void 0 : _e.get(name);
32495
- }
32496
- }
32497
-
32498
28829
  // src/compiler/checker.ts
32499
- var nextSymbolId = 1;
32500
28830
  var nextNodeId = 1;
32501
28831
  var TypeFacts = /* @__PURE__ */ ((TypeFacts3) => {
32502
28832
  TypeFacts3[TypeFacts3["None"] = 0] = "None";
@@ -32622,13 +28952,6 @@ function getNodeId(node) {
32622
28952
  }
32623
28953
  return node.id;
32624
28954
  }
32625
- function getSymbolId(symbol) {
32626
- if (!symbol.id) {
32627
- symbol.id = nextSymbolId;
32628
- nextSymbolId++;
32629
- }
32630
- return symbol.id;
32631
- }
32632
28955
  function isNotAccessor(declaration) {
32633
28956
  return !isAccessor(declaration);
32634
28957
  }