typescript 5.5.0-dev.20240429 → 5.5.0-dev.20240501

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.
Files changed (3) hide show
  1. package/lib/tsc.js +1000 -906
  2. package/lib/typescript.js +2121 -1120
  3. package/package.json +2 -2
package/lib/tsc.js CHANGED
@@ -18,7 +18,7 @@ and limitations under the License.
18
18
 
19
19
  // src/compiler/corePublic.ts
20
20
  var versionMajorMinor = "5.5";
21
- var version = `${versionMajorMinor}.0-dev.20240429`;
21
+ var version = `${versionMajorMinor}.0-dev.20240501`;
22
22
 
23
23
  // src/compiler/core.ts
24
24
  var emptyArray = [];
@@ -6203,7 +6203,7 @@ var Diagnostics = {
6203
6203
  Range_out_of_order_in_character_class: diag(1517, 1 /* Error */, "Range_out_of_order_in_character_class_1517", "Range out of order in character class."),
6204
6204
  Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_character_class: diag(1518, 1 /* Error */, "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518", "Anything that would possibly match more than a single character is invalid inside a negated character class."),
6205
6205
  Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead: diag(1519, 1 /* Error */, "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519", "Operators must not be mixed within a character class. Wrap it in a nested class instead."),
6206
- Expected_a_class_set_oprand: diag(1520, 1 /* Error */, "Expected_a_class_set_oprand_1520", "Expected a class set oprand."),
6206
+ Expected_a_class_set_operand: diag(1520, 1 /* Error */, "Expected_a_class_set_operand_1520", "Expected a class set operand."),
6207
6207
  q_must_be_followed_by_string_alternatives_enclosed_in_braces: diag(1521, 1 /* Error */, "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521", "'\\q' must be followed by string alternatives enclosed in braces."),
6208
6208
  A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backslash: diag(1522, 1 /* Error */, "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522", "A character class must not contain a reserved double punctuator. Did you mean to escape it with backslash?"),
6209
6209
  Expected_a_Unicode_property_name: diag(1523, 1 /* Error */, "Expected_a_Unicode_property_name_1523", "Expected a Unicode property name."),
@@ -7716,6 +7716,16 @@ var Diagnostics = {
7716
7716
  Export_0_from_module_1: diag(90059, 3 /* Message */, "Export_0_from_module_1_90059", "Export '{0}' from module '{1}'"),
7717
7717
  Export_all_referenced_locals: diag(90060, 3 /* Message */, "Export_all_referenced_locals_90060", "Export all referenced locals"),
7718
7718
  Update_modifiers_of_0: diag(90061, 3 /* Message */, "Update_modifiers_of_0_90061", "Update modifiers of '{0}'"),
7719
+ Add_annotation_of_type_0: diag(90062, 3 /* Message */, "Add_annotation_of_type_0_90062", "Add annotation of type '{0}'"),
7720
+ Add_return_type_0: diag(90063, 3 /* Message */, "Add_return_type_0_90063", "Add return type '{0}'"),
7721
+ Extract_base_class_to_variable: diag(90064, 3 /* Message */, "Extract_base_class_to_variable_90064", "Extract base class to variable"),
7722
+ Extract_default_export_to_variable: diag(90065, 3 /* Message */, "Extract_default_export_to_variable_90065", "Extract default export to variable"),
7723
+ Extract_binding_expressions_to_variable: diag(90066, 3 /* Message */, "Extract_binding_expressions_to_variable_90066", "Extract binding expressions to variable"),
7724
+ Add_all_missing_type_annotations: diag(90067, 3 /* Message */, "Add_all_missing_type_annotations_90067", "Add all missing type annotations"),
7725
+ Add_satisfies_and_an_inline_type_assertion_with_0: diag(90068, 3 /* Message */, "Add_satisfies_and_an_inline_type_assertion_with_0_90068", "Add satisfies and an inline type assertion with '{0}'"),
7726
+ Extract_to_variable_and_replace_with_0_as_typeof_0: diag(90069, 3 /* Message */, "Extract_to_variable_and_replace_with_0_as_typeof_0_90069", "Extract to variable and replace with '{0} as typeof {0}'"),
7727
+ Mark_array_literal_as_const: diag(90070, 3 /* Message */, "Mark_array_literal_as_const_90070", "Mark array literal as const"),
7728
+ Annotate_types_of_properties_expando_function_in_a_namespace: diag(90071, 3 /* Message */, "Annotate_types_of_properties_expando_function_in_a_namespace_90071", "Annotate types of properties expando function in a namespace"),
7719
7729
  Convert_function_to_an_ES2015_class: diag(95001, 3 /* Message */, "Convert_function_to_an_ES2015_class_95001", "Convert function to an ES2015 class"),
7720
7730
  Convert_0_to_1_in_0: diag(95003, 3 /* Message */, "Convert_0_to_1_in_0_95003", "Convert '{0}' to '{1} in {0}'"),
7721
7731
  Extract_to_0_in_1: diag(95004, 3 /* Message */, "Extract_to_0_in_1_95004", "Extract to {0} in {1}"),
@@ -8689,6 +8699,18 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
8689
8699
  });
8690
8700
  }
8691
8701
  return scanner;
8702
+ function codePointUnchecked(pos2) {
8703
+ return codePointAt(text, pos2);
8704
+ }
8705
+ function codePointChecked(pos2) {
8706
+ return pos2 >= 0 && pos2 < end ? codePointUnchecked(pos2) : -1 /* EOF */;
8707
+ }
8708
+ function charCodeUnchecked(pos2) {
8709
+ return text.charCodeAt(pos2);
8710
+ }
8711
+ function charCodeChecked(pos2) {
8712
+ return pos2 >= 0 && pos2 < end ? charCodeUnchecked(pos2) : -1 /* EOF */;
8713
+ }
8692
8714
  function error(message, errPos = pos, length3, arg0) {
8693
8715
  if (onError) {
8694
8716
  const oldPos = pos;
@@ -8703,7 +8725,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
8703
8725
  let isPreviousTokenSeparator = false;
8704
8726
  let result = "";
8705
8727
  while (true) {
8706
- const ch = text.charCodeAt(pos);
8728
+ const ch = charCodeUnchecked(pos);
8707
8729
  if (ch === 95 /* _ */) {
8708
8730
  tokenFlags |= 512 /* ContainsSeparator */;
8709
8731
  if (allowSeparator) {
@@ -8730,7 +8752,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
8730
8752
  }
8731
8753
  break;
8732
8754
  }
8733
- if (text.charCodeAt(pos - 1) === 95 /* _ */) {
8755
+ if (charCodeUnchecked(pos - 1) === 95 /* _ */) {
8734
8756
  tokenFlags |= 16384 /* ContainsInvalidSeparator */;
8735
8757
  error(Diagnostics.Numeric_separators_are_not_allowed_here, pos - 1, 1);
8736
8758
  }
@@ -8739,9 +8761,9 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
8739
8761
  function scanNumber() {
8740
8762
  let start2 = pos;
8741
8763
  let mainFragment;
8742
- if (text.charCodeAt(pos) === 48 /* _0 */) {
8764
+ if (charCodeUnchecked(pos) === 48 /* _0 */) {
8743
8765
  pos++;
8744
- if (text.charCodeAt(pos) === 95 /* _ */) {
8766
+ if (charCodeUnchecked(pos) === 95 /* _ */) {
8745
8767
  tokenFlags |= 512 /* ContainsSeparator */ | 16384 /* ContainsInvalidSeparator */;
8746
8768
  error(Diagnostics.Numeric_separators_are_not_allowed_here, pos, 1);
8747
8769
  pos--;
@@ -8766,15 +8788,15 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
8766
8788
  }
8767
8789
  let decimalFragment;
8768
8790
  let scientificFragment;
8769
- if (text.charCodeAt(pos) === 46 /* dot */) {
8791
+ if (charCodeUnchecked(pos) === 46 /* dot */) {
8770
8792
  pos++;
8771
8793
  decimalFragment = scanNumberFragment();
8772
8794
  }
8773
8795
  let end2 = pos;
8774
- if (text.charCodeAt(pos) === 69 /* E */ || text.charCodeAt(pos) === 101 /* e */) {
8796
+ if (charCodeUnchecked(pos) === 69 /* E */ || charCodeUnchecked(pos) === 101 /* e */) {
8775
8797
  pos++;
8776
8798
  tokenFlags |= 16 /* Scientific */;
8777
- if (text.charCodeAt(pos) === 43 /* plus */ || text.charCodeAt(pos) === 45 /* minus */)
8799
+ if (charCodeUnchecked(pos) === 43 /* plus */ || charCodeUnchecked(pos) === 45 /* minus */)
8778
8800
  pos++;
8779
8801
  const preNumericPart = pos;
8780
8802
  const finalFragment = scanNumberFragment();
@@ -8814,7 +8836,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
8814
8836
  }
8815
8837
  }
8816
8838
  function checkForIdentifierStartAfterNumericLiteral(numericStart, isScientific) {
8817
- if (!isIdentifierStart(codePointAt(text, pos), languageVersion)) {
8839
+ if (!isIdentifierStart(codePointUnchecked(pos), languageVersion)) {
8818
8840
  return;
8819
8841
  }
8820
8842
  const identifierStart = pos;
@@ -8833,8 +8855,8 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
8833
8855
  function scanDigits() {
8834
8856
  const start2 = pos;
8835
8857
  let isOctal = true;
8836
- while (isDigit(text.charCodeAt(pos))) {
8837
- if (!isOctalDigit(text.charCodeAt(pos))) {
8858
+ while (isDigit(charCodeChecked(pos))) {
8859
+ if (!isOctalDigit(charCodeUnchecked(pos))) {
8838
8860
  isOctal = false;
8839
8861
  }
8840
8862
  pos++;
@@ -8866,7 +8888,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
8866
8888
  let allowSeparator = false;
8867
8889
  let isPreviousTokenSeparator = false;
8868
8890
  while (valueChars.length < minCount || scanAsManyAsPossible) {
8869
- let ch = text.charCodeAt(pos);
8891
+ let ch = charCodeUnchecked(pos);
8870
8892
  if (canHaveSeparators && ch === 95 /* _ */) {
8871
8893
  tokenFlags |= 512 /* ContainsSeparator */;
8872
8894
  if (allowSeparator) {
@@ -8893,13 +8915,13 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
8893
8915
  if (valueChars.length < minCount) {
8894
8916
  valueChars = [];
8895
8917
  }
8896
- if (text.charCodeAt(pos - 1) === 95 /* _ */) {
8918
+ if (charCodeUnchecked(pos - 1) === 95 /* _ */) {
8897
8919
  error(Diagnostics.Numeric_separators_are_not_allowed_here, pos - 1, 1);
8898
8920
  }
8899
8921
  return String.fromCharCode(...valueChars);
8900
8922
  }
8901
8923
  function scanString(jsxAttributeString = false) {
8902
- const quote = text.charCodeAt(pos);
8924
+ const quote = charCodeUnchecked(pos);
8903
8925
  pos++;
8904
8926
  let result = "";
8905
8927
  let start2 = pos;
@@ -8910,7 +8932,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
8910
8932
  error(Diagnostics.Unterminated_string_literal);
8911
8933
  break;
8912
8934
  }
8913
- const ch = text.charCodeAt(pos);
8935
+ const ch = charCodeUnchecked(pos);
8914
8936
  if (ch === quote) {
8915
8937
  result += text.substring(start2, pos);
8916
8938
  pos++;
@@ -8938,7 +8960,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
8938
8960
  return result;
8939
8961
  }
8940
8962
  function scanTemplateAndSetTokenValue(shouldEmitInvalidEscapeError) {
8941
- const startedWithBacktick = text.charCodeAt(pos) === 96 /* backtick */;
8963
+ const startedWithBacktick = charCodeUnchecked(pos) === 96 /* backtick */;
8942
8964
  pos++;
8943
8965
  let start2 = pos;
8944
8966
  let contents = "";
@@ -8951,14 +8973,14 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
8951
8973
  resultingToken = startedWithBacktick ? 15 /* NoSubstitutionTemplateLiteral */ : 18 /* TemplateTail */;
8952
8974
  break;
8953
8975
  }
8954
- const currChar = text.charCodeAt(pos);
8976
+ const currChar = charCodeUnchecked(pos);
8955
8977
  if (currChar === 96 /* backtick */) {
8956
8978
  contents += text.substring(start2, pos);
8957
8979
  pos++;
8958
8980
  resultingToken = startedWithBacktick ? 15 /* NoSubstitutionTemplateLiteral */ : 18 /* TemplateTail */;
8959
8981
  break;
8960
8982
  }
8961
- if (currChar === 36 /* $ */ && pos + 1 < end && text.charCodeAt(pos + 1) === 123 /* openBrace */) {
8983
+ if (currChar === 36 /* $ */ && pos + 1 < end && charCodeUnchecked(pos + 1) === 123 /* openBrace */) {
8962
8984
  contents += text.substring(start2, pos);
8963
8985
  pos += 2;
8964
8986
  resultingToken = startedWithBacktick ? 16 /* TemplateHead */ : 17 /* TemplateMiddle */;
@@ -8977,7 +8999,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
8977
8999
  if (currChar === 13 /* carriageReturn */) {
8978
9000
  contents += text.substring(start2, pos);
8979
9001
  pos++;
8980
- if (pos < end && text.charCodeAt(pos) === 10 /* lineFeed */) {
9002
+ if (pos < end && charCodeUnchecked(pos) === 10 /* lineFeed */) {
8981
9003
  pos++;
8982
9004
  }
8983
9005
  contents += "\n";
@@ -8997,24 +9019,24 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
8997
9019
  error(Diagnostics.Unexpected_end_of_text);
8998
9020
  return "";
8999
9021
  }
9000
- const ch = text.charCodeAt(pos);
9022
+ const ch = charCodeUnchecked(pos);
9001
9023
  pos++;
9002
9024
  switch (ch) {
9003
9025
  case 48 /* _0 */:
9004
- if (pos >= end || !isDigit(text.charCodeAt(pos))) {
9026
+ if (pos >= end || !isDigit(charCodeUnchecked(pos))) {
9005
9027
  return "\0";
9006
9028
  }
9007
9029
  case 49 /* _1 */:
9008
9030
  case 50 /* _2 */:
9009
9031
  case 51 /* _3 */:
9010
- if (pos < end && isOctalDigit(text.charCodeAt(pos))) {
9032
+ if (pos < end && isOctalDigit(charCodeUnchecked(pos))) {
9011
9033
  pos++;
9012
9034
  }
9013
9035
  case 52 /* _4 */:
9014
9036
  case 53 /* _5 */:
9015
9037
  case 54 /* _6 */:
9016
9038
  case 55 /* _7 */:
9017
- if (pos < end && isOctalDigit(text.charCodeAt(pos))) {
9039
+ if (pos < end && isOctalDigit(charCodeUnchecked(pos))) {
9018
9040
  pos++;
9019
9041
  }
9020
9042
  tokenFlags |= 2048 /* ContainsInvalidEscape */;
@@ -9051,12 +9073,12 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9051
9073
  case 34 /* doubleQuote */:
9052
9074
  return '"';
9053
9075
  case 117 /* u */:
9054
- if ((!isRegularExpression || shouldEmitInvalidEscapeError) && pos < end && text.charCodeAt(pos) === 123 /* openBrace */) {
9076
+ if ((!isRegularExpression || shouldEmitInvalidEscapeError) && pos < end && charCodeUnchecked(pos) === 123 /* openBrace */) {
9055
9077
  pos -= 2;
9056
9078
  return scanExtendedUnicodeEscape(!!isRegularExpression || shouldEmitInvalidEscapeError);
9057
9079
  }
9058
9080
  for (; pos < start2 + 6; pos++) {
9059
- if (!(pos < end && isHexDigit(text.charCodeAt(pos)))) {
9081
+ if (!(pos < end && isHexDigit(charCodeUnchecked(pos)))) {
9060
9082
  tokenFlags |= 2048 /* ContainsInvalidEscape */;
9061
9083
  if (isRegularExpression || shouldEmitInvalidEscapeError) {
9062
9084
  error(Diagnostics.Hexadecimal_digit_expected);
@@ -9067,11 +9089,11 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9067
9089
  tokenFlags |= 1024 /* UnicodeEscape */;
9068
9090
  const escapedValue = parseInt(text.substring(start2 + 2, pos), 16);
9069
9091
  const escapedValueString = String.fromCharCode(escapedValue);
9070
- if (isRegularExpression && shouldEmitInvalidEscapeError && escapedValue >= 55296 && escapedValue <= 56319 && pos + 6 < end && text.substring(pos, pos + 2) === "\\u" && text.charCodeAt(pos + 2) !== 123 /* openBrace */) {
9092
+ if (isRegularExpression && shouldEmitInvalidEscapeError && escapedValue >= 55296 && escapedValue <= 56319 && pos + 6 < end && text.substring(pos, pos + 2) === "\\u" && charCodeUnchecked(pos + 2) !== 123 /* openBrace */) {
9071
9093
  const nextStart = pos;
9072
9094
  let nextPos = pos + 2;
9073
9095
  for (; nextPos < nextStart + 6; nextPos++) {
9074
- if (!isHexDigit(text.charCodeAt(pos))) {
9096
+ if (!isHexDigit(charCodeUnchecked(pos))) {
9075
9097
  return escapedValueString;
9076
9098
  }
9077
9099
  }
@@ -9084,7 +9106,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9084
9106
  return escapedValueString;
9085
9107
  case 120 /* x */:
9086
9108
  for (; pos < start2 + 4; pos++) {
9087
- if (!(pos < end && isHexDigit(text.charCodeAt(pos)))) {
9109
+ if (!(pos < end && isHexDigit(charCodeUnchecked(pos)))) {
9088
9110
  tokenFlags |= 2048 /* ContainsInvalidEscape */;
9089
9111
  if (isRegularExpression || shouldEmitInvalidEscapeError) {
9090
9112
  error(Diagnostics.Hexadecimal_digit_expected);
@@ -9095,7 +9117,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9095
9117
  tokenFlags |= 4096 /* HexEscape */;
9096
9118
  return String.fromCharCode(parseInt(text.substring(start2 + 2, pos), 16));
9097
9119
  case 13 /* carriageReturn */:
9098
- if (pos < end && text.charCodeAt(pos) === 10 /* lineFeed */) {
9120
+ if (pos < end && charCodeUnchecked(pos) === 10 /* lineFeed */) {
9099
9121
  pos++;
9100
9122
  }
9101
9123
  case 10 /* lineFeed */:
@@ -9136,7 +9158,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9136
9158
  error(Diagnostics.Unexpected_end_of_text);
9137
9159
  }
9138
9160
  isInvalidExtendedEscape = true;
9139
- } else if (text.charCodeAt(pos) === 125 /* closeBrace */) {
9161
+ } else if (charCodeUnchecked(pos) === 125 /* closeBrace */) {
9140
9162
  pos++;
9141
9163
  } else {
9142
9164
  if (shouldEmitInvalidEscapeError) {
@@ -9152,7 +9174,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9152
9174
  return utf16EncodeAsString(escapedValue);
9153
9175
  }
9154
9176
  function peekUnicodeEscape() {
9155
- if (pos + 5 < end && text.charCodeAt(pos + 1) === 117 /* u */) {
9177
+ if (pos + 5 < end && charCodeUnchecked(pos + 1) === 117 /* u */) {
9156
9178
  const start2 = pos;
9157
9179
  pos += 2;
9158
9180
  const value = scanExactNumberOfHexDigits(
@@ -9166,7 +9188,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9166
9188
  return -1;
9167
9189
  }
9168
9190
  function peekExtendedUnicodeEscape() {
9169
- if (codePointAt(text, pos + 1) === 117 /* u */ && codePointAt(text, pos + 2) === 123 /* openBrace */) {
9191
+ if (codePointUnchecked(pos + 1) === 117 /* u */ && codePointUnchecked(pos + 2) === 123 /* openBrace */) {
9170
9192
  const start2 = pos;
9171
9193
  pos += 3;
9172
9194
  const escapedValueString = scanMinimumNumberOfHexDigits(
@@ -9184,7 +9206,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9184
9206
  let result = "";
9185
9207
  let start2 = pos;
9186
9208
  while (pos < end) {
9187
- let ch = codePointAt(text, pos);
9209
+ let ch = codePointUnchecked(pos);
9188
9210
  if (isIdentifierPart(ch, languageVersion)) {
9189
9211
  pos += charSize(ch);
9190
9212
  } else if (ch === 92 /* backslash */) {
@@ -9231,7 +9253,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9231
9253
  let separatorAllowed = false;
9232
9254
  let isPreviousTokenSeparator = false;
9233
9255
  while (true) {
9234
- const ch = text.charCodeAt(pos);
9256
+ const ch = charCodeUnchecked(pos);
9235
9257
  if (ch === 95 /* _ */) {
9236
9258
  tokenFlags |= 512 /* ContainsSeparator */;
9237
9259
  if (separatorAllowed) {
@@ -9253,13 +9275,13 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9253
9275
  pos++;
9254
9276
  isPreviousTokenSeparator = false;
9255
9277
  }
9256
- if (text.charCodeAt(pos - 1) === 95 /* _ */) {
9278
+ if (charCodeUnchecked(pos - 1) === 95 /* _ */) {
9257
9279
  error(Diagnostics.Numeric_separators_are_not_allowed_here, pos - 1, 1);
9258
9280
  }
9259
9281
  return value;
9260
9282
  }
9261
9283
  function checkBigIntSuffix() {
9262
- if (text.charCodeAt(pos) === 110 /* n */) {
9284
+ if (charCodeUnchecked(pos) === 110 /* n */) {
9263
9285
  tokenValue += "n";
9264
9286
  if (tokenFlags & 384 /* BinaryOrOctalSpecifier */) {
9265
9287
  tokenValue = parsePseudoBigInt(tokenValue) + "n";
@@ -9281,7 +9303,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9281
9303
  if (pos >= end) {
9282
9304
  return token = 1 /* EndOfFileToken */;
9283
9305
  }
9284
- const ch = codePointAt(text, pos);
9306
+ const ch = codePointUnchecked(pos);
9285
9307
  if (pos === 0) {
9286
9308
  if (ch === 35 /* hash */ && isShebangTrivia(text, pos)) {
9287
9309
  pos = scanShebangTrivia(text, pos);
@@ -9300,7 +9322,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9300
9322
  pos++;
9301
9323
  continue;
9302
9324
  } else {
9303
- if (ch === 13 /* carriageReturn */ && pos + 1 < end && text.charCodeAt(pos + 1) === 10 /* lineFeed */) {
9325
+ if (ch === 13 /* carriageReturn */ && pos + 1 < end && charCodeUnchecked(pos + 1) === 10 /* lineFeed */) {
9304
9326
  pos += 2;
9305
9327
  } else {
9306
9328
  pos++;
@@ -9333,14 +9355,14 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9333
9355
  pos++;
9334
9356
  continue;
9335
9357
  } else {
9336
- while (pos < end && isWhiteSpaceSingleLine(text.charCodeAt(pos))) {
9358
+ while (pos < end && isWhiteSpaceSingleLine(charCodeUnchecked(pos))) {
9337
9359
  pos++;
9338
9360
  }
9339
9361
  return token = 5 /* WhitespaceTrivia */;
9340
9362
  }
9341
9363
  case 33 /* exclamation */:
9342
- if (text.charCodeAt(pos + 1) === 61 /* equals */) {
9343
- if (text.charCodeAt(pos + 2) === 61 /* equals */) {
9364
+ if (charCodeUnchecked(pos + 1) === 61 /* equals */) {
9365
+ if (charCodeUnchecked(pos + 2) === 61 /* equals */) {
9344
9366
  return pos += 3, token = 38 /* ExclamationEqualsEqualsToken */;
9345
9367
  }
9346
9368
  return pos += 2, token = 36 /* ExclamationEqualsToken */;
@@ -9357,19 +9379,19 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9357
9379
  false
9358
9380
  );
9359
9381
  case 37 /* percent */:
9360
- if (text.charCodeAt(pos + 1) === 61 /* equals */) {
9382
+ if (charCodeUnchecked(pos + 1) === 61 /* equals */) {
9361
9383
  return pos += 2, token = 70 /* PercentEqualsToken */;
9362
9384
  }
9363
9385
  pos++;
9364
9386
  return token = 45 /* PercentToken */;
9365
9387
  case 38 /* ampersand */:
9366
- if (text.charCodeAt(pos + 1) === 38 /* ampersand */) {
9367
- if (text.charCodeAt(pos + 2) === 61 /* equals */) {
9388
+ if (charCodeUnchecked(pos + 1) === 38 /* ampersand */) {
9389
+ if (charCodeUnchecked(pos + 2) === 61 /* equals */) {
9368
9390
  return pos += 3, token = 77 /* AmpersandAmpersandEqualsToken */;
9369
9391
  }
9370
9392
  return pos += 2, token = 56 /* AmpersandAmpersandToken */;
9371
9393
  }
9372
- if (text.charCodeAt(pos + 1) === 61 /* equals */) {
9394
+ if (charCodeUnchecked(pos + 1) === 61 /* equals */) {
9373
9395
  return pos += 2, token = 74 /* AmpersandEqualsToken */;
9374
9396
  }
9375
9397
  pos++;
@@ -9381,11 +9403,11 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9381
9403
  pos++;
9382
9404
  return token = 22 /* CloseParenToken */;
9383
9405
  case 42 /* asterisk */:
9384
- if (text.charCodeAt(pos + 1) === 61 /* equals */) {
9406
+ if (charCodeUnchecked(pos + 1) === 61 /* equals */) {
9385
9407
  return pos += 2, token = 67 /* AsteriskEqualsToken */;
9386
9408
  }
9387
- if (text.charCodeAt(pos + 1) === 42 /* asterisk */) {
9388
- if (text.charCodeAt(pos + 2) === 61 /* equals */) {
9409
+ if (charCodeUnchecked(pos + 1) === 42 /* asterisk */) {
9410
+ if (charCodeUnchecked(pos + 2) === 61 /* equals */) {
9389
9411
  return pos += 3, token = 68 /* AsteriskAsteriskEqualsToken */;
9390
9412
  }
9391
9413
  return pos += 2, token = 43 /* AsteriskAsteriskToken */;
@@ -9397,10 +9419,10 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9397
9419
  }
9398
9420
  return token = 42 /* AsteriskToken */;
9399
9421
  case 43 /* plus */:
9400
- if (text.charCodeAt(pos + 1) === 43 /* plus */) {
9422
+ if (charCodeUnchecked(pos + 1) === 43 /* plus */) {
9401
9423
  return pos += 2, token = 46 /* PlusPlusToken */;
9402
9424
  }
9403
- if (text.charCodeAt(pos + 1) === 61 /* equals */) {
9425
+ if (charCodeUnchecked(pos + 1) === 61 /* equals */) {
9404
9426
  return pos += 2, token = 65 /* PlusEqualsToken */;
9405
9427
  }
9406
9428
  pos++;
@@ -9409,29 +9431,29 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9409
9431
  pos++;
9410
9432
  return token = 28 /* CommaToken */;
9411
9433
  case 45 /* minus */:
9412
- if (text.charCodeAt(pos + 1) === 45 /* minus */) {
9434
+ if (charCodeUnchecked(pos + 1) === 45 /* minus */) {
9413
9435
  return pos += 2, token = 47 /* MinusMinusToken */;
9414
9436
  }
9415
- if (text.charCodeAt(pos + 1) === 61 /* equals */) {
9437
+ if (charCodeUnchecked(pos + 1) === 61 /* equals */) {
9416
9438
  return pos += 2, token = 66 /* MinusEqualsToken */;
9417
9439
  }
9418
9440
  pos++;
9419
9441
  return token = 41 /* MinusToken */;
9420
9442
  case 46 /* dot */:
9421
- if (isDigit(text.charCodeAt(pos + 1))) {
9443
+ if (isDigit(charCodeUnchecked(pos + 1))) {
9422
9444
  scanNumber();
9423
9445
  return token = 9 /* NumericLiteral */;
9424
9446
  }
9425
- if (text.charCodeAt(pos + 1) === 46 /* dot */ && text.charCodeAt(pos + 2) === 46 /* dot */) {
9447
+ if (charCodeUnchecked(pos + 1) === 46 /* dot */ && charCodeUnchecked(pos + 2) === 46 /* dot */) {
9426
9448
  return pos += 3, token = 26 /* DotDotDotToken */;
9427
9449
  }
9428
9450
  pos++;
9429
9451
  return token = 25 /* DotToken */;
9430
9452
  case 47 /* slash */:
9431
- if (text.charCodeAt(pos + 1) === 47 /* slash */) {
9453
+ if (charCodeUnchecked(pos + 1) === 47 /* slash */) {
9432
9454
  pos += 2;
9433
9455
  while (pos < end) {
9434
- if (isLineBreak(text.charCodeAt(pos))) {
9456
+ if (isLineBreak(charCodeUnchecked(pos))) {
9435
9457
  break;
9436
9458
  }
9437
9459
  pos++;
@@ -9448,14 +9470,14 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9448
9470
  return token = 2 /* SingleLineCommentTrivia */;
9449
9471
  }
9450
9472
  }
9451
- if (text.charCodeAt(pos + 1) === 42 /* asterisk */) {
9473
+ if (charCodeUnchecked(pos + 1) === 42 /* asterisk */) {
9452
9474
  pos += 2;
9453
- const isJSDoc2 = text.charCodeAt(pos) === 42 /* asterisk */ && text.charCodeAt(pos + 1) !== 47 /* slash */;
9475
+ const isJSDoc2 = charCodeUnchecked(pos) === 42 /* asterisk */ && charCodeUnchecked(pos + 1) !== 47 /* slash */;
9454
9476
  let commentClosed = false;
9455
9477
  let lastLineStart = tokenStart;
9456
9478
  while (pos < end) {
9457
- const ch2 = text.charCodeAt(pos);
9458
- if (ch2 === 42 /* asterisk */ && text.charCodeAt(pos + 1) === 47 /* slash */) {
9479
+ const ch2 = charCodeUnchecked(pos);
9480
+ if (ch2 === 42 /* asterisk */ && charCodeUnchecked(pos + 1) === 47 /* slash */) {
9459
9481
  pos += 2;
9460
9482
  commentClosed = true;
9461
9483
  break;
@@ -9482,13 +9504,13 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9482
9504
  return token = 3 /* MultiLineCommentTrivia */;
9483
9505
  }
9484
9506
  }
9485
- if (text.charCodeAt(pos + 1) === 61 /* equals */) {
9507
+ if (charCodeUnchecked(pos + 1) === 61 /* equals */) {
9486
9508
  return pos += 2, token = 69 /* SlashEqualsToken */;
9487
9509
  }
9488
9510
  pos++;
9489
9511
  return token = 44 /* SlashToken */;
9490
9512
  case 48 /* _0 */:
9491
- if (pos + 2 < end && (text.charCodeAt(pos + 1) === 88 /* X */ || text.charCodeAt(pos + 1) === 120 /* x */)) {
9513
+ if (pos + 2 < end && (charCodeUnchecked(pos + 1) === 88 /* X */ || charCodeUnchecked(pos + 1) === 120 /* x */)) {
9492
9514
  pos += 2;
9493
9515
  tokenValue = scanMinimumNumberOfHexDigits(
9494
9516
  1,
@@ -9502,7 +9524,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9502
9524
  tokenValue = "0x" + tokenValue;
9503
9525
  tokenFlags |= 64 /* HexSpecifier */;
9504
9526
  return token = checkBigIntSuffix();
9505
- } else if (pos + 2 < end && (text.charCodeAt(pos + 1) === 66 /* B */ || text.charCodeAt(pos + 1) === 98 /* b */)) {
9527
+ } else if (pos + 2 < end && (charCodeUnchecked(pos + 1) === 66 /* B */ || charCodeUnchecked(pos + 1) === 98 /* b */)) {
9506
9528
  pos += 2;
9507
9529
  tokenValue = scanBinaryOrOctalDigits(
9508
9530
  /* base */
@@ -9515,7 +9537,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9515
9537
  tokenValue = "0b" + tokenValue;
9516
9538
  tokenFlags |= 128 /* BinarySpecifier */;
9517
9539
  return token = checkBigIntSuffix();
9518
- } else if (pos + 2 < end && (text.charCodeAt(pos + 1) === 79 /* O */ || text.charCodeAt(pos + 1) === 111 /* o */)) {
9540
+ } else if (pos + 2 < end && (charCodeUnchecked(pos + 1) === 79 /* O */ || charCodeUnchecked(pos + 1) === 111 /* o */)) {
9519
9541
  pos += 2;
9520
9542
  tokenValue = scanBinaryOrOctalDigits(
9521
9543
  /* base */
@@ -9554,16 +9576,16 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9554
9576
  return token = 7 /* ConflictMarkerTrivia */;
9555
9577
  }
9556
9578
  }
9557
- if (text.charCodeAt(pos + 1) === 60 /* lessThan */) {
9558
- if (text.charCodeAt(pos + 2) === 61 /* equals */) {
9579
+ if (charCodeUnchecked(pos + 1) === 60 /* lessThan */) {
9580
+ if (charCodeUnchecked(pos + 2) === 61 /* equals */) {
9559
9581
  return pos += 3, token = 71 /* LessThanLessThanEqualsToken */;
9560
9582
  }
9561
9583
  return pos += 2, token = 48 /* LessThanLessThanToken */;
9562
9584
  }
9563
- if (text.charCodeAt(pos + 1) === 61 /* equals */) {
9585
+ if (charCodeUnchecked(pos + 1) === 61 /* equals */) {
9564
9586
  return pos += 2, token = 33 /* LessThanEqualsToken */;
9565
9587
  }
9566
- if (languageVariant === 1 /* JSX */ && text.charCodeAt(pos + 1) === 47 /* slash */ && text.charCodeAt(pos + 2) !== 42 /* asterisk */) {
9588
+ if (languageVariant === 1 /* JSX */ && charCodeUnchecked(pos + 1) === 47 /* slash */ && charCodeUnchecked(pos + 2) !== 42 /* asterisk */) {
9567
9589
  return pos += 2, token = 31 /* LessThanSlashToken */;
9568
9590
  }
9569
9591
  pos++;
@@ -9577,13 +9599,13 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9577
9599
  return token = 7 /* ConflictMarkerTrivia */;
9578
9600
  }
9579
9601
  }
9580
- if (text.charCodeAt(pos + 1) === 61 /* equals */) {
9581
- if (text.charCodeAt(pos + 2) === 61 /* equals */) {
9602
+ if (charCodeUnchecked(pos + 1) === 61 /* equals */) {
9603
+ if (charCodeUnchecked(pos + 2) === 61 /* equals */) {
9582
9604
  return pos += 3, token = 37 /* EqualsEqualsEqualsToken */;
9583
9605
  }
9584
9606
  return pos += 2, token = 35 /* EqualsEqualsToken */;
9585
9607
  }
9586
- if (text.charCodeAt(pos + 1) === 62 /* greaterThan */) {
9608
+ if (charCodeUnchecked(pos + 1) === 62 /* greaterThan */) {
9587
9609
  return pos += 2, token = 39 /* EqualsGreaterThanToken */;
9588
9610
  }
9589
9611
  pos++;
@@ -9600,11 +9622,11 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9600
9622
  pos++;
9601
9623
  return token = 32 /* GreaterThanToken */;
9602
9624
  case 63 /* question */:
9603
- if (text.charCodeAt(pos + 1) === 46 /* dot */ && !isDigit(text.charCodeAt(pos + 2))) {
9625
+ if (charCodeUnchecked(pos + 1) === 46 /* dot */ && !isDigit(charCodeUnchecked(pos + 2))) {
9604
9626
  return pos += 2, token = 29 /* QuestionDotToken */;
9605
9627
  }
9606
- if (text.charCodeAt(pos + 1) === 63 /* question */) {
9607
- if (text.charCodeAt(pos + 2) === 61 /* equals */) {
9628
+ if (charCodeUnchecked(pos + 1) === 63 /* question */) {
9629
+ if (charCodeUnchecked(pos + 2) === 61 /* equals */) {
9608
9630
  return pos += 3, token = 78 /* QuestionQuestionEqualsToken */;
9609
9631
  }
9610
9632
  return pos += 2, token = 61 /* QuestionQuestionToken */;
@@ -9618,7 +9640,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9618
9640
  pos++;
9619
9641
  return token = 24 /* CloseBracketToken */;
9620
9642
  case 94 /* caret */:
9621
- if (text.charCodeAt(pos + 1) === 61 /* equals */) {
9643
+ if (charCodeUnchecked(pos + 1) === 61 /* equals */) {
9622
9644
  return pos += 2, token = 79 /* CaretEqualsToken */;
9623
9645
  }
9624
9646
  pos++;
@@ -9635,13 +9657,13 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9635
9657
  return token = 7 /* ConflictMarkerTrivia */;
9636
9658
  }
9637
9659
  }
9638
- if (text.charCodeAt(pos + 1) === 124 /* bar */) {
9639
- if (text.charCodeAt(pos + 2) === 61 /* equals */) {
9660
+ if (charCodeUnchecked(pos + 1) === 124 /* bar */) {
9661
+ if (charCodeUnchecked(pos + 2) === 61 /* equals */) {
9640
9662
  return pos += 3, token = 76 /* BarBarEqualsToken */;
9641
9663
  }
9642
9664
  return pos += 2, token = 57 /* BarBarToken */;
9643
9665
  }
9644
- if (text.charCodeAt(pos + 1) === 61 /* equals */) {
9666
+ if (charCodeUnchecked(pos + 1) === 61 /* equals */) {
9645
9667
  return pos += 2, token = 75 /* BarEqualsToken */;
9646
9668
  }
9647
9669
  pos++;
@@ -9680,7 +9702,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9680
9702
  pos++;
9681
9703
  return token = 0 /* Unknown */;
9682
9704
  }
9683
- const charAfterHash = codePointAt(text, pos + 1);
9705
+ const charAfterHash = codePointUnchecked(pos + 1);
9684
9706
  if (charAfterHash === 92 /* backslash */) {
9685
9707
  pos++;
9686
9708
  const extendedCookedChar2 = peekExtendedUnicodeEscape();
@@ -9750,7 +9772,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9750
9772
  Debug.assert(token === 0 /* Unknown */, "'reScanInvalidIdentifier' should only be called when the current token is 'SyntaxKind.Unknown'.");
9751
9773
  pos = tokenStart = fullStartPos;
9752
9774
  tokenFlags = 0;
9753
- const ch = codePointAt(text, pos);
9775
+ const ch = codePointUnchecked(pos);
9754
9776
  const identifierKind = scanIdentifier(ch, 99 /* ESNext */);
9755
9777
  if (identifierKind) {
9756
9778
  return token = identifierKind;
@@ -9762,7 +9784,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9762
9784
  let ch = startCharacter;
9763
9785
  if (isIdentifierStart(ch, languageVersion2)) {
9764
9786
  pos += charSize(ch);
9765
- while (pos < end && isIdentifierPart(ch = codePointAt(text, pos), languageVersion2))
9787
+ while (pos < end && isIdentifierPart(ch = codePointUnchecked(pos), languageVersion2))
9766
9788
  pos += charSize(ch);
9767
9789
  tokenValue = text.substring(tokenStart, pos);
9768
9790
  if (ch === 92 /* backslash */) {
@@ -9773,20 +9795,20 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9773
9795
  }
9774
9796
  function reScanGreaterToken() {
9775
9797
  if (token === 32 /* GreaterThanToken */) {
9776
- if (text.charCodeAt(pos) === 62 /* greaterThan */) {
9777
- if (text.charCodeAt(pos + 1) === 62 /* greaterThan */) {
9778
- if (text.charCodeAt(pos + 2) === 61 /* equals */) {
9798
+ if (charCodeUnchecked(pos) === 62 /* greaterThan */) {
9799
+ if (charCodeUnchecked(pos + 1) === 62 /* greaterThan */) {
9800
+ if (charCodeUnchecked(pos + 2) === 61 /* equals */) {
9779
9801
  return pos += 3, token = 73 /* GreaterThanGreaterThanGreaterThanEqualsToken */;
9780
9802
  }
9781
9803
  return pos += 2, token = 50 /* GreaterThanGreaterThanGreaterThanToken */;
9782
9804
  }
9783
- if (text.charCodeAt(pos + 1) === 61 /* equals */) {
9805
+ if (charCodeUnchecked(pos + 1) === 61 /* equals */) {
9784
9806
  return pos += 2, token = 72 /* GreaterThanGreaterThanEqualsToken */;
9785
9807
  }
9786
9808
  pos++;
9787
9809
  return token = 49 /* GreaterThanGreaterThanToken */;
9788
9810
  }
9789
- if (text.charCodeAt(pos) === 61 /* equals */) {
9811
+ if (charCodeUnchecked(pos) === 61 /* equals */) {
9790
9812
  pos++;
9791
9813
  return token = 34 /* GreaterThanEqualsToken */;
9792
9814
  }
@@ -9809,7 +9831,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9809
9831
  error(Diagnostics.Unterminated_regular_expression_literal);
9810
9832
  break;
9811
9833
  }
9812
- const ch = text.charCodeAt(p);
9834
+ const ch = charCodeUnchecked(p);
9813
9835
  if (isLineBreak(ch)) {
9814
9836
  tokenFlags |= 4 /* Unterminated */;
9815
9837
  error(Diagnostics.Unterminated_regular_expression_literal);
@@ -9833,7 +9855,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9833
9855
  const endOfBody = p - (isUnterminated ? 0 : 1);
9834
9856
  let regExpFlags = 0 /* None */;
9835
9857
  while (p < end) {
9836
- const ch = text.charCodeAt(p);
9858
+ const ch = charCodeUnchecked(p);
9837
9859
  if (!isIdentifierPart(ch, languageVersion)) {
9838
9860
  break;
9839
9861
  }
@@ -9852,845 +9874,860 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
9852
9874
  }
9853
9875
  p++;
9854
9876
  }
9877
+ pos = p;
9855
9878
  if (reportErrors2) {
9856
- pos = tokenStart + 1;
9857
- const saveTokenPos = tokenStart;
9879
+ const saveTokenStart = tokenStart;
9858
9880
  const saveTokenFlags = tokenFlags;
9881
+ const savePos = pos;
9882
+ const saveEnd = end;
9883
+ pos = tokenStart + 1;
9884
+ end = endOfBody;
9859
9885
  scanRegularExpressionWorker(
9860
- text,
9861
- endOfBody,
9862
9886
  regExpFlags,
9863
9887
  isUnterminated,
9864
9888
  /*annexB*/
9865
9889
  true
9866
9890
  );
9867
- if (!isUnterminated) {
9868
- pos = p;
9869
- }
9870
- tokenStart = saveTokenPos;
9891
+ tokenStart = saveTokenStart;
9871
9892
  tokenFlags = saveTokenFlags;
9872
- } else {
9873
- pos = p;
9893
+ pos = savePos;
9894
+ end = saveEnd;
9874
9895
  }
9875
9896
  tokenValue = text.substring(tokenStart, pos);
9876
9897
  token = 14 /* RegularExpressionLiteral */;
9877
9898
  }
9878
9899
  return token;
9879
- function scanRegularExpressionWorker(text2, end2, regExpFlags, isUnterminated, annexB) {
9880
- const unicodeSetsMode = !!(regExpFlags & 64 /* UnicodeSets */);
9881
- const unicodeMode = !!(regExpFlags & 96 /* UnicodeMode */);
9882
- if (unicodeMode) {
9883
- annexB = false;
9884
- }
9885
- let mayContainStrings = false;
9886
- let numberOfCapturingGroups = 0;
9887
- const groupSpecifiers = /* @__PURE__ */ new Set();
9888
- const groupNameReferences = [];
9889
- const decimalEscapes = [];
9890
- const namedCapturingGroups = [];
9891
- function scanDisjunction(isInGroup) {
9892
- while (true) {
9893
- namedCapturingGroups.push(/* @__PURE__ */ new Set());
9894
- scanAlternative(isInGroup);
9895
- namedCapturingGroups.pop();
9896
- if (text2.charCodeAt(pos) !== 124 /* bar */) {
9897
- return;
9898
- }
9899
- pos++;
9900
+ }
9901
+ function scanRegularExpressionWorker(regExpFlags, isUnterminated, annexB) {
9902
+ var unicodeSetsMode = !!(regExpFlags & 64 /* UnicodeSets */);
9903
+ var unicodeMode = !!(regExpFlags & 96 /* UnicodeMode */);
9904
+ if (unicodeMode) {
9905
+ annexB = false;
9906
+ }
9907
+ var mayContainStrings = false;
9908
+ var numberOfCapturingGroups = 0;
9909
+ var groupSpecifiers;
9910
+ var groupNameReferences;
9911
+ var decimalEscapes;
9912
+ var namedCapturingGroupsScopeStack = [];
9913
+ var topNamedCapturingGroupsScope;
9914
+ function scanDisjunction(isInGroup) {
9915
+ while (true) {
9916
+ namedCapturingGroupsScopeStack.push(topNamedCapturingGroupsScope);
9917
+ topNamedCapturingGroupsScope = void 0;
9918
+ scanAlternative(isInGroup);
9919
+ topNamedCapturingGroupsScope = namedCapturingGroupsScopeStack.pop();
9920
+ if (charCodeChecked(pos) !== 124 /* bar */) {
9921
+ return;
9900
9922
  }
9923
+ pos++;
9901
9924
  }
9902
- function scanAlternative(isInGroup) {
9903
- let isPreviousTermQuantifiable = false;
9904
- while (pos < end2) {
9905
- const start2 = pos;
9906
- const ch = text2.charCodeAt(pos);
9907
- switch (ch) {
9908
- case 94 /* caret */:
9909
- case 36 /* $ */:
9910
- pos++;
9911
- isPreviousTermQuantifiable = false;
9912
- break;
9913
- case 92 /* backslash */:
9925
+ }
9926
+ function scanAlternative(isInGroup) {
9927
+ let isPreviousTermQuantifiable = false;
9928
+ while (true) {
9929
+ const start2 = pos;
9930
+ const ch = charCodeChecked(pos);
9931
+ switch (ch) {
9932
+ case -1 /* EOF */:
9933
+ return;
9934
+ case 94 /* caret */:
9935
+ case 36 /* $ */:
9936
+ pos++;
9937
+ isPreviousTermQuantifiable = false;
9938
+ break;
9939
+ case 92 /* backslash */:
9940
+ pos++;
9941
+ switch (charCodeChecked(pos)) {
9942
+ case 98 /* b */:
9943
+ case 66 /* B */:
9944
+ pos++;
9945
+ isPreviousTermQuantifiable = false;
9946
+ break;
9947
+ default:
9948
+ scanAtomEscape();
9949
+ isPreviousTermQuantifiable = true;
9950
+ break;
9951
+ }
9952
+ break;
9953
+ case 40 /* openParen */:
9954
+ pos++;
9955
+ if (charCodeChecked(pos) === 63 /* question */) {
9914
9956
  pos++;
9915
- switch (text2.charCodeAt(pos)) {
9916
- case 98 /* b */:
9917
- case 66 /* B */:
9957
+ switch (charCodeChecked(pos)) {
9958
+ case 61 /* equals */:
9959
+ case 33 /* exclamation */:
9918
9960
  pos++;
9919
- isPreviousTermQuantifiable = false;
9920
- break;
9921
- default:
9922
- scanAtomEscape();
9923
- isPreviousTermQuantifiable = true;
9961
+ isPreviousTermQuantifiable = annexB;
9924
9962
  break;
9925
- }
9926
- break;
9927
- case 40 /* openParen */:
9928
- pos++;
9929
- if (text2.charCodeAt(pos) === 63 /* question */) {
9930
- pos++;
9931
- switch (text2.charCodeAt(pos)) {
9932
- case 61 /* equals */:
9933
- case 33 /* exclamation */:
9934
- pos++;
9935
- isPreviousTermQuantifiable = annexB;
9936
- break;
9937
- case 60 /* lessThan */:
9938
- const groupNameStart = pos;
9939
- pos++;
9940
- switch (text2.charCodeAt(pos)) {
9941
- case 61 /* equals */:
9942
- case 33 /* exclamation */:
9943
- pos++;
9944
- isPreviousTermQuantifiable = false;
9945
- break;
9946
- default:
9947
- scanGroupName(
9948
- /*isReference*/
9949
- false
9950
- );
9951
- scanExpectedChar(62 /* greaterThan */);
9952
- if (languageVersion < 5 /* ES2018 */) {
9953
- error(Diagnostics.Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later, groupNameStart, pos - groupNameStart);
9954
- }
9955
- numberOfCapturingGroups++;
9956
- isPreviousTermQuantifiable = true;
9957
- break;
9958
- }
9959
- break;
9960
- default:
9961
- const start3 = pos;
9962
- const setFlags = scanPatternModifiers(0 /* None */);
9963
- if (text2.charCodeAt(pos) === 45 /* minus */) {
9963
+ case 60 /* lessThan */:
9964
+ const groupNameStart = pos;
9965
+ pos++;
9966
+ switch (charCodeChecked(pos)) {
9967
+ case 61 /* equals */:
9968
+ case 33 /* exclamation */:
9964
9969
  pos++;
9965
- scanPatternModifiers(setFlags);
9966
- if (pos === start3 + 1) {
9967
- error(Diagnostics.Subpattern_flags_must_be_present_when_there_is_a_minus_sign, start3, pos - start3);
9970
+ isPreviousTermQuantifiable = false;
9971
+ break;
9972
+ default:
9973
+ scanGroupName(
9974
+ /*isReference*/
9975
+ false
9976
+ );
9977
+ scanExpectedChar(62 /* greaterThan */);
9978
+ if (languageVersion < 5 /* ES2018 */) {
9979
+ error(Diagnostics.Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later, groupNameStart, pos - groupNameStart);
9968
9980
  }
9981
+ numberOfCapturingGroups++;
9982
+ isPreviousTermQuantifiable = true;
9983
+ break;
9984
+ }
9985
+ break;
9986
+ default:
9987
+ const start3 = pos;
9988
+ const setFlags = scanPatternModifiers(0 /* None */);
9989
+ if (charCodeChecked(pos) === 45 /* minus */) {
9990
+ pos++;
9991
+ scanPatternModifiers(setFlags);
9992
+ if (pos === start3 + 1) {
9993
+ error(Diagnostics.Subpattern_flags_must_be_present_when_there_is_a_minus_sign, start3, pos - start3);
9969
9994
  }
9970
- scanExpectedChar(58 /* colon */);
9971
- isPreviousTermQuantifiable = true;
9972
- break;
9973
- }
9974
- } else {
9975
- numberOfCapturingGroups++;
9976
- isPreviousTermQuantifiable = true;
9995
+ }
9996
+ scanExpectedChar(58 /* colon */);
9997
+ isPreviousTermQuantifiable = true;
9998
+ break;
9977
9999
  }
9978
- scanDisjunction(
9979
- /*isInGroup*/
9980
- true
9981
- );
9982
- scanExpectedChar(41 /* closeParen */);
9983
- break;
9984
- case 123 /* openBrace */:
10000
+ } else {
10001
+ numberOfCapturingGroups++;
10002
+ isPreviousTermQuantifiable = true;
10003
+ }
10004
+ scanDisjunction(
10005
+ /*isInGroup*/
10006
+ true
10007
+ );
10008
+ scanExpectedChar(41 /* closeParen */);
10009
+ break;
10010
+ case 123 /* openBrace */:
10011
+ pos++;
10012
+ const digitsStart = pos;
10013
+ scanDigits();
10014
+ const min2 = tokenValue;
10015
+ if (charCodeChecked(pos) === 44 /* comma */) {
9985
10016
  pos++;
9986
- const digitsStart = pos;
9987
10017
  scanDigits();
9988
- const min2 = tokenValue;
9989
- if (text2.charCodeAt(pos) === 44 /* comma */) {
9990
- pos++;
9991
- scanDigits();
9992
- const max = tokenValue;
9993
- if (!min2) {
9994
- if (max || text2.charCodeAt(pos) === 125 /* closeBrace */) {
9995
- error(Diagnostics.Incomplete_quantifier_Digit_expected, digitsStart, 0);
9996
- } else {
9997
- if (unicodeMode) {
9998
- error(Diagnostics.Unexpected_0_Did_you_mean_to_escape_it_with_backslash, start2, 1, String.fromCharCode(ch));
9999
- }
10000
- isPreviousTermQuantifiable = true;
10001
- break;
10018
+ const max = tokenValue;
10019
+ if (!min2) {
10020
+ if (max || charCodeChecked(pos) === 125 /* closeBrace */) {
10021
+ error(Diagnostics.Incomplete_quantifier_Digit_expected, digitsStart, 0);
10022
+ } else {
10023
+ if (unicodeMode) {
10024
+ error(Diagnostics.Unexpected_0_Did_you_mean_to_escape_it_with_backslash, start2, 1, String.fromCharCode(ch));
10002
10025
  }
10026
+ isPreviousTermQuantifiable = true;
10027
+ break;
10003
10028
  }
10004
- if (max && Number.parseInt(min2) > Number.parseInt(max)) {
10005
- error(Diagnostics.Numbers_out_of_order_in_quantifier, digitsStart, pos - digitsStart);
10006
- }
10007
- } else if (!min2) {
10008
- if (unicodeMode) {
10009
- error(Diagnostics.Unexpected_0_Did_you_mean_to_escape_it_with_backslash, start2, 1, String.fromCharCode(ch));
10010
- }
10011
- isPreviousTermQuantifiable = true;
10012
- break;
10013
10029
  }
10014
- scanExpectedChar(125 /* closeBrace */);
10015
- pos--;
10016
- case 42 /* asterisk */:
10017
- case 43 /* plus */:
10018
- case 63 /* question */:
10019
- pos++;
10020
- if (text2.charCodeAt(pos) === 63 /* question */) {
10021
- pos++;
10030
+ if (max && Number.parseInt(min2) > Number.parseInt(max)) {
10031
+ error(Diagnostics.Numbers_out_of_order_in_quantifier, digitsStart, pos - digitsStart);
10022
10032
  }
10023
- if (!isPreviousTermQuantifiable) {
10024
- error(Diagnostics.There_is_nothing_available_for_repetition, start2, pos - start2);
10033
+ } else if (!min2) {
10034
+ if (unicodeMode) {
10035
+ error(Diagnostics.Unexpected_0_Did_you_mean_to_escape_it_with_backslash, start2, 1, String.fromCharCode(ch));
10025
10036
  }
10026
- isPreviousTermQuantifiable = false;
10027
- break;
10028
- case 46 /* dot */:
10029
- pos++;
10030
10037
  isPreviousTermQuantifiable = true;
10031
10038
  break;
10032
- case 91 /* openBracket */:
10033
- pos++;
10034
- if (unicodeSetsMode) {
10035
- scanClassSetExpression();
10036
- } else {
10037
- scanClassRanges();
10038
- }
10039
- scanExpectedChar(93 /* closeBracket */);
10040
- isPreviousTermQuantifiable = true;
10041
- break;
10042
- case 41 /* closeParen */:
10043
- if (isInGroup) {
10044
- return;
10045
- }
10046
- case 93 /* closeBracket */:
10047
- case 125 /* closeBrace */:
10048
- if (isUnterminated && !isInGroup) {
10049
- return;
10050
- }
10051
- if (unicodeMode || ch === 41 /* closeParen */) {
10052
- error(Diagnostics.Unexpected_0_Did_you_mean_to_escape_it_with_backslash, pos, 1, String.fromCharCode(ch));
10053
- }
10054
- pos++;
10055
- isPreviousTermQuantifiable = true;
10056
- break;
10057
- case 47 /* slash */:
10058
- case 124 /* bar */:
10059
- return;
10060
- default:
10061
- scanSourceCharacter();
10062
- isPreviousTermQuantifiable = true;
10063
- break;
10064
- }
10065
- }
10066
- }
10067
- function scanPatternModifiers(currFlags) {
10068
- while (pos < end2) {
10069
- const ch = text2.charCodeAt(pos);
10070
- if (!isIdentifierPart(ch, languageVersion)) {
10071
- break;
10072
- }
10073
- const flag = characterToRegularExpressionFlag(String.fromCharCode(ch));
10074
- if (flag === void 0) {
10075
- error(Diagnostics.Unknown_regular_expression_flag, pos, 1);
10076
- } else if (currFlags & flag) {
10077
- error(Diagnostics.Duplicate_regular_expression_flag, pos, 1);
10078
- } else if (!(flag & 28 /* Modifiers */)) {
10079
- error(Diagnostics.This_regular_expression_flag_cannot_be_toggled_within_a_subpattern, pos, 1);
10080
- } else {
10081
- currFlags |= flag;
10082
- checkRegularExpressionFlagAvailable(flag, pos);
10083
- }
10084
- pos++;
10085
- }
10086
- return currFlags;
10087
- }
10088
- function scanAtomEscape() {
10089
- Debug.assertEqual(text2.charCodeAt(pos - 1), 92 /* backslash */);
10090
- switch (text2.charCodeAt(pos)) {
10091
- case 107 /* k */:
10039
+ }
10040
+ scanExpectedChar(125 /* closeBrace */);
10041
+ pos--;
10042
+ case 42 /* asterisk */:
10043
+ case 43 /* plus */:
10044
+ case 63 /* question */:
10092
10045
  pos++;
10093
- if (text2.charCodeAt(pos) === 60 /* lessThan */) {
10046
+ if (charCodeChecked(pos) === 63 /* question */) {
10094
10047
  pos++;
10095
- scanGroupName(
10096
- /*isReference*/
10097
- true
10098
- );
10099
- scanExpectedChar(62 /* greaterThan */);
10100
- } else if (unicodeMode) {
10101
- error(Diagnostics.k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets, pos - 2, 2);
10102
10048
  }
10103
- break;
10104
- case 113 /* q */:
10105
- if (unicodeSetsMode) {
10106
- pos++;
10107
- error(Diagnostics.q_is_only_available_inside_character_class, pos - 2, 2);
10108
- break;
10049
+ if (!isPreviousTermQuantifiable) {
10050
+ error(Diagnostics.There_is_nothing_available_for_repetition, start2, pos - start2);
10109
10051
  }
10110
- default:
10111
- Debug.assert(scanCharacterClassEscape() || scanDecimalEscape() || scanCharacterEscape(
10112
- /*atomEscape*/
10113
- true
10114
- ));
10052
+ isPreviousTermQuantifiable = false;
10115
10053
  break;
10116
- }
10117
- }
10118
- function scanDecimalEscape() {
10119
- Debug.assertEqual(text2.charCodeAt(pos - 1), 92 /* backslash */);
10120
- const ch = text2.charCodeAt(pos);
10121
- if (ch >= 49 /* _1 */ && ch <= 57 /* _9 */) {
10122
- const start2 = pos;
10123
- scanDigits();
10124
- decimalEscapes.push({ pos: start2, end: pos, value: +tokenValue });
10125
- return true;
10126
- }
10127
- return false;
10128
- }
10129
- function scanCharacterEscape(atomEscape) {
10130
- Debug.assertEqual(text2.charCodeAt(pos - 1), 92 /* backslash */);
10131
- let ch = text2.charCodeAt(pos);
10132
- switch (ch) {
10133
- case 99 /* c */:
10054
+ case 46 /* dot */:
10134
10055
  pos++;
10135
- ch = text2.charCodeAt(pos);
10136
- if (isASCIILetter(ch)) {
10137
- pos++;
10138
- return String.fromCharCode(ch & 31);
10139
- }
10140
- if (unicodeMode) {
10141
- error(Diagnostics.c_must_be_followed_by_an_ASCII_letter, pos - 2, 2);
10142
- } else if (atomEscape && annexB) {
10143
- pos--;
10144
- return "\\";
10056
+ isPreviousTermQuantifiable = true;
10057
+ break;
10058
+ case 91 /* openBracket */:
10059
+ pos++;
10060
+ if (unicodeSetsMode) {
10061
+ scanClassSetExpression();
10062
+ } else {
10063
+ scanClassRanges();
10145
10064
  }
10146
- return String.fromCharCode(ch);
10147
- case 94 /* caret */:
10148
- case 36 /* $ */:
10149
- case 47 /* slash */:
10150
- case 92 /* backslash */:
10151
- case 46 /* dot */:
10152
- case 42 /* asterisk */:
10153
- case 43 /* plus */:
10154
- case 63 /* question */:
10155
- case 40 /* openParen */:
10065
+ scanExpectedChar(93 /* closeBracket */);
10066
+ isPreviousTermQuantifiable = true;
10067
+ break;
10156
10068
  case 41 /* closeParen */:
10157
- case 91 /* openBracket */:
10069
+ if (isInGroup) {
10070
+ return;
10071
+ }
10158
10072
  case 93 /* closeBracket */:
10159
- case 123 /* openBrace */:
10160
10073
  case 125 /* closeBrace */:
10161
- case 124 /* bar */:
10074
+ if (isUnterminated && !isInGroup) {
10075
+ return;
10076
+ }
10077
+ if (unicodeMode || ch === 41 /* closeParen */) {
10078
+ error(Diagnostics.Unexpected_0_Did_you_mean_to_escape_it_with_backslash, pos, 1, String.fromCharCode(ch));
10079
+ }
10162
10080
  pos++;
10163
- return String.fromCharCode(ch);
10081
+ isPreviousTermQuantifiable = true;
10082
+ break;
10083
+ case 47 /* slash */:
10084
+ case 124 /* bar */:
10085
+ return;
10164
10086
  default:
10165
- if (pos >= end2) {
10166
- error(Diagnostics.Undetermined_character_escape, pos - 1, 1, ch);
10167
- return "\\";
10168
- }
10169
- pos--;
10170
- return scanEscapeSequence(
10171
- /*shouldEmitInvalidEscapeError*/
10172
- unicodeMode,
10173
- /*isRegularExpression*/
10174
- annexB ? "annex-b" : true
10175
- );
10087
+ scanSourceCharacter();
10088
+ isPreviousTermQuantifiable = true;
10089
+ break;
10176
10090
  }
10177
10091
  }
10178
- function scanGroupName(isReference) {
10179
- Debug.assertEqual(text2.charCodeAt(pos - 1), 60 /* lessThan */);
10180
- tokenStart = pos;
10181
- scanIdentifier(codePointAt(text2, pos), languageVersion);
10182
- if (pos === tokenStart) {
10183
- error(Diagnostics.Expected_a_capturing_group_name);
10184
- } else if (isReference) {
10185
- groupNameReferences.push({ pos: tokenStart, end: pos, name: tokenValue });
10186
- } else if (namedCapturingGroups.some((group2) => group2.has(tokenValue))) {
10187
- error(Diagnostics.Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other, tokenStart, pos - tokenStart);
10092
+ }
10093
+ function scanPatternModifiers(currFlags) {
10094
+ while (true) {
10095
+ const ch = charCodeChecked(pos);
10096
+ if (ch === -1 /* EOF */ || !isIdentifierPart(ch, languageVersion)) {
10097
+ break;
10098
+ }
10099
+ const flag = characterToRegularExpressionFlag(String.fromCharCode(ch));
10100
+ if (flag === void 0) {
10101
+ error(Diagnostics.Unknown_regular_expression_flag, pos, 1);
10102
+ } else if (currFlags & flag) {
10103
+ error(Diagnostics.Duplicate_regular_expression_flag, pos, 1);
10104
+ } else if (!(flag & 28 /* Modifiers */)) {
10105
+ error(Diagnostics.This_regular_expression_flag_cannot_be_toggled_within_a_subpattern, pos, 1);
10188
10106
  } else {
10189
- last(namedCapturingGroups).add(tokenValue);
10190
- groupSpecifiers.add(tokenValue);
10107
+ currFlags |= flag;
10108
+ checkRegularExpressionFlagAvailable(flag, pos);
10191
10109
  }
10110
+ pos++;
10192
10111
  }
10193
- function isClassContentExit(ch) {
10194
- return ch === 93 /* closeBracket */ || pos >= end2;
10112
+ return currFlags;
10113
+ }
10114
+ function scanAtomEscape() {
10115
+ Debug.assertEqual(charCodeUnchecked(pos - 1), 92 /* backslash */);
10116
+ switch (charCodeChecked(pos)) {
10117
+ case 107 /* k */:
10118
+ pos++;
10119
+ if (charCodeChecked(pos) === 60 /* lessThan */) {
10120
+ pos++;
10121
+ scanGroupName(
10122
+ /*isReference*/
10123
+ true
10124
+ );
10125
+ scanExpectedChar(62 /* greaterThan */);
10126
+ } else if (unicodeMode) {
10127
+ error(Diagnostics.k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets, pos - 2, 2);
10128
+ }
10129
+ break;
10130
+ case 113 /* q */:
10131
+ if (unicodeSetsMode) {
10132
+ pos++;
10133
+ error(Diagnostics.q_is_only_available_inside_character_class, pos - 2, 2);
10134
+ break;
10135
+ }
10136
+ default:
10137
+ Debug.assert(scanCharacterClassEscape() || scanDecimalEscape() || scanCharacterEscape(
10138
+ /*atomEscape*/
10139
+ true
10140
+ ));
10141
+ break;
10195
10142
  }
10196
- function scanClassRanges() {
10197
- Debug.assertEqual(text2.charCodeAt(pos - 1), 91 /* openBracket */);
10198
- if (text2.charCodeAt(pos) === 94 /* caret */) {
10143
+ }
10144
+ function scanDecimalEscape() {
10145
+ Debug.assertEqual(charCodeUnchecked(pos - 1), 92 /* backslash */);
10146
+ const ch = charCodeChecked(pos);
10147
+ if (ch >= 49 /* _1 */ && ch <= 57 /* _9 */) {
10148
+ const start2 = pos;
10149
+ scanDigits();
10150
+ decimalEscapes = append(decimalEscapes, { pos: start2, end: pos, value: +tokenValue });
10151
+ return true;
10152
+ }
10153
+ return false;
10154
+ }
10155
+ function scanCharacterEscape(atomEscape) {
10156
+ Debug.assertEqual(charCodeUnchecked(pos - 1), 92 /* backslash */);
10157
+ let ch = charCodeChecked(pos);
10158
+ switch (ch) {
10159
+ case 99 /* c */:
10160
+ pos++;
10161
+ ch = charCodeChecked(pos);
10162
+ if (isASCIILetter(ch)) {
10163
+ pos++;
10164
+ return String.fromCharCode(ch & 31);
10165
+ }
10166
+ if (unicodeMode) {
10167
+ error(Diagnostics.c_must_be_followed_by_an_ASCII_letter, pos - 2, 2);
10168
+ } else if (atomEscape && annexB) {
10169
+ pos--;
10170
+ return "\\";
10171
+ }
10172
+ return String.fromCharCode(ch);
10173
+ case 94 /* caret */:
10174
+ case 36 /* $ */:
10175
+ case 47 /* slash */:
10176
+ case 92 /* backslash */:
10177
+ case 46 /* dot */:
10178
+ case 42 /* asterisk */:
10179
+ case 43 /* plus */:
10180
+ case 63 /* question */:
10181
+ case 40 /* openParen */:
10182
+ case 41 /* closeParen */:
10183
+ case 91 /* openBracket */:
10184
+ case 93 /* closeBracket */:
10185
+ case 123 /* openBrace */:
10186
+ case 125 /* closeBrace */:
10187
+ case 124 /* bar */:
10188
+ pos++;
10189
+ return String.fromCharCode(ch);
10190
+ default:
10191
+ if (pos >= end) {
10192
+ error(Diagnostics.Undetermined_character_escape, pos - 1, 1);
10193
+ return "\\";
10194
+ }
10195
+ pos--;
10196
+ return scanEscapeSequence(
10197
+ /*shouldEmitInvalidEscapeError*/
10198
+ unicodeMode,
10199
+ /*isRegularExpression*/
10200
+ annexB ? "annex-b" : true
10201
+ );
10202
+ }
10203
+ }
10204
+ function scanGroupName(isReference) {
10205
+ Debug.assertEqual(charCodeUnchecked(pos - 1), 60 /* lessThan */);
10206
+ tokenStart = pos;
10207
+ scanIdentifier(codePointChecked(pos), languageVersion);
10208
+ if (pos === tokenStart) {
10209
+ error(Diagnostics.Expected_a_capturing_group_name);
10210
+ } else if (isReference) {
10211
+ groupNameReferences = append(groupNameReferences, { pos: tokenStart, end: pos, name: tokenValue });
10212
+ } else if ((topNamedCapturingGroupsScope == null ? void 0 : topNamedCapturingGroupsScope.has(tokenValue)) || namedCapturingGroupsScopeStack.some((group2) => group2 == null ? void 0 : group2.has(tokenValue))) {
10213
+ error(Diagnostics.Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other, tokenStart, pos - tokenStart);
10214
+ } else {
10215
+ topNamedCapturingGroupsScope ?? (topNamedCapturingGroupsScope = /* @__PURE__ */ new Set());
10216
+ topNamedCapturingGroupsScope.add(tokenValue);
10217
+ groupSpecifiers ?? (groupSpecifiers = /* @__PURE__ */ new Set());
10218
+ groupSpecifiers.add(tokenValue);
10219
+ }
10220
+ }
10221
+ function isClassContentExit(ch) {
10222
+ return ch === 93 /* closeBracket */ || ch === -1 /* EOF */ || pos >= end;
10223
+ }
10224
+ function scanClassRanges() {
10225
+ Debug.assertEqual(charCodeUnchecked(pos - 1), 91 /* openBracket */);
10226
+ if (charCodeChecked(pos) === 94 /* caret */) {
10227
+ pos++;
10228
+ }
10229
+ while (true) {
10230
+ const ch = charCodeChecked(pos);
10231
+ if (isClassContentExit(ch)) {
10232
+ return;
10233
+ }
10234
+ const minStart = pos;
10235
+ const minCharacter = scanClassAtom();
10236
+ if (charCodeChecked(pos) === 45 /* minus */) {
10199
10237
  pos++;
10238
+ const ch2 = charCodeChecked(pos);
10239
+ if (isClassContentExit(ch2)) {
10240
+ return;
10241
+ }
10242
+ if (!minCharacter && !annexB) {
10243
+ error(Diagnostics.A_character_class_range_must_not_be_bounded_by_another_character_class, minStart, pos - 1 - minStart);
10244
+ }
10245
+ const maxStart = pos;
10246
+ const maxCharacter = scanClassAtom();
10247
+ if (!maxCharacter && !annexB) {
10248
+ error(Diagnostics.A_character_class_range_must_not_be_bounded_by_another_character_class, maxStart, pos - maxStart);
10249
+ continue;
10250
+ }
10251
+ if (!minCharacter) {
10252
+ continue;
10253
+ }
10254
+ const minCharacterValue = codePointAt(minCharacter, 0);
10255
+ const maxCharacterValue = codePointAt(maxCharacter, 0);
10256
+ if (minCharacter.length === charSize(minCharacterValue) && maxCharacter.length === charSize(maxCharacterValue) && minCharacterValue > maxCharacterValue) {
10257
+ error(Diagnostics.Range_out_of_order_in_character_class, minStart, pos - minStart);
10258
+ }
10200
10259
  }
10201
- while (pos < end2) {
10202
- const ch = text2.charCodeAt(pos);
10203
- if (isClassContentExit(ch)) {
10260
+ }
10261
+ }
10262
+ function scanClassSetExpression() {
10263
+ Debug.assertEqual(charCodeUnchecked(pos - 1), 91 /* openBracket */);
10264
+ let isCharacterComplement = false;
10265
+ if (charCodeChecked(pos) === 94 /* caret */) {
10266
+ pos++;
10267
+ isCharacterComplement = true;
10268
+ }
10269
+ let expressionMayContainStrings = false;
10270
+ let ch = charCodeChecked(pos);
10271
+ if (isClassContentExit(ch)) {
10272
+ return;
10273
+ }
10274
+ let start2 = pos;
10275
+ let operand;
10276
+ switch (text.slice(pos, pos + 2)) {
10277
+ case "--":
10278
+ case "&&":
10279
+ error(Diagnostics.Expected_a_class_set_operand);
10280
+ mayContainStrings = false;
10281
+ break;
10282
+ default:
10283
+ operand = scanClassSetOperand();
10284
+ break;
10285
+ }
10286
+ switch (charCodeChecked(pos)) {
10287
+ case 45 /* minus */:
10288
+ if (charCodeChecked(pos + 1) === 45 /* minus */) {
10289
+ if (isCharacterComplement && mayContainStrings) {
10290
+ error(Diagnostics.Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_character_class, start2, pos - start2);
10291
+ }
10292
+ expressionMayContainStrings = mayContainStrings;
10293
+ scanClassSetSubExpression(3 /* ClassSubtraction */);
10294
+ mayContainStrings = !isCharacterComplement && expressionMayContainStrings;
10295
+ return;
10296
+ }
10297
+ break;
10298
+ case 38 /* ampersand */:
10299
+ if (charCodeChecked(pos + 1) === 38 /* ampersand */) {
10300
+ scanClassSetSubExpression(2 /* ClassIntersection */);
10301
+ if (isCharacterComplement && mayContainStrings) {
10302
+ error(Diagnostics.Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_character_class, start2, pos - start2);
10303
+ }
10304
+ expressionMayContainStrings = mayContainStrings;
10305
+ mayContainStrings = !isCharacterComplement && expressionMayContainStrings;
10204
10306
  return;
10307
+ } else {
10308
+ error(Diagnostics.Unexpected_0_Did_you_mean_to_escape_it_with_backslash, pos, 1, String.fromCharCode(ch));
10205
10309
  }
10206
- const minStart = pos;
10207
- const minCharacter = scanClassAtom();
10208
- if (text2.charCodeAt(pos) === 45 /* minus */) {
10310
+ break;
10311
+ default:
10312
+ if (isCharacterComplement && mayContainStrings) {
10313
+ error(Diagnostics.Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_character_class, start2, pos - start2);
10314
+ }
10315
+ expressionMayContainStrings = mayContainStrings;
10316
+ break;
10317
+ }
10318
+ while (true) {
10319
+ ch = charCodeChecked(pos);
10320
+ if (ch === -1 /* EOF */) {
10321
+ break;
10322
+ }
10323
+ switch (ch) {
10324
+ case 45 /* minus */:
10209
10325
  pos++;
10210
- const ch2 = text2.charCodeAt(pos);
10211
- if (isClassContentExit(ch2)) {
10326
+ ch = charCodeChecked(pos);
10327
+ if (isClassContentExit(ch)) {
10328
+ mayContainStrings = !isCharacterComplement && expressionMayContainStrings;
10212
10329
  return;
10213
10330
  }
10214
- if (!minCharacter && !annexB) {
10215
- error(Diagnostics.A_character_class_range_must_not_be_bounded_by_another_character_class, minStart, pos - 1 - minStart);
10216
- }
10217
- const maxStart = pos;
10218
- const maxCharacter = scanClassAtom();
10219
- if (!maxCharacter && !annexB) {
10220
- error(Diagnostics.A_character_class_range_must_not_be_bounded_by_another_character_class, maxStart, pos - maxStart);
10221
- continue;
10222
- }
10223
- if (!minCharacter) {
10331
+ if (ch === 45 /* minus */) {
10332
+ pos++;
10333
+ error(Diagnostics.Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead, pos - 2, 2);
10334
+ start2 = pos - 2;
10335
+ operand = text.slice(start2, pos);
10224
10336
  continue;
10337
+ } else {
10338
+ if (!operand) {
10339
+ error(Diagnostics.A_character_class_range_must_not_be_bounded_by_another_character_class, start2, pos - 1 - start2);
10340
+ }
10341
+ const secondStart = pos;
10342
+ const secondOperand = scanClassSetOperand();
10343
+ if (isCharacterComplement && mayContainStrings) {
10344
+ error(Diagnostics.Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_character_class, secondStart, pos - secondStart);
10345
+ }
10346
+ expressionMayContainStrings || (expressionMayContainStrings = mayContainStrings);
10347
+ if (!secondOperand) {
10348
+ error(Diagnostics.A_character_class_range_must_not_be_bounded_by_another_character_class, secondStart, pos - secondStart);
10349
+ break;
10350
+ }
10351
+ if (!operand) {
10352
+ break;
10353
+ }
10354
+ const minCharacterValue = codePointAt(operand, 0);
10355
+ const maxCharacterValue = codePointAt(secondOperand, 0);
10356
+ if (operand.length === charSize(minCharacterValue) && secondOperand.length === charSize(maxCharacterValue) && minCharacterValue > maxCharacterValue) {
10357
+ error(Diagnostics.Range_out_of_order_in_character_class, start2, pos - start2);
10358
+ }
10225
10359
  }
10226
- const minCharacterValue = codePointAt(minCharacter, 0);
10227
- const maxCharacterValue = codePointAt(maxCharacter, 0);
10228
- if (minCharacter.length === charSize(minCharacterValue) && maxCharacter.length === charSize(maxCharacterValue) && minCharacterValue > maxCharacterValue) {
10229
- error(Diagnostics.Range_out_of_order_in_character_class, minStart, pos - minStart);
10360
+ break;
10361
+ case 38 /* ampersand */:
10362
+ start2 = pos;
10363
+ pos++;
10364
+ if (charCodeChecked(pos) === 38 /* ampersand */) {
10365
+ pos++;
10366
+ error(Diagnostics.Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead, pos - 2, 2);
10367
+ if (charCodeChecked(pos) === 38 /* ampersand */) {
10368
+ error(Diagnostics.Unexpected_0_Did_you_mean_to_escape_it_with_backslash, pos, 1, String.fromCharCode(ch));
10369
+ pos++;
10370
+ }
10371
+ } else {
10372
+ error(Diagnostics.Unexpected_0_Did_you_mean_to_escape_it_with_backslash, pos - 1, 1, String.fromCharCode(ch));
10230
10373
  }
10231
- }
10232
- }
10233
- }
10234
- function scanClassSetExpression() {
10235
- Debug.assertEqual(text2.charCodeAt(pos - 1), 91 /* openBracket */);
10236
- let isCharacterComplement = false;
10237
- if (text2.charCodeAt(pos) === 94 /* caret */) {
10238
- pos++;
10239
- isCharacterComplement = true;
10374
+ operand = text.slice(start2, pos);
10375
+ continue;
10240
10376
  }
10241
- let expressionMayContainStrings = false;
10242
- let ch = text2.charCodeAt(pos);
10243
- if (isClassContentExit(ch)) {
10244
- return;
10377
+ if (isClassContentExit(charCodeChecked(pos))) {
10378
+ break;
10245
10379
  }
10246
- let start2 = pos;
10247
- let oprand;
10248
- switch (text2.slice(pos, pos + 2)) {
10380
+ start2 = pos;
10381
+ switch (text.slice(pos, pos + 2)) {
10249
10382
  case "--":
10250
10383
  case "&&":
10251
- error(Diagnostics.Expected_a_class_set_oprand);
10252
- mayContainStrings = false;
10384
+ error(Diagnostics.Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead, pos, 2);
10385
+ pos += 2;
10386
+ operand = text.slice(start2, pos);
10253
10387
  break;
10254
10388
  default:
10255
- oprand = scanClassSetOprand();
10389
+ operand = scanClassSetOperand();
10256
10390
  break;
10257
10391
  }
10258
- switch (text2.charCodeAt(pos)) {
10392
+ }
10393
+ mayContainStrings = !isCharacterComplement && expressionMayContainStrings;
10394
+ }
10395
+ function scanClassSetSubExpression(expressionType) {
10396
+ let expressionMayContainStrings = mayContainStrings;
10397
+ while (true) {
10398
+ let ch = charCodeChecked(pos);
10399
+ if (isClassContentExit(ch)) {
10400
+ break;
10401
+ }
10402
+ switch (ch) {
10259
10403
  case 45 /* minus */:
10260
- if (text2.charCodeAt(pos + 1) === 45 /* minus */) {
10261
- if (isCharacterComplement && mayContainStrings) {
10262
- error(Diagnostics.Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_character_class, start2, pos - start2);
10404
+ pos++;
10405
+ if (charCodeChecked(pos) === 45 /* minus */) {
10406
+ pos++;
10407
+ if (expressionType !== 3 /* ClassSubtraction */) {
10408
+ error(Diagnostics.Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead, pos - 2, 2);
10263
10409
  }
10264
- expressionMayContainStrings = mayContainStrings;
10265
- scanClassSetSubExpression(3 /* ClassSubtraction */);
10266
- mayContainStrings = !isCharacterComplement && expressionMayContainStrings;
10267
- return;
10410
+ } else {
10411
+ error(Diagnostics.Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead, pos - 1, 1);
10268
10412
  }
10269
10413
  break;
10270
10414
  case 38 /* ampersand */:
10271
- if (text2.charCodeAt(pos + 1) === 38 /* ampersand */) {
10272
- scanClassSetSubExpression(2 /* ClassIntersection */);
10273
- if (isCharacterComplement && mayContainStrings) {
10274
- error(Diagnostics.Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_character_class, start2, pos - start2);
10415
+ pos++;
10416
+ if (charCodeChecked(pos) === 38 /* ampersand */) {
10417
+ pos++;
10418
+ if (expressionType !== 2 /* ClassIntersection */) {
10419
+ error(Diagnostics.Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead, pos - 2, 2);
10420
+ }
10421
+ if (charCodeChecked(pos) === 38 /* ampersand */) {
10422
+ error(Diagnostics.Unexpected_0_Did_you_mean_to_escape_it_with_backslash, pos, 1, String.fromCharCode(ch));
10423
+ pos++;
10275
10424
  }
10276
- expressionMayContainStrings = mayContainStrings;
10277
- mayContainStrings = !isCharacterComplement && expressionMayContainStrings;
10278
- return;
10279
10425
  } else {
10280
- error(Diagnostics.Unexpected_0_Did_you_mean_to_escape_it_with_backslash, pos, 1, String.fromCharCode(ch));
10426
+ error(Diagnostics.Unexpected_0_Did_you_mean_to_escape_it_with_backslash, pos - 1, 1, String.fromCharCode(ch));
10281
10427
  }
10282
10428
  break;
10283
10429
  default:
10284
- if (isCharacterComplement && mayContainStrings) {
10285
- error(Diagnostics.Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_character_class, start2, pos - start2);
10430
+ switch (expressionType) {
10431
+ case 3 /* ClassSubtraction */:
10432
+ error(Diagnostics._0_expected, pos, 0, "--");
10433
+ break;
10434
+ case 2 /* ClassIntersection */:
10435
+ error(Diagnostics._0_expected, pos, 0, "&&");
10436
+ break;
10437
+ default:
10438
+ break;
10286
10439
  }
10287
- expressionMayContainStrings = mayContainStrings;
10288
10440
  break;
10289
10441
  }
10290
- while (pos < end2) {
10291
- ch = text2.charCodeAt(pos);
10292
- switch (ch) {
10293
- case 45 /* minus */:
10294
- pos++;
10295
- ch = text2.charCodeAt(pos);
10296
- if (isClassContentExit(ch)) {
10297
- mayContainStrings = !isCharacterComplement && expressionMayContainStrings;
10298
- return;
10299
- }
10300
- if (ch === 45 /* minus */) {
10301
- pos++;
10302
- error(Diagnostics.Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead, pos - 2, 2);
10303
- start2 = pos - 2;
10304
- oprand = text2.slice(start2, pos);
10305
- continue;
10306
- } else {
10307
- if (!oprand) {
10308
- error(Diagnostics.A_character_class_range_must_not_be_bounded_by_another_character_class, start2, pos - 1 - start2);
10309
- }
10310
- const secondStart = pos;
10311
- const secondOprand = scanClassSetOprand();
10312
- if (isCharacterComplement && mayContainStrings) {
10313
- error(Diagnostics.Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_character_class, secondStart, pos - secondStart);
10314
- }
10315
- expressionMayContainStrings || (expressionMayContainStrings = mayContainStrings);
10316
- if (!secondOprand) {
10317
- error(Diagnostics.A_character_class_range_must_not_be_bounded_by_another_character_class, secondStart, pos - secondStart);
10318
- break;
10319
- }
10320
- if (!oprand) {
10321
- break;
10322
- }
10323
- const minCharacterValue = codePointAt(oprand, 0);
10324
- const maxCharacterValue = codePointAt(secondOprand, 0);
10325
- if (oprand.length === charSize(minCharacterValue) && secondOprand.length === charSize(maxCharacterValue) && minCharacterValue > maxCharacterValue) {
10326
- error(Diagnostics.Range_out_of_order_in_character_class, start2, pos - start2);
10327
- }
10328
- }
10329
- break;
10330
- case 38 /* ampersand */:
10331
- start2 = pos;
10332
- pos++;
10333
- if (text2.charCodeAt(pos) === 38 /* ampersand */) {
10334
- pos++;
10335
- error(Diagnostics.Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead, pos - 2, 2);
10336
- if (text2.charCodeAt(pos) === 38 /* ampersand */) {
10337
- error(Diagnostics.Unexpected_0_Did_you_mean_to_escape_it_with_backslash, pos, 1, String.fromCharCode(ch));
10338
- pos++;
10339
- }
10340
- } else {
10341
- error(Diagnostics.Unexpected_0_Did_you_mean_to_escape_it_with_backslash, pos - 1, 1, String.fromCharCode(ch));
10342
- }
10343
- oprand = text2.slice(start2, pos);
10344
- continue;
10345
- }
10346
- if (isClassContentExit(text2.charCodeAt(pos))) {
10347
- break;
10348
- }
10349
- start2 = pos;
10350
- switch (text2.slice(pos, pos + 2)) {
10351
- case "--":
10352
- case "&&":
10353
- error(Diagnostics.Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead, pos, 2);
10354
- pos += 2;
10355
- oprand = text2.slice(start2, pos);
10356
- break;
10357
- default:
10358
- oprand = scanClassSetOprand();
10359
- break;
10360
- }
10442
+ ch = charCodeChecked(pos);
10443
+ if (isClassContentExit(ch)) {
10444
+ error(Diagnostics.Expected_a_class_set_operand);
10445
+ break;
10361
10446
  }
10362
- mayContainStrings = !isCharacterComplement && expressionMayContainStrings;
10447
+ scanClassSetOperand();
10448
+ expressionMayContainStrings && (expressionMayContainStrings = mayContainStrings);
10363
10449
  }
10364
- function scanClassSetSubExpression(expressionType) {
10365
- let expressionMayContainStrings = mayContainStrings;
10366
- while (pos < end2) {
10367
- let ch = text2.charCodeAt(pos);
10368
- if (isClassContentExit(ch)) {
10369
- break;
10370
- }
10371
- switch (ch) {
10372
- case 45 /* minus */:
10373
- pos++;
10374
- if (text2.charCodeAt(pos) === 45 /* minus */) {
10375
- pos++;
10376
- if (expressionType !== 3 /* ClassSubtraction */) {
10377
- error(Diagnostics.Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead, pos - 2, 2);
10378
- }
10379
- } else {
10380
- error(Diagnostics.Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead, pos - 1, 1);
10381
- }
10382
- break;
10383
- case 38 /* ampersand */:
10450
+ mayContainStrings = expressionMayContainStrings;
10451
+ }
10452
+ function scanClassSetOperand() {
10453
+ mayContainStrings = false;
10454
+ switch (charCodeChecked(pos)) {
10455
+ case -1 /* EOF */:
10456
+ return "";
10457
+ case 91 /* openBracket */:
10458
+ pos++;
10459
+ scanClassSetExpression();
10460
+ scanExpectedChar(93 /* closeBracket */);
10461
+ return "";
10462
+ case 92 /* backslash */:
10463
+ pos++;
10464
+ if (scanCharacterClassEscape()) {
10465
+ return "";
10466
+ } else if (charCodeChecked(pos) === 113 /* q */) {
10467
+ pos++;
10468
+ if (charCodeChecked(pos) === 123 /* openBrace */) {
10384
10469
  pos++;
10385
- if (text2.charCodeAt(pos) === 38 /* ampersand */) {
10386
- pos++;
10387
- if (expressionType !== 2 /* ClassIntersection */) {
10388
- error(Diagnostics.Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead, pos - 2, 2);
10389
- }
10390
- if (text2.charCodeAt(pos) === 38 /* ampersand */) {
10391
- error(Diagnostics.Unexpected_0_Did_you_mean_to_escape_it_with_backslash, pos, 1, String.fromCharCode(ch));
10392
- pos++;
10393
- }
10394
- } else {
10395
- error(Diagnostics.Unexpected_0_Did_you_mean_to_escape_it_with_backslash, pos - 1, 1, String.fromCharCode(ch));
10396
- }
10397
- break;
10398
- default:
10399
- switch (expressionType) {
10400
- case 3 /* ClassSubtraction */:
10401
- error(Diagnostics._0_expected, pos, 0, "--");
10402
- break;
10403
- case 2 /* ClassIntersection */:
10404
- error(Diagnostics._0_expected, pos, 0, "&&");
10405
- break;
10406
- default:
10407
- break;
10408
- }
10409
- break;
10470
+ scanClassStringDisjunctionContents();
10471
+ scanExpectedChar(125 /* closeBrace */);
10472
+ return "";
10473
+ } else {
10474
+ error(Diagnostics.q_must_be_followed_by_string_alternatives_enclosed_in_braces, pos - 2, 2);
10475
+ return "q";
10476
+ }
10410
10477
  }
10411
- ch = text2.charCodeAt(pos);
10412
- if (isClassContentExit(ch)) {
10413
- error(Diagnostics.Expected_a_class_set_oprand);
10478
+ pos--;
10479
+ default:
10480
+ return scanClassSetCharacter();
10481
+ }
10482
+ }
10483
+ function scanClassStringDisjunctionContents() {
10484
+ Debug.assertEqual(charCodeUnchecked(pos - 1), 123 /* openBrace */);
10485
+ let characterCount = 0;
10486
+ while (true) {
10487
+ const ch = charCodeChecked(pos);
10488
+ switch (ch) {
10489
+ case -1 /* EOF */:
10490
+ return;
10491
+ case 125 /* closeBrace */:
10492
+ if (characterCount !== 1) {
10493
+ mayContainStrings = true;
10494
+ }
10495
+ return;
10496
+ case 124 /* bar */:
10497
+ if (characterCount !== 1) {
10498
+ mayContainStrings = true;
10499
+ }
10500
+ pos++;
10501
+ start = pos;
10502
+ characterCount = 0;
10503
+ break;
10504
+ default:
10505
+ scanClassSetCharacter();
10506
+ characterCount++;
10414
10507
  break;
10415
- }
10416
- scanClassSetOprand();
10417
- expressionMayContainStrings && (expressionMayContainStrings = mayContainStrings);
10418
10508
  }
10419
- mayContainStrings = expressionMayContainStrings;
10420
10509
  }
10421
- function scanClassSetOprand() {
10422
- mayContainStrings = false;
10423
- switch (text2.charCodeAt(pos)) {
10424
- case 91 /* openBracket */:
10510
+ }
10511
+ function scanClassSetCharacter() {
10512
+ const ch = charCodeChecked(pos);
10513
+ if (ch === -1 /* EOF */) {
10514
+ return "";
10515
+ }
10516
+ if (ch === 92 /* backslash */) {
10517
+ pos++;
10518
+ const ch2 = charCodeChecked(pos);
10519
+ switch (ch2) {
10520
+ case 98 /* b */:
10425
10521
  pos++;
10426
- scanClassSetExpression();
10427
- scanExpectedChar(93 /* closeBracket */);
10428
- return "";
10429
- case 92 /* backslash */:
10522
+ return "\b";
10523
+ case 38 /* ampersand */:
10524
+ case 45 /* minus */:
10525
+ case 33 /* exclamation */:
10526
+ case 35 /* hash */:
10527
+ case 37 /* percent */:
10528
+ case 44 /* comma */:
10529
+ case 58 /* colon */:
10530
+ case 59 /* semicolon */:
10531
+ case 60 /* lessThan */:
10532
+ case 61 /* equals */:
10533
+ case 62 /* greaterThan */:
10534
+ case 64 /* at */:
10535
+ case 96 /* backtick */:
10536
+ case 126 /* tilde */:
10430
10537
  pos++;
10431
- if (scanCharacterClassEscape()) {
10432
- return "";
10433
- } else if (text2.charCodeAt(pos) === 113 /* q */) {
10434
- pos++;
10435
- if (text2.charCodeAt(pos) === 123 /* openBrace */) {
10436
- pos++;
10437
- scanClassStringDisjunctionContents();
10438
- scanExpectedChar(125 /* closeBrace */);
10439
- return "";
10440
- } else {
10441
- error(Diagnostics.q_must_be_followed_by_string_alternatives_enclosed_in_braces, pos - 2, 2);
10442
- return "q";
10443
- }
10444
- }
10445
- pos--;
10538
+ return String.fromCharCode(ch2);
10446
10539
  default:
10447
- return scanClassSetCharacter();
10448
- }
10449
- }
10450
- function scanClassStringDisjunctionContents() {
10451
- Debug.assertEqual(text2.charCodeAt(pos - 1), 123 /* openBrace */);
10452
- let characterCount = 0;
10453
- while (pos < end2) {
10454
- const ch = text2.charCodeAt(pos);
10455
- switch (ch) {
10456
- case 125 /* closeBrace */:
10457
- if (characterCount !== 1) {
10458
- mayContainStrings = true;
10459
- }
10460
- return;
10461
- case 124 /* bar */:
10462
- if (characterCount !== 1) {
10463
- mayContainStrings = true;
10464
- }
10465
- pos++;
10466
- start = pos;
10467
- characterCount = 0;
10468
- break;
10469
- default:
10470
- scanClassSetCharacter();
10471
- characterCount++;
10472
- break;
10473
- }
10540
+ return scanCharacterEscape(
10541
+ /*atomEscape*/
10542
+ false
10543
+ );
10544
+ }
10545
+ } else if (ch === charCodeChecked(pos + 1)) {
10546
+ switch (ch) {
10547
+ case 38 /* ampersand */:
10548
+ case 33 /* exclamation */:
10549
+ case 35 /* hash */:
10550
+ case 37 /* percent */:
10551
+ case 42 /* asterisk */:
10552
+ case 43 /* plus */:
10553
+ case 44 /* comma */:
10554
+ case 46 /* dot */:
10555
+ case 58 /* colon */:
10556
+ case 59 /* semicolon */:
10557
+ case 60 /* lessThan */:
10558
+ case 61 /* equals */:
10559
+ case 62 /* greaterThan */:
10560
+ case 63 /* question */:
10561
+ case 64 /* at */:
10562
+ case 96 /* backtick */:
10563
+ case 126 /* tilde */:
10564
+ error(Diagnostics.A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backslash, pos, 2);
10565
+ pos += 2;
10566
+ return text.substring(pos - 2, pos);
10474
10567
  }
10475
10568
  }
10476
- function scanClassSetCharacter() {
10477
- const ch = text2.charCodeAt(pos);
10478
- if (ch === 92 /* backslash */) {
10569
+ switch (ch) {
10570
+ case 47 /* slash */:
10571
+ case 40 /* openParen */:
10572
+ case 41 /* closeParen */:
10573
+ case 91 /* openBracket */:
10574
+ case 93 /* closeBracket */:
10575
+ case 123 /* openBrace */:
10576
+ case 125 /* closeBrace */:
10577
+ case 45 /* minus */:
10578
+ case 124 /* bar */:
10579
+ error(Diagnostics.Unexpected_0_Did_you_mean_to_escape_it_with_backslash, pos, 1, String.fromCharCode(ch));
10479
10580
  pos++;
10480
- const ch2 = text2.charCodeAt(pos);
10481
- switch (ch2) {
10482
- case 98 /* b */:
10483
- pos++;
10484
- return "\b";
10485
- case 38 /* ampersand */:
10486
- case 45 /* minus */:
10487
- case 33 /* exclamation */:
10488
- case 35 /* hash */:
10489
- case 37 /* percent */:
10490
- case 44 /* comma */:
10491
- case 58 /* colon */:
10492
- case 59 /* semicolon */:
10493
- case 60 /* lessThan */:
10494
- case 61 /* equals */:
10495
- case 62 /* greaterThan */:
10496
- case 64 /* at */:
10497
- case 96 /* backtick */:
10498
- case 126 /* tilde */:
10499
- pos++;
10500
- return String.fromCharCode(ch2);
10501
- default:
10502
- return scanCharacterEscape(
10503
- /*atomEscape*/
10504
- false
10505
- );
10506
- }
10507
- } else if (ch === text2.charCodeAt(pos + 1)) {
10508
- switch (ch) {
10509
- case 38 /* ampersand */:
10510
- case 33 /* exclamation */:
10511
- case 35 /* hash */:
10512
- case 37 /* percent */:
10513
- case 42 /* asterisk */:
10514
- case 43 /* plus */:
10515
- case 44 /* comma */:
10516
- case 46 /* dot */:
10517
- case 58 /* colon */:
10518
- case 59 /* semicolon */:
10519
- case 60 /* lessThan */:
10520
- case 61 /* equals */:
10521
- case 62 /* greaterThan */:
10522
- case 63 /* question */:
10523
- case 64 /* at */:
10524
- case 96 /* backtick */:
10525
- case 126 /* tilde */:
10526
- error(Diagnostics.A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backslash, pos, 2);
10527
- pos += 2;
10528
- return text2.substring(pos - 2, pos);
10529
- }
10530
- }
10581
+ return String.fromCharCode(ch);
10582
+ }
10583
+ return scanSourceCharacter();
10584
+ }
10585
+ function scanClassAtom() {
10586
+ if (charCodeChecked(pos) === 92 /* backslash */) {
10587
+ pos++;
10588
+ const ch = charCodeChecked(pos);
10531
10589
  switch (ch) {
10532
- case 47 /* slash */:
10533
- case 40 /* openParen */:
10534
- case 41 /* closeParen */:
10535
- case 91 /* openBracket */:
10536
- case 93 /* closeBracket */:
10537
- case 123 /* openBrace */:
10538
- case 125 /* closeBrace */:
10590
+ case 98 /* b */:
10591
+ pos++;
10592
+ return "\b";
10539
10593
  case 45 /* minus */:
10540
- case 124 /* bar */:
10541
- error(Diagnostics.Unexpected_0_Did_you_mean_to_escape_it_with_backslash, pos, 1, String.fromCharCode(ch));
10542
10594
  pos++;
10543
10595
  return String.fromCharCode(ch);
10596
+ default:
10597
+ if (scanCharacterClassEscape()) {
10598
+ return "";
10599
+ }
10600
+ return scanCharacterEscape(
10601
+ /*atomEscape*/
10602
+ false
10603
+ );
10544
10604
  }
10605
+ } else {
10545
10606
  return scanSourceCharacter();
10546
10607
  }
10547
- function scanClassAtom() {
10548
- if (text2.charCodeAt(pos) === 92 /* backslash */) {
10608
+ }
10609
+ function scanCharacterClassEscape() {
10610
+ Debug.assertEqual(charCodeUnchecked(pos - 1), 92 /* backslash */);
10611
+ let isCharacterComplement = false;
10612
+ const start2 = pos - 1;
10613
+ const ch = charCodeChecked(pos);
10614
+ switch (ch) {
10615
+ case 100 /* d */:
10616
+ case 68 /* D */:
10617
+ case 115 /* s */:
10618
+ case 83 /* S */:
10619
+ case 119 /* w */:
10620
+ case 87 /* W */:
10549
10621
  pos++;
10550
- const ch = text2.charCodeAt(pos);
10551
- switch (ch) {
10552
- case 98 /* b */:
10553
- pos++;
10554
- return "\b";
10555
- case 45 /* minus */:
10556
- pos++;
10557
- return String.fromCharCode(ch);
10558
- default:
10559
- if (scanCharacterClassEscape()) {
10560
- return "";
10561
- }
10562
- return scanCharacterEscape(
10563
- /*atomEscape*/
10564
- false
10565
- );
10566
- }
10567
- } else {
10568
- return scanSourceCharacter();
10569
- }
10570
- }
10571
- function scanCharacterClassEscape() {
10572
- Debug.assertEqual(text2.charCodeAt(pos - 1), 92 /* backslash */);
10573
- let isCharacterComplement = false;
10574
- const start2 = pos - 1;
10575
- const ch = text2.charCodeAt(pos);
10576
- switch (ch) {
10577
- case 100 /* d */:
10578
- case 68 /* D */:
10579
- case 115 /* s */:
10580
- case 83 /* S */:
10581
- case 119 /* w */:
10582
- case 87 /* W */:
10583
- pos++;
10584
- return true;
10585
- case 80 /* P */:
10586
- isCharacterComplement = true;
10587
- case 112 /* p */:
10622
+ return true;
10623
+ case 80 /* P */:
10624
+ isCharacterComplement = true;
10625
+ case 112 /* p */:
10626
+ pos++;
10627
+ if (charCodeChecked(pos) === 123 /* openBrace */) {
10588
10628
  pos++;
10589
- if (text2.charCodeAt(pos) === 123 /* openBrace */) {
10629
+ const propertyNameOrValueStart = pos;
10630
+ const propertyNameOrValue = scanWordCharacters();
10631
+ if (charCodeChecked(pos) === 61 /* equals */) {
10632
+ const propertyName = nonBinaryUnicodeProperties.get(propertyNameOrValue);
10633
+ if (pos === propertyNameOrValueStart) {
10634
+ error(Diagnostics.Expected_a_Unicode_property_name);
10635
+ } else if (propertyName === void 0) {
10636
+ error(Diagnostics.Unknown_Unicode_property_name, propertyNameOrValueStart, pos - propertyNameOrValueStart);
10637
+ const suggestion = getSpellingSuggestion(propertyNameOrValue, nonBinaryUnicodeProperties.keys(), identity);
10638
+ if (suggestion) {
10639
+ error(Diagnostics.Did_you_mean_0, propertyNameOrValueStart, pos - propertyNameOrValueStart, suggestion);
10640
+ }
10641
+ }
10590
10642
  pos++;
10591
- const propertyNameOrValueStart = pos;
10592
- const propertyNameOrValue = scanWordCharacters();
10593
- if (text2.charCodeAt(pos) === 61 /* equals */) {
10594
- const propertyName = nonBinaryUnicodeProperties.get(propertyNameOrValue);
10595
- if (pos === propertyNameOrValueStart) {
10596
- error(Diagnostics.Expected_a_Unicode_property_name);
10597
- } else if (propertyName === void 0) {
10598
- error(Diagnostics.Unknown_Unicode_property_name, propertyNameOrValueStart, pos - propertyNameOrValueStart);
10599
- const suggestion = getSpellingSuggestion(propertyNameOrValue, nonBinaryUnicodeProperties.keys(), identity);
10600
- if (suggestion) {
10601
- error(Diagnostics.Did_you_mean_0, propertyNameOrValueStart, pos - propertyNameOrValueStart, suggestion);
10602
- }
10643
+ const propertyValueStart = pos;
10644
+ const propertyValue = scanWordCharacters();
10645
+ if (pos === propertyValueStart) {
10646
+ error(Diagnostics.Expected_a_Unicode_property_value);
10647
+ } else if (propertyName !== void 0 && !valuesOfNonBinaryUnicodeProperties[propertyName].has(propertyValue)) {
10648
+ error(Diagnostics.Unknown_Unicode_property_value, propertyValueStart, pos - propertyValueStart);
10649
+ const suggestion = getSpellingSuggestion(propertyValue, valuesOfNonBinaryUnicodeProperties[propertyName], identity);
10650
+ if (suggestion) {
10651
+ error(Diagnostics.Did_you_mean_0, propertyValueStart, pos - propertyValueStart, suggestion);
10603
10652
  }
10604
- pos++;
10605
- const propertyValueStart = pos;
10606
- const propertyValue = scanWordCharacters();
10607
- if (pos === propertyValueStart) {
10608
- error(Diagnostics.Expected_a_Unicode_property_value);
10609
- } else if (propertyName !== void 0 && !valuesOfNonBinaryUnicodeProperties[propertyName].has(propertyValue)) {
10610
- error(Diagnostics.Unknown_Unicode_property_value, propertyValueStart, pos - propertyValueStart);
10611
- const suggestion = getSpellingSuggestion(propertyValue, valuesOfNonBinaryUnicodeProperties[propertyName], identity);
10612
- if (suggestion) {
10613
- error(Diagnostics.Did_you_mean_0, propertyValueStart, pos - propertyValueStart, suggestion);
10614
- }
10653
+ }
10654
+ } else {
10655
+ if (pos === propertyNameOrValueStart) {
10656
+ error(Diagnostics.Expected_a_Unicode_property_name_or_value);
10657
+ } else if (binaryUnicodePropertiesOfStrings.has(propertyNameOrValue)) {
10658
+ if (!unicodeSetsMode) {
10659
+ error(Diagnostics.Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_the_Unicode_Sets_v_flag_is_set, propertyNameOrValueStart, pos - propertyNameOrValueStart);
10660
+ } else if (isCharacterComplement) {
10661
+ error(Diagnostics.Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_character_class, propertyNameOrValueStart, pos - propertyNameOrValueStart);
10662
+ } else {
10663
+ mayContainStrings = true;
10615
10664
  }
10616
- } else {
10617
- if (pos === propertyNameOrValueStart) {
10618
- error(Diagnostics.Expected_a_Unicode_property_name_or_value);
10619
- } else if (binaryUnicodePropertiesOfStrings.has(propertyNameOrValue)) {
10620
- if (!unicodeSetsMode) {
10621
- error(Diagnostics.Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_the_Unicode_Sets_v_flag_is_set, propertyNameOrValueStart, pos - propertyNameOrValueStart);
10622
- } else if (isCharacterComplement) {
10623
- error(Diagnostics.Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_character_class, propertyNameOrValueStart, pos - propertyNameOrValueStart);
10624
- } else {
10625
- mayContainStrings = true;
10626
- }
10627
- } else if (!valuesOfNonBinaryUnicodeProperties.General_Category.has(propertyNameOrValue) && !binaryUnicodeProperties.has(propertyNameOrValue)) {
10628
- error(Diagnostics.Unknown_Unicode_property_name_or_value, propertyNameOrValueStart, pos - propertyNameOrValueStart);
10629
- const suggestion = getSpellingSuggestion(propertyNameOrValue, [...valuesOfNonBinaryUnicodeProperties.General_Category, ...binaryUnicodeProperties, ...binaryUnicodePropertiesOfStrings], identity);
10630
- if (suggestion) {
10631
- error(Diagnostics.Did_you_mean_0, propertyNameOrValueStart, pos - propertyNameOrValueStart, suggestion);
10632
- }
10665
+ } else if (!valuesOfNonBinaryUnicodeProperties.General_Category.has(propertyNameOrValue) && !binaryUnicodeProperties.has(propertyNameOrValue)) {
10666
+ error(Diagnostics.Unknown_Unicode_property_name_or_value, propertyNameOrValueStart, pos - propertyNameOrValueStart);
10667
+ const suggestion = getSpellingSuggestion(propertyNameOrValue, [...valuesOfNonBinaryUnicodeProperties.General_Category, ...binaryUnicodeProperties, ...binaryUnicodePropertiesOfStrings], identity);
10668
+ if (suggestion) {
10669
+ error(Diagnostics.Did_you_mean_0, propertyNameOrValueStart, pos - propertyNameOrValueStart, suggestion);
10633
10670
  }
10634
10671
  }
10635
- scanExpectedChar(125 /* closeBrace */);
10636
- if (!unicodeMode) {
10637
- error(Diagnostics.Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_set, start2, pos - start2);
10638
- }
10639
- } else if (unicodeMode) {
10640
- error(Diagnostics._0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces, pos - 2, 2, String.fromCharCode(ch));
10641
10672
  }
10642
- return true;
10643
- }
10644
- return false;
10645
- }
10646
- function scanWordCharacters() {
10647
- let value = "";
10648
- while (pos < end2) {
10649
- const ch = text2.charCodeAt(pos);
10650
- if (!isWordCharacter(ch)) {
10651
- break;
10673
+ scanExpectedChar(125 /* closeBrace */);
10674
+ if (!unicodeMode) {
10675
+ error(Diagnostics.Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_set, start2, pos - start2);
10676
+ }
10677
+ } else if (unicodeMode) {
10678
+ error(Diagnostics._0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces, pos - 2, 2, String.fromCharCode(ch));
10652
10679
  }
10653
- value += String.fromCharCode(ch);
10654
- pos++;
10680
+ return true;
10681
+ }
10682
+ return false;
10683
+ }
10684
+ function scanWordCharacters() {
10685
+ let value = "";
10686
+ while (true) {
10687
+ const ch = charCodeChecked(pos);
10688
+ if (ch === -1 /* EOF */ || !isWordCharacter(ch)) {
10689
+ break;
10655
10690
  }
10656
- return value;
10691
+ value += String.fromCharCode(ch);
10692
+ pos++;
10693
+ }
10694
+ return value;
10695
+ }
10696
+ function scanSourceCharacter() {
10697
+ const size = unicodeMode ? charSize(charCodeChecked(pos)) : 1;
10698
+ pos += size;
10699
+ return size > 0 ? text.substring(pos - size, pos) : "";
10700
+ }
10701
+ function scanExpectedChar(ch) {
10702
+ if (charCodeChecked(pos) === ch) {
10703
+ pos++;
10704
+ } else {
10705
+ error(Diagnostics._0_expected, pos, 0, String.fromCharCode(ch));
10657
10706
  }
10658
- function scanSourceCharacter() {
10659
- const size = unicodeMode ? charSize(codePointAt(text2, pos)) : 1;
10660
- pos += size;
10661
- return text2.substring(pos - size, pos);
10707
+ }
10708
+ scanDisjunction(
10709
+ /*isInGroup*/
10710
+ false
10711
+ );
10712
+ forEach(groupNameReferences, (reference) => {
10713
+ if (!(groupSpecifiers == null ? void 0 : groupSpecifiers.has(reference.name))) {
10714
+ error(Diagnostics.There_is_no_capturing_group_named_0_in_this_regular_expression, reference.pos, reference.end - reference.pos, reference.name);
10662
10715
  }
10663
- function scanExpectedChar(ch) {
10664
- if (text2.charCodeAt(pos) === ch) {
10665
- pos++;
10716
+ });
10717
+ forEach(decimalEscapes, (escape) => {
10718
+ if (!annexB && escape.value > numberOfCapturingGroups) {
10719
+ if (numberOfCapturingGroups) {
10720
+ error(Diagnostics.This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_regular_expression, escape.pos, escape.end - escape.pos, numberOfCapturingGroups);
10666
10721
  } else {
10667
- error(Diagnostics._0_expected, pos, 0, String.fromCharCode(ch));
10722
+ error(Diagnostics.This_backreference_is_invalid_because_the_containing_regular_expression_contains_no_capturing_groups, escape.pos, escape.end - escape.pos);
10668
10723
  }
10669
10724
  }
10670
- scanDisjunction(
10671
- /*isInGroup*/
10672
- false
10673
- );
10674
- forEach(groupNameReferences, (reference) => {
10675
- if (!groupSpecifiers.has(reference.name)) {
10676
- error(Diagnostics.There_is_no_capturing_group_named_0_in_this_regular_expression, reference.pos, reference.end - reference.pos, reference.name);
10677
- }
10678
- });
10679
- forEach(decimalEscapes, (escape) => {
10680
- if (!annexB && escape.value > numberOfCapturingGroups) {
10681
- if (numberOfCapturingGroups) {
10682
- error(Diagnostics.This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_regular_expression, escape.pos, escape.end - escape.pos, numberOfCapturingGroups);
10683
- } else {
10684
- error(Diagnostics.This_backreference_is_invalid_because_the_containing_regular_expression_contains_no_capturing_groups, escape.pos, escape.end - escape.pos);
10685
- }
10686
- }
10687
- });
10688
- }
10689
- function checkRegularExpressionFlagAvailable(flag, pos2) {
10690
- const availableFrom = regExpFlagToFirstAvailableLanguageVersion.get(flag);
10691
- if (availableFrom && languageVersion < availableFrom) {
10692
- error(Diagnostics.This_regular_expression_flag_is_only_available_when_targeting_0_or_later, pos2, 1, getNameOfScriptTarget(availableFrom));
10693
- }
10725
+ });
10726
+ }
10727
+ function checkRegularExpressionFlagAvailable(flag, pos2) {
10728
+ const availableFrom = regExpFlagToFirstAvailableLanguageVersion.get(flag);
10729
+ if (availableFrom && languageVersion < availableFrom) {
10730
+ error(Diagnostics.This_regular_expression_flag_is_only_available_when_targeting_0_or_later, pos2, 1, getNameOfScriptTarget(availableFrom));
10694
10731
  }
10695
10732
  }
10696
10733
  function appendIfCommentDirective(commentDirectives2, text2, commentDirectiveRegEx, lineStart) {
@@ -10758,9 +10795,9 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
10758
10795
  if (pos >= end) {
10759
10796
  return token = 1 /* EndOfFileToken */;
10760
10797
  }
10761
- let char = text.charCodeAt(pos);
10798
+ let char = charCodeUnchecked(pos);
10762
10799
  if (char === 60 /* lessThan */) {
10763
- if (text.charCodeAt(pos + 1) === 47 /* slash */) {
10800
+ if (charCodeUnchecked(pos + 1) === 47 /* slash */) {
10764
10801
  pos += 2;
10765
10802
  return token = 31 /* LessThanSlashToken */;
10766
10803
  }
@@ -10773,7 +10810,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
10773
10810
  }
10774
10811
  let firstNonWhitespace = 0;
10775
10812
  while (pos < end) {
10776
- char = text.charCodeAt(pos);
10813
+ char = charCodeUnchecked(pos);
10777
10814
  if (char === 123 /* openBrace */) {
10778
10815
  break;
10779
10816
  }
@@ -10805,7 +10842,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
10805
10842
  function scanJsxIdentifier() {
10806
10843
  if (tokenIsIdentifierOrKeyword(token)) {
10807
10844
  while (pos < end) {
10808
- const ch = text.charCodeAt(pos);
10845
+ const ch = charCodeUnchecked(pos);
10809
10846
  if (ch === 45 /* minus */) {
10810
10847
  tokenValue += "-";
10811
10848
  pos++;
@@ -10823,7 +10860,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
10823
10860
  }
10824
10861
  function scanJsxAttributeValue() {
10825
10862
  fullStartPos = pos;
10826
- switch (text.charCodeAt(pos)) {
10863
+ switch (charCodeUnchecked(pos)) {
10827
10864
  case 34 /* doubleQuote */:
10828
10865
  case 39 /* singleQuote */:
10829
10866
  tokenValue = scanString(
@@ -10845,11 +10882,11 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
10845
10882
  if (pos >= end) {
10846
10883
  return token = 1 /* EndOfFileToken */;
10847
10884
  }
10848
- for (let ch = text.charCodeAt(pos); pos < end && (!isLineBreak(ch) && ch !== 96 /* backtick */); ch = codePointAt(text, ++pos)) {
10885
+ for (let ch = charCodeUnchecked(pos); pos < end && (!isLineBreak(ch) && ch !== 96 /* backtick */); ch = codePointUnchecked(++pos)) {
10849
10886
  if (!inBackticks) {
10850
10887
  if (ch === 123 /* openBrace */) {
10851
10888
  break;
10852
- } else if (ch === 64 /* at */ && pos - 1 >= 0 && isWhiteSpaceSingleLine(text.charCodeAt(pos - 1)) && !(pos + 1 < end && isWhiteSpaceLike(text.charCodeAt(pos + 1)))) {
10889
+ } else if (ch === 64 /* at */ && pos - 1 >= 0 && isWhiteSpaceSingleLine(charCodeUnchecked(pos - 1)) && !(pos + 1 < end && isWhiteSpaceLike(charCodeUnchecked(pos + 1)))) {
10853
10890
  break;
10854
10891
  }
10855
10892
  }
@@ -10866,21 +10903,21 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
10866
10903
  if (pos >= end) {
10867
10904
  return token = 1 /* EndOfFileToken */;
10868
10905
  }
10869
- const ch = codePointAt(text, pos);
10906
+ const ch = codePointUnchecked(pos);
10870
10907
  pos += charSize(ch);
10871
10908
  switch (ch) {
10872
10909
  case 9 /* tab */:
10873
10910
  case 11 /* verticalTab */:
10874
10911
  case 12 /* formFeed */:
10875
10912
  case 32 /* space */:
10876
- while (pos < end && isWhiteSpaceSingleLine(text.charCodeAt(pos))) {
10913
+ while (pos < end && isWhiteSpaceSingleLine(charCodeUnchecked(pos))) {
10877
10914
  pos++;
10878
10915
  }
10879
10916
  return token = 5 /* WhitespaceTrivia */;
10880
10917
  case 64 /* at */:
10881
10918
  return token = 60 /* AtToken */;
10882
10919
  case 13 /* carriageReturn */:
10883
- if (text.charCodeAt(pos) === 10 /* lineFeed */) {
10920
+ if (charCodeUnchecked(pos) === 10 /* lineFeed */) {
10884
10921
  pos++;
10885
10922
  }
10886
10923
  case 10 /* lineFeed */:
@@ -10936,7 +10973,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
10936
10973
  }
10937
10974
  if (isIdentifierStart(ch, languageVersion)) {
10938
10975
  let char = ch;
10939
- while (pos < end && isIdentifierPart(char = codePointAt(text, pos), languageVersion) || text.charCodeAt(pos) === 45 /* minus */)
10976
+ while (pos < end && isIdentifierPart(char = codePointUnchecked(pos), languageVersion) || char === 45 /* minus */)
10940
10977
  pos += charSize(char);
10941
10978
  tokenValue = text.substring(tokenStart, pos);
10942
10979
  if (char === 92 /* backslash */) {
@@ -11046,6 +11083,9 @@ function charSize(ch) {
11046
11083
  if (ch >= 65536) {
11047
11084
  return 2;
11048
11085
  }
11086
+ if (ch === -1 /* EOF */) {
11087
+ return 0;
11088
+ }
11049
11089
  return 1;
11050
11090
  }
11051
11091
  function utf16EncodeAsStringFallback(codePoint) {
@@ -13536,7 +13576,8 @@ function createFileDiagnosticFromMessageChain(file, start, length2, messageChain
13536
13576
  code: messageChain.code,
13537
13577
  category: messageChain.category,
13538
13578
  messageText: messageChain.next ? messageChain : messageChain.messageText,
13539
- relatedInformation
13579
+ relatedInformation,
13580
+ canonicalHead: messageChain.canonicalHead
13540
13581
  };
13541
13582
  }
13542
13583
  function createDiagnosticForFileFromMessageChain(sourceFile, messageChain, relatedInformation) {
@@ -13568,6 +13609,12 @@ function createDiagnosticForRange(sourceFile, range, message) {
13568
13609
  messageText: message.message
13569
13610
  };
13570
13611
  }
13612
+ function getCanonicalDiagnostic(message, ...args) {
13613
+ return {
13614
+ code: message.code,
13615
+ messageText: formatMessage(message, ...args)
13616
+ };
13617
+ }
13571
13618
  function getSpanOfTokenAtPosition(sourceFile, pos) {
13572
13619
  const scanner = createScanner(
13573
13620
  sourceFile.languageVersion,
@@ -17380,7 +17427,9 @@ function compareDiagnostics(d1, d2) {
17380
17427
  return compareDiagnosticsSkipRelatedInformation(d1, d2) || compareRelatedInformation(d1, d2) || 0 /* EqualTo */;
17381
17428
  }
17382
17429
  function compareDiagnosticsSkipRelatedInformation(d1, d2) {
17383
- return compareStringsCaseSensitive(getDiagnosticFilePath(d1), getDiagnosticFilePath(d2)) || compareValues(d1.start, d2.start) || compareValues(d1.length, d2.length) || compareValues(d1.code, d2.code) || compareMessageText(d1.messageText, d2.messageText) || 0 /* EqualTo */;
17430
+ const code1 = getDiagnosticCode(d1);
17431
+ const code2 = getDiagnosticCode(d2);
17432
+ return compareStringsCaseSensitive(getDiagnosticFilePath(d1), getDiagnosticFilePath(d2)) || compareValues(d1.start, d2.start) || compareValues(d1.length, d2.length) || compareValues(code1, code2) || compareMessageText(d1, d2) || 0 /* EqualTo */;
17384
17433
  }
17385
17434
  function compareRelatedInformation(d1, d2) {
17386
17435
  if (!d1.relatedInformation && !d2.relatedInformation) {
@@ -17394,21 +17443,32 @@ function compareRelatedInformation(d1, d2) {
17394
17443
  }
17395
17444
  return d1.relatedInformation ? -1 /* LessThan */ : 1 /* GreaterThan */;
17396
17445
  }
17397
- function compareMessageText(t1, t2) {
17398
- if (typeof t1 === "string" && typeof t2 === "string") {
17399
- return compareStringsCaseSensitive(t1, t2);
17446
+ function compareMessageText(d1, d2) {
17447
+ let headMsg1 = getDiagnosticMessage(d1);
17448
+ let headMsg2 = getDiagnosticMessage(d2);
17449
+ if (typeof headMsg1 !== "string") {
17450
+ headMsg1 = headMsg1.messageText;
17400
17451
  }
17401
- if (typeof t1 === "string") {
17402
- t1 = { messageText: t1 };
17452
+ if (typeof headMsg2 !== "string") {
17453
+ headMsg2 = headMsg2.messageText;
17403
17454
  }
17404
- if (typeof t2 === "string") {
17405
- t2 = { messageText: t2 };
17455
+ const chain1 = typeof d1.messageText !== "string" ? d1.messageText.next : void 0;
17456
+ const chain2 = typeof d2.messageText !== "string" ? d2.messageText.next : void 0;
17457
+ let res = compareStringsCaseSensitive(headMsg1, headMsg2);
17458
+ if (res) {
17459
+ return res;
17406
17460
  }
17407
- const res = compareStringsCaseSensitive(t1.messageText, t2.messageText);
17461
+ res = compareMessageChain(chain1, chain2);
17408
17462
  if (res) {
17409
17463
  return res;
17410
17464
  }
17411
- return compareMessageChain(t1.next, t2.next);
17465
+ if (d1.canonicalHead && !d2.canonicalHead) {
17466
+ return -1 /* LessThan */;
17467
+ }
17468
+ if (d2.canonicalHead && !d1.canonicalHead) {
17469
+ return 1 /* GreaterThan */;
17470
+ }
17471
+ return 0 /* EqualTo */;
17412
17472
  }
17413
17473
  function compareMessageChain(c1, c2) {
17414
17474
  if (c1 === void 0 && c2 === void 0) {
@@ -17462,7 +17522,19 @@ function compareMessageChainContent(c1, c2) {
17462
17522
  return 0 /* EqualTo */;
17463
17523
  }
17464
17524
  function diagnosticsEqualityComparer(d1, d2) {
17465
- return compareStringsCaseSensitive(getDiagnosticFilePath(d1), getDiagnosticFilePath(d2)) === 0 /* EqualTo */ && compareValues(d1.start, d2.start) === 0 /* EqualTo */ && compareValues(d1.length, d2.length) === 0 /* EqualTo */ && compareValues(d1.code, d2.code) === 0 /* EqualTo */ && messageTextEqualityComparer(d1.messageText, d2.messageText);
17525
+ const code1 = getDiagnosticCode(d1);
17526
+ const code2 = getDiagnosticCode(d2);
17527
+ const msg1 = getDiagnosticMessage(d1);
17528
+ const msg2 = getDiagnosticMessage(d2);
17529
+ return compareStringsCaseSensitive(getDiagnosticFilePath(d1), getDiagnosticFilePath(d2)) === 0 /* EqualTo */ && compareValues(d1.start, d2.start) === 0 /* EqualTo */ && compareValues(d1.length, d2.length) === 0 /* EqualTo */ && compareValues(code1, code2) === 0 /* EqualTo */ && messageTextEqualityComparer(msg1, msg2);
17530
+ }
17531
+ function getDiagnosticCode(d) {
17532
+ var _a;
17533
+ return ((_a = d.canonicalHead) == null ? void 0 : _a.code) || d.code;
17534
+ }
17535
+ function getDiagnosticMessage(d) {
17536
+ var _a;
17537
+ return ((_a = d.canonicalHead) == null ? void 0 : _a.messageText) || d.messageText;
17466
17538
  }
17467
17539
  function messageTextEqualityComparer(m1, m2) {
17468
17540
  const t1 = typeof m1 === "string" ? m1 : m1.messageText;
@@ -45491,6 +45563,7 @@ function createTypeChecker(host) {
45491
45563
  getBaseTypes,
45492
45564
  getBaseTypeOfLiteralType,
45493
45565
  getWidenedType,
45566
+ getWidenedLiteralType,
45494
45567
  getTypeFromTypeNode: (nodeIn) => {
45495
45568
  const node = getParseTreeNode(nodeIn, isTypeNode);
45496
45569
  return node ? getTypeFromTypeNode(node) : errorType;
@@ -46996,6 +47069,7 @@ function createTypeChecker(host) {
46996
47069
  );
46997
47070
  const message = meaning === 1920 /* Namespace */ || nameArg && typeof nameArg !== "string" && nodeIsSynthesized(nameArg) ? Diagnostics.Cannot_find_namespace_0_Did_you_mean_1 : isUncheckedJS ? Diagnostics.Could_not_find_name_0_Did_you_mean_1 : Diagnostics.Cannot_find_name_0_Did_you_mean_1;
46998
47071
  const diagnostic = createError(errorLocation, message, diagnosticName(nameArg), suggestionName);
47072
+ diagnostic.canonicalHead = getCanonicalDiagnostic(nameNotFoundMessage, diagnosticName(nameArg));
46999
47073
  addErrorOrSuggestion(!isUncheckedJS, diagnostic);
47000
47074
  if (suggestion.valueDeclaration) {
47001
47075
  addRelatedInfo(
@@ -48067,12 +48141,6 @@ function createTypeChecker(host) {
48067
48141
  }
48068
48142
  }
48069
48143
  }
48070
- function markConstEnumAliasAsReferenced(symbol) {
48071
- const links = getSymbolLinks(symbol);
48072
- if (!links.constEnumReferenced) {
48073
- links.constEnumReferenced = true;
48074
- }
48075
- }
48076
48144
  function getSymbolOfPartOfRightHandSideOfImportEquals(entityName, dontResolveAlias) {
48077
48145
  if (entityName.kind === 80 /* Identifier */ && isRightSideOfQualifiedNameOrPropertyAccess(entityName)) {
48078
48146
  entityName = entityName.parent;
@@ -54774,7 +54842,7 @@ function createTypeChecker(host) {
54774
54842
  }
54775
54843
  type = anyType;
54776
54844
  }
54777
- links.type = type;
54845
+ links.type ?? (links.type = type);
54778
54846
  }
54779
54847
  return links.type;
54780
54848
  }
@@ -54792,7 +54860,7 @@ function createTypeChecker(host) {
54792
54860
  }
54793
54861
  writeType = anyType;
54794
54862
  }
54795
- links.writeType = writeType || getTypeOfAccessors(symbol);
54863
+ links.writeType ?? (links.writeType = writeType || getTypeOfAccessors(symbol));
54796
54864
  }
54797
54865
  return links.writeType;
54798
54866
  }
@@ -54869,10 +54937,10 @@ function createTypeChecker(host) {
54869
54937
  true
54870
54938
  );
54871
54939
  const declaredType = firstDefined(exportSymbol == null ? void 0 : exportSymbol.declarations, (d) => isExportAssignment(d) ? tryGetTypeFromEffectiveTypeNode(d) : void 0);
54872
- links.type = (exportSymbol == null ? void 0 : exportSymbol.declarations) && isDuplicatedCommonJSExport(exportSymbol.declarations) && symbol.declarations.length ? getFlowTypeFromCommonJSExport(exportSymbol) : isDuplicatedCommonJSExport(symbol.declarations) ? autoType : declaredType ? declaredType : getSymbolFlags(targetSymbol) & 111551 /* Value */ ? getTypeOfSymbol(targetSymbol) : errorType;
54940
+ links.type ?? (links.type = (exportSymbol == null ? void 0 : exportSymbol.declarations) && isDuplicatedCommonJSExport(exportSymbol.declarations) && symbol.declarations.length ? getFlowTypeFromCommonJSExport(exportSymbol) : isDuplicatedCommonJSExport(symbol.declarations) ? autoType : declaredType ? declaredType : getSymbolFlags(targetSymbol) & 111551 /* Value */ ? getTypeOfSymbol(targetSymbol) : errorType);
54873
54941
  if (!popTypeResolution()) {
54874
54942
  reportCircularityError(exportSymbol ?? symbol);
54875
- return links.type = errorType;
54943
+ return links.type ?? (links.type = errorType);
54876
54944
  }
54877
54945
  }
54878
54946
  return links.type;
@@ -55138,7 +55206,7 @@ function createTypeChecker(host) {
55138
55206
  }
55139
55207
  if (!popTypeResolution()) {
55140
55208
  error(type.symbol.valueDeclaration, Diagnostics._0_is_referenced_directly_or_indirectly_in_its_own_base_expression, symbolToString(type.symbol));
55141
- return type.resolvedBaseConstructorType = errorType;
55209
+ return type.resolvedBaseConstructorType ?? (type.resolvedBaseConstructorType = errorType);
55142
55210
  }
55143
55211
  if (!(baseConstructorType.flags & 1 /* Any */) && baseConstructorType !== nullWideningType && !isConstructorType(baseConstructorType)) {
55144
55212
  const err = error(baseTypeNode.expression, Diagnostics.Type_0_is_not_a_constructor_function_type, typeToString(baseConstructorType));
@@ -55155,9 +55223,9 @@ function createTypeChecker(host) {
55155
55223
  addRelatedInfo(err, createDiagnosticForNode(baseConstructorType.symbol.declarations[0], Diagnostics.Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1, symbolToString(baseConstructorType.symbol), typeToString(ctorReturn)));
55156
55224
  }
55157
55225
  }
55158
- return type.resolvedBaseConstructorType = errorType;
55226
+ return type.resolvedBaseConstructorType ?? (type.resolvedBaseConstructorType = errorType);
55159
55227
  }
55160
- type.resolvedBaseConstructorType = baseConstructorType;
55228
+ type.resolvedBaseConstructorType ?? (type.resolvedBaseConstructorType = baseConstructorType);
55161
55229
  }
55162
55230
  return type.resolvedBaseConstructorType;
55163
55231
  }
@@ -55398,7 +55466,7 @@ function createTypeChecker(host) {
55398
55466
  error(isNamedDeclaration(declaration) ? declaration.name || declaration : declaration, Diagnostics.Type_alias_0_circularly_references_itself, symbolToString(symbol));
55399
55467
  }
55400
55468
  }
55401
- links.declaredType = type;
55469
+ links.declaredType ?? (links.declaredType = type);
55402
55470
  }
55403
55471
  return links.declaredType;
55404
55472
  }
@@ -56516,6 +56584,7 @@ function createTypeChecker(host) {
56516
56584
  }
56517
56585
  }
56518
56586
  function getTypeOfMappedSymbol(symbol) {
56587
+ var _a;
56519
56588
  if (!symbol.links.type) {
56520
56589
  const mappedType = symbol.links.mappedType;
56521
56590
  if (!pushTypeResolution(symbol, 0 /* Type */)) {
@@ -56534,7 +56603,7 @@ function createTypeChecker(host) {
56534
56603
  error(currentNode, Diagnostics.Type_of_property_0_circularly_references_itself_in_mapped_type_1, symbolToString(symbol), typeToString(mappedType));
56535
56604
  type = errorType;
56536
56605
  }
56537
- symbol.links.type = type;
56606
+ (_a = symbol.links).type ?? (_a.type = type);
56538
56607
  }
56539
56608
  return symbol.links.type;
56540
56609
  }
@@ -56887,7 +56956,7 @@ function createTypeChecker(host) {
56887
56956
  }
56888
56957
  result = circularConstraintType;
56889
56958
  }
56890
- t.immediateBaseConstraint = result || noConstraintType;
56959
+ t.immediateBaseConstraint ?? (t.immediateBaseConstraint = result || noConstraintType);
56891
56960
  }
56892
56961
  return t.immediateBaseConstraint;
56893
56962
  }
@@ -57761,7 +57830,7 @@ function createTypeChecker(host) {
57761
57830
  }
57762
57831
  type = anyType;
57763
57832
  }
57764
- signature.resolvedReturnType = type;
57833
+ signature.resolvedReturnType ?? (signature.resolvedReturnType = type);
57765
57834
  }
57766
57835
  return signature.resolvedReturnType;
57767
57836
  }
@@ -58107,9 +58176,9 @@ function createTypeChecker(host) {
58107
58176
  const node = type.node;
58108
58177
  const typeArguments = !node ? emptyArray : node.kind === 183 /* TypeReference */ ? concatenate(type.target.outerTypeParameters, getEffectiveTypeArguments(node, type.target.localTypeParameters)) : node.kind === 188 /* ArrayType */ ? [getTypeFromTypeNode(node.elementType)] : map(node.elements, getTypeFromTypeNode);
58109
58178
  if (popTypeResolution()) {
58110
- type.resolvedTypeArguments = type.mapper ? instantiateTypes(typeArguments, type.mapper) : typeArguments;
58179
+ type.resolvedTypeArguments ?? (type.resolvedTypeArguments = type.mapper ? instantiateTypes(typeArguments, type.mapper) : typeArguments);
58111
58180
  } else {
58112
- type.resolvedTypeArguments = ((_b = type.target.localTypeParameters) == null ? void 0 : _b.map(() => errorType)) || emptyArray;
58181
+ type.resolvedTypeArguments ?? (type.resolvedTypeArguments = ((_b = type.target.localTypeParameters) == null ? void 0 : _b.map(() => errorType)) || emptyArray);
58113
58182
  error(
58114
58183
  type.node || currentNode,
58115
58184
  type.target.symbol ? Diagnostics.Type_arguments_for_0_circularly_reference_themselves : Diagnostics.Tuple_type_arguments_circularly_reference_themselves,
@@ -63168,6 +63237,16 @@ function createTypeChecker(host) {
63168
63237
  errorInfo = elaborateNeverIntersection(errorInfo, originalTarget);
63169
63238
  }
63170
63239
  if (!headMessage2 && maybeSuppress) {
63240
+ const savedErrorState = captureErrorCalculationState();
63241
+ reportRelationError(headMessage2, source2, target2);
63242
+ let canonical;
63243
+ if (errorInfo && errorInfo !== savedErrorState.errorInfo) {
63244
+ canonical = { code: errorInfo.code, messageText: errorInfo.messageText };
63245
+ }
63246
+ resetErrorInfo(savedErrorState);
63247
+ if (canonical && errorInfo) {
63248
+ errorInfo.canonicalHead = canonical;
63249
+ }
63171
63250
  lastSkippedInfo = [source2, target2];
63172
63251
  return;
63173
63252
  }
@@ -65156,6 +65235,7 @@ function createTypeChecker(host) {
65156
65235
  if (!links.variances) {
65157
65236
  (_a = tracing) == null ? void 0 : _a.push(tracing.Phase.CheckTypes, "getVariancesWorker", { arity: typeParameters.length, id: getTypeId(getDeclaredTypeOfSymbol(symbol)) });
65158
65237
  const oldVarianceComputation = inVarianceComputation;
65238
+ const saveResolutionStart = resolutionStart;
65159
65239
  if (!inVarianceComputation) {
65160
65240
  inVarianceComputation = true;
65161
65241
  resolutionStart = resolutionTargets.length;
@@ -65190,7 +65270,7 @@ function createTypeChecker(host) {
65190
65270
  }
65191
65271
  if (!oldVarianceComputation) {
65192
65272
  inVarianceComputation = false;
65193
- resolutionStart = 0;
65273
+ resolutionStart = saveResolutionStart;
65194
65274
  }
65195
65275
  links.variances = variances;
65196
65276
  (_b = tracing) == null ? void 0 : _b.pop({ variances: variances.map(Debug.formatVariance) });
@@ -69383,7 +69463,7 @@ function createTypeChecker(host) {
69383
69463
  reportCircularityError(declaration.symbol);
69384
69464
  return true;
69385
69465
  }
69386
- links.parameterInitializerContainsUndefined = containsUndefined;
69466
+ links.parameterInitializerContainsUndefined ?? (links.parameterInitializerContainsUndefined = containsUndefined);
69387
69467
  }
69388
69468
  return links.parameterInitializerContainsUndefined;
69389
69469
  }
@@ -69445,8 +69525,6 @@ function createTypeChecker(host) {
69445
69525
  ) & (111551 /* Value */ | 1048576 /* ExportValue */)) {
69446
69526
  if (getIsolatedModules(compilerOptions) || shouldPreserveConstEnums(compilerOptions) && isExportOrExportExpression(location) || !isConstEnumOrConstEnumOnlyModule(getExportSymbolOfValueSymbolIfExported(target))) {
69447
69527
  markAliasSymbolAsReferenced(symbol);
69448
- } else {
69449
- markConstEnumAliasAsReferenced(symbol);
69450
69528
  }
69451
69529
  }
69452
69530
  }
@@ -70703,60 +70781,71 @@ function createTypeChecker(host) {
70703
70781
  return false;
70704
70782
  }
70705
70783
  function discriminateContextualTypeByObjectMembers(node, contextualType) {
70706
- return getMatchingUnionConstituentForObjectLiteral(contextualType, node) || discriminateTypeByDiscriminableItems(
70707
- contextualType,
70708
- concatenate(
70709
- map(
70710
- filter(node.properties, (p) => {
70711
- if (!p.symbol) {
70784
+ const key = `D${getNodeId(node)},${getTypeId(contextualType)}`;
70785
+ return getCachedType(key) ?? setCachedType(
70786
+ key,
70787
+ getMatchingUnionConstituentForObjectLiteral(contextualType, node) ?? discriminateTypeByDiscriminableItems(
70788
+ contextualType,
70789
+ concatenate(
70790
+ map(
70791
+ filter(node.properties, (p) => {
70792
+ if (!p.symbol) {
70793
+ return false;
70794
+ }
70795
+ if (p.kind === 303 /* PropertyAssignment */) {
70796
+ return isPossiblyDiscriminantValue(p.initializer) && isDiscriminantProperty(contextualType, p.symbol.escapedName);
70797
+ }
70798
+ if (p.kind === 304 /* ShorthandPropertyAssignment */) {
70799
+ return isDiscriminantProperty(contextualType, p.symbol.escapedName);
70800
+ }
70712
70801
  return false;
70713
- }
70714
- if (p.kind === 303 /* PropertyAssignment */) {
70715
- return isPossiblyDiscriminantValue(p.initializer) && isDiscriminantProperty(contextualType, p.symbol.escapedName);
70716
- }
70717
- if (p.kind === 304 /* ShorthandPropertyAssignment */) {
70718
- return isDiscriminantProperty(contextualType, p.symbol.escapedName);
70719
- }
70720
- return false;
70721
- }),
70722
- (prop) => [() => getContextFreeTypeOfExpression(prop.kind === 303 /* PropertyAssignment */ ? prop.initializer : prop.name), prop.symbol.escapedName]
70802
+ }),
70803
+ (prop) => [() => getContextFreeTypeOfExpression(prop.kind === 303 /* PropertyAssignment */ ? prop.initializer : prop.name), prop.symbol.escapedName]
70804
+ ),
70805
+ map(
70806
+ filter(getPropertiesOfType(contextualType), (s) => {
70807
+ var _a;
70808
+ return !!(s.flags & 16777216 /* Optional */) && !!((_a = node == null ? void 0 : node.symbol) == null ? void 0 : _a.members) && !node.symbol.members.has(s.escapedName) && isDiscriminantProperty(contextualType, s.escapedName);
70809
+ }),
70810
+ (s) => [() => undefinedType, s.escapedName]
70811
+ )
70723
70812
  ),
70724
- map(
70725
- filter(getPropertiesOfType(contextualType), (s) => {
70726
- var _a;
70727
- return !!(s.flags & 16777216 /* Optional */) && !!((_a = node == null ? void 0 : node.symbol) == null ? void 0 : _a.members) && !node.symbol.members.has(s.escapedName) && isDiscriminantProperty(contextualType, s.escapedName);
70728
- }),
70729
- (s) => [() => undefinedType, s.escapedName]
70730
- )
70731
- ),
70732
- isTypeAssignableTo
70813
+ isTypeAssignableTo
70814
+ )
70733
70815
  );
70734
70816
  }
70735
70817
  function discriminateContextualTypeByJSXAttributes(node, contextualType) {
70818
+ const key = `D${getNodeId(node)},${getTypeId(contextualType)}`;
70819
+ const cached = getCachedType(key);
70820
+ if (cached)
70821
+ return cached;
70736
70822
  const jsxChildrenPropertyName = getJsxElementChildrenPropertyName(getJsxNamespaceAt(node));
70737
- return discriminateTypeByDiscriminableItems(
70738
- contextualType,
70739
- concatenate(
70740
- map(
70741
- filter(node.properties, (p) => !!p.symbol && p.kind === 291 /* JsxAttribute */ && isDiscriminantProperty(contextualType, p.symbol.escapedName) && (!p.initializer || isPossiblyDiscriminantValue(p.initializer))),
70742
- (prop) => [!prop.initializer ? () => trueType : () => getContextFreeTypeOfExpression(prop.initializer), prop.symbol.escapedName]
70823
+ return setCachedType(
70824
+ key,
70825
+ discriminateTypeByDiscriminableItems(
70826
+ contextualType,
70827
+ concatenate(
70828
+ map(
70829
+ filter(node.properties, (p) => !!p.symbol && p.kind === 291 /* JsxAttribute */ && isDiscriminantProperty(contextualType, p.symbol.escapedName) && (!p.initializer || isPossiblyDiscriminantValue(p.initializer))),
70830
+ (prop) => [!prop.initializer ? () => trueType : () => getContextFreeTypeOfExpression(prop.initializer), prop.symbol.escapedName]
70831
+ ),
70832
+ map(
70833
+ filter(getPropertiesOfType(contextualType), (s) => {
70834
+ var _a;
70835
+ if (!(s.flags & 16777216 /* Optional */) || !((_a = node == null ? void 0 : node.symbol) == null ? void 0 : _a.members)) {
70836
+ return false;
70837
+ }
70838
+ const element = node.parent.parent;
70839
+ if (s.escapedName === jsxChildrenPropertyName && isJsxElement(element) && getSemanticJsxChildren(element.children).length) {
70840
+ return false;
70841
+ }
70842
+ return !node.symbol.members.has(s.escapedName) && isDiscriminantProperty(contextualType, s.escapedName);
70843
+ }),
70844
+ (s) => [() => undefinedType, s.escapedName]
70845
+ )
70743
70846
  ),
70744
- map(
70745
- filter(getPropertiesOfType(contextualType), (s) => {
70746
- var _a;
70747
- if (!(s.flags & 16777216 /* Optional */) || !((_a = node == null ? void 0 : node.symbol) == null ? void 0 : _a.members)) {
70748
- return false;
70749
- }
70750
- const element = node.parent.parent;
70751
- if (s.escapedName === jsxChildrenPropertyName && isJsxElement(element) && getSemanticJsxChildren(element.children).length) {
70752
- return false;
70753
- }
70754
- return !node.symbol.members.has(s.escapedName) && isDiscriminantProperty(contextualType, s.escapedName);
70755
- }),
70756
- (s) => [() => undefinedType, s.escapedName]
70757
- )
70758
- ),
70759
- isTypeAssignableTo
70847
+ isTypeAssignableTo
70848
+ )
70760
70849
  );
70761
70850
  }
70762
70851
  function getApparentTypeOfContextualType(node, contextFlags) {
@@ -71190,7 +71279,7 @@ function createTypeChecker(host) {
71190
71279
  }
71191
71280
  function checkGrammarRegularExpressionLiteral(node) {
71192
71281
  const sourceFile = getSourceFileOfNode(node);
71193
- if (!hasParseDiagnostics(sourceFile)) {
71282
+ if (!hasParseDiagnostics(sourceFile) && !node.isUnterminated) {
71194
71283
  let lastError;
71195
71284
  scanner ?? (scanner = createScanner(
71196
71285
  99 /* ESNext */,
@@ -74792,8 +74881,13 @@ function createTypeChecker(host) {
74792
74881
  if (cached && cached !== resolvingSignature && !candidatesOutArray) {
74793
74882
  return cached;
74794
74883
  }
74884
+ const saveResolutionStart = resolutionStart;
74885
+ if (!cached) {
74886
+ resolutionStart = resolutionTargets.length;
74887
+ }
74795
74888
  links.resolvedSignature = resolvingSignature;
74796
74889
  let result = resolveSignature(node, candidatesOutArray, checkMode || 0 /* Normal */);
74890
+ resolutionStart = saveResolutionStart;
74797
74891
  if (result !== resolvingSignature) {
74798
74892
  if (links.resolvedSignature !== resolvingSignature) {
74799
74893
  result = links.resolvedSignature;