diff --git a/bin/lib.d.ts b/bin/lib.d.ts index 605738614c939..6a97175c5e848 100644 --- a/bin/lib.d.ts +++ b/bin/lib.d.ts @@ -1157,6 +1157,11 @@ interface ArrayBuffer { * Read-only. The length of the ArrayBuffer (in bytes). */ byteLength: number; + + /** + * Returns a section of an ArrayBuffer. + */ + slice(begin:number, end?:number): ArrayBuffer; } declare var ArrayBuffer: { @@ -3826,6 +3831,32 @@ declare var Window: { new(): Window; } +interface FormData { + append(name: any, value: any, blobName?: string): void; +} +declare var FormData: { + prototype: FormData; + new (form?: HTMLFormElement): FormData; +} + +interface SourceBuffer extends EventTarget { + updating: boolean; + appendWindowStart: number; + appendWindowEnd: number; + buffered: TimeRanges; + timestampOffset: number; + audioTracks: AudioTrackList; + appendBuffer(data: ArrayBufferView): void; + appendBuffer(data: ArrayBuffer): void; + remove(start: number, end: number): void; + abort(): void; + appendStream(stream: MSStream, maxSize?: number): void; +} +declare var SourceBuffer: { + prototype: SourceBuffer; + new(): SourceBuffer; +} + interface NavigatorID { appVersion: string; appName: string; @@ -12157,14 +12188,6 @@ declare var MSManipulationEvent: { MS_MANIPULATION_STATE_CANCELLED: number; } -interface FormData { - append(name: any, value: any, blobName?: string): void; -} -declare var FormData: { - prototype: FormData; - new(): FormData; -} - interface HTMLDataListElement extends HTMLElement { options: HTMLCollection; } @@ -12583,23 +12606,6 @@ interface RandomSource { getRandomValues(array: ArrayBufferView): ArrayBufferView; } -interface SourceBuffer extends EventTarget { - updating: boolean; - appendWindowStart: number; - appendWindowEnd: number; - buffered: TimeRanges; - timestampOffset: number; - audioTracks: AudioTrackList; - appendBuffer(data: ArrayBuffer): void; - remove(start: number, end: number): void; - abort(): void; - appendStream(stream: MSStream, maxSize?: number): void; -} -declare var SourceBuffer: { - prototype: SourceBuffer; - new(): SourceBuffer; -} - interface MSInputMethodContext extends EventTarget { oncandidatewindowshow: (ev: any) => any; target: HTMLElement; diff --git a/bin/lib.dom.d.ts b/bin/lib.dom.d.ts index ff05bbf6b8de7..c0aceb3fc11df 100644 --- a/bin/lib.dom.d.ts +++ b/bin/lib.dom.d.ts @@ -30,6 +30,11 @@ interface ArrayBuffer { * Read-only. The length of the ArrayBuffer (in bytes). */ byteLength: number; + + /** + * Returns a section of an ArrayBuffer. + */ + slice(begin:number, end?:number): ArrayBuffer; } declare var ArrayBuffer: { @@ -2699,6 +2704,32 @@ declare var Window: { new(): Window; } +interface FormData { + append(name: any, value: any, blobName?: string): void; +} +declare var FormData: { + prototype: FormData; + new (form?: HTMLFormElement): FormData; +} + +interface SourceBuffer extends EventTarget { + updating: boolean; + appendWindowStart: number; + appendWindowEnd: number; + buffered: TimeRanges; + timestampOffset: number; + audioTracks: AudioTrackList; + appendBuffer(data: ArrayBufferView): void; + appendBuffer(data: ArrayBuffer): void; + remove(start: number, end: number): void; + abort(): void; + appendStream(stream: MSStream, maxSize?: number): void; +} +declare var SourceBuffer: { + prototype: SourceBuffer; + new(): SourceBuffer; +} + interface NavigatorID { appVersion: string; appName: string; @@ -11030,14 +11061,6 @@ declare var MSManipulationEvent: { MS_MANIPULATION_STATE_CANCELLED: number; } -interface FormData { - append(name: any, value: any, blobName?: string): void; -} -declare var FormData: { - prototype: FormData; - new(): FormData; -} - interface HTMLDataListElement extends HTMLElement { options: HTMLCollection; } @@ -11456,23 +11479,6 @@ interface RandomSource { getRandomValues(array: ArrayBufferView): ArrayBufferView; } -interface SourceBuffer extends EventTarget { - updating: boolean; - appendWindowStart: number; - appendWindowEnd: number; - buffered: TimeRanges; - timestampOffset: number; - audioTracks: AudioTrackList; - appendBuffer(data: ArrayBuffer): void; - remove(start: number, end: number): void; - abort(): void; - appendStream(stream: MSStream, maxSize?: number): void; -} -declare var SourceBuffer: { - prototype: SourceBuffer; - new(): SourceBuffer; -} - interface MSInputMethodContext extends EventTarget { oncandidatewindowshow: (ev: any) => any; target: HTMLElement; diff --git a/bin/lib.webworker.d.ts b/bin/lib.webworker.d.ts index a524443368bb0..654d75b0aa9f2 100644 --- a/bin/lib.webworker.d.ts +++ b/bin/lib.webworker.d.ts @@ -30,6 +30,11 @@ interface ArrayBuffer { * Read-only. The length of the ArrayBuffer (in bytes). */ byteLength: number; + + /** + * Returns a section of an ArrayBuffer. + */ + slice(begin:number, end?:number): ArrayBuffer; } declare var ArrayBuffer: { diff --git a/bin/tc.js b/bin/tc.js index 487e01b2b39b0..fb6fd8be0b7ea 100644 --- a/bin/tc.js +++ b/bin/tc.js @@ -172,9 +172,12 @@ var ts; Duplicate_number_index_signature: { code: 2233, category: 1 /* Error */, key: "Duplicate number index signature." }, All_declarations_of_an_interface_must_have_identical_type_parameters: { code: 2234, category: 1 /* Error */, key: "All declarations of an interface must have identical type parameters." }, Expression_resolves_to_variable_declaration_i_that_compiler_uses_to_initialize_rest_parameter: { code: 2235, category: 1 /* Error */, key: "Expression resolves to variable declaration '_i' that compiler uses to initialize rest parameter." }, - Constructor_implementation_expected: { code: 2240, category: 1 /* Error */, key: "Constructor implementation expected." }, + Function_implementation_name_must_be_0: { code: 2239, category: 1 /* Error */, key: "Function implementation name must be '{0}'." }, + Constructor_implementation_is_missing: { code: 2240, category: 1 /* Error */, key: "Constructor implementation is missing." }, An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements: { code: 2245, category: 1 /* Error */, key: "An export assignment cannot be used in a module with other exported elements." }, A_parameter_property_is_only_allowed_in_a_constructor_implementation: { code: 2246, category: 1 /* Error */, key: "A parameter property is only allowed in a constructor implementation." }, + Function_overload_must_be_static: { code: 2247, category: 1 /* Error */, key: "Function overload must be static." }, + Function_overload_must_not_be_static: { code: 2248, category: 1 /* Error */, key: "Function overload must not be static." }, Circular_definition_of_import_alias_0: { code: 3000, category: 1 /* Error */, key: "Circular definition of import alias '{0}'." }, Cannot_find_name_0: { code: 3001, category: 1 /* Error */, key: "Cannot find name '{0}'." }, Module_0_has_no_exported_member_1: { code: 3002, category: 1 /* Error */, key: "Module '{0}' has no exported member '{1}'." }, @@ -291,7 +294,7 @@ var ts; Types_of_parameters_0_and_1_are_incompatible_Colon: { code: -9999999, category: 1 /* Error */, key: "Types of parameters '{0}' and '{1}' are incompatible:" }, Unknown_identifier_0: { code: -9999999, category: 1 /* Error */, key: "Unknown identifier '{0}'." }, Property_0_is_inaccessible: { code: -9999999, category: 1 /* Error */, key: "Property '{0}' is inaccessible." }, - Function_implementation_expected: { code: -9999999, category: 1 /* Error */, key: "Function implementation expected." }, + Function_implementation_is_missing_or_not_immediately_following_the_declaration: { code: -9999999, category: 1 /* Error */, key: "Function implementation is missing or not immediately following the declaration." }, Property_0_of_type_1_is_not_assignable_to_string_index_type_2: { code: -9999999, category: 1 /* Error */, key: "Property '{0}' of type '{1}' is not assignable to string index type '{2}'." }, Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2: { code: -9999999, category: 1 /* Error */, key: "Property '{0}' of type '{1}' is not assignable to numeric index type '{2}'." }, Numeric_index_type_0_is_not_assignable_to_string_index_type_1: { code: -9999999, category: 1 /* Error */, key: "Numeric index type '{0}' is not assignable to string index type '{1}'." }, @@ -320,7 +323,7 @@ var ts; Unsupported_locale_0: { code: -9999999, category: 1 /* Error */, key: "Unsupported locale {0}." }, Unable_to_open_file_0: { code: -9999999, category: 1 /* Error */, key: "Unable to open file {0}." }, Corrupted_locale_file_0: { code: -9999999, category: 1 /* Error */, key: "Corrupted locale file {0}." }, - No_input_files_specified: { code: -9999999, category: 1 /* Error */, key: "No input files specified." }, + No_input_files_specified: { code: -9999999, category: 1 /* Error */, key: "No input files specified." } }; })(ts || (ts = {})); var ts; @@ -430,7 +433,7 @@ var ts; ">>>=": 51 /* GreaterThanGreaterThanGreaterThanEqualsToken */, "&=": 52 /* AmpersandEqualsToken */, "|=": 53 /* BarEqualsToken */, - "^=": 54 /* CaretEqualsToken */, + "^=": 54 /* CaretEqualsToken */ }; var unicodeES3IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1610, 1649, 1747, 1749, 1749, 1765, 1766, 1786, 1788, 1808, 1808, 1810, 1836, 1920, 1957, 2309, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2784, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3294, 3294, 3296, 3297, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3424, 3425, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3805, 3840, 3840, 3904, 3911, 3913, 3946, 3976, 3979, 4096, 4129, 4131, 4135, 4137, 4138, 4176, 4181, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6067, 6176, 6263, 6272, 6312, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8319, 8319, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12346, 12353, 12436, 12445, 12446, 12449, 12538, 12540, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65138, 65140, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; var unicodeES3IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 768, 846, 864, 866, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1155, 1158, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1441, 1443, 1465, 1467, 1469, 1471, 1471, 1473, 1474, 1476, 1476, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1621, 1632, 1641, 1648, 1747, 1749, 1756, 1759, 1768, 1770, 1773, 1776, 1788, 1808, 1836, 1840, 1866, 1920, 1968, 2305, 2307, 2309, 2361, 2364, 2381, 2384, 2388, 2392, 2403, 2406, 2415, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2492, 2494, 2500, 2503, 2504, 2507, 2509, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2562, 2562, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2649, 2652, 2654, 2654, 2662, 2676, 2689, 2691, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2784, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2876, 2883, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2913, 2918, 2927, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3031, 3031, 3047, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3134, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3168, 3169, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3262, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3297, 3302, 3311, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3390, 3395, 3398, 3400, 3402, 3405, 3415, 3415, 3424, 3425, 3430, 3439, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3805, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3946, 3953, 3972, 3974, 3979, 3984, 3991, 3993, 4028, 4038, 4038, 4096, 4129, 4131, 4135, 4137, 4138, 4140, 4146, 4150, 4153, 4160, 4169, 4176, 4185, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 4969, 4977, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6099, 6112, 6121, 6160, 6169, 6176, 6263, 6272, 6313, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8319, 8319, 8400, 8412, 8417, 8417, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12346, 12353, 12436, 12441, 12442, 12445, 12446, 12449, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65056, 65059, 65075, 65076, 65101, 65103, 65136, 65138, 65140, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65381, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; @@ -1031,7 +1034,7 @@ var ts; if (token === 27 /* SlashToken */ || token === 47 /* SlashEqualsToken */) { var p = tokenPos + 1; var inEscape = false; - var inClass = false; + var inCharacterClass = false; while (true) { if (p >= len) { return token; @@ -1043,23 +1046,24 @@ var ts; if (inEscape) { inEscape = false; } - else if (ch === 47 /* slash */) { + else if (ch === 47 /* slash */ && !inCharacterClass) { break; } else if (ch === 91 /* openBracket */) { - inClass = true; + inCharacterClass = true; } else if (ch === 92 /* backslash */) { inEscape = true; } else if (ch === 93 /* closeBracket */) { - inClass = false; + inCharacterClass = false; } p++; } p++; - while (isIdentifierPart(text.charCodeAt(p))) + while (isIdentifierPart(text.charCodeAt(p))) { p++; + } pos = p; tokenValue = text.substring(tokenPos, pos); token = 4 /* RegularExpressionLiteral */; @@ -1573,6 +1577,13 @@ var ts; CharacterCodes[CharacterCodes["verticalTab"] = 0x0B] = "verticalTab"; })(ts.CharacterCodes || (ts.CharacterCodes = {})); var CharacterCodes = ts.CharacterCodes; + (function (ByteOrderMark) { + ByteOrderMark[ByteOrderMark["None"] = 0] = "None"; + ByteOrderMark[ByteOrderMark["Utf8"] = 1] = "Utf8"; + ByteOrderMark[ByteOrderMark["Utf16BigEndian"] = 2] = "Utf16BigEndian"; + ByteOrderMark[ByteOrderMark["Utf16LittleEndian"] = 3] = "Utf16LittleEndian"; + })(ts.ByteOrderMark || (ts.ByteOrderMark = {})); + var ByteOrderMark = ts.ByteOrderMark; })(ts || (ts = {})); var ts; (function (ts) { @@ -1704,6 +1715,19 @@ var ts; return result; } ts.forEachValue = forEachValue; + function forEachKey(map, callback) { + var result; + for (var id in map) { + if (result = callback(id)) + break; + } + return result; + } + ts.forEachKey = forEachKey; + function lookUp(map, key) { + return hasProperty(map, key) ? map[key] : undefined; + } + ts.lookUp = lookUp; function mapToArray(map) { var result = []; for (var id in map) @@ -1766,14 +1790,14 @@ var ts; }; } ts.chainDiagnosticMessages = chainDiagnosticMessages; - function flattenDiagnosticChain(file, start, length, diagnosticChain) { + function flattenDiagnosticChain(file, start, length, diagnosticChain, newLine) { var code = diagnosticChain.code; var category = diagnosticChain.category; var messageText = ""; var indent = 0; while (diagnosticChain) { if (indent) { - messageText += sys.newLine; + messageText += newLine; for (var i = 0; i < indent; i++) { messageText += " "; } @@ -2010,7 +2034,7 @@ var ts; pos: 0, end: 0, flags: 0, - parent: undefined, + parent: undefined }; return Node; }, @@ -2301,12 +2325,12 @@ var ts; return ts.createFileDiagnostic(file, start, length, message, arg0, arg1, arg2); } ts.createDiagnosticForNode = createDiagnosticForNode; - function createDiagnosticForNodeFromMessageChain(node, messageChain) { + function createDiagnosticForNodeFromMessageChain(node, messageChain, newLine) { node = getErrorSpanForNode(node); var file = getSourceFileOfNode(node); var start = ts.skipTrivia(file.text, node.pos); var length = node.end - start; - return ts.flattenDiagnosticChain(file, start, length, messageChain); + return ts.flattenDiagnosticChain(file, start, length, messageChain, newLine); } ts.createDiagnosticForNodeFromMessageChain = createDiagnosticForNodeFromMessageChain; function getErrorSpanForNode(node) { @@ -2474,6 +2498,15 @@ var ts; return s.parameters.length > 0 && (s.parameters[s.parameters.length - 1].flags & 8 /* Rest */) !== 0; } ts.hasRestParameters = hasRestParameters; + function isInAmbientContext(node) { + while (node) { + if (node.flags & (2 /* Ambient */ | 512 /* DeclarationFile */)) + return true; + node = node.parent; + } + return false; + } + ts.isInAmbientContext = isInAmbientContext; var ParsingContext; (function (ParsingContext) { ParsingContext[ParsingContext["SourceElements"] = 0] = "SourceElements"; @@ -2649,7 +2682,7 @@ var ts; pushCurrentLabelSet: pushCurrentLabelSet, pushFunctionBoundary: pushFunctionBoundary, pop: pop, - nodeIsNestedInLabel: nodeIsNestedInLabel, + nodeIsNestedInLabel: nodeIsNestedInLabel }; })(); function getLineAndCharacterlFromSourcePosition(position) { @@ -3489,7 +3522,11 @@ var ts; var parameter = createNode(114 /* Parameter */, identifier.pos); parameter.name = identifier; finishNode(parameter); - var signature = { parameters: [parameter] }; + var parameters = []; + parameters.push(parameter); + parameters.pos = parameter.pos; + parameters.end = parameter.end; + var signature = { parameters: parameters }; return parseArrowExpressionTail(identifier.pos, signature, false); } function tryParseParenthesizedArrowFunctionExpression() { @@ -5051,7 +5088,7 @@ var ts; getDiagnostics: getDiagnostics, getGlobalDiagnostics: getGlobalDiagnostics, getTypeChecker: function () { return ts.createTypeChecker(program); }, - getCommonSourceDirectory: function () { return commonSourceDirectory; }, + getCommonSourceDirectory: function () { return commonSourceDirectory; } }; return program; function getSourceFile(filename) { @@ -5528,6 +5565,7 @@ var ts; var compilerOptions = program.getCompilerOptions(); var sourceMapDataList = compilerOptions.sourceMap ? [] : undefined; var diagnostics = []; + var newLine = program.getCompilerHost().getNewLine(); function getSourceFilePathInNewDir(newDirPath, sourceFile) { var sourceFilePath = ts.getNormalizedPathFromPathCompoments(ts.getNormalizedPathComponents(sourceFile.filename, compilerHost.getCurrentDirectory())); sourceFilePath = sourceFilePath.replace(program.getCommonSourceDirectory(), ""); @@ -5617,7 +5655,7 @@ var ts; } function writeLine() { if (!lineStart) { - output += sys.newLine; + output += newLine; lineCount++; linePos = output.length; lineStart = true; @@ -6658,6 +6696,7 @@ var ts; write(" {"); scopeEmitStart(node, "constructor"); increaseIndent(); + emitCaptureThisForNodeIfNecessary(node); if (ctor) { emitDefaultValueAssignments(ctor); emitRestParameter(ctor); @@ -6678,7 +6717,6 @@ var ts; emitEnd(node.baseType); } } - emitCaptureThisForNodeIfNecessary(node); emitMemberAssignments(node, 0); if (ctor) { var statements = ctor.body.statements; @@ -7463,7 +7501,7 @@ var ts; function writeReferencePath(referencedFile) { var declFileName = referencedFile.flags & 512 /* DeclarationFile */ ? referencedFile.filename : shouldEmitToOwnFile(referencedFile) ? getOwnEmitOutputFilePath(referencedFile, ".d.ts") : ts.getModuleNameFromFilename(compilerOptions.out) + ".d.ts"; declFileName = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizeSlashes(jsFilePath)), declFileName, compilerHost.getCurrentDirectory(), false); - referencePathsOutput += "/// " + sys.newLine; + referencePathsOutput += "/// " + newLine; } if (root) { var addedGlobalFileReference = false; @@ -7562,7 +7600,32 @@ var ts; var potentialThisCollisions = []; var diagnostics = []; var diagnosticsModified = false; - var checker; + var checker = { + getProgram: function () { return program; }, + getDiagnostics: getDiagnostics, + getGlobalDiagnostics: getGlobalDiagnostics, + getNodeCount: function () { return ts.sum(program.getSourceFiles(), "nodeCount"); }, + getIdentifierCount: function () { return ts.sum(program.getSourceFiles(), "identifierCount"); }, + getSymbolCount: function () { return ts.sum(program.getSourceFiles(), "symbolCount"); }, + getTypeCount: function () { return typeCount; }, + checkProgram: checkProgram, + emitFiles: invokeEmitter, + getSymbolOfNode: getSymbolOfNode, + getParentOfSymbol: getParentOfSymbol, + getTypeOfSymbol: getTypeOfSymbol, + getDeclaredTypeOfSymbol: getDeclaredTypeOfSymbol, + getPropertiesOfType: getPropertiesOfType, + getSignaturesOfType: getSignaturesOfType, + getIndexTypeOfType: getIndexTypeOfType, + getReturnTypeOfSignature: getReturnTypeOfSignature, + resolveEntityName: resolveEntityName, + getSymbolsInScope: getSymbolsInScope, + getSymbolOfIdentifier: getSymbolOfIdentifier, + getTypeOfExpression: getTypeOfExpression, + typeToString: typeToString, + symbolToString: symbolToString, + getAugmentedPropertiesOfApparentType: getAugmentedPropertiesOfApparentType + }; function addDiagnostic(diagnostic) { diagnostics.push(diagnostic); diagnosticsModified = true; @@ -8146,9 +8209,9 @@ var ts; } }; } - function typeToString(type, flags) { + function typeToString(type, enclosingDeclaration, flags) { var stringWriter = createSingleLineTextWriter(); - writeTypeToTextWriter(type, null, flags, stringWriter); + writeTypeToTextWriter(type, enclosingDeclaration, flags, stringWriter); return stringWriter.getText(); } function writeTypeToTextWriter(type, enclosingDeclaration, flags, writer) { @@ -8673,7 +8736,7 @@ var ts; type.baseTypes.push(baseType); } else { - error(declaration, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, 1 /* WriteArrayAsGenericType */)); + error(declaration, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, undefined, 1 /* WriteArrayAsGenericType */)); } } else { @@ -8713,7 +8776,7 @@ var ts; type.baseTypes.push(baseType); } else { - error(declaration, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, 1 /* WriteArrayAsGenericType */)); + error(declaration, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, undefined, 1 /* WriteArrayAsGenericType */)); } } else { @@ -9206,7 +9269,7 @@ var ts; type = createTypeReference(type, ts.map(node.typeArguments, function (t) { return getTypeFromTypeNode(t); })); } else { - error(node, ts.Diagnostics.Generic_type_0_requires_1_type_argument_s, typeToString(type, 1 /* WriteArrayAsGenericType */), typeParameters.length); + error(node, ts.Diagnostics.Generic_type_0_requires_1_type_argument_s, typeToString(type, undefined, 1 /* WriteArrayAsGenericType */), typeParameters.length); type = undefined; } } @@ -9548,7 +9611,7 @@ var ts; var typeName2 = typeToString(base); var errorInfo = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.Named_properties_0_of_types_1_and_2_are_not_identical, prop.name, typeName1, typeName2); errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Interface_0_cannot_simultaneously_extend_types_1_and_2_Colon, typeToString(type), typeName1, typeName2); - addDiagnostic(ts.createDiagnosticForNodeFromMessageChain(typeNode, errorInfo)); + addDiagnostic(ts.createDiagnosticForNodeFromMessageChain(typeNode, errorInfo, program.getCompilerHost().getNewLine())); } } } @@ -9585,7 +9648,7 @@ var ts; error(errorNode, ts.Diagnostics.Excessive_stack_depth_comparing_types_0_and_1, typeToString(source), typeToString(target)); } else if (errorInfo) { - addDiagnostic(ts.createDiagnosticForNodeFromMessageChain(errorNode, errorInfo)); + addDiagnostic(ts.createDiagnosticForNodeFromMessageChain(errorNode, errorInfo, program.getCompilerHost().getNewLine())); } return result; function reportError(message, arg0, arg1) { @@ -10109,7 +10172,7 @@ var ts; return { typeParameters: typeParameters, inferences: inferences, - inferredTypes: new Array(typeParameters.length), + inferredTypes: new Array(typeParameters.length) }; } function inferTypes(context, source, target) { @@ -11419,7 +11482,7 @@ var ts; } function checkAccessorDeclaration(node) { if (node.kind === 118 /* GetAccessor */) { - if (!isInAmbientContext(node) && node.body && !(bodyContainsAReturnStatement(node.body) || bodyContainsSingleThrowStatement(node.body))) { + if (!ts.isInAmbientContext(node) && node.body && !(bodyContainsAReturnStatement(node.body) || bodyContainsSingleThrowStatement(node.body))) { error(node.name, ts.Diagnostics.A_get_accessor_must_return_a_value_or_consist_of_a_single_throw_statement); } } @@ -11468,15 +11531,7 @@ var ts; getTypeFromArrayTypeNode(node); } function isPrivateWithinAmbient(node) { - return (node.flags & 32 /* Private */) && isInAmbientContext(node); - } - function isInAmbientContext(node) { - while (node) { - if (node.flags & (2 /* Ambient */ | 512 /* DeclarationFile */)) - return true; - node = node.parent; - } - return false; + return (node.flags & 32 /* Private */) && ts.isInAmbientContext(node); } function checkSpecializedSignatureDeclaration(signatureDeclarationNode) { var signature = getSignatureFromDeclaration(signatureDeclarationNode); @@ -11498,7 +11553,7 @@ var ts; } function getEffectiveDeclarationFlags(n, flagsToCheck) { var flags = n.flags; - if (n.parent.kind !== 170 /* InterfaceDeclaration */ && isInAmbientContext(n)) { + if (n.parent.kind !== 170 /* InterfaceDeclaration */ && ts.isInAmbientContext(n)) { if (!(flags & 2 /* Ambient */)) { flags |= 1 /* Export */; } @@ -11535,44 +11590,82 @@ var ts; var hasOverloads = false; var bodyDeclaration; var lastSeenNonAmbientDeclaration; + var previousDeclaration; var declarations = symbol.declarations; var isConstructor = (symbol.flags & 4096 /* Constructor */) !== 0; + function reportImplementationExpectedError(node) { + var seen = false; + var subsequentNode = ts.forEachChild(node.parent, function (c) { + if (seen) { + return c; + } + else { + seen = c === node; + } + }); + if (subsequentNode) { + if (subsequentNode.kind === node.kind) { + var errorNode = subsequentNode.name || subsequentNode; + if (node.name && subsequentNode.name && node.name.text === subsequentNode.name.text) { + ts.Debug.assert(node.kind === 116 /* Method */); + ts.Debug.assert((node.flags & 64 /* Static */) !== (subsequentNode.flags & 64 /* Static */)); + var diagnostic = node.flags & 64 /* Static */ ? ts.Diagnostics.Function_overload_must_be_static : ts.Diagnostics.Function_overload_must_not_be_static; + error(errorNode, diagnostic); + return; + } + else if (subsequentNode.body) { + error(errorNode, ts.Diagnostics.Function_implementation_name_must_be_0, ts.identifierToString(node.name)); + return; + } + } + } + var errorNode = node.name || node; + if (isConstructor) { + error(errorNode, ts.Diagnostics.Constructor_implementation_is_missing); + } + else { + error(errorNode, ts.Diagnostics.Function_implementation_is_missing_or_not_immediately_following_the_declaration); + } + } + var isExportSymbolInsideModule = symbol.parent && symbol.parent.flags & ts.SymbolFlags.Module; for (var i = 0; i < declarations.length; i++) { var node = declarations[i]; + var inAmbientContext = ts.isInAmbientContext(node); + var inAmbientContextOrInterface = node.parent.kind === 170 /* InterfaceDeclaration */ || node.parent.kind === 125 /* TypeLiteral */ || inAmbientContext; + if (inAmbientContextOrInterface) { + previousDeclaration = undefined; + } if (node.kind === 167 /* FunctionDeclaration */ || node.kind === 116 /* Method */ || node.kind === 117 /* Constructor */) { var currentNodeFlags = getEffectiveDeclarationFlags(node, flagsToCheck); someNodeFlags |= currentNodeFlags; allNodeFlags &= currentNodeFlags; - var inAmbientContext = isInAmbientContext(node); - var inAmbientContextOrInterface = node.parent.kind === 170 /* InterfaceDeclaration */ || node.parent.kind === 125 /* TypeLiteral */ || inAmbientContext; - if (!inAmbientContextOrInterface) { - lastSeenNonAmbientDeclaration = node; - } - if (node.body) { - if (bodyDeclaration) { - if (isConstructor) { - error(node, ts.Diagnostics.Multiple_constructor_implementations_are_not_allowed); - } - else { - error(node, ts.Diagnostics.Duplicate_function_implementation); - } + if (node.body && bodyDeclaration) { + if (isConstructor) { + error(node, ts.Diagnostics.Multiple_constructor_implementations_are_not_allowed); } else { + error(node, ts.Diagnostics.Duplicate_function_implementation); + } + } + else if (!isExportSymbolInsideModule && previousDeclaration && previousDeclaration.parent === node.parent && previousDeclaration.end !== node.pos) { + reportImplementationExpectedError(previousDeclaration); + } + if (node.body) { + if (!bodyDeclaration) { bodyDeclaration = node; } } else { hasOverloads = true; } + previousDeclaration = node; + if (!inAmbientContextOrInterface) { + lastSeenNonAmbientDeclaration = node; + } } } - if (lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body) { - if (isConstructor) { - error(lastSeenNonAmbientDeclaration, ts.Diagnostics.Constructor_implementation_expected); - } - else { - error(lastSeenNonAmbientDeclaration, ts.Diagnostics.Function_implementation_expected); - } + if (!isExportSymbolInsideModule && lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body) { + reportImplementationExpectedError(lastSeenNonAmbientDeclaration); } if (hasOverloads) { checkFlagAgreementBetweenOverloads(declarations, bodyDeclaration, flagsToCheck, someNodeFlags, allNodeFlags); @@ -11675,7 +11768,7 @@ var ts; ts.forEach(node.statements, checkSourceElement); } function checkCollisionWithArgumentsInGeneratedCode(node) { - if (!ts.hasRestParameters(node) || isInAmbientContext(node) || !node.body) { + if (!ts.hasRestParameters(node) || ts.isInAmbientContext(node) || !node.body) { return; } ts.forEach(node.parameters, function (p) { @@ -11689,7 +11782,7 @@ var ts; return; } if (node.kind === 114 /* Parameter */) { - if (node.parent.body && ts.hasRestParameters(node.parent) && !isInAmbientContext(node)) { + if (node.parent.body && ts.hasRestParameters(node.parent) && !ts.isInAmbientContext(node)) { error(node, ts.Diagnostics.Duplicate_identifier_i_Compiler_uses_i_to_initialize_rest_parameter); } return; @@ -11726,7 +11819,7 @@ var ts; if (node.kind === 115 /* Property */ || node.kind === 116 /* Method */ || node.kind === 118 /* GetAccessor */ || node.kind === 119 /* SetAccessor */) { return false; } - if (isInAmbientContext(node)) { + if (ts.isInAmbientContext(node)) { return false; } if (node.kind === 114 /* Parameter */ && !node.parent.body) { @@ -11761,7 +11854,7 @@ var ts; return; } var enclosingClass = getAncestor(node, 169 /* ClassDeclaration */); - if (!enclosingClass || isInAmbientContext(enclosingClass)) { + if (!enclosingClass || ts.isInAmbientContext(enclosingClass)) { return; } if (enclosingClass.baseType) { @@ -11994,7 +12087,7 @@ var ts; var type = getDeclaredTypeOfSymbol(symbol); var staticType = getTypeOfSymbol(symbol); if (node.baseType) { - emitExtends = emitExtends || !isInAmbientContext(node); + emitExtends = emitExtends || !ts.isInAmbientContext(node); checkTypeReference(node.baseType); } if (type.baseTypes.length) { @@ -12147,7 +12240,7 @@ var ts; var enumSymbol = getSymbolOfNode(node); var enumType = getDeclaredTypeOfSymbol(enumSymbol); var autoValue = 0; - var ambient = isInAmbientContext(node); + var ambient = ts.isInAmbientContext(node); ts.forEach(node.members, function (member) { var initializer = member.initializer; if (initializer) { @@ -12190,7 +12283,7 @@ var ts; var declarations = symbol.declarations; for (var i = 0; i < declarations.length; i++) { var declaration = declarations[i]; - if ((declaration.kind === 169 /* ClassDeclaration */ || (declaration.kind === 167 /* FunctionDeclaration */ && declaration.body)) && !isInAmbientContext(declaration)) { + if ((declaration.kind === 169 /* ClassDeclaration */ || (declaration.kind === 167 /* FunctionDeclaration */ && declaration.body)) && !ts.isInAmbientContext(declaration)) { return declaration; } } @@ -12200,7 +12293,7 @@ var ts; checkCollisionWithCapturedThisVariable(node, node.name); checkExportsOnMergedDeclarations(node); var symbol = getSymbolOfNode(node); - if (symbol.flags & 128 /* ValueModule */ && symbol.declarations.length > 1 && !isInAmbientContext(node)) { + if (symbol.flags & 128 /* ValueModule */ && symbol.declarations.length > 1 && !ts.isInAmbientContext(node)) { var classOrFunc = getFirstNonAmbientClassOrFunctionDeclaration(symbol); if (classOrFunc) { if (ts.getSourceFileOfNode(node) !== ts.getSourceFileOfNode(classOrFunc)) { @@ -12502,7 +12595,7 @@ var ts; } function isTypeReferenceIdentifier(identifier) { var node = identifier; - while (node.parent && node.parent.kind === 112 /* QualifiedName */) + if (node.parent && node.parent.kind === 112 /* QualifiedName */) node = node.parent; return node.parent && node.parent.kind === 123 /* TypeReference */; } @@ -12566,9 +12659,18 @@ var ts; } return false; } + function isRightSideOfQualifiedName(node) { + return (node.parent.kind === 112 /* QualifiedName */ || node.parent.kind === 130 /* PropertyAccess */) && node.parent.right === node; + } function getSymbolOfIdentifier(identifier) { if (isExpression(identifier)) { - if (isRightSideOfQualifiedName()) { + if (isRightSideOfQualifiedName(identifier)) { + var node = identifier.parent; + var symbol = getNodeLinks(node).resolvedSymbol; + if (!symbol) { + checkPropertyAccess(node); + } + return getNodeLinks(node).resolvedSymbol; } return resolveEntityName(identifier, identifier, ts.SymbolFlags.Value); } @@ -12576,12 +12678,48 @@ var ts; return getSymbolOfNode(identifier.parent); } if (isTypeReferenceIdentifier(identifier)) { - var entityName = isRightSideOfQualifiedName() ? identifier.parent : identifier; + var entityName = isRightSideOfQualifiedName(identifier) ? identifier.parent : identifier; var meaning = entityName.parent.kind === 123 /* TypeReference */ ? ts.SymbolFlags.Type : ts.SymbolFlags.Namespace; return resolveEntityName(entityName, entityName, meaning); } - function isRightSideOfQualifiedName() { - return (identifier.parent.kind === 112 /* QualifiedName */ || identifier.parent.kind === 130 /* PropertyAccess */) && identifier.parent.right === identifier; + } + function getTypeOfExpression(node) { + if (isExpression(node)) { + while (isRightSideOfQualifiedName(node)) { + node = node.parent; + } + return getApparentType(checkExpression(node)); + } + return unknownType; + } + function getAugmentedPropertiesOfApparentType(type) { + var apparentType = getApparentType(type); + if (apparentType.flags & ts.TypeFlags.ObjectType) { + var propertiesByName = {}; + var results = []; + ts.forEach(getPropertiesOfType(apparentType), function (s) { + propertiesByName[s.name] = s; + results.push(s); + }); + var resolved = resolveObjectTypeMembers(type); + ts.forEachValue(resolved.members, function (s) { + if (symbolIsValue(s) && !propertiesByName[s.name]) { + propertiesByName[s.name] = s; + results.push(s); + } + }); + if (resolved === anyFunctionType || resolved.callSignatures.length || resolved.constructSignatures.length) { + ts.forEach(getPropertiesOfType(globalFunctionType), function (s) { + if (!propertiesByName[s.name]) { + propertiesByName[s.name] = s; + results.push(s); + } + }); + } + return results; + } + else { + return getPropertiesOfType(apparentType); } } function isExternalModuleSymbol(symbol) { @@ -12740,28 +12878,6 @@ var ts; globalRegExpType = getGlobalType("RegExp"); } initializeTypeChecker(); - checker = { - getProgram: function () { return program; }, - getDiagnostics: getDiagnostics, - getGlobalDiagnostics: getGlobalDiagnostics, - getNodeCount: function () { return ts.sum(program.getSourceFiles(), "nodeCount"); }, - getIdentifierCount: function () { return ts.sum(program.getSourceFiles(), "identifierCount"); }, - getSymbolCount: function () { return ts.sum(program.getSourceFiles(), "symbolCount"); }, - getTypeCount: function () { return typeCount; }, - checkProgram: checkProgram, - emitFiles: invokeEmitter, - getSymbolOfNode: getSymbolOfNode, - getParentOfSymbol: getParentOfSymbol, - getTypeOfSymbol: getTypeOfSymbol, - getDeclaredTypeOfSymbol: getDeclaredTypeOfSymbol, - getPropertiesOfType: getPropertiesOfType, - getSignaturesOfType: getSignaturesOfType, - getIndexTypeOfType: getIndexTypeOfType, - getReturnTypeOfSignature: getReturnTypeOfSignature, - resolveEntityName: resolveEntityName, - getSymbolsInScope: getSymbolsInScope, - getSymbolOfIdentifier: getSymbolOfIdentifier - }; return checker; } ts.createTypeChecker = createTypeChecker; @@ -12774,7 +12890,7 @@ var ts; "m": "module", "o": "out", "t": "target", - "v": "version", + "v": "version" }; var options = [ { name: "charset", type: "string" }, @@ -13031,7 +13147,8 @@ var ts; writeFile: writeFile, getCurrentDirectory: function () { return currentDirectory || (currentDirectory = sys.getCurrentDirectory()); }, useCaseSensitiveFileNames: function () { return sys.useCaseSensitiveFileNames; }, - getCanonicalFileName: ts.getCanonicalFileName + getCanonicalFileName: ts.getCanonicalFileName, + getNewLine: function () { return sys.newLine; } }; } function executeCommandLine(args) { diff --git a/bin/typescriptServices.js b/bin/typescriptServices.js new file mode 100644 index 0000000000000..f658770e030a9 --- /dev/null +++ b/bin/typescriptServices.js @@ -0,0 +1,31644 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + +var ts; +(function (ts) { + ts.Diagnostics = { + Unknown_compiler_option_0: { code: 6001, category: 1 /* Error */, key: "Unknown compiler option '{0}'." }, + File_0_not_found: { code: 6002, category: 1 /* Error */, key: "File '{0}' not found." }, + File_0_must_have_extension_ts_or_d_ts: { code: 6003, category: 1 /* Error */, key: "File '{0}' must have extension '.ts' or '.d.ts'." }, + Unrecognized_escape_sequence: { code: 1000, category: 1 /* Error */, key: "Unrecognized escape sequence." }, + Unexpected_character_0: { code: 1001, category: 1 /* Error */, key: "Unexpected character {0}." }, + Missing_close_quote_character: { code: 1002, category: 1 /* Error */, key: "Missing close quote character." }, + Identifier_expected: { code: -9999999, category: 1 /* Error */, key: "Identifier expected." }, + _0_keyword_expected: { code: 1004, category: 1 /* Error */, key: "'{0}' keyword expected." }, + _0_expected: { code: -9999999, category: 1 /* Error */, key: "'{0}' expected." }, + Identifier_expected_0_is_a_keyword: { code: 1006, category: 1 /* Error */, key: "Identifier expected; '{0}' is a keyword." }, + Automatic_semicolon_insertion_not_allowed: { code: 1007, category: 1 /* Error */, key: "Automatic semicolon insertion not allowed." }, + Trailing_comma_not_allowed: { code: 1009, category: 1 /* Error */, key: "Trailing comma not allowed." }, + Asterisk_Slash_expected: { code: 1010, category: 1 /* Error */, key: "'*/' expected." }, + public_or_private_modifier_must_precede_static: { code: 1011, category: 1 /* Error */, key: "'public' or 'private' modifier must precede 'static'." }, + Unexpected_token: { code: 1012, category: 1 /* Error */, key: "Unexpected token." }, + Catch_clause_parameter_cannot_have_a_type_annotation: { code: 1013, category: 1 /* Error */, key: "Catch clause parameter cannot have a type annotation." }, + A_rest_parameter_must_be_last_in_a_parameter_list: { code: 1014, category: 1 /* Error */, key: "A rest parameter must be last in a parameter list." }, + Parameter_cannot_have_question_mark_and_initializer: { code: 1015, category: 1 /* Error */, key: "Parameter cannot have question mark and initializer." }, + A_required_parameter_cannot_follow_an_optional_parameter: { code: 1016, category: 1 /* Error */, key: "A required parameter cannot follow an optional parameter." }, + An_index_signature_cannot_have_a_rest_parameter: { code: 1017, category: 1 /* Error */, key: "An index signature cannot have a rest parameter." }, + An_index_signature_parameter_cannot_have_an_accessibility_modifier: { code: 1018, category: 1 /* Error */, key: "An index signature parameter cannot have an accessibility modifier." }, + An_index_signature_parameter_cannot_have_a_question_mark: { code: 1019, category: 1 /* Error */, key: "An index signature parameter cannot have a question mark." }, + An_index_signature_parameter_cannot_have_an_initializer: { code: 1020, category: 1 /* Error */, key: "An index signature parameter cannot have an initializer." }, + An_index_signature_must_have_a_type_annotation: { code: 1021, category: 1 /* Error */, key: "An index signature must have a type annotation." }, + An_index_signature_parameter_must_have_a_type_annotation: { code: 1022, category: 1 /* Error */, key: "An index signature parameter must have a type annotation." }, + An_index_signature_parameter_type_must_be_string_or_number: { code: 1023, category: 1 /* Error */, key: "An index signature parameter type must be 'string' or 'number'." }, + extends_clause_already_seen: { code: 1024, category: 1 /* Error */, key: "'extends' clause already seen." }, + extends_clause_must_precede_implements_clause: { code: 1025, category: 1 /* Error */, key: "'extends' clause must precede 'implements' clause." }, + Classes_can_only_extend_a_single_class: { code: 1026, category: 1 /* Error */, key: "Classes can only extend a single class." }, + implements_clause_already_seen: { code: 1027, category: 1 /* Error */, key: "'implements' clause already seen." }, + Accessibility_modifier_already_seen: { code: 1028, category: 1 /* Error */, key: "Accessibility modifier already seen." }, + _0_modifier_must_precede_1_modifier: { code: 1029, category: 1 /* Error */, key: "'{0}' modifier must precede '{1}' modifier." }, + _0_modifier_already_seen: { code: 1030, category: 1 /* Error */, key: "'{0}' modifier already seen." }, + _0_modifier_cannot_appear_on_a_class_element: { code: 1031, category: 1 /* Error */, key: "'{0}' modifier cannot appear on a class element." }, + Interface_declaration_cannot_have_implements_clause: { code: 1032, category: 1 /* Error */, key: "Interface declaration cannot have 'implements' clause." }, + super_invocation_cannot_have_type_arguments: { code: 1034, category: 1 /* Error */, key: "'super' invocation cannot have type arguments." }, + Only_ambient_modules_can_use_quoted_names: { code: 1035, category: 1 /* Error */, key: "Only ambient modules can use quoted names." }, + Statements_are_not_allowed_in_ambient_contexts: { code: 1036, category: 1 /* Error */, key: "Statements are not allowed in ambient contexts." }, + A_function_implementation_cannot_be_declared_in_an_ambient_context: { code: 1037, category: 1 /* Error */, key: "A function implementation cannot be declared in an ambient context." }, + A_declare_modifier_cannot_be_used_in_an_already_ambient_context: { code: 1038, category: 1 /* Error */, key: "A 'declare' modifier cannot be used in an already ambient context." }, + Initializers_are_not_allowed_in_ambient_contexts: { code: 1039, category: 1 /* Error */, key: "Initializers are not allowed in ambient contexts." }, + _0_modifier_cannot_appear_on_a_module_element: { code: 1044, category: 1 /* Error */, key: "'{0}' modifier cannot appear on a module element." }, + A_declare_modifier_cannot_be_used_with_an_interface_declaration: { code: 1045, category: 1 /* Error */, key: "A 'declare' modifier cannot be used with an interface declaration." }, + A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file: { code: 1046, category: 1 /* Error */, key: "A 'declare' modifier is required for a top level declaration in a .d.ts file." }, + A_rest_parameter_cannot_be_optional: { code: 1047, category: 1 /* Error */, key: "A rest parameter cannot be optional." }, + A_rest_parameter_cannot_have_an_initializer: { code: 1048, category: 1 /* Error */, key: "A rest parameter cannot have an initializer." }, + A_set_accessor_must_have_exactly_one_parameter: { code: 1049, category: 1 /* Error */, key: "A 'set' accessor must have exactly one parameter." }, + A_set_accessor_cannot_have_an_optional_parameter: { code: 1051, category: 1 /* Error */, key: "A 'set' accessor cannot have an optional parameter." }, + A_set_accessor_parameter_cannot_have_an_initializer: { code: 1052, category: 1 /* Error */, key: "A 'set' accessor parameter cannot have an initializer." }, + A_set_accessor_cannot_have_rest_parameter: { code: 1053, category: 1 /* Error */, key: "A 'set' accessor cannot have rest parameter." }, + A_get_accessor_cannot_have_parameters: { code: 1054, category: 1 /* Error */, key: "A 'get' accessor cannot have parameters." }, + Modifiers_cannot_appear_here: { code: 1055, category: 1 /* Error */, key: "Modifiers cannot appear here." }, + Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher: { code: 1056, category: 1 /* Error */, key: "Accessors are only available when targeting ECMAScript 5 and higher." }, + Enum_member_must_have_initializer: { code: -9999999, category: 1 /* Error */, key: "Enum member must have initializer." }, + An_export_assignment_cannot_be_used_in_an_internal_module: { code: 1063, category: 1 /* Error */, key: "An export assignment cannot be used in an internal module." }, + Ambient_enum_elements_can_only_have_integer_literal_initializers: { code: 1066, category: 1 /* Error */, key: "Ambient enum elements can only have integer literal initializers." }, + module_class_interface_enum_import_or_statement: { code: 1067, category: 3 /* NoPrefix */, key: "module, class, interface, enum, import or statement" }, + Unexpected_token_A_constructor_method_accessor_or_property_was_expected: { code: 1068, category: 1 /* Error */, key: "Unexpected token. A constructor, method, accessor, or property was expected." }, + statement: { code: 1069, category: 3 /* NoPrefix */, key: "statement" }, + case_or_default_clause: { code: 1070, category: 3 /* NoPrefix */, key: "case or default clause" }, + identifier: { code: 1071, category: 3 /* NoPrefix */, key: "identifier" }, + call_construct_index_property_or_function_signature: { code: 1072, category: 3 /* NoPrefix */, key: "call, construct, index, property or function signature" }, + expression: { code: 1073, category: 3 /* NoPrefix */, key: "expression" }, + type_name: { code: 1074, category: 3 /* NoPrefix */, key: "type name" }, + property_or_accessor: { code: 1075, category: 3 /* NoPrefix */, key: "property or accessor" }, + parameter: { code: 1076, category: 3 /* NoPrefix */, key: "parameter" }, + type: { code: 1077, category: 3 /* NoPrefix */, key: "type" }, + type_parameter: { code: 1078, category: 3 /* NoPrefix */, key: "type parameter" }, + A_declare_modifier_cannot_be_used_with_an_import_declaration: { code: 1079, category: 1 /* Error */, key: "A 'declare' modifier cannot be used with an import declaration." }, + Invalid_reference_directive_syntax: { code: 1084, category: 1 /* Error */, key: "Invalid 'reference' directive syntax." }, + Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher: { code: 1085, category: 1 /* Error */, key: "Octal literals are not available when targeting ECMAScript 5 and higher." }, + An_accessor_cannot_be_declared_in_an_ambient_context: { code: 1086, category: 1 /* Error */, key: "An accessor cannot be declared in an ambient context." }, + _0_modifier_cannot_appear_on_a_constructor_declaration: { code: 1089, category: 1 /* Error */, key: "'{0}' modifier cannot appear on a constructor declaration." }, + _0_modifier_cannot_appear_on_a_parameter: { code: 1090, category: 1 /* Error */, key: "'{0}' modifier cannot appear on a parameter." }, + Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement: { code: 1091, category: 1 /* Error */, key: "Only a single variable declaration is allowed in a 'for...in' statement." }, + Type_parameters_cannot_appear_on_a_constructor_declaration: { code: 1092, category: 1 /* Error */, key: "Type parameters cannot appear on a constructor declaration." }, + Type_annotation_cannot_appear_on_a_constructor_declaration: { code: 1093, category: 1 /* Error */, key: "Type annotation cannot appear on a constructor declaration." }, + An_accessor_cannot_have_type_parameters: { code: 1094, category: 1 /* Error */, key: "An accessor cannot have type parameters." }, + A_set_accessor_cannot_have_a_return_type_annotation: { code: 1095, category: 1 /* Error */, key: "A 'set' accessor cannot have a return type annotation." }, + An_index_signature_must_have_exactly_one_parameter: { code: 1096, category: 1 /* Error */, key: "An index signature must have exactly one parameter." }, + _0_list_cannot_be_empty: { code: 1097, category: 1 /* Error */, key: "'{0}' list cannot be empty." }, + Type_parameter_list_cannot_be_empty: { code: 1098, category: 1 /* Error */, key: "Type parameter list cannot be empty." }, + Type_argument_list_cannot_be_empty: { code: 1099, category: 1 /* Error */, key: "Type argument list cannot be empty." }, + Invalid_use_of_0_in_strict_mode: { code: 1100, category: 1 /* Error */, key: "Invalid use of '{0}' in strict mode." }, + with_statements_are_not_allowed_in_strict_mode: { code: 1101, category: 1 /* Error */, key: "'with' statements are not allowed in strict mode." }, + delete_cannot_be_called_on_an_identifier_in_strict_mode: { code: 1102, category: 1 /* Error */, key: "'delete' cannot be called on an identifier in strict mode." }, + Invalid_left_hand_side_in_for_in_statement: { code: 1103, category: 1 /* Error */, key: "Invalid left-hand side in 'for...in' statement." }, + A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: { code: 1104, category: 1 /* Error */, key: "A 'continue' statement can only be used within an enclosing iteration statement." }, + A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: { code: 1105, category: 1 /* Error */, key: "A 'break' statement can only be used within an enclosing iteration or switch statement." }, + Jump_target_cannot_cross_function_boundary: { code: 1107, category: 1 /* Error */, key: "Jump target cannot cross function boundary." }, + A_return_statement_can_only_be_used_within_a_function_body: { code: 1108, category: 1 /* Error */, key: "A 'return' statement can only be used within a function body." }, + Expression_expected: { code: -9999999, category: 1 /* Error */, key: "Expression expected." }, + Type_expected: { code: -9999999, category: 1 /* Error */, key: "Type expected." }, + A_constructor_implementation_cannot_be_declared_in_an_ambient_context: { code: 1111, category: 1 /* Error */, key: "A constructor implementation cannot be declared in an ambient context." }, + A_class_member_cannot_be_declared_optional: { code: 1112, category: 1 /* Error */, key: "A class member cannot be declared optional." }, + A_default_clause_cannot_appear_more_than_once_in_a_switch_statement: { code: 1113, category: 1 /* Error */, key: "A 'default' clause cannot appear more than once in a 'switch' statement." }, + Duplicate_label_0: { code: 1114, category: 1 /* Error */, key: "Duplicate label '{0}'" }, + A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement: { code: 1115, category: 1 /* Error */, key: "A 'continue' statement can only jump to a label of an enclosing iteration statement." }, + A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement: { code: 1116, category: 1 /* Error */, key: "A 'break' statement can only jump to a label of an enclosing statement." }, + An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode: { code: 1117, category: 1 /* Error */, key: "An object literal cannot have multiple properties with the same name in strict mode." }, + An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name: { code: 1118, category: 1 /* Error */, key: "An object literal cannot have multiple get/set accessors with the same name." }, + An_object_literal_cannot_have_property_and_accessor_with_the_same_name: { code: 1119, category: 1 /* Error */, key: "An object literal cannot have property and accessor with the same name." }, + An_export_assignment_cannot_have_modifiers: { code: 1120, category: 1 /* Error */, key: "An export assignment cannot have modifiers." }, + Duplicate_identifier_0: { code: 2000, category: 1 /* Error */, key: "Duplicate identifier '{0}'." }, + new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: { code: 2068, category: 1 /* Error */, key: "'new T[]' cannot be used to create an array. Use 'new Array()' instead." }, + Multiple_constructor_implementations_are_not_allowed: { code: 2070, category: 1 /* Error */, key: "Multiple constructor implementations are not allowed." }, + A_class_may_only_implement_another_class_or_interface: { code: 2074, category: 1 /* Error */, key: "A class may only implement another class or interface." }, + get_and_set_accessor_must_have_the_same_type: { code: 2096, category: 1 /* Error */, key: "'get' and 'set' accessor must have the same type." }, + Static_members_cannot_reference_class_type_parameters: { code: 2099, category: 1 /* Error */, key: "Static members cannot reference class type parameters." }, + super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class: { code: 2102, category: 1 /* Error */, key: "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class" }, + The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2112, category: 1 /* Error */, key: "The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." }, + The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2113, category: 1 /* Error */, key: "The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." }, + An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type: { code: 2114, category: 1 /* Error */, key: "An arithmetic operand must be of type 'any', 'number' or an enum type." }, + The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation: { code: 2115, category: 1 /* Error */, key: "The left-hand side of a 'for...in' statement cannot use a type annotation." }, + The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any: { code: 2116, category: 1 /* Error */, key: "The left-hand side of a 'for...in' statement must be of type 'string' or 'any'." }, + The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2117, category: 1 /* Error */, key: "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter." }, + The_left_hand_side_of_an_in_expression_must_be_of_types_any_string_or_number: { code: 2118, category: 1 /* Error */, key: "The left-hand side of an 'in' expression must be of types 'any', 'string' or 'number'." }, + The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2119, category: 1 /* Error */, key: "The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter" }, + A_get_accessor_must_return_a_value_or_consist_of_a_single_throw_statement: { code: 2126, category: 1 /* Error */, key: "A 'get' accessor must return a value or consist of a single 'throw' statement." }, + Getter_and_setter_accessors_do_not_agree_in_visibility: { code: 2127, category: 1 /* Error */, key: "Getter and setter accessors do not agree in visibility." }, + A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_or_consist_of_a_single_throw_statement: { code: 2131, category: 1 /* Error */, key: "A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement." }, + Untyped_function_calls_may_not_accept_type_arguments: { code: 2158, category: 1 /* Error */, key: "Untyped function calls may not accept type arguments." }, + The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2120, category: 1 /* Error */, key: "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter." }, + The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type: { code: 2121, category: 1 /* Error */, key: "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type." }, + Setters_cannot_return_a_value: { code: 2122, category: 1 /* Error */, key: "Setters cannot return a value." }, + Invalid_left_hand_side_of_assignment_expression: { code: 2130, category: 1 /* Error */, key: "Invalid left-hand side of assignment expression." }, + Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2: { code: 2134, category: 1 /* Error */, key: "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'." }, + All_symbols_within_a_with_block_will_be_resolved_to_any: { code: 2135, category: 1 /* Error */, key: "All symbols within a 'with' block will be resolved to 'any'." }, + The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer: { code: 2139, category: 1 /* Error */, key: "The operand of an increment or decrement operator must be a variable, property or indexer." }, + Overload_signatures_must_all_be_public_or_private: { code: 2150, category: 1 /* Error */, key: "Overload signatures must all be public or private." }, + Overload_signatures_must_all_be_exported_or_not_exported: { code: 2151, category: 1 /* Error */, key: "Overload signatures must all be exported or not exported." }, + Overload_signatures_must_all_be_ambient_or_non_ambient: { code: 2152, category: 1 /* Error */, key: "Overload signatures must all be ambient or non-ambient." }, + Overload_signatures_must_all_be_optional_or_required: { code: 2153, category: 1 /* Error */, key: "Overload signatures must all be optional or required." }, + this_cannot_be_referenced_in_constructor_arguments: { code: 2155, category: 1 /* Error */, key: "'this' cannot be referenced in constructor arguments." }, + Value_of_type_0_is_not_callable_Did_you_mean_to_include_new: { code: 2161, category: 1 /* Error */, key: "Value of type '{0}' is not callable. Did you mean to include 'new'?" }, + A_signature_with_an_implementation_cannot_use_a_string_literal_type: { code: 2163, category: 1 /* Error */, key: "A signature with an implementation cannot use a string literal type." }, + Interface_0_cannot_simultaneously_extend_types_1_and_2_Colon: { code: 2189, category: 1 /* Error */, key: "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}':" }, + Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it: { code: 2190, category: 1 /* Error */, key: "Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it." }, + Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local: { code: 2192, category: 1 /* Error */, key: "Individual declarations in merged declaration {0} must be all exported or all local." }, + super_cannot_be_referenced_in_constructor_arguments: { code: 2193, category: 1 /* Error */, key: "'super' cannot be referenced in constructor arguments." }, + Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: { code: 2194, category: 1 /* Error */, key: "Return type of constructor signature must be assignable to the instance type of the class" }, + Ambient_external_module_declaration_cannot_specify_relative_module_name: { code: 2196, category: 1 /* Error */, key: "Ambient external module declaration cannot specify relative module name." }, + Import_declaration_in_an_ambient_external_module_declaration_cannot_reference_external_module_through_relative_external_module_name: { code: 2197, category: 1 /* Error */, key: "Import declaration in an ambient external module declaration cannot reference external module through relative external module name." }, + Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference: { code: 2200, category: 1 /* Error */, key: "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference." }, + Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference: { code: 2205, category: 1 /* Error */, key: "Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference." }, + Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference: { code: 2206, category: 1 /* Error */, key: "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference." }, + Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference: { code: 2207, category: 1 /* Error */, key: "Expression resolves to '_super' that compiler uses to capture base class reference." }, + Duplicate_identifier_i_Compiler_uses_i_to_initialize_rest_parameter: { code: 2224, category: 1 /* Error */, key: "Duplicate identifier '_i'. Compiler uses '_i' to initialize rest parameter." }, + Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters: { code: 2225, category: 1 /* Error */, key: "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters." }, + Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list: { code: 2229, category: 1 /* Error */, key: "Constraint of a type parameter cannot reference any type parameter from the same type parameter list." }, + Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: { code: 2230, category: 1 /* Error */, key: "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor." }, + Parameter_0_cannot_be_referenced_in_its_initializer: { code: 2231, category: 1 /* Error */, key: "Parameter '{0}' cannot be referenced in its initializer." }, + Duplicate_string_index_signature: { code: 2232, category: 1 /* Error */, key: "Duplicate string index signature." }, + Duplicate_number_index_signature: { code: 2233, category: 1 /* Error */, key: "Duplicate number index signature." }, + All_declarations_of_an_interface_must_have_identical_type_parameters: { code: 2234, category: 1 /* Error */, key: "All declarations of an interface must have identical type parameters." }, + Expression_resolves_to_variable_declaration_i_that_compiler_uses_to_initialize_rest_parameter: { code: 2235, category: 1 /* Error */, key: "Expression resolves to variable declaration '_i' that compiler uses to initialize rest parameter." }, + Function_implementation_name_must_be_0: { code: 2239, category: 1 /* Error */, key: "Function implementation name must be '{0}'." }, + Constructor_implementation_is_missing: { code: 2240, category: 1 /* Error */, key: "Constructor implementation is missing." }, + An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements: { code: 2245, category: 1 /* Error */, key: "An export assignment cannot be used in a module with other exported elements." }, + A_parameter_property_is_only_allowed_in_a_constructor_implementation: { code: 2246, category: 1 /* Error */, key: "A parameter property is only allowed in a constructor implementation." }, + Function_overload_must_be_static: { code: 2247, category: 1 /* Error */, key: "Function overload must be static." }, + Function_overload_must_not_be_static: { code: 2248, category: 1 /* Error */, key: "Function overload must not be static." }, + Circular_definition_of_import_alias_0: { code: 3000, category: 1 /* Error */, key: "Circular definition of import alias '{0}'." }, + Cannot_find_name_0: { code: 3001, category: 1 /* Error */, key: "Cannot find name '{0}'." }, + Module_0_has_no_exported_member_1: { code: 3002, category: 1 /* Error */, key: "Module '{0}' has no exported member '{1}'." }, + Cannot_find_external_module_0: { code: 3003, category: 1 /* Error */, key: "Cannot find external module '{0}'." }, + A_module_cannot_have_more_than_one_export_assignment: { code: 3004, category: 1 /* Error */, key: "A module cannot have more than one export assignment." }, + Type_0_recursively_references_itself_as_a_base_type: { code: 3005, category: 1 /* Error */, key: "Type '{0}' recursively references itself as a base type." }, + A_class_may_only_extend_another_class: { code: 3006, category: 1 /* Error */, key: "A class may only extend another class." }, + An_interface_may_only_extend_a_class_or_another_interface: { code: 3007, category: 1 /* Error */, key: "An interface may only extend a class or another interface." }, + Generic_type_0_requires_1_type_argument_s: { code: 3008, category: 1 /* Error */, key: "Generic type '{0}' requires {1} type argument(s)." }, + Type_0_is_not_generic: { code: 3009, category: 1 /* Error */, key: "Type '{0}' is not generic." }, + Cannot_find_global_type_0: { code: 3010, category: 1 /* Error */, key: "Cannot find global type '{0}'." }, + Global_type_0_must_be_a_class_or_interface_type: { code: 3011, category: 1 /* Error */, key: "Global type '{0}' must be a class or interface type." }, + Global_type_0_must_have_1_type_parameter_s: { code: 3012, category: 1 /* Error */, key: "Global type '{0}' must have {1} type parameter(s)." }, + this_cannot_be_referenced_in_a_module_body: { code: 3013, category: 1 /* Error */, key: "'this' cannot be referenced in a module body." }, + this_cannot_be_referenced_in_a_static_property_initializer: { code: 3014, category: 1 /* Error */, key: "'this' cannot be referenced in a static property initializer." }, + this_cannot_be_referenced_in_current_location: { code: -9999999, category: 1 /* Error */, key: "'this' cannot be referenced in current location." }, + super_can_only_be_referenced_in_a_derived_class: { code: 3015, category: 1 /* Error */, key: "'super' can only be referenced in a derived class." }, + Property_0_does_not_exist_on_type_1: { code: 3017, category: 1 /* Error */, key: "Property '{0}' does not exist on type '{1}'." }, + An_index_expression_argument_must_be_of_type_string_number_or_any: { code: 3018, category: 1 /* Error */, key: "An index expression argument must be of type 'string', 'number', or 'any'." }, + Type_0_does_not_satisfy_the_constraint_1_Colon: { code: 3019, category: 1 /* Error */, key: "Type '{0}' does not satisfy the constraint '{1}':" }, + Type_0_does_not_satisfy_the_constraint_1: { code: 3019, category: 1 /* Error */, key: "Type '{0}' does not satisfy the constraint '{1}'." }, + Supplied_parameters_do_not_match_any_signature_of_call_target: { code: 3020, category: 1 /* Error */, key: "Supplied parameters do not match any signature of call target." }, + Cannot_invoke_an_expression_whose_type_lacks_a_call_signature: { code: 3021, category: 1 /* Error */, key: "Cannot invoke an expression whose type lacks a call signature." }, + Only_a_void_function_can_be_called_with_the_new_keyword: { code: 3022, category: 1 /* Error */, key: "Only a void function can be called with the 'new' keyword." }, + Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature: { code: 3023, category: 1 /* Error */, key: "Cannot use 'new' with an expression whose type lacks a call or construct signature." }, + Neither_type_0_nor_type_1_is_assignable_to_the_other_Colon: { code: 3024, category: 1 /* Error */, key: "Neither type '{0}' nor type '{1}' is assignable to the other:" }, + Neither_type_0_nor_type_1_is_assignable_to_the_other: { code: 3024, category: 1 /* Error */, key: "Neither type '{0}' nor type '{1}' is assignable to the other." }, + No_best_common_type_exists_among_return_expressions: { code: 3027, category: 1 /* Error */, key: "No best common type exists among return expressions." }, + Operator_0_cannot_be_applied_to_types_1_and_2: { code: 3028, category: 1 /* Error */, key: "Operator '{0}' cannot be applied to types '{1}' and '{2}'." }, + No_best_common_type_exists_between_0_and_1: { code: 3029, category: 1 /* Error */, key: "No best common type exists between '{0}' and '{1}'." }, + No_best_common_type_exists_between_0_1_and_2: { code: 3030, category: 1 /* Error */, key: "No best common type exists between '{0}', '{1}', and '{2}'." }, + A_rest_parameter_must_be_of_an_array_type: { code: 3031, category: 1 /* Error */, key: "A rest parameter must be of an array type." }, + A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation: { code: 3032, category: 1 /* Error */, key: "A parameter initializer is only allowed in a function or constructor implementation." }, + Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature: { code: 3033, category: 1 /* Error */, key: "Specialized overload signature is not assignable to any non-specialized signature." }, + Duplicate_function_implementation: { code: 3034, category: 1 /* Error */, key: "Duplicate function implementation." }, + Overload_signature_is_not_compatible_with_function_implementation: { code: 3035, category: 1 /* Error */, key: "Overload signature is not compatible with function implementation." }, + Argument_of_type_0_is_not_assignable_to_parameter_of_type_1: { code: 3036, category: 1 /* Error */, key: "Argument of type '{0}' is not assignable to parameter of type '{1}'." }, + Index_signature_is_missing_in_type_0: { code: 4003, category: 1 /* Error */, key: "Index signature is missing in type '{0}'." }, + Index_signatures_are_incompatible_Colon: { code: 4004, category: 1 /* Error */, key: "Index signatures are incompatible:" }, + Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function: { code: 4016, category: 3 /* NoPrefix */, key: "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function." }, + Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function: { code: 4017, category: 3 /* NoPrefix */, key: "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function." }, + Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor: { code: 4018, category: 3 /* NoPrefix */, key: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor." }, + Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property: { code: 4019, category: 3 /* NoPrefix */, key: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property." }, + In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element: { code: 4024, category: 1 /* Error */, key: "In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element." }, + Named_properties_0_of_types_1_and_2_are_not_identical: { code: 4032, category: 3 /* NoPrefix */, key: "Named properties '{0}' of types '{1}' and '{2}' are not identical." }, + Cannot_find_the_common_subdirectory_path_for_the_input_files: { code: 5009, category: 1 /* Error */, key: "Cannot find the common subdirectory path for the input files." }, + Cannot_read_file_0_Colon_1: { code: 5012, category: 1 /* Error */, key: "Cannot read file '{0}': {1}" }, + Unsupported_file_encoding: { code: 5013, category: 3 /* NoPrefix */, key: "Unsupported file encoding." }, + Could_not_write_file_0_Colon_1: { code: 5033, category: 1 /* Error */, key: "Could not write file '{0}': {1}" }, + Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option: { code: 5038, category: 1 /* Error */, key: "Option mapRoot cannot be specified without specifying sourcemap option." }, + Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option: { code: 5039, category: 1 /* Error */, key: "Option sourceRoot cannot be specified without specifying sourcemap option." }, + Version_0: { code: 6029, category: 2 /* Message */, key: "Version {0}" }, + Variable_0_implicitly_has_an_1_type: { code: 7005, category: 1 /* Error */, key: "Variable '{0}' implicitly has an '{1}' type." }, + Parameter_0_implicitly_has_an_1_type: { code: 7006, category: 1 /* Error */, key: "Parameter '{0}' implicitly has an '{1}' type." }, + Member_0_implicitly_has_an_1_type: { code: 7008, category: 1 /* Error */, key: "Member '{0}' implicitly has an '{1}' type." }, + new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type: { code: 7009, category: 1 /* Error */, key: "'new' expression, whose target lacks a construct signature, implicitly has an 'any' type." }, + _0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type: { code: 7010, category: 1 /* Error */, key: "'{0}', which lacks return-type annotation, implicitly has an '{1}' return type." }, + Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type: { code: 7011, category: 1 /* Error */, key: "Function expression, which lacks return-type annotation, implicitly has an '{0}' return type." }, + Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: { code: 7013, category: 1 /* Error */, key: "Construct signature, which lacks return-type annotation, implicitly has an 'any' return type." }, + Lambda_function_which_lacks_return_type_annotation_implicitly_has_an_0_return_type: { code: 7014, category: 1 /* Error */, key: "Lambda function, which lacks return-type annotation, implicitly has an '{0}' return type." }, + Array_literal_implicitly_has_an_0_type: { code: 7015, category: 1 /* Error */, key: "Array literal implicitly has an '{0}' type." }, + Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_type_annotation: { code: 7016, category: 1 /* Error */, key: "Property '{0}' implicitly has type 'any', because its 'set' accessor lacks a type annotation." }, + Index_signature_of_object_type_implicitly_has_an_any_type: { code: 7017, category: 1 /* Error */, key: "Index signature of object type implicitly has an 'any' type." }, + Object_literal_s_property_0_implicitly_has_an_1_type: { code: 7018, category: 1 /* Error */, key: "Object literal's property '{0}' implicitly has an '{1}' type." }, + Rest_parameter_0_implicitly_has_an_any_type: { code: 7019, category: 1 /* Error */, key: "Rest parameter '{0}' implicitly has an 'any[]' type." }, + Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: { code: 7020, category: 1 /* Error */, key: "Call signature, which lacks return-type annotation, implicitly has an 'any' return type." }, + Variable_declaration_list_cannot_be_empty: { code: -9999999, category: 1 /* Error */, key: "Variable declaration list cannot be empty." }, + Digit_expected: { code: -9999999, category: 1 /* Error */, key: "Digit expected." }, + Hexadecimal_digit_expected: { code: -9999999, category: 1 /* Error */, key: "Hexadecimal digit expected." }, + Unexpected_end_of_text: { code: -9999999, category: 1 /* Error */, key: "Unexpected end of text." }, + Unterminated_string_constant: { code: -9999999, category: 1 /* Error */, key: "Unterminated string constant." }, + Invalid_character: { code: -9999999, category: 1 /* Error */, key: "Invalid character." }, + Declaration_or_statement_expected: { code: -9999999, category: 1 /* Error */, key: "Declaration or statement expected." }, + Statement_expected: { code: -9999999, category: 1 /* Error */, key: "Statement expected." }, + case_or_default_expected: { code: -9999999, category: 1 /* Error */, key: "'case' or 'default' expected." }, + Property_or_signature_expected: { code: -9999999, category: 1 /* Error */, key: "Property or signature expected." }, + Enum_member_expected: { code: -9999999, category: 1 /* Error */, key: "Enum member expected." }, + Type_reference_expected: { code: -9999999, category: 1 /* Error */, key: "Type reference expected." }, + Variable_declaration_expected: { code: -9999999, category: 1 /* Error */, key: "Variable declaration expected." }, + Argument_expression_expected: { code: -9999999, category: 1 /* Error */, key: "Argument expression expected." }, + Property_assignment_expected: { code: -9999999, category: 1 /* Error */, key: "Property assignment expected." }, + Expression_or_comma_expected: { code: -9999999, category: 1 /* Error */, key: "Expression or comma expected." }, + Parameter_declaration_expected: { code: -9999999, category: 1 /* Error */, key: "Parameter declaration expected." }, + Type_parameter_declaration_expected: { code: -9999999, category: 1 /* Error */, key: "Type parameter declaration expected." }, + Type_argument_expected: { code: -9999999, category: 1 /* Error */, key: "Type argument expected." }, + String_literal_expected: { code: -9999999, category: 1 /* Error */, key: "String literal expected." }, + not_preceded_by_parameter_list: { code: -9999999, category: 1 /* Error */, key: "'=>' not preceded by parameter list." }, + Invalid_assignment_target: { code: -9999999, category: 1 /* Error */, key: "Invalid assignment target." }, + super_must_be_followed_by_argument_list_or_member_access: { code: -9999999, category: 1 /* Error */, key: "'super' must be followed by argument list or member access." }, + Line_break_not_permitted_here: { code: -9999999, category: 1 /* Error */, key: "Line break not permitted here." }, + catch_or_finally_expected: { code: -9999999, category: 1 /* Error */, key: "'catch' or 'finally' expected." }, + Block_or_expected: { code: -9999999, category: 1 /* Error */, key: "Block or ';' expected." }, + Modifiers_not_permitted_on_index_signature_members: { code: -9999999, category: 1 /* Error */, key: "Modifiers not permitted on index signature members." }, + Class_member_declaration_expected: { code: -9999999, category: 1 /* Error */, key: "Class member declaration expected." }, + Declaration_expected: { code: -9999999, category: 1 /* Error */, key: "Declaration expected." }, + Invalid_reference_comment: { code: -9999999, category: 1 /* Error */, key: "Invalid reference comment." }, + File_0_is_not_an_external_module: { code: -9999999, category: 1 /* Error */, key: "File '{0}' is not an external module." }, + Excessive_stack_depth_comparing_types_0_and_1: { code: -9999999, category: 1 /* Error */, key: "Excessive stack depth comparing types '{0}' and '{1}'." }, + Type_0_is_not_assignable_to_type_1_Colon: { code: -9999999, category: 1 /* Error */, key: "Type '{0}' is not assignable to type '{1}':" }, + Type_0_is_not_assignable_to_type_1: { code: -9999999, category: 1 /* Error */, key: "Type '{0}' is not assignable to type '{1}'." }, + Property_0_is_missing_in_type_1: { code: -9999999, category: 1 /* Error */, key: "Property '{0}' is missing in type '{1}'." }, + Private_property_0_cannot_be_reimplemented: { code: -9999999, category: 1 /* Error */, key: "Private property '{0}' cannot be reimplemented." }, + Required_property_0_cannot_be_reimplemented_with_optional_property_in_1: { code: 2012, category: 1 /* Error */, key: "Required property '{0}' cannot be reimplemented with optional property in '{1}'." }, + Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors: { code: -9999999, category: 1 /* Error */, key: "Super calls are not permitted outside constructors or in nested functions inside constructors" }, + Only_public_methods_of_the_base_class_are_accessible_via_the_super_keyword: { code: -9999999, category: 1 /* Error */, key: "Only public methods of the base class are accessible via the 'super' keyword" }, + A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties: { code: -9999999, category: 1 /* Error */, key: "A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties." }, + Constructors_for_derived_classes_must_contain_a_super_call: { code: -9999999, category: 1 /* Error */, key: "Constructors for derived classes must contain a 'super' call." }, + Import_name_cannot_be_0: { code: -9999999, category: 1 /* Error */, key: "Import name cannot be '{0}'" }, + Type_parameter_name_cannot_be_0: { code: -9999999, category: 1 /* Error */, key: "Type parameter name cannot be '{0}'" }, + Class_name_cannot_be_0: { code: -9999999, category: 1 /* Error */, key: "Class name cannot be '{0}'" }, + Interface_name_cannot_be_0: { code: -9999999, category: 1 /* Error */, key: "Interface name cannot be '{0}'" }, + Enum_name_cannot_be_0: { code: -9999999, category: 1 /* Error */, key: "Enum name cannot be '{0}'" }, + Types_of_property_0_are_incompatible_Colon: { code: -9999999, category: 1 /* Error */, key: "Types of property '{0}' are incompatible:" }, + Types_of_parameters_0_and_1_are_incompatible_Colon: { code: -9999999, category: 1 /* Error */, key: "Types of parameters '{0}' and '{1}' are incompatible:" }, + Unknown_identifier_0: { code: -9999999, category: 1 /* Error */, key: "Unknown identifier '{0}'." }, + Property_0_is_inaccessible: { code: -9999999, category: 1 /* Error */, key: "Property '{0}' is inaccessible." }, + Function_implementation_is_missing_or_not_immediately_following_the_declaration: { code: -9999999, category: 1 /* Error */, key: "Function implementation is missing or not immediately following the declaration." }, + Property_0_of_type_1_is_not_assignable_to_string_index_type_2: { code: -9999999, category: 1 /* Error */, key: "Property '{0}' of type '{1}' is not assignable to string index type '{2}'." }, + Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2: { code: -9999999, category: 1 /* Error */, key: "Property '{0}' of type '{1}' is not assignable to numeric index type '{2}'." }, + Numeric_index_type_0_is_not_assignable_to_string_index_type_1: { code: -9999999, category: 1 /* Error */, key: "Numeric index type '{0}' is not assignable to string index type '{1}'." }, + Class_0_incorrectly_extends_base_class_1_Colon: { code: -9999999, category: 1 /* Error */, key: "Class '{0}' incorrectly extends base class '{1}':" }, + Class_0_incorrectly_extends_base_class_1: { code: -9999999, category: 1 /* Error */, key: "Class '{0}' incorrectly extends base class '{1}'." }, + Class_static_side_0_incorrectly_extends_base_class_static_side_1_Colon: { code: -9999999, category: 1 /* Error */, key: "Class static side '{0}' incorrectly extends base class static side '{1}':" }, + Class_static_side_0_incorrectly_extends_base_class_static_side_1: { code: -9999999, category: 1 /* Error */, key: "Class static side '{0}' incorrectly extends base class static side '{1}'." }, + Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_0: { code: -9999999, category: 1 /* Error */, key: "Type name '{0}' in extends clause does not reference constructor function for '{0}'." }, + Class_0_incorrectly_implements_interface_1_Colon: { code: -9999999, category: 1 /* Error */, key: "Class '{0}' incorrectly implements interface '{1}':" }, + Class_0_incorrectly_implements_interface_1: { code: -9999999, category: 1 /* Error */, key: "Class '{0}' incorrectly implements interface '{1}'." }, + Interface_0_incorrectly_extends_interface_1_Colon: { code: -9999999, category: 1 /* Error */, key: "Interface '{0}' incorrectly extends interface '{1}':" }, + Interface_0_incorrectly_extends_interface_1: { code: -9999999, category: 1 /* Error */, key: "Interface '{0}' incorrectly extends interface '{1}'." }, + Ambient_external_modules_cannot_be_nested_in_other_modules: { code: -9999999, category: 1 /* Error */, key: "Ambient external modules cannot be nested in other modules." }, + Import_declarations_in_an_internal_module_cannot_reference_an_external_module: { code: -9999999, category: 1 /* Error */, key: "Import declarations in an internal module cannot reference an external module." }, + A_module_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged: { code: -9999999, category: 1 /* Error */, key: "A module declaration cannot be in a different file from a class or function with which it is merged" }, + A_module_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged: { code: -9999999, category: 1 /* Error */, key: "A module declaration cannot be located prior to a class or function with which it is merged" }, + Cannot_compile_external_modules_unless_the_module_flag_is_provided: { code: -9999999, category: 1 /* Error */, key: "Cannot compile external modules unless the '--module' flag is provided." }, + Import_declaration_conflicts_with_local_declaration_of_0: { code: -9999999, category: 1 /* Error */, key: "Import declaration conflicts with local declaration of '{0}'" }, + Module_0_is_hidden_by_a_local_declaration_with_the_same_name: { code: -9999999, category: 1 /* Error */, key: "Module '{0}' is hidden by a local declaration with the same name" }, + Filename_0_differs_from_already_included_filename_1_only_in_casing: { code: -9999999, category: 1 /* Error */, key: "Filename '{0}' differs from already included filename '{1}' only in casing" }, + Argument_for_module_option_must_be_commonjs_or_amd: { code: -9999999, category: 1 /* Error */, key: "Argument for '--module' option must be 'commonjs' or 'amd'." }, + Argument_for_target_option_must_be_es3_or_es5: { code: -9999999, category: 1 /* Error */, key: "Argument for '--target' option must be 'es3' or 'es5'." }, + Compiler_option_0_expects_an_argument: { code: -9999999, category: 1 /* Error */, key: "Compiler option '{0}' expects an argument." }, + Unterminated_quoted_string_in_response_file_0: { code: -9999999, category: 1 /* Error */, key: "Unterminated quoted string in response file '{0}'." }, + Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1: { code: -9999999, category: 1 /* Error */, key: "Locale must be of the form or -. For example '{0}' or '{1}'." }, + Unsupported_locale_0: { code: -9999999, category: 1 /* Error */, key: "Unsupported locale {0}." }, + Unable_to_open_file_0: { code: -9999999, category: 1 /* Error */, key: "Unable to open file {0}." }, + Corrupted_locale_file_0: { code: -9999999, category: 1 /* Error */, key: "Corrupted locale file {0}." }, + No_input_files_specified: { code: -9999999, category: 1 /* Error */, key: "No input files specified." } + }; +})(ts || (ts = {})); +var ts; +(function (ts) { + var textToToken = { + "any": 101 /* AnyKeyword */, + "boolean": 102 /* BooleanKeyword */, + "break": 56 /* BreakKeyword */, + "case": 57 /* CaseKeyword */, + "catch": 58 /* CatchKeyword */, + "class": 59 /* ClassKeyword */, + "continue": 61 /* ContinueKeyword */, + "const": 60 /* ConstKeyword */, + "constructor": 103 /* ConstructorKeyword */, + "debugger": 62 /* DebuggerKeyword */, + "declare": 104 /* DeclareKeyword */, + "default": 63 /* DefaultKeyword */, + "delete": 64 /* DeleteKeyword */, + "do": 65 /* DoKeyword */, + "else": 66 /* ElseKeyword */, + "enum": 67 /* EnumKeyword */, + "export": 68 /* ExportKeyword */, + "extends": 69 /* ExtendsKeyword */, + "false": 70 /* FalseKeyword */, + "finally": 71 /* FinallyKeyword */, + "for": 72 /* ForKeyword */, + "function": 73 /* FunctionKeyword */, + "get": 105 /* GetKeyword */, + "if": 74 /* IfKeyword */, + "implements": 92 /* ImplementsKeyword */, + "import": 75 /* ImportKeyword */, + "in": 76 /* InKeyword */, + "instanceof": 77 /* InstanceOfKeyword */, + "interface": 93 /* InterfaceKeyword */, + "let": 94 /* LetKeyword */, + "module": 106 /* ModuleKeyword */, + "new": 78 /* NewKeyword */, + "null": 79 /* NullKeyword */, + "number": 108 /* NumberKeyword */, + "package": 95 /* PackageKeyword */, + "private": 96 /* PrivateKeyword */, + "protected": 97 /* ProtectedKeyword */, + "public": 98 /* PublicKeyword */, + "require": 107 /* RequireKeyword */, + "return": 80 /* ReturnKeyword */, + "set": 109 /* SetKeyword */, + "static": 99 /* StaticKeyword */, + "string": 110 /* StringKeyword */, + "super": 81 /* SuperKeyword */, + "switch": 82 /* SwitchKeyword */, + "this": 83 /* ThisKeyword */, + "throw": 84 /* ThrowKeyword */, + "true": 85 /* TrueKeyword */, + "try": 86 /* TryKeyword */, + "typeof": 87 /* TypeOfKeyword */, + "var": 88 /* VarKeyword */, + "void": 89 /* VoidKeyword */, + "while": 90 /* WhileKeyword */, + "with": 91 /* WithKeyword */, + "yield": 100 /* YieldKeyword */, + "{": 5 /* OpenBraceToken */, + "}": 6 /* CloseBraceToken */, + "(": 7 /* OpenParenToken */, + ")": 8 /* CloseParenToken */, + "[": 9 /* OpenBracketToken */, + "]": 10 /* CloseBracketToken */, + ".": 11 /* DotToken */, + "...": 12 /* DotDotDotToken */, + ";": 13 /* SemicolonToken */, + ",": 14 /* CommaToken */, + "<": 15 /* LessThanToken */, + ">": 16 /* GreaterThanToken */, + "<=": 17 /* LessThanEqualsToken */, + ">=": 18 /* GreaterThanEqualsToken */, + "==": 19 /* EqualsEqualsToken */, + "!=": 20 /* ExclamationEqualsToken */, + "===": 21 /* EqualsEqualsEqualsToken */, + "!==": 22 /* ExclamationEqualsEqualsToken */, + "=>": 23 /* EqualsGreaterThanToken */, + "+": 24 /* PlusToken */, + "-": 25 /* MinusToken */, + "*": 26 /* AsteriskToken */, + "/": 27 /* SlashToken */, + "%": 28 /* PercentToken */, + "++": 29 /* PlusPlusToken */, + "--": 30 /* MinusMinusToken */, + "<<": 31 /* LessThanLessThanToken */, + ">>": 32 /* GreaterThanGreaterThanToken */, + ">>>": 33 /* GreaterThanGreaterThanGreaterThanToken */, + "&": 34 /* AmpersandToken */, + "|": 35 /* BarToken */, + "^": 36 /* CaretToken */, + "!": 37 /* ExclamationToken */, + "~": 38 /* TildeToken */, + "&&": 39 /* AmpersandAmpersandToken */, + "||": 40 /* BarBarToken */, + "?": 41 /* QuestionToken */, + ":": 42 /* ColonToken */, + "=": 43 /* EqualsToken */, + "+=": 44 /* PlusEqualsToken */, + "-=": 45 /* MinusEqualsToken */, + "*=": 46 /* AsteriskEqualsToken */, + "/=": 47 /* SlashEqualsToken */, + "%=": 48 /* PercentEqualsToken */, + "<<=": 49 /* LessThanLessThanEqualsToken */, + ">>=": 50 /* GreaterThanGreaterThanEqualsToken */, + ">>>=": 51 /* GreaterThanGreaterThanGreaterThanEqualsToken */, + "&=": 52 /* AmpersandEqualsToken */, + "|=": 53 /* BarEqualsToken */, + "^=": 54 /* CaretEqualsToken */ + }; + var unicodeES3IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1610, 1649, 1747, 1749, 1749, 1765, 1766, 1786, 1788, 1808, 1808, 1810, 1836, 1920, 1957, 2309, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2784, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3294, 3294, 3296, 3297, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3424, 3425, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3805, 3840, 3840, 3904, 3911, 3913, 3946, 3976, 3979, 4096, 4129, 4131, 4135, 4137, 4138, 4176, 4181, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6067, 6176, 6263, 6272, 6312, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8319, 8319, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12346, 12353, 12436, 12445, 12446, 12449, 12538, 12540, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65138, 65140, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; + var unicodeES3IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 768, 846, 864, 866, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1155, 1158, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1441, 1443, 1465, 1467, 1469, 1471, 1471, 1473, 1474, 1476, 1476, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1621, 1632, 1641, 1648, 1747, 1749, 1756, 1759, 1768, 1770, 1773, 1776, 1788, 1808, 1836, 1840, 1866, 1920, 1968, 2305, 2307, 2309, 2361, 2364, 2381, 2384, 2388, 2392, 2403, 2406, 2415, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2492, 2494, 2500, 2503, 2504, 2507, 2509, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2562, 2562, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2649, 2652, 2654, 2654, 2662, 2676, 2689, 2691, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2784, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2876, 2883, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2913, 2918, 2927, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3031, 3031, 3047, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3134, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3168, 3169, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3262, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3297, 3302, 3311, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3390, 3395, 3398, 3400, 3402, 3405, 3415, 3415, 3424, 3425, 3430, 3439, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3805, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3946, 3953, 3972, 3974, 3979, 3984, 3991, 3993, 4028, 4038, 4038, 4096, 4129, 4131, 4135, 4137, 4138, 4140, 4146, 4150, 4153, 4160, 4169, 4176, 4185, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 4969, 4977, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6099, 6112, 6121, 6160, 6169, 6176, 6263, 6272, 6313, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8319, 8319, 8400, 8412, 8417, 8417, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12346, 12353, 12436, 12441, 12442, 12445, 12446, 12449, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65056, 65059, 65075, 65076, 65101, 65103, 65136, 65138, 65140, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65381, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; + var unicodeES5IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; + var unicodeES5IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112, 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423, 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272, 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072, 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; + function lookupInUnicodeMap(code, map) { + if (code < map[0]) { + return false; + } + var lo = 0; + var hi = map.length; + var mid; + while (lo + 1 < hi) { + mid = lo + (hi - lo) / 2; + mid -= mid % 2; + if (map[mid] <= code && code <= map[mid + 1]) { + return true; + } + if (code < map[mid]) { + hi = mid; + } + else { + lo = mid + 2; + } + } + return false; + } + function isUnicodeIdentifierStart(code, languageVersion) { + return languageVersion === 0 /* ES3 */ ? lookupInUnicodeMap(code, unicodeES3IdentifierStart) : lookupInUnicodeMap(code, unicodeES5IdentifierStart); + } + function isUnicodeIdentifierPart(code, languageVersion) { + return languageVersion === 0 /* ES3 */ ? lookupInUnicodeMap(code, unicodeES3IdentifierPart) : lookupInUnicodeMap(code, unicodeES5IdentifierPart); + } + function makeReverseMap(source) { + var result = []; + for (var name in source) { + if (source.hasOwnProperty(name)) { + result[source[name]] = name; + } + } + return result; + } + var tokenStrings = makeReverseMap(textToToken); + function tokenToString(t) { + return tokenStrings[t]; + } + ts.tokenToString = tokenToString; + function getLineStarts(text) { + var result = new Array(); + var pos = 0; + var lineStart = 0; + while (pos < text.length) { + switch (text.charCodeAt(pos++)) { + case 13 /* carriageReturn */: + if (text.charCodeAt(pos) === 10 /* lineFeed */) { + pos++; + } + case 10 /* lineFeed */: + result.push(lineStart); + lineStart = pos; + break; + } + } + result.push(lineStart); + return result; + } + ts.getLineStarts = getLineStarts; + function getLineAndCharacterOfPosition(lineStarts, position) { + var lineNumber = ts.binarySearch(lineStarts, position); + if (lineNumber < 0) { + lineNumber = (~lineNumber) - 1; + } + return { + line: lineNumber + 1, + character: position - lineStarts[lineNumber] + 1 + }; + } + ts.getLineAndCharacterOfPosition = getLineAndCharacterOfPosition; + function positionToLineAndCharacter(text, pos) { + var lineStarts = getLineStarts(text); + return getLineAndCharacterOfPosition(lineStarts, pos); + } + ts.positionToLineAndCharacter = positionToLineAndCharacter; + var hasOwnProperty = Object.prototype.hasOwnProperty; + function isWhiteSpace(ch) { + return ch === 32 /* space */ || ch === 9 /* tab */ || ch === 11 /* verticalTab */ || ch === 12 /* formFeed */ || ch === 160 /* nonBreakingSpace */ || ch === 5760 /* ogham */ || ch >= 8192 /* enQuad */ && ch <= 8203 /* zeroWidthSpace */ || ch === 8239 /* narrowNoBreakSpace */ || ch === 8287 /* mathematicalSpace */ || ch === 12288 /* ideographicSpace */ || ch === 65279 /* byteOrderMark */; + } + function isLineBreak(ch) { + return ch === 10 /* lineFeed */ || ch === 13 /* carriageReturn */ || ch === 8232 /* lineSeparator */ || ch === 8233 /* paragraphSeparator */; + } + function isDigit(ch) { + return ch >= 48 /* _0 */ && ch <= 57 /* _9 */; + } + function skipTrivia(text, pos, stopAfterLineBreak) { + while (true) { + var ch = text.charCodeAt(pos); + switch (ch) { + case 13 /* carriageReturn */: + if (text.charCodeAt(pos + 1) === 10 /* lineFeed */) + pos++; + case 10 /* lineFeed */: + pos++; + if (stopAfterLineBreak) + return pos; + continue; + case 9 /* tab */: + case 11 /* verticalTab */: + case 12 /* formFeed */: + case 32 /* space */: + pos++; + continue; + case 47 /* slash */: + if (text.charCodeAt(pos + 1) === 47 /* slash */) { + pos += 2; + while (pos < text.length) { + if (isLineBreak(text.charCodeAt(pos))) { + break; + } + pos++; + } + continue; + } + if (text.charCodeAt(pos + 1) === 42 /* asterisk */) { + pos += 2; + while (pos < text.length) { + if (text.charCodeAt(pos) === 42 /* asterisk */ && text.charCodeAt(pos + 1) === 47 /* slash */) { + pos += 2; + break; + } + pos++; + } + continue; + } + break; + default: + if (ch > 127 /* maxAsciiCharacter */ && (isWhiteSpace(ch) || isLineBreak(ch))) { + pos++; + continue; + } + break; + } + return pos; + } + } + ts.skipTrivia = skipTrivia; + function createScanner(languageVersion, text, onError, onComment) { + var pos; + var len; + var startPos; + var tokenPos; + var token; + var tokenValue; + var precedingLineBreak; + function error(message) { + if (onError) + onError(message); + } + function isIdentifierStart(ch) { + return ch >= 65 /* A */ && ch <= 90 /* Z */ || ch >= 97 /* a */ && ch <= 122 /* z */ || ch === 36 /* $ */ || ch === 95 /* _ */ || ch > 127 /* maxAsciiCharacter */ && isUnicodeIdentifierStart(ch, languageVersion); + } + function isIdentifierPart(ch) { + return ch >= 65 /* A */ && ch <= 90 /* Z */ || ch >= 97 /* a */ && ch <= 122 /* z */ || ch >= 48 /* _0 */ && ch <= 57 /* _9 */ || ch === 36 /* $ */ || ch === 95 /* _ */ || ch > 127 /* maxAsciiCharacter */ && isUnicodeIdentifierPart(ch, languageVersion); + } + function scanNumber() { + var start = pos; + while (isDigit(text.charCodeAt(pos))) + pos++; + if (text.charCodeAt(pos) === 46 /* dot */) { + pos++; + while (isDigit(text.charCodeAt(pos))) + pos++; + } + var end = pos; + if (text.charCodeAt(pos) === 69 /* E */ || text.charCodeAt(pos) === 101 /* e */) { + pos++; + if (text.charCodeAt(pos) === 43 /* plus */ || text.charCodeAt(pos) === 45 /* minus */) + pos++; + if (isDigit(text.charCodeAt(pos))) { + pos++; + while (isDigit(text.charCodeAt(pos))) + pos++; + end = pos; + } + else { + error(ts.Diagnostics.Digit_expected); + } + } + return +(text.substring(start, end)); + } + function scanHexDigits(count, exact) { + var digits = 0; + var value = 0; + while (digits < count || !exact) { + var ch = text.charCodeAt(pos); + if (ch >= 48 /* _0 */ && ch <= 57 /* _9 */) { + value = value * 16 + ch - 48 /* _0 */; + } + else if (ch >= 65 /* A */ && ch <= 70 /* F */) { + value = value * 16 + ch - 65 /* A */ + 10; + } + else if (ch >= 97 /* a */ && ch <= 102 /* f */) { + value = value * 16 + ch - 97 /* a */ + 10; + } + else { + break; + } + pos++; + digits++; + } + if (digits < count) { + value = -1; + } + return value; + } + function scanString() { + var quote = text.charCodeAt(pos++); + var result = ""; + var start = pos; + while (true) { + if (pos >= len) { + result += text.substring(start, pos); + error(ts.Diagnostics.Unexpected_end_of_text); + break; + } + var ch = text.charCodeAt(pos); + if (ch === quote) { + result += text.substring(start, pos); + pos++; + break; + } + if (ch === 92 /* backslash */) { + result += text.substring(start, pos); + pos++; + if (pos >= len) { + error(ts.Diagnostics.Unexpected_end_of_text); + break; + } + ch = text.charCodeAt(pos++); + switch (ch) { + case 48 /* _0 */: + result += "\0"; + break; + case 98 /* b */: + result += "\b"; + break; + case 116 /* t */: + result += "\t"; + break; + case 110 /* n */: + result += "\n"; + break; + case 118 /* v */: + result += "\v"; + break; + case 102 /* f */: + result += "\f"; + break; + case 114 /* r */: + result += "\r"; + break; + case 39 /* singleQuote */: + result += "\'"; + break; + case 34 /* doubleQuote */: + result += "\""; + break; + case 120 /* x */: + case 117 /* u */: + var ch = scanHexDigits(ch === 120 /* x */ ? 2 : 4, true); + if (ch >= 0) { + result += String.fromCharCode(ch); + } + else { + error(ts.Diagnostics.Hexadecimal_digit_expected); + } + break; + case 13 /* carriageReturn */: + if (pos < len && text.charCodeAt(pos) === 10 /* lineFeed */) + pos++; + break; + case 10 /* lineFeed */: + case 8232 /* lineSeparator */: + case 8233 /* paragraphSeparator */: + break; + default: + result += String.fromCharCode(ch); + } + start = pos; + continue; + } + if (isLineBreak(ch)) { + result += text.substring(start, pos); + error(ts.Diagnostics.Unterminated_string_constant); + break; + } + pos++; + } + return result; + } + function peekUnicodeEscape() { + if (pos + 5 < len && text.charCodeAt(pos + 1) === 117 /* u */) { + var start = pos; + pos += 2; + var value = scanHexDigits(4, true); + pos = start; + return value; + } + return -1; + } + function scanIdentifierParts() { + var result = ""; + var start = pos; + while (pos < len) { + var ch = text.charCodeAt(pos); + if (isIdentifierPart(ch)) { + pos++; + } + else if (ch === 92 /* backslash */) { + ch = peekUnicodeEscape(); + if (!(ch >= 0 && isIdentifierPart(ch))) { + break; + } + result += text.substring(start, pos); + result += String.fromCharCode(ch); + pos += 6; + start = pos; + } + else { + break; + } + } + result += text.substring(start, pos); + return result; + } + function getIdentifierToken() { + var len = tokenValue.length; + if (len >= 2 && len <= 11) { + var ch = tokenValue.charCodeAt(0); + if (ch >= 97 /* a */ && ch <= 122 /* z */ && hasOwnProperty.call(textToToken, tokenValue)) { + return token = textToToken[tokenValue]; + } + } + return token = 55 /* Identifier */; + } + function scan() { + startPos = pos; + precedingLineBreak = false; + while (true) { + tokenPos = pos; + if (pos >= len) { + return token = 1 /* EndOfFileToken */; + } + var ch = text.charCodeAt(pos); + switch (ch) { + case 10 /* lineFeed */: + case 13 /* carriageReturn */: + precedingLineBreak = true; + case 9 /* tab */: + case 11 /* verticalTab */: + case 12 /* formFeed */: + case 32 /* space */: + pos++; + continue; + case 33 /* exclamation */: + if (text.charCodeAt(pos + 1) === 61 /* equals */) { + if (text.charCodeAt(pos + 2) === 61 /* equals */) { + return pos += 3, token = 22 /* ExclamationEqualsEqualsToken */; + } + return pos += 2, token = 20 /* ExclamationEqualsToken */; + } + return pos++, token = 37 /* ExclamationToken */; + case 34 /* doubleQuote */: + case 39 /* singleQuote */: + tokenValue = scanString(); + return token = 3 /* StringLiteral */; + case 37 /* percent */: + if (text.charCodeAt(pos + 1) === 61 /* equals */) { + return pos += 2, token = 48 /* PercentEqualsToken */; + } + return pos++, token = 28 /* PercentToken */; + case 38 /* ampersand */: + if (text.charCodeAt(pos + 1) === 38 /* ampersand */) { + return pos += 2, token = 39 /* AmpersandAmpersandToken */; + } + if (text.charCodeAt(pos + 1) === 61 /* equals */) { + return pos += 2, token = 52 /* AmpersandEqualsToken */; + } + return pos++, token = 34 /* AmpersandToken */; + case 40 /* openParen */: + return pos++, token = 7 /* OpenParenToken */; + case 41 /* closeParen */: + return pos++, token = 8 /* CloseParenToken */; + case 42 /* asterisk */: + if (text.charCodeAt(pos + 1) === 61 /* equals */) { + return pos += 2, token = 46 /* AsteriskEqualsToken */; + } + return pos++, token = 26 /* AsteriskToken */; + case 43 /* plus */: + if (text.charCodeAt(pos + 1) === 43 /* plus */) { + return pos += 2, token = 29 /* PlusPlusToken */; + } + if (text.charCodeAt(pos + 1) === 61 /* equals */) { + return pos += 2, token = 44 /* PlusEqualsToken */; + } + return pos++, token = 24 /* PlusToken */; + case 44 /* comma */: + return pos++, token = 14 /* CommaToken */; + case 45 /* minus */: + if (text.charCodeAt(pos + 1) === 45 /* minus */) { + return pos += 2, token = 30 /* MinusMinusToken */; + } + if (text.charCodeAt(pos + 1) === 61 /* equals */) { + return pos += 2, token = 45 /* MinusEqualsToken */; + } + return pos++, token = 25 /* MinusToken */; + case 46 /* dot */: + if (isDigit(text.charCodeAt(pos + 1))) { + tokenValue = "" + scanNumber(); + return token = 2 /* NumericLiteral */; + } + if (text.charCodeAt(pos + 1) === 46 /* dot */ && text.charCodeAt(pos + 2) === 46 /* dot */) { + return pos += 3, token = 12 /* DotDotDotToken */; + } + return pos++, token = 11 /* DotToken */; + case 47 /* slash */: + if (text.charCodeAt(pos + 1) === 47 /* slash */) { + pos += 2; + while (pos < len) { + if (isLineBreak(text.charCodeAt(pos))) { + break; + } + pos++; + } + if (onComment) { + onComment(tokenPos, pos); + } + continue; + } + if (text.charCodeAt(pos + 1) === 42 /* asterisk */) { + pos += 2; + var safeLength = len - 1; + var commentClosed = false; + while (pos < safeLength) { + var ch = text.charCodeAt(pos); + if (ch === 42 /* asterisk */ && text.charCodeAt(pos + 1) === 47 /* slash */) { + pos += 2; + commentClosed = true; + break; + } + if (isLineBreak(ch)) { + precedingLineBreak = true; + } + pos++; + } + if (!commentClosed) { + pos++; + onError(ts.Diagnostics.Asterisk_Slash_expected); + } + if (onComment) { + onComment(tokenPos, pos); + } + continue; + } + if (text.charCodeAt(pos + 1) === 61 /* equals */) { + return pos += 2, token = 47 /* SlashEqualsToken */; + } + return pos++, token = 27 /* SlashToken */; + case 48 /* _0 */: + if (pos + 2 < len && (text.charCodeAt(pos + 1) === 88 /* X */ || text.charCodeAt(pos + 1) === 120 /* x */)) { + pos += 2; + var value = scanHexDigits(1, false); + if (value < 0) { + error(ts.Diagnostics.Hexadecimal_digit_expected); + value = 0; + } + tokenValue = "" + value; + return 2 /* NumericLiteral */; + } + case 49 /* _1 */: + case 50 /* _2 */: + case 51 /* _3 */: + case 52 /* _4 */: + case 53 /* _5 */: + case 54 /* _6 */: + case 55 /* _7 */: + case 56 /* _8 */: + case 57 /* _9 */: + tokenValue = "" + scanNumber(); + return token = 2 /* NumericLiteral */; + case 58 /* colon */: + return pos++, token = 42 /* ColonToken */; + case 59 /* semicolon */: + return pos++, token = 13 /* SemicolonToken */; + case 60 /* lessThan */: + if (text.charCodeAt(pos + 1) === 60 /* lessThan */) { + if (text.charCodeAt(pos + 2) === 61 /* equals */) { + return pos += 3, token = 49 /* LessThanLessThanEqualsToken */; + } + return pos += 2, token = 31 /* LessThanLessThanToken */; + } + if (text.charCodeAt(pos + 1) === 61 /* equals */) { + return pos += 2, token = 17 /* LessThanEqualsToken */; + } + return pos++, token = 15 /* LessThanToken */; + case 61 /* equals */: + if (text.charCodeAt(pos + 1) === 61 /* equals */) { + if (text.charCodeAt(pos + 2) === 61 /* equals */) { + return pos += 3, token = 21 /* EqualsEqualsEqualsToken */; + } + return pos += 2, token = 19 /* EqualsEqualsToken */; + } + if (text.charCodeAt(pos + 1) === 62 /* greaterThan */) { + return pos += 2, token = 23 /* EqualsGreaterThanToken */; + } + return pos++, token = 43 /* EqualsToken */; + case 62 /* greaterThan */: + return pos++, token = 16 /* GreaterThanToken */; + case 63 /* question */: + return pos++, token = 41 /* QuestionToken */; + case 91 /* openBracket */: + return pos++, token = 9 /* OpenBracketToken */; + case 93 /* closeBracket */: + return pos++, token = 10 /* CloseBracketToken */; + case 94 /* caret */: + if (text.charCodeAt(pos + 1) === 61 /* equals */) { + return pos += 2, token = 54 /* CaretEqualsToken */; + } + return pos++, token = 36 /* CaretToken */; + case 123 /* openBrace */: + return pos++, token = 5 /* OpenBraceToken */; + case 124 /* bar */: + if (text.charCodeAt(pos + 1) === 124 /* bar */) { + return pos += 2, token = 40 /* BarBarToken */; + } + if (text.charCodeAt(pos + 1) === 61 /* equals */) { + return pos += 2, token = 53 /* BarEqualsToken */; + } + return pos++, token = 35 /* BarToken */; + case 125 /* closeBrace */: + return pos++, token = 6 /* CloseBraceToken */; + case 126 /* tilde */: + return pos++, token = 38 /* TildeToken */; + case 92 /* backslash */: + var ch = peekUnicodeEscape(); + if (ch >= 0 && isIdentifierStart(ch)) { + pos += 6; + tokenValue = String.fromCharCode(ch) + scanIdentifierParts(); + return token = getIdentifierToken(); + } + error(ts.Diagnostics.Invalid_character); + return pos++, token = 0 /* Unknown */; + default: + if (isIdentifierStart(ch)) { + pos++; + while (pos < len && isIdentifierPart(ch = text.charCodeAt(pos))) + pos++; + tokenValue = text.substring(tokenPos, pos); + if (ch === 92 /* backslash */) { + tokenValue += scanIdentifierParts(); + } + return token = getIdentifierToken(); + } + else if (isWhiteSpace(ch)) { + pos++; + continue; + } + else if (isLineBreak(ch)) { + precedingLineBreak = true; + pos++; + continue; + } + error(ts.Diagnostics.Invalid_character); + return pos++, token = 0 /* Unknown */; + } + } + } + function reScanGreaterToken() { + if (token === 16 /* GreaterThanToken */) { + if (text.charCodeAt(pos) === 62 /* greaterThan */) { + if (text.charCodeAt(pos + 1) === 62 /* greaterThan */) { + if (text.charCodeAt(pos + 2) === 61 /* equals */) { + return pos += 3, token = 51 /* GreaterThanGreaterThanGreaterThanEqualsToken */; + } + return pos += 2, token = 33 /* GreaterThanGreaterThanGreaterThanToken */; + } + if (text.charCodeAt(pos + 1) === 61 /* equals */) { + return pos += 2, token = 50 /* GreaterThanGreaterThanEqualsToken */; + } + return pos++, token = 32 /* GreaterThanGreaterThanToken */; + } + if (text.charCodeAt(pos) === 61 /* equals */) { + return pos++, token = 18 /* GreaterThanEqualsToken */; + } + } + return token; + } + function reScanSlashToken() { + if (token === 27 /* SlashToken */ || token === 47 /* SlashEqualsToken */) { + var p = tokenPos + 1; + var inEscape = false; + var inCharacterClass = false; + while (true) { + if (p >= len) { + return token; + } + var ch = text.charCodeAt(p); + if (isLineBreak(ch)) { + return token; + } + if (inEscape) { + inEscape = false; + } + else if (ch === 47 /* slash */ && !inCharacterClass) { + break; + } + else if (ch === 91 /* openBracket */) { + inCharacterClass = true; + } + else if (ch === 92 /* backslash */) { + inEscape = true; + } + else if (ch === 93 /* closeBracket */) { + inCharacterClass = false; + } + p++; + } + p++; + while (isIdentifierPart(text.charCodeAt(p))) { + p++; + } + pos = p; + tokenValue = text.substring(tokenPos, pos); + token = 4 /* RegularExpressionLiteral */; + } + return token; + } + function tryScan(callback) { + var savePos = pos; + var saveStartPos = startPos; + var saveTokenPos = tokenPos; + var saveToken = token; + var saveTokenValue = tokenValue; + var savePrecedingLineBreak = precedingLineBreak; + var result = callback(); + if (!result) { + pos = savePos; + startPos = saveStartPos; + tokenPos = saveTokenPos; + token = saveToken; + tokenValue = saveTokenValue; + precedingLineBreak = savePrecedingLineBreak; + } + return result; + } + function setText(newText) { + text = newText || ""; + len = text.length; + setTextPos(0); + } + function setTextPos(textPos) { + pos = textPos; + startPos = textPos; + tokenPos = textPos; + token = 0 /* Unknown */; + precedingLineBreak = false; + } + setText(text); + return { + getStartPos: function () { return startPos; }, + getTextPos: function () { return pos; }, + getToken: function () { return token; }, + getTokenPos: function () { return tokenPos; }, + getTokenText: function () { return text.substring(tokenPos, pos); }, + getTokenValue: function () { return tokenValue; }, + hasPrecedingLineBreak: function () { return precedingLineBreak; }, + isIdentifier: function () { return token === 55 /* Identifier */ || token > ts.SyntaxKind.LastReservedWord; }, + isReservedWord: function () { return token >= ts.SyntaxKind.FirstReservedWord && token <= ts.SyntaxKind.LastReservedWord; }, + reScanGreaterToken: reScanGreaterToken, + reScanSlashToken: reScanSlashToken, + scan: scan, + setText: setText, + setTextPos: setTextPos, + tryScan: tryScan + }; + } + ts.createScanner = createScanner; +})(ts || (ts = {})); +var ts; +(function (ts) { + (function (SyntaxKind) { + SyntaxKind[SyntaxKind["Unknown"] = 0] = "Unknown"; + SyntaxKind[SyntaxKind["EndOfFileToken"] = 1] = "EndOfFileToken"; + SyntaxKind[SyntaxKind["NumericLiteral"] = 2] = "NumericLiteral"; + SyntaxKind[SyntaxKind["StringLiteral"] = 3] = "StringLiteral"; + SyntaxKind[SyntaxKind["RegularExpressionLiteral"] = 4] = "RegularExpressionLiteral"; + SyntaxKind[SyntaxKind["OpenBraceToken"] = 5] = "OpenBraceToken"; + SyntaxKind[SyntaxKind["CloseBraceToken"] = 6] = "CloseBraceToken"; + SyntaxKind[SyntaxKind["OpenParenToken"] = 7] = "OpenParenToken"; + SyntaxKind[SyntaxKind["CloseParenToken"] = 8] = "CloseParenToken"; + SyntaxKind[SyntaxKind["OpenBracketToken"] = 9] = "OpenBracketToken"; + SyntaxKind[SyntaxKind["CloseBracketToken"] = 10] = "CloseBracketToken"; + SyntaxKind[SyntaxKind["DotToken"] = 11] = "DotToken"; + SyntaxKind[SyntaxKind["DotDotDotToken"] = 12] = "DotDotDotToken"; + SyntaxKind[SyntaxKind["SemicolonToken"] = 13] = "SemicolonToken"; + SyntaxKind[SyntaxKind["CommaToken"] = 14] = "CommaToken"; + SyntaxKind[SyntaxKind["LessThanToken"] = 15] = "LessThanToken"; + SyntaxKind[SyntaxKind["GreaterThanToken"] = 16] = "GreaterThanToken"; + SyntaxKind[SyntaxKind["LessThanEqualsToken"] = 17] = "LessThanEqualsToken"; + SyntaxKind[SyntaxKind["GreaterThanEqualsToken"] = 18] = "GreaterThanEqualsToken"; + SyntaxKind[SyntaxKind["EqualsEqualsToken"] = 19] = "EqualsEqualsToken"; + SyntaxKind[SyntaxKind["ExclamationEqualsToken"] = 20] = "ExclamationEqualsToken"; + SyntaxKind[SyntaxKind["EqualsEqualsEqualsToken"] = 21] = "EqualsEqualsEqualsToken"; + SyntaxKind[SyntaxKind["ExclamationEqualsEqualsToken"] = 22] = "ExclamationEqualsEqualsToken"; + SyntaxKind[SyntaxKind["EqualsGreaterThanToken"] = 23] = "EqualsGreaterThanToken"; + SyntaxKind[SyntaxKind["PlusToken"] = 24] = "PlusToken"; + SyntaxKind[SyntaxKind["MinusToken"] = 25] = "MinusToken"; + SyntaxKind[SyntaxKind["AsteriskToken"] = 26] = "AsteriskToken"; + SyntaxKind[SyntaxKind["SlashToken"] = 27] = "SlashToken"; + SyntaxKind[SyntaxKind["PercentToken"] = 28] = "PercentToken"; + SyntaxKind[SyntaxKind["PlusPlusToken"] = 29] = "PlusPlusToken"; + SyntaxKind[SyntaxKind["MinusMinusToken"] = 30] = "MinusMinusToken"; + SyntaxKind[SyntaxKind["LessThanLessThanToken"] = 31] = "LessThanLessThanToken"; + SyntaxKind[SyntaxKind["GreaterThanGreaterThanToken"] = 32] = "GreaterThanGreaterThanToken"; + SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanToken"] = 33] = "GreaterThanGreaterThanGreaterThanToken"; + SyntaxKind[SyntaxKind["AmpersandToken"] = 34] = "AmpersandToken"; + SyntaxKind[SyntaxKind["BarToken"] = 35] = "BarToken"; + SyntaxKind[SyntaxKind["CaretToken"] = 36] = "CaretToken"; + SyntaxKind[SyntaxKind["ExclamationToken"] = 37] = "ExclamationToken"; + SyntaxKind[SyntaxKind["TildeToken"] = 38] = "TildeToken"; + SyntaxKind[SyntaxKind["AmpersandAmpersandToken"] = 39] = "AmpersandAmpersandToken"; + SyntaxKind[SyntaxKind["BarBarToken"] = 40] = "BarBarToken"; + SyntaxKind[SyntaxKind["QuestionToken"] = 41] = "QuestionToken"; + SyntaxKind[SyntaxKind["ColonToken"] = 42] = "ColonToken"; + SyntaxKind[SyntaxKind["EqualsToken"] = 43] = "EqualsToken"; + SyntaxKind[SyntaxKind["PlusEqualsToken"] = 44] = "PlusEqualsToken"; + SyntaxKind[SyntaxKind["MinusEqualsToken"] = 45] = "MinusEqualsToken"; + SyntaxKind[SyntaxKind["AsteriskEqualsToken"] = 46] = "AsteriskEqualsToken"; + SyntaxKind[SyntaxKind["SlashEqualsToken"] = 47] = "SlashEqualsToken"; + SyntaxKind[SyntaxKind["PercentEqualsToken"] = 48] = "PercentEqualsToken"; + SyntaxKind[SyntaxKind["LessThanLessThanEqualsToken"] = 49] = "LessThanLessThanEqualsToken"; + SyntaxKind[SyntaxKind["GreaterThanGreaterThanEqualsToken"] = 50] = "GreaterThanGreaterThanEqualsToken"; + SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanEqualsToken"] = 51] = "GreaterThanGreaterThanGreaterThanEqualsToken"; + SyntaxKind[SyntaxKind["AmpersandEqualsToken"] = 52] = "AmpersandEqualsToken"; + SyntaxKind[SyntaxKind["BarEqualsToken"] = 53] = "BarEqualsToken"; + SyntaxKind[SyntaxKind["CaretEqualsToken"] = 54] = "CaretEqualsToken"; + SyntaxKind[SyntaxKind["Identifier"] = 55] = "Identifier"; + SyntaxKind[SyntaxKind["BreakKeyword"] = 56] = "BreakKeyword"; + SyntaxKind[SyntaxKind["CaseKeyword"] = 57] = "CaseKeyword"; + SyntaxKind[SyntaxKind["CatchKeyword"] = 58] = "CatchKeyword"; + SyntaxKind[SyntaxKind["ClassKeyword"] = 59] = "ClassKeyword"; + SyntaxKind[SyntaxKind["ConstKeyword"] = 60] = "ConstKeyword"; + SyntaxKind[SyntaxKind["ContinueKeyword"] = 61] = "ContinueKeyword"; + SyntaxKind[SyntaxKind["DebuggerKeyword"] = 62] = "DebuggerKeyword"; + SyntaxKind[SyntaxKind["DefaultKeyword"] = 63] = "DefaultKeyword"; + SyntaxKind[SyntaxKind["DeleteKeyword"] = 64] = "DeleteKeyword"; + SyntaxKind[SyntaxKind["DoKeyword"] = 65] = "DoKeyword"; + SyntaxKind[SyntaxKind["ElseKeyword"] = 66] = "ElseKeyword"; + SyntaxKind[SyntaxKind["EnumKeyword"] = 67] = "EnumKeyword"; + SyntaxKind[SyntaxKind["ExportKeyword"] = 68] = "ExportKeyword"; + SyntaxKind[SyntaxKind["ExtendsKeyword"] = 69] = "ExtendsKeyword"; + SyntaxKind[SyntaxKind["FalseKeyword"] = 70] = "FalseKeyword"; + SyntaxKind[SyntaxKind["FinallyKeyword"] = 71] = "FinallyKeyword"; + SyntaxKind[SyntaxKind["ForKeyword"] = 72] = "ForKeyword"; + SyntaxKind[SyntaxKind["FunctionKeyword"] = 73] = "FunctionKeyword"; + SyntaxKind[SyntaxKind["IfKeyword"] = 74] = "IfKeyword"; + SyntaxKind[SyntaxKind["ImportKeyword"] = 75] = "ImportKeyword"; + SyntaxKind[SyntaxKind["InKeyword"] = 76] = "InKeyword"; + SyntaxKind[SyntaxKind["InstanceOfKeyword"] = 77] = "InstanceOfKeyword"; + SyntaxKind[SyntaxKind["NewKeyword"] = 78] = "NewKeyword"; + SyntaxKind[SyntaxKind["NullKeyword"] = 79] = "NullKeyword"; + SyntaxKind[SyntaxKind["ReturnKeyword"] = 80] = "ReturnKeyword"; + SyntaxKind[SyntaxKind["SuperKeyword"] = 81] = "SuperKeyword"; + SyntaxKind[SyntaxKind["SwitchKeyword"] = 82] = "SwitchKeyword"; + SyntaxKind[SyntaxKind["ThisKeyword"] = 83] = "ThisKeyword"; + SyntaxKind[SyntaxKind["ThrowKeyword"] = 84] = "ThrowKeyword"; + SyntaxKind[SyntaxKind["TrueKeyword"] = 85] = "TrueKeyword"; + SyntaxKind[SyntaxKind["TryKeyword"] = 86] = "TryKeyword"; + SyntaxKind[SyntaxKind["TypeOfKeyword"] = 87] = "TypeOfKeyword"; + SyntaxKind[SyntaxKind["VarKeyword"] = 88] = "VarKeyword"; + SyntaxKind[SyntaxKind["VoidKeyword"] = 89] = "VoidKeyword"; + SyntaxKind[SyntaxKind["WhileKeyword"] = 90] = "WhileKeyword"; + SyntaxKind[SyntaxKind["WithKeyword"] = 91] = "WithKeyword"; + SyntaxKind[SyntaxKind["ImplementsKeyword"] = 92] = "ImplementsKeyword"; + SyntaxKind[SyntaxKind["InterfaceKeyword"] = 93] = "InterfaceKeyword"; + SyntaxKind[SyntaxKind["LetKeyword"] = 94] = "LetKeyword"; + SyntaxKind[SyntaxKind["PackageKeyword"] = 95] = "PackageKeyword"; + SyntaxKind[SyntaxKind["PrivateKeyword"] = 96] = "PrivateKeyword"; + SyntaxKind[SyntaxKind["ProtectedKeyword"] = 97] = "ProtectedKeyword"; + SyntaxKind[SyntaxKind["PublicKeyword"] = 98] = "PublicKeyword"; + SyntaxKind[SyntaxKind["StaticKeyword"] = 99] = "StaticKeyword"; + SyntaxKind[SyntaxKind["YieldKeyword"] = 100] = "YieldKeyword"; + SyntaxKind[SyntaxKind["AnyKeyword"] = 101] = "AnyKeyword"; + SyntaxKind[SyntaxKind["BooleanKeyword"] = 102] = "BooleanKeyword"; + SyntaxKind[SyntaxKind["ConstructorKeyword"] = 103] = "ConstructorKeyword"; + SyntaxKind[SyntaxKind["DeclareKeyword"] = 104] = "DeclareKeyword"; + SyntaxKind[SyntaxKind["GetKeyword"] = 105] = "GetKeyword"; + SyntaxKind[SyntaxKind["ModuleKeyword"] = 106] = "ModuleKeyword"; + SyntaxKind[SyntaxKind["RequireKeyword"] = 107] = "RequireKeyword"; + SyntaxKind[SyntaxKind["NumberKeyword"] = 108] = "NumberKeyword"; + SyntaxKind[SyntaxKind["SetKeyword"] = 109] = "SetKeyword"; + SyntaxKind[SyntaxKind["StringKeyword"] = 110] = "StringKeyword"; + SyntaxKind[SyntaxKind["Missing"] = 111] = "Missing"; + SyntaxKind[SyntaxKind["QualifiedName"] = 112] = "QualifiedName"; + SyntaxKind[SyntaxKind["TypeParameter"] = 113] = "TypeParameter"; + SyntaxKind[SyntaxKind["Parameter"] = 114] = "Parameter"; + SyntaxKind[SyntaxKind["Property"] = 115] = "Property"; + SyntaxKind[SyntaxKind["Method"] = 116] = "Method"; + SyntaxKind[SyntaxKind["Constructor"] = 117] = "Constructor"; + SyntaxKind[SyntaxKind["GetAccessor"] = 118] = "GetAccessor"; + SyntaxKind[SyntaxKind["SetAccessor"] = 119] = "SetAccessor"; + SyntaxKind[SyntaxKind["CallSignature"] = 120] = "CallSignature"; + SyntaxKind[SyntaxKind["ConstructSignature"] = 121] = "ConstructSignature"; + SyntaxKind[SyntaxKind["IndexSignature"] = 122] = "IndexSignature"; + SyntaxKind[SyntaxKind["TypeReference"] = 123] = "TypeReference"; + SyntaxKind[SyntaxKind["TypeQuery"] = 124] = "TypeQuery"; + SyntaxKind[SyntaxKind["TypeLiteral"] = 125] = "TypeLiteral"; + SyntaxKind[SyntaxKind["ArrayType"] = 126] = "ArrayType"; + SyntaxKind[SyntaxKind["ArrayLiteral"] = 127] = "ArrayLiteral"; + SyntaxKind[SyntaxKind["ObjectLiteral"] = 128] = "ObjectLiteral"; + SyntaxKind[SyntaxKind["PropertyAssignment"] = 129] = "PropertyAssignment"; + SyntaxKind[SyntaxKind["PropertyAccess"] = 130] = "PropertyAccess"; + SyntaxKind[SyntaxKind["IndexedAccess"] = 131] = "IndexedAccess"; + SyntaxKind[SyntaxKind["CallExpression"] = 132] = "CallExpression"; + SyntaxKind[SyntaxKind["NewExpression"] = 133] = "NewExpression"; + SyntaxKind[SyntaxKind["TypeAssertion"] = 134] = "TypeAssertion"; + SyntaxKind[SyntaxKind["ParenExpression"] = 135] = "ParenExpression"; + SyntaxKind[SyntaxKind["FunctionExpression"] = 136] = "FunctionExpression"; + SyntaxKind[SyntaxKind["ArrowFunction"] = 137] = "ArrowFunction"; + SyntaxKind[SyntaxKind["PrefixOperator"] = 138] = "PrefixOperator"; + SyntaxKind[SyntaxKind["PostfixOperator"] = 139] = "PostfixOperator"; + SyntaxKind[SyntaxKind["BinaryExpression"] = 140] = "BinaryExpression"; + SyntaxKind[SyntaxKind["ConditionalExpression"] = 141] = "ConditionalExpression"; + SyntaxKind[SyntaxKind["OmittedExpression"] = 142] = "OmittedExpression"; + SyntaxKind[SyntaxKind["Block"] = 143] = "Block"; + SyntaxKind[SyntaxKind["VariableStatement"] = 144] = "VariableStatement"; + SyntaxKind[SyntaxKind["EmptyStatement"] = 145] = "EmptyStatement"; + SyntaxKind[SyntaxKind["ExpressionStatement"] = 146] = "ExpressionStatement"; + SyntaxKind[SyntaxKind["IfStatement"] = 147] = "IfStatement"; + SyntaxKind[SyntaxKind["DoStatement"] = 148] = "DoStatement"; + SyntaxKind[SyntaxKind["WhileStatement"] = 149] = "WhileStatement"; + SyntaxKind[SyntaxKind["ForStatement"] = 150] = "ForStatement"; + SyntaxKind[SyntaxKind["ForInStatement"] = 151] = "ForInStatement"; + SyntaxKind[SyntaxKind["ContinueStatement"] = 152] = "ContinueStatement"; + SyntaxKind[SyntaxKind["BreakStatement"] = 153] = "BreakStatement"; + SyntaxKind[SyntaxKind["ReturnStatement"] = 154] = "ReturnStatement"; + SyntaxKind[SyntaxKind["WithStatement"] = 155] = "WithStatement"; + SyntaxKind[SyntaxKind["SwitchStatement"] = 156] = "SwitchStatement"; + SyntaxKind[SyntaxKind["CaseClause"] = 157] = "CaseClause"; + SyntaxKind[SyntaxKind["DefaultClause"] = 158] = "DefaultClause"; + SyntaxKind[SyntaxKind["LabelledStatement"] = 159] = "LabelledStatement"; + SyntaxKind[SyntaxKind["ThrowStatement"] = 160] = "ThrowStatement"; + SyntaxKind[SyntaxKind["TryStatement"] = 161] = "TryStatement"; + SyntaxKind[SyntaxKind["TryBlock"] = 162] = "TryBlock"; + SyntaxKind[SyntaxKind["CatchBlock"] = 163] = "CatchBlock"; + SyntaxKind[SyntaxKind["FinallyBlock"] = 164] = "FinallyBlock"; + SyntaxKind[SyntaxKind["DebuggerStatement"] = 165] = "DebuggerStatement"; + SyntaxKind[SyntaxKind["VariableDeclaration"] = 166] = "VariableDeclaration"; + SyntaxKind[SyntaxKind["FunctionDeclaration"] = 167] = "FunctionDeclaration"; + SyntaxKind[SyntaxKind["FunctionBlock"] = 168] = "FunctionBlock"; + SyntaxKind[SyntaxKind["ClassDeclaration"] = 169] = "ClassDeclaration"; + SyntaxKind[SyntaxKind["InterfaceDeclaration"] = 170] = "InterfaceDeclaration"; + SyntaxKind[SyntaxKind["EnumDeclaration"] = 171] = "EnumDeclaration"; + SyntaxKind[SyntaxKind["ModuleDeclaration"] = 172] = "ModuleDeclaration"; + SyntaxKind[SyntaxKind["ModuleBlock"] = 173] = "ModuleBlock"; + SyntaxKind[SyntaxKind["ImportDeclaration"] = 174] = "ImportDeclaration"; + SyntaxKind[SyntaxKind["ExportAssignment"] = 175] = "ExportAssignment"; + SyntaxKind[SyntaxKind["EnumMember"] = 176] = "EnumMember"; + SyntaxKind[SyntaxKind["SourceFile"] = 177] = "SourceFile"; + SyntaxKind[SyntaxKind["Program"] = 178] = "Program"; + SyntaxKind[SyntaxKind["SyntaxList"] = 179] = "SyntaxList"; + SyntaxKind[SyntaxKind["Count"] = 180] = "Count"; + SyntaxKind[SyntaxKind["FirstAssignment"] = SyntaxKind.EqualsToken] = "FirstAssignment"; + SyntaxKind[SyntaxKind["LastAssignment"] = SyntaxKind.CaretEqualsToken] = "LastAssignment"; + SyntaxKind[SyntaxKind["FirstReservedWord"] = SyntaxKind.BreakKeyword] = "FirstReservedWord"; + SyntaxKind[SyntaxKind["LastReservedWord"] = SyntaxKind.WithKeyword] = "LastReservedWord"; + SyntaxKind[SyntaxKind["FirstKeyword"] = SyntaxKind.BreakKeyword] = "FirstKeyword"; + SyntaxKind[SyntaxKind["LastKeyword"] = SyntaxKind.StringKeyword] = "LastKeyword"; + SyntaxKind[SyntaxKind["FirstFutureReservedWord"] = SyntaxKind.ImplementsKeyword] = "FirstFutureReservedWord"; + SyntaxKind[SyntaxKind["LastFutureReservedWord"] = SyntaxKind.YieldKeyword] = "LastFutureReservedWord"; + })(ts.SyntaxKind || (ts.SyntaxKind = {})); + var SyntaxKind = ts.SyntaxKind; + (function (NodeFlags) { + NodeFlags[NodeFlags["Export"] = 0x00000001] = "Export"; + NodeFlags[NodeFlags["Ambient"] = 0x00000002] = "Ambient"; + NodeFlags[NodeFlags["QuestionMark"] = 0x00000004] = "QuestionMark"; + NodeFlags[NodeFlags["Rest"] = 0x00000008] = "Rest"; + NodeFlags[NodeFlags["Public"] = 0x00000010] = "Public"; + NodeFlags[NodeFlags["Private"] = 0x00000020] = "Private"; + NodeFlags[NodeFlags["Static"] = 0x00000040] = "Static"; + NodeFlags[NodeFlags["MultiLine"] = 0x00000080] = "MultiLine"; + NodeFlags[NodeFlags["Synthetic"] = 0x00000100] = "Synthetic"; + NodeFlags[NodeFlags["DeclarationFile"] = 0x00000200] = "DeclarationFile"; + NodeFlags[NodeFlags["Modifier"] = NodeFlags.Export | NodeFlags.Ambient | NodeFlags.Public | NodeFlags.Private | NodeFlags.Static] = "Modifier"; + })(ts.NodeFlags || (ts.NodeFlags = {})); + var NodeFlags = ts.NodeFlags; + (function (TypeFormatFlags) { + TypeFormatFlags[TypeFormatFlags["None"] = 0x00000000] = "None"; + TypeFormatFlags[TypeFormatFlags["WriteArrayAsGenericType"] = 0x00000001] = "WriteArrayAsGenericType"; + })(ts.TypeFormatFlags || (ts.TypeFormatFlags = {})); + var TypeFormatFlags = ts.TypeFormatFlags; + (function (SymbolFlags) { + SymbolFlags[SymbolFlags["Variable"] = 0x00000001] = "Variable"; + SymbolFlags[SymbolFlags["Property"] = 0x00000002] = "Property"; + SymbolFlags[SymbolFlags["EnumMember"] = 0x00000004] = "EnumMember"; + SymbolFlags[SymbolFlags["Function"] = 0x00000008] = "Function"; + SymbolFlags[SymbolFlags["Class"] = 0x00000010] = "Class"; + SymbolFlags[SymbolFlags["Interface"] = 0x00000020] = "Interface"; + SymbolFlags[SymbolFlags["Enum"] = 0x00000040] = "Enum"; + SymbolFlags[SymbolFlags["ValueModule"] = 0x00000080] = "ValueModule"; + SymbolFlags[SymbolFlags["NamespaceModule"] = 0x00000100] = "NamespaceModule"; + SymbolFlags[SymbolFlags["TypeLiteral"] = 0x00000200] = "TypeLiteral"; + SymbolFlags[SymbolFlags["ObjectLiteral"] = 0x00000400] = "ObjectLiteral"; + SymbolFlags[SymbolFlags["Method"] = 0x00000800] = "Method"; + SymbolFlags[SymbolFlags["Constructor"] = 0x00001000] = "Constructor"; + SymbolFlags[SymbolFlags["GetAccessor"] = 0x00002000] = "GetAccessor"; + SymbolFlags[SymbolFlags["SetAccessor"] = 0x00004000] = "SetAccessor"; + SymbolFlags[SymbolFlags["CallSignature"] = 0x00008000] = "CallSignature"; + SymbolFlags[SymbolFlags["ConstructSignature"] = 0x00010000] = "ConstructSignature"; + SymbolFlags[SymbolFlags["IndexSignature"] = 0x00020000] = "IndexSignature"; + SymbolFlags[SymbolFlags["TypeParameter"] = 0x00040000] = "TypeParameter"; + SymbolFlags[SymbolFlags["ExportValue"] = 0x00080000] = "ExportValue"; + SymbolFlags[SymbolFlags["ExportType"] = 0x00100000] = "ExportType"; + SymbolFlags[SymbolFlags["ExportNamespace"] = 0x00200000] = "ExportNamespace"; + SymbolFlags[SymbolFlags["Import"] = 0x00400000] = "Import"; + SymbolFlags[SymbolFlags["Instantiated"] = 0x00800000] = "Instantiated"; + SymbolFlags[SymbolFlags["Merged"] = 0x01000000] = "Merged"; + SymbolFlags[SymbolFlags["Transient"] = 0x02000000] = "Transient"; + SymbolFlags[SymbolFlags["Prototype"] = 0x04000000] = "Prototype"; + SymbolFlags[SymbolFlags["Value"] = SymbolFlags.Variable | SymbolFlags.Property | SymbolFlags.EnumMember | SymbolFlags.Function | SymbolFlags.Class | SymbolFlags.Enum | SymbolFlags.ValueModule | SymbolFlags.Method | SymbolFlags.GetAccessor | SymbolFlags.SetAccessor] = "Value"; + SymbolFlags[SymbolFlags["Type"] = SymbolFlags.Class | SymbolFlags.Interface | SymbolFlags.Enum | SymbolFlags.TypeLiteral | SymbolFlags.ObjectLiteral | SymbolFlags.TypeParameter] = "Type"; + SymbolFlags[SymbolFlags["Namespace"] = SymbolFlags.ValueModule | SymbolFlags.NamespaceModule] = "Namespace"; + SymbolFlags[SymbolFlags["Module"] = SymbolFlags.ValueModule | SymbolFlags.NamespaceModule] = "Module"; + SymbolFlags[SymbolFlags["Accessor"] = SymbolFlags.GetAccessor | SymbolFlags.SetAccessor] = "Accessor"; + SymbolFlags[SymbolFlags["Signature"] = SymbolFlags.CallSignature | SymbolFlags.ConstructSignature | SymbolFlags.IndexSignature] = "Signature"; + SymbolFlags[SymbolFlags["ParameterExcludes"] = SymbolFlags.Value] = "ParameterExcludes"; + SymbolFlags[SymbolFlags["VariableExcludes"] = SymbolFlags.Value & ~SymbolFlags.Variable] = "VariableExcludes"; + SymbolFlags[SymbolFlags["PropertyExcludes"] = SymbolFlags.Value] = "PropertyExcludes"; + SymbolFlags[SymbolFlags["EnumMemberExcludes"] = SymbolFlags.Value] = "EnumMemberExcludes"; + SymbolFlags[SymbolFlags["FunctionExcludes"] = SymbolFlags.Value & ~(SymbolFlags.Function | SymbolFlags.ValueModule)] = "FunctionExcludes"; + SymbolFlags[SymbolFlags["ClassExcludes"] = (SymbolFlags.Value | SymbolFlags.Type) & ~SymbolFlags.ValueModule] = "ClassExcludes"; + SymbolFlags[SymbolFlags["InterfaceExcludes"] = SymbolFlags.Type & ~SymbolFlags.Interface] = "InterfaceExcludes"; + SymbolFlags[SymbolFlags["EnumExcludes"] = (SymbolFlags.Value | SymbolFlags.Type) & ~(SymbolFlags.Enum | SymbolFlags.ValueModule)] = "EnumExcludes"; + SymbolFlags[SymbolFlags["ValueModuleExcludes"] = SymbolFlags.Value & ~(SymbolFlags.Function | SymbolFlags.Class | SymbolFlags.Enum | SymbolFlags.ValueModule)] = "ValueModuleExcludes"; + SymbolFlags[SymbolFlags["NamespaceModuleExcludes"] = 0] = "NamespaceModuleExcludes"; + SymbolFlags[SymbolFlags["MethodExcludes"] = SymbolFlags.Value & ~SymbolFlags.Method] = "MethodExcludes"; + SymbolFlags[SymbolFlags["GetAccessorExcludes"] = SymbolFlags.Value & ~SymbolFlags.SetAccessor] = "GetAccessorExcludes"; + SymbolFlags[SymbolFlags["SetAccessorExcludes"] = SymbolFlags.Value & ~SymbolFlags.GetAccessor] = "SetAccessorExcludes"; + SymbolFlags[SymbolFlags["TypeParameterExcludes"] = SymbolFlags.Type & ~SymbolFlags.TypeParameter] = "TypeParameterExcludes"; + SymbolFlags[SymbolFlags["ImportExcludes"] = SymbolFlags.Import] = "ImportExcludes"; + SymbolFlags[SymbolFlags["ModuleMember"] = SymbolFlags.Variable | SymbolFlags.Function | SymbolFlags.Class | SymbolFlags.Interface | SymbolFlags.Enum | SymbolFlags.Module | SymbolFlags.Import] = "ModuleMember"; + SymbolFlags[SymbolFlags["ExportHasLocal"] = SymbolFlags.Function | SymbolFlags.Class | SymbolFlags.Enum | SymbolFlags.ValueModule] = "ExportHasLocal"; + SymbolFlags[SymbolFlags["HasLocals"] = SymbolFlags.Function | SymbolFlags.Module | SymbolFlags.Method | SymbolFlags.Constructor | SymbolFlags.Accessor | SymbolFlags.Signature] = "HasLocals"; + SymbolFlags[SymbolFlags["HasExports"] = SymbolFlags.Class | SymbolFlags.Enum | SymbolFlags.Module] = "HasExports"; + SymbolFlags[SymbolFlags["HasMembers"] = SymbolFlags.Class | SymbolFlags.Interface | SymbolFlags.TypeLiteral | SymbolFlags.ObjectLiteral] = "HasMembers"; + SymbolFlags[SymbolFlags["IsContainer"] = SymbolFlags.HasLocals | SymbolFlags.HasExports | SymbolFlags.HasMembers] = "IsContainer"; + SymbolFlags[SymbolFlags["PropertyOrAccessor"] = SymbolFlags.Property | SymbolFlags.Accessor] = "PropertyOrAccessor"; + SymbolFlags[SymbolFlags["Export"] = SymbolFlags.ExportNamespace | SymbolFlags.ExportType | SymbolFlags.ExportValue] = "Export"; + })(ts.SymbolFlags || (ts.SymbolFlags = {})); + var SymbolFlags = ts.SymbolFlags; + (function (NodeCheckFlags) { + NodeCheckFlags[NodeCheckFlags["TypeChecked"] = 0x00000001] = "TypeChecked"; + NodeCheckFlags[NodeCheckFlags["LexicalThis"] = 0x00000002] = "LexicalThis"; + NodeCheckFlags[NodeCheckFlags["CaptureThis"] = 0x00000004] = "CaptureThis"; + NodeCheckFlags[NodeCheckFlags["EmitExtends"] = 0x00000008] = "EmitExtends"; + NodeCheckFlags[NodeCheckFlags["SuperInstance"] = 0x00000010] = "SuperInstance"; + NodeCheckFlags[NodeCheckFlags["SuperStatic"] = 0x00000020] = "SuperStatic"; + })(ts.NodeCheckFlags || (ts.NodeCheckFlags = {})); + var NodeCheckFlags = ts.NodeCheckFlags; + (function (TypeFlags) { + TypeFlags[TypeFlags["Any"] = 0x00000001] = "Any"; + TypeFlags[TypeFlags["String"] = 0x00000002] = "String"; + TypeFlags[TypeFlags["Number"] = 0x00000004] = "Number"; + TypeFlags[TypeFlags["Boolean"] = 0x00000008] = "Boolean"; + TypeFlags[TypeFlags["Void"] = 0x00000010] = "Void"; + TypeFlags[TypeFlags["Undefined"] = 0x00000020] = "Undefined"; + TypeFlags[TypeFlags["Null"] = 0x00000040] = "Null"; + TypeFlags[TypeFlags["Enum"] = 0x00000080] = "Enum"; + TypeFlags[TypeFlags["StringLiteral"] = 0x00000100] = "StringLiteral"; + TypeFlags[TypeFlags["TypeParameter"] = 0x00000200] = "TypeParameter"; + TypeFlags[TypeFlags["Class"] = 0x00000400] = "Class"; + TypeFlags[TypeFlags["Interface"] = 0x00000800] = "Interface"; + TypeFlags[TypeFlags["Reference"] = 0x00001000] = "Reference"; + TypeFlags[TypeFlags["Anonymous"] = 0x00002000] = "Anonymous"; + TypeFlags[TypeFlags["FromSignature"] = 0x00004000] = "FromSignature"; + TypeFlags[TypeFlags["Intrinsic"] = TypeFlags.Any | TypeFlags.String | TypeFlags.Number | TypeFlags.Boolean | TypeFlags.Void | TypeFlags.Undefined | TypeFlags.Null] = "Intrinsic"; + TypeFlags[TypeFlags["StringLike"] = TypeFlags.String | TypeFlags.StringLiteral] = "StringLike"; + TypeFlags[TypeFlags["NumberLike"] = TypeFlags.Number | TypeFlags.Enum] = "NumberLike"; + TypeFlags[TypeFlags["ObjectType"] = TypeFlags.Class | TypeFlags.Interface | TypeFlags.Reference | TypeFlags.Anonymous] = "ObjectType"; + })(ts.TypeFlags || (ts.TypeFlags = {})); + var TypeFlags = ts.TypeFlags; + (function (SignatureKind) { + SignatureKind[SignatureKind["Call"] = 0] = "Call"; + SignatureKind[SignatureKind["Construct"] = 1] = "Construct"; + })(ts.SignatureKind || (ts.SignatureKind = {})); + var SignatureKind = ts.SignatureKind; + (function (IndexKind) { + IndexKind[IndexKind["String"] = 0] = "String"; + IndexKind[IndexKind["Number"] = 1] = "Number"; + })(ts.IndexKind || (ts.IndexKind = {})); + var IndexKind = ts.IndexKind; + (function (DiagnosticCategory) { + DiagnosticCategory[DiagnosticCategory["Warning"] = 0] = "Warning"; + DiagnosticCategory[DiagnosticCategory["Error"] = 1] = "Error"; + DiagnosticCategory[DiagnosticCategory["Message"] = 2] = "Message"; + DiagnosticCategory[DiagnosticCategory["NoPrefix"] = 3] = "NoPrefix"; + })(ts.DiagnosticCategory || (ts.DiagnosticCategory = {})); + var DiagnosticCategory = ts.DiagnosticCategory; + (function (ModuleKind) { + ModuleKind[ModuleKind["None"] = 0] = "None"; + ModuleKind[ModuleKind["CommonJS"] = 1] = "CommonJS"; + ModuleKind[ModuleKind["AMD"] = 2] = "AMD"; + })(ts.ModuleKind || (ts.ModuleKind = {})); + var ModuleKind = ts.ModuleKind; + (function (ScriptTarget) { + ScriptTarget[ScriptTarget["ES3"] = 0] = "ES3"; + ScriptTarget[ScriptTarget["ES5"] = 1] = "ES5"; + })(ts.ScriptTarget || (ts.ScriptTarget = {})); + var ScriptTarget = ts.ScriptTarget; + (function (CharacterCodes) { + CharacterCodes[CharacterCodes["nullCharacter"] = 0] = "nullCharacter"; + CharacterCodes[CharacterCodes["maxAsciiCharacter"] = 0x7F] = "maxAsciiCharacter"; + CharacterCodes[CharacterCodes["lineFeed"] = 0x0A] = "lineFeed"; + CharacterCodes[CharacterCodes["carriageReturn"] = 0x0D] = "carriageReturn"; + CharacterCodes[CharacterCodes["lineSeparator"] = 0x2028] = "lineSeparator"; + CharacterCodes[CharacterCodes["paragraphSeparator"] = 0x2029] = "paragraphSeparator"; + CharacterCodes[CharacterCodes["nextLine"] = 0x0085] = "nextLine"; + CharacterCodes[CharacterCodes["space"] = 0x0020] = "space"; + CharacterCodes[CharacterCodes["nonBreakingSpace"] = 0x00A0] = "nonBreakingSpace"; + CharacterCodes[CharacterCodes["enQuad"] = 0x2000] = "enQuad"; + CharacterCodes[CharacterCodes["emQuad"] = 0x2001] = "emQuad"; + CharacterCodes[CharacterCodes["enSpace"] = 0x2002] = "enSpace"; + CharacterCodes[CharacterCodes["emSpace"] = 0x2003] = "emSpace"; + CharacterCodes[CharacterCodes["threePerEmSpace"] = 0x2004] = "threePerEmSpace"; + CharacterCodes[CharacterCodes["fourPerEmSpace"] = 0x2005] = "fourPerEmSpace"; + CharacterCodes[CharacterCodes["sixPerEmSpace"] = 0x2006] = "sixPerEmSpace"; + CharacterCodes[CharacterCodes["figureSpace"] = 0x2007] = "figureSpace"; + CharacterCodes[CharacterCodes["punctuationSpace"] = 0x2008] = "punctuationSpace"; + CharacterCodes[CharacterCodes["thinSpace"] = 0x2009] = "thinSpace"; + CharacterCodes[CharacterCodes["hairSpace"] = 0x200A] = "hairSpace"; + CharacterCodes[CharacterCodes["zeroWidthSpace"] = 0x200B] = "zeroWidthSpace"; + CharacterCodes[CharacterCodes["narrowNoBreakSpace"] = 0x202F] = "narrowNoBreakSpace"; + CharacterCodes[CharacterCodes["ideographicSpace"] = 0x3000] = "ideographicSpace"; + CharacterCodes[CharacterCodes["mathematicalSpace"] = 0x205F] = "mathematicalSpace"; + CharacterCodes[CharacterCodes["ogham"] = 0x1680] = "ogham"; + CharacterCodes[CharacterCodes["_"] = 0x5F] = "_"; + CharacterCodes[CharacterCodes["$"] = 0x24] = "$"; + CharacterCodes[CharacterCodes["_0"] = 0x30] = "_0"; + CharacterCodes[CharacterCodes["_1"] = 0x31] = "_1"; + CharacterCodes[CharacterCodes["_2"] = 0x32] = "_2"; + CharacterCodes[CharacterCodes["_3"] = 0x33] = "_3"; + CharacterCodes[CharacterCodes["_4"] = 0x34] = "_4"; + CharacterCodes[CharacterCodes["_5"] = 0x35] = "_5"; + CharacterCodes[CharacterCodes["_6"] = 0x36] = "_6"; + CharacterCodes[CharacterCodes["_7"] = 0x37] = "_7"; + CharacterCodes[CharacterCodes["_8"] = 0x38] = "_8"; + CharacterCodes[CharacterCodes["_9"] = 0x39] = "_9"; + CharacterCodes[CharacterCodes["a"] = 0x61] = "a"; + CharacterCodes[CharacterCodes["b"] = 0x62] = "b"; + CharacterCodes[CharacterCodes["c"] = 0x63] = "c"; + CharacterCodes[CharacterCodes["d"] = 0x64] = "d"; + CharacterCodes[CharacterCodes["e"] = 0x65] = "e"; + CharacterCodes[CharacterCodes["f"] = 0x66] = "f"; + CharacterCodes[CharacterCodes["g"] = 0x67] = "g"; + CharacterCodes[CharacterCodes["h"] = 0x68] = "h"; + CharacterCodes[CharacterCodes["i"] = 0x69] = "i"; + CharacterCodes[CharacterCodes["j"] = 0x6A] = "j"; + CharacterCodes[CharacterCodes["k"] = 0x6B] = "k"; + CharacterCodes[CharacterCodes["l"] = 0x6C] = "l"; + CharacterCodes[CharacterCodes["m"] = 0x6D] = "m"; + CharacterCodes[CharacterCodes["n"] = 0x6E] = "n"; + CharacterCodes[CharacterCodes["o"] = 0x6F] = "o"; + CharacterCodes[CharacterCodes["p"] = 0x70] = "p"; + CharacterCodes[CharacterCodes["q"] = 0x71] = "q"; + CharacterCodes[CharacterCodes["r"] = 0x72] = "r"; + CharacterCodes[CharacterCodes["s"] = 0x73] = "s"; + CharacterCodes[CharacterCodes["t"] = 0x74] = "t"; + CharacterCodes[CharacterCodes["u"] = 0x75] = "u"; + CharacterCodes[CharacterCodes["v"] = 0x76] = "v"; + CharacterCodes[CharacterCodes["w"] = 0x77] = "w"; + CharacterCodes[CharacterCodes["x"] = 0x78] = "x"; + CharacterCodes[CharacterCodes["y"] = 0x79] = "y"; + CharacterCodes[CharacterCodes["z"] = 0x7A] = "z"; + CharacterCodes[CharacterCodes["A"] = 0x41] = "A"; + CharacterCodes[CharacterCodes["B"] = 0x42] = "B"; + CharacterCodes[CharacterCodes["C"] = 0x43] = "C"; + CharacterCodes[CharacterCodes["D"] = 0x44] = "D"; + CharacterCodes[CharacterCodes["E"] = 0x45] = "E"; + CharacterCodes[CharacterCodes["F"] = 0x46] = "F"; + CharacterCodes[CharacterCodes["G"] = 0x47] = "G"; + CharacterCodes[CharacterCodes["H"] = 0x48] = "H"; + CharacterCodes[CharacterCodes["I"] = 0x49] = "I"; + CharacterCodes[CharacterCodes["J"] = 0x4A] = "J"; + CharacterCodes[CharacterCodes["K"] = 0x4B] = "K"; + CharacterCodes[CharacterCodes["L"] = 0x4C] = "L"; + CharacterCodes[CharacterCodes["M"] = 0x4D] = "M"; + CharacterCodes[CharacterCodes["N"] = 0x4E] = "N"; + CharacterCodes[CharacterCodes["O"] = 0x4F] = "O"; + CharacterCodes[CharacterCodes["P"] = 0x50] = "P"; + CharacterCodes[CharacterCodes["Q"] = 0x51] = "Q"; + CharacterCodes[CharacterCodes["R"] = 0x52] = "R"; + CharacterCodes[CharacterCodes["S"] = 0x53] = "S"; + CharacterCodes[CharacterCodes["T"] = 0x54] = "T"; + CharacterCodes[CharacterCodes["U"] = 0x55] = "U"; + CharacterCodes[CharacterCodes["V"] = 0x56] = "V"; + CharacterCodes[CharacterCodes["W"] = 0x57] = "W"; + CharacterCodes[CharacterCodes["X"] = 0x58] = "X"; + CharacterCodes[CharacterCodes["Y"] = 0x59] = "Y"; + CharacterCodes[CharacterCodes["Z"] = 0x5a] = "Z"; + CharacterCodes[CharacterCodes["ampersand"] = 0x26] = "ampersand"; + CharacterCodes[CharacterCodes["asterisk"] = 0x2A] = "asterisk"; + CharacterCodes[CharacterCodes["at"] = 0x40] = "at"; + CharacterCodes[CharacterCodes["backslash"] = 0x5C] = "backslash"; + CharacterCodes[CharacterCodes["bar"] = 0x7C] = "bar"; + CharacterCodes[CharacterCodes["caret"] = 0x5E] = "caret"; + CharacterCodes[CharacterCodes["closeBrace"] = 0x7D] = "closeBrace"; + CharacterCodes[CharacterCodes["closeBracket"] = 0x5D] = "closeBracket"; + CharacterCodes[CharacterCodes["closeParen"] = 0x29] = "closeParen"; + CharacterCodes[CharacterCodes["colon"] = 0x3A] = "colon"; + CharacterCodes[CharacterCodes["comma"] = 0x2C] = "comma"; + CharacterCodes[CharacterCodes["dot"] = 0x2E] = "dot"; + CharacterCodes[CharacterCodes["doubleQuote"] = 0x22] = "doubleQuote"; + CharacterCodes[CharacterCodes["equals"] = 0x3D] = "equals"; + CharacterCodes[CharacterCodes["exclamation"] = 0x21] = "exclamation"; + CharacterCodes[CharacterCodes["greaterThan"] = 0x3E] = "greaterThan"; + CharacterCodes[CharacterCodes["lessThan"] = 0x3C] = "lessThan"; + CharacterCodes[CharacterCodes["minus"] = 0x2D] = "minus"; + CharacterCodes[CharacterCodes["openBrace"] = 0x7B] = "openBrace"; + CharacterCodes[CharacterCodes["openBracket"] = 0x5B] = "openBracket"; + CharacterCodes[CharacterCodes["openParen"] = 0x28] = "openParen"; + CharacterCodes[CharacterCodes["percent"] = 0x25] = "percent"; + CharacterCodes[CharacterCodes["plus"] = 0x2B] = "plus"; + CharacterCodes[CharacterCodes["question"] = 0x3F] = "question"; + CharacterCodes[CharacterCodes["semicolon"] = 0x3B] = "semicolon"; + CharacterCodes[CharacterCodes["singleQuote"] = 0x27] = "singleQuote"; + CharacterCodes[CharacterCodes["slash"] = 0x2F] = "slash"; + CharacterCodes[CharacterCodes["tilde"] = 0x7E] = "tilde"; + CharacterCodes[CharacterCodes["backspace"] = 0x08] = "backspace"; + CharacterCodes[CharacterCodes["formFeed"] = 0x0C] = "formFeed"; + CharacterCodes[CharacterCodes["byteOrderMark"] = 0xFEFF] = "byteOrderMark"; + CharacterCodes[CharacterCodes["tab"] = 0x09] = "tab"; + CharacterCodes[CharacterCodes["verticalTab"] = 0x0B] = "verticalTab"; + })(ts.CharacterCodes || (ts.CharacterCodes = {})); + var CharacterCodes = ts.CharacterCodes; + (function (ByteOrderMark) { + ByteOrderMark[ByteOrderMark["None"] = 0] = "None"; + ByteOrderMark[ByteOrderMark["Utf8"] = 1] = "Utf8"; + ByteOrderMark[ByteOrderMark["Utf16BigEndian"] = 2] = "Utf16BigEndian"; + ByteOrderMark[ByteOrderMark["Utf16LittleEndian"] = 3] = "Utf16LittleEndian"; + })(ts.ByteOrderMark || (ts.ByteOrderMark = {})); + var ByteOrderMark = ts.ByteOrderMark; +})(ts || (ts = {})); +var ts; +(function (ts) { + function forEach(array, callback) { + var result; + if (array) { + for (var i = 0, len = array.length; i < len; i++) { + if (result = callback(array[i])) + break; + } + } + return result; + } + ts.forEach = forEach; + function contains(array, value) { + if (array) { + var len = array.length; + for (var i = 0; i < len; i++) { + if (array[i] === value) { + return true; + } + } + } + return false; + } + ts.contains = contains; + function indexOf(array, value) { + if (array) { + var len = array.length; + for (var i = 0; i < len; i++) { + if (array[i] === value) { + return i; + } + } + } + return -1; + } + ts.indexOf = indexOf; + function filter(array, f) { + var result; + if (array) { + result = []; + for (var i = 0, len = array.length; i < len; i++) { + var item = array[i]; + if (f(item)) { + result.push(item); + } + } + } + return result; + } + ts.filter = filter; + function map(array, f) { + var result; + if (array) { + result = []; + var len = array.length; + for (var i = 0; i < len; i++) { + result.push(f(array[i])); + } + } + return result; + } + ts.map = map; + function concatenate(array1, array2) { + if (!array2.length) + return array1; + if (!array1.length) + return array2; + return array1.concat(array2); + } + ts.concatenate = concatenate; + function sum(array, prop) { + var result = 0; + for (var i = 0; i < array.length; i++) { + result += array[i][prop]; + } + return result; + } + ts.sum = sum; + function binarySearch(array, value) { + var low = 0; + var high = array.length - 1; + while (low <= high) { + var middle = low + ((high - low) >> 1); + var midValue = array[middle]; + if (midValue === value) { + return middle; + } + else if (midValue > value) { + high = middle - 1; + } + else { + low = middle + 1; + } + } + return ~low; + } + ts.binarySearch = binarySearch; + var hasOwnProperty = Object.prototype.hasOwnProperty; + function hasProperty(map, key) { + return hasOwnProperty.call(map, key); + } + ts.hasProperty = hasProperty; + function getProperty(map, key) { + return hasOwnProperty.call(map, key) ? map[key] : undefined; + } + ts.getProperty = getProperty; + function isEmpty(map) { + for (var id in map) + return false; + return true; + } + ts.isEmpty = isEmpty; + function clone(object) { + var result = {}; + for (var id in object) { + result[id] = object[id]; + } + return result; + } + ts.clone = clone; + function forEachValue(map, callback) { + var result; + for (var id in map) { + if (result = callback(map[id])) + break; + } + return result; + } + ts.forEachValue = forEachValue; + function forEachKey(map, callback) { + var result; + for (var id in map) { + if (result = callback(id)) + break; + } + return result; + } + ts.forEachKey = forEachKey; + function lookUp(map, key) { + return hasProperty(map, key) ? map[key] : undefined; + } + ts.lookUp = lookUp; + function mapToArray(map) { + var result = []; + for (var id in map) + result.push(map[id]); + return result; + } + ts.mapToArray = mapToArray; + function formatStringFromArgs(text, args, baseIndex) { + baseIndex = baseIndex || 0; + return text.replace(/{(\d+)}/g, function (match, index) { return args[+index + baseIndex]; }); + } + ts.localizedDiagnosticMessages = undefined; + function getLocaleSpecificMessage(message) { + if (ts.localizedDiagnosticMessages) { + message = ts.localizedDiagnosticMessages[message]; + } + Debug.assert(message, "Diagnostic message does not exist in locale map."); + return message; + } + function createFileDiagnostic(file, start, length, message) { + var text = getLocaleSpecificMessage(message.key); + if (arguments.length > 4) { + text = formatStringFromArgs(text, arguments, 4); + } + return { + file: file, + start: start, + length: length, + messageText: text, + category: message.category, + code: message.code + }; + } + ts.createFileDiagnostic = createFileDiagnostic; + function createCompilerDiagnostic(message) { + var text = getLocaleSpecificMessage(message.key); + if (arguments.length > 1) { + text = formatStringFromArgs(text, arguments, 1); + } + return { + file: undefined, + start: undefined, + length: undefined, + messageText: text, + category: message.category, + code: message.code + }; + } + ts.createCompilerDiagnostic = createCompilerDiagnostic; + function chainDiagnosticMessages(details, message) { + var text = getLocaleSpecificMessage(message.key); + if (arguments.length > 2) { + text = formatStringFromArgs(text, arguments, 2); + } + return { + messageText: text, + category: message.category, + code: message.code, + next: details + }; + } + ts.chainDiagnosticMessages = chainDiagnosticMessages; + function flattenDiagnosticChain(file, start, length, diagnosticChain, newLine) { + var code = diagnosticChain.code; + var category = diagnosticChain.category; + var messageText = ""; + var indent = 0; + while (diagnosticChain) { + if (indent) { + messageText += newLine; + for (var i = 0; i < indent; i++) { + messageText += " "; + } + } + messageText += diagnosticChain.messageText; + indent++; + diagnosticChain = diagnosticChain.next; + } + return { + file: file, + start: start, + length: length, + code: code, + category: category, + messageText: messageText + }; + } + ts.flattenDiagnosticChain = flattenDiagnosticChain; + function compareValues(a, b) { + if (a === b) + return 0; + if (a === undefined) + return -1; + if (b === undefined) + return 1; + return a < b ? -1 : 1; + } + function getDiagnosticFilename(diagnostic) { + return diagnostic.file ? diagnostic.file.filename : undefined; + } + function compareDiagnostics(d1, d2) { + return compareValues(getDiagnosticFilename(d1), getDiagnosticFilename(d2)) || compareValues(d1.start, d2.start) || compareValues(d1.length, d2.length) || compareValues(d1.code, d2.code) || compareValues(d1.messageText, d2.messageText) || 0; + } + ts.compareDiagnostics = compareDiagnostics; + function deduplicateSortedDiagnostics(diagnostics) { + if (diagnostics.length < 2) { + return diagnostics; + } + var newDiagnostics = [diagnostics[0]]; + var previousDiagnostic = diagnostics[0]; + for (var i = 1; i < diagnostics.length; i++) { + var currentDiagnostic = diagnostics[i]; + var isDupe = compareDiagnostics(currentDiagnostic, previousDiagnostic) === 0; + if (!isDupe) { + newDiagnostics.push(currentDiagnostic); + previousDiagnostic = currentDiagnostic; + } + } + return newDiagnostics; + } + ts.deduplicateSortedDiagnostics = deduplicateSortedDiagnostics; + function normalizeSlashes(path) { + return path.replace(/\\/g, "/"); + } + ts.normalizeSlashes = normalizeSlashes; + function getRootLength(path) { + if (path.charCodeAt(0) === 47 /* slash */) { + if (path.charCodeAt(1) !== 47 /* slash */) + return 1; + var p1 = path.indexOf("/", 2); + if (p1 < 0) + return 2; + var p2 = path.indexOf("/", p1 + 1); + if (p2 < 0) + return p1 + 1; + return p2 + 1; + } + if (path.charCodeAt(1) === 58 /* colon */) { + if (path.charCodeAt(2) === 47 /* slash */) + return 3; + return 2; + } + return 0; + } + ts.getRootLength = getRootLength; + ts.directorySeparator = "/"; + function getNormalizedParts(normalizedSlashedPath, rootLength) { + var parts = normalizedSlashedPath.substr(rootLength).split(ts.directorySeparator); + var normalized = []; + for (var i = 0; i < parts.length; i++) { + var part = parts[i]; + if (part !== ".") { + if (part === ".." && normalized.length > 0 && normalized[normalized.length - 1] !== "..") { + normalized.pop(); + } + else { + normalized.push(part); + } + } + } + return normalized; + } + function normalizePath(path) { + var path = normalizeSlashes(path); + var rootLength = getRootLength(path); + var normalized = getNormalizedParts(path, rootLength); + return path.substr(0, rootLength) + normalized.join(ts.directorySeparator); + } + ts.normalizePath = normalizePath; + function getDirectoryPath(path) { + return path.substr(0, Math.max(getRootLength(path), path.lastIndexOf(ts.directorySeparator))); + } + ts.getDirectoryPath = getDirectoryPath; + function isUrl(path) { + return path && !isRootedDiskPath(path) && path.indexOf("://") !== -1; + } + ts.isUrl = isUrl; + function isRootedDiskPath(path) { + return getRootLength(path) !== 0; + } + ts.isRootedDiskPath = isRootedDiskPath; + function normalizedPathComponents(path, rootLength) { + var normalizedParts = getNormalizedParts(path, rootLength); + return [path.substr(0, rootLength)].concat(normalizedParts); + } + function getNormalizedPathComponents(path, currentDirectory) { + var path = normalizeSlashes(path); + var rootLength = getRootLength(path); + if (rootLength == 0) { + path = combinePaths(normalizeSlashes(currentDirectory), path); + rootLength = getRootLength(path); + } + return normalizedPathComponents(path, rootLength); + } + ts.getNormalizedPathComponents = getNormalizedPathComponents; + function getNormalizedPathFromPathCompoments(pathComponents) { + if (pathComponents && pathComponents.length) { + return pathComponents[0] + pathComponents.slice(1).join(ts.directorySeparator); + } + } + ts.getNormalizedPathFromPathCompoments = getNormalizedPathFromPathCompoments; + function getNormalizedPathComponentsOfUrl(url) { + var urlLength = url.length; + var rootLength = url.indexOf("://") + "://".length; + while (rootLength < urlLength) { + if (url.charCodeAt(rootLength) === 47 /* slash */) { + rootLength++; + } + else { + break; + } + } + if (rootLength === urlLength) { + return [url]; + } + var indexOfNextSlash = url.indexOf(ts.directorySeparator, rootLength); + if (indexOfNextSlash !== -1) { + rootLength = indexOfNextSlash + 1; + return normalizedPathComponents(url, rootLength); + } + else { + return [url + ts.directorySeparator]; + } + } + function getNormalizedPathOrUrlComponents(pathOrUrl, currentDirectory) { + if (isUrl(pathOrUrl)) { + return getNormalizedPathComponentsOfUrl(pathOrUrl); + } + else { + return getNormalizedPathComponents(pathOrUrl, currentDirectory); + } + } + function getRelativePathToDirectoryOrUrl(directoryPathOrUrl, relativeOrAbsolutePath, currentDirectory, isAbsolutePathAnUrl) { + var pathComponents = getNormalizedPathOrUrlComponents(relativeOrAbsolutePath, currentDirectory); + var directoryComponents = getNormalizedPathOrUrlComponents(directoryPathOrUrl, currentDirectory); + if (directoryComponents.length > 1 && directoryComponents[directoryComponents.length - 1] === "") { + directoryComponents.length--; + } + for (var joinStartIndex = 0; joinStartIndex < pathComponents.length && joinStartIndex < directoryComponents.length; joinStartIndex++) { + if (directoryComponents[joinStartIndex] !== pathComponents[joinStartIndex]) { + break; + } + } + if (joinStartIndex) { + var relativePath = ""; + var relativePathComponents = pathComponents.slice(joinStartIndex, pathComponents.length); + for (; joinStartIndex < directoryComponents.length; joinStartIndex++) { + if (directoryComponents[joinStartIndex] !== "") { + relativePath = relativePath + ".." + ts.directorySeparator; + } + } + return relativePath + relativePathComponents.join(ts.directorySeparator); + } + var absolutePath = getNormalizedPathFromPathCompoments(pathComponents); + if (isAbsolutePathAnUrl && isRootedDiskPath(absolutePath)) { + absolutePath = "file:///" + absolutePath; + } + return absolutePath; + } + ts.getRelativePathToDirectoryOrUrl = getRelativePathToDirectoryOrUrl; + function getBaseFilename(path) { + var i = path.lastIndexOf(ts.directorySeparator); + return i < 0 ? path : path.substring(i + 1); + } + ts.getBaseFilename = getBaseFilename; + function combinePaths(path1, path2) { + if (!(path1 && path1.length)) + return path2; + if (!(path2 && path2.length)) + return path1; + if (path2.charAt(0) === ts.directorySeparator) + return path2; + if (path1.charAt(path1.length - 1) === ts.directorySeparator) + return path1 + path2; + return path1 + ts.directorySeparator + path2; + } + ts.combinePaths = combinePaths; + function fileExtensionIs(path, extension) { + var pathLen = path.length; + var extLen = extension.length; + return pathLen > extLen && path.substr(pathLen - extLen, extLen) === extension; + } + ts.fileExtensionIs = fileExtensionIs; + function getCanonicalFileName(fileName) { + return sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase(); + } + ts.getCanonicalFileName = getCanonicalFileName; + function Symbol(flags, name) { + this.flags = flags; + this.name = name; + this.declarations = undefined; + } + function Type(checker, flags) { + this.flags = flags; + } + function Signature(checker) { + } + ts.objectAllocator = { + getNodeConstructor: function (kind) { + function Node() { + } + Node.prototype = { + kind: kind, + pos: 0, + end: 0, + flags: 0, + parent: undefined + }; + return Node; + }, + getSymbolConstructor: function () { return Symbol; }, + getTypeConstructor: function () { return Type; }, + getSignatureConstructor: function () { return Signature; } + }; + (function (AssertionLevel) { + AssertionLevel[AssertionLevel["None"] = 0] = "None"; + AssertionLevel[AssertionLevel["Normal"] = 1] = "Normal"; + AssertionLevel[AssertionLevel["Aggressive"] = 2] = "Aggressive"; + AssertionLevel[AssertionLevel["VeryAggressive"] = 3] = "VeryAggressive"; + })(ts.AssertionLevel || (ts.AssertionLevel = {})); + var AssertionLevel = ts.AssertionLevel; + (function (Debug) { + var currentAssertionLevel = 0 /* None */; + function shouldAssert(level) { + return this.currentAssertionLevel >= level; + } + Debug.shouldAssert = shouldAssert; + function assert(expression, message, verboseDebugInfo) { + if (!expression) { + var verboseDebugString = ""; + if (verboseDebugInfo) { + verboseDebugString = "\r\nVerbose Debug Information: " + verboseDebugInfo(); + } + throw new Error("Debug Failure. False expression: " + (message || "") + verboseDebugString); + } + } + Debug.assert = assert; + function fail(message) { + Debug.assert(false, message); + } + Debug.fail = fail; + })(ts.Debug || (ts.Debug = {})); + var Debug = ts.Debug; +})(ts || (ts = {})); +var sys = (function () { + function getWScriptSystem() { + var fso = new ActiveXObject("Scripting.FileSystemObject"); + var fileStream = new ActiveXObject("ADODB.Stream"); + fileStream.Type = 2; + var binaryStream = new ActiveXObject("ADODB.Stream"); + binaryStream.Type = 1; + var args = []; + for (var i = 0; i < WScript.Arguments.length; i++) { + args[i] = WScript.Arguments.Item(i); + } + function readFile(fileName, encoding) { + if (!fso.FileExists(fileName)) { + return undefined; + } + fileStream.Open(); + try { + if (encoding) { + fileStream.Charset = encoding; + fileStream.LoadFromFile(fileName); + } + else { + fileStream.Charset = "x-ansi"; + fileStream.LoadFromFile(fileName); + var bom = fileStream.ReadText(2) || ""; + fileStream.Position = 0; + fileStream.Charset = bom.length >= 2 && (bom.charCodeAt(0) === 0xFF && bom.charCodeAt(1) === 0xFE || bom.charCodeAt(0) === 0xFE && bom.charCodeAt(1) === 0xFF) ? "unicode" : "utf-8"; + } + return fileStream.ReadText(); + } + catch (e) { + throw e.number === -2147024809 ? new Error(ts.Diagnostics.Unsupported_file_encoding.key) : e; + } + finally { + fileStream.Close(); + } + } + function writeFile(fileName, data) { + fileStream.Open(); + binaryStream.Open(); + try { + fileStream.Charset = "utf-8"; + fileStream.WriteText(data); + fileStream.Position = 3; + fileStream.CopyTo(binaryStream); + binaryStream.SaveToFile(fileName, 2); + } + finally { + binaryStream.Close(); + fileStream.Close(); + } + } + return { + args: args, + newLine: "\r\n", + useCaseSensitiveFileNames: false, + write: function (s) { + WScript.StdOut.Write(s); + }, + writeErr: function (s) { + WScript.StdErr.Write(s); + }, + readFile: readFile, + writeFile: writeFile, + resolvePath: function (path) { + return fso.GetAbsolutePathName(path); + }, + fileExists: function (path) { + return fso.FileExists(path); + }, + directoryExists: function (path) { + return fso.FolderExists(path); + }, + createDirectory: function (directoryName) { + if (!this.directoryExists(directoryName)) { + fso.CreateFolder(directoryName); + } + }, + getExecutingFilePath: function () { + return WScript.ScriptFullName; + }, + getCurrentDirectory: function () { + return new ActiveXObject("WScript.Shell").CurrentDirectory; + }, + getMemoryUsage: function () { + return 0; + }, + exit: function (exitCode) { + try { + WScript.Quit(exitCode); + } + catch (e) { + } + } + }; + } + function getNodeSystem() { + var _fs = require("fs"); + var _path = require("path"); + var _os = require('os'); + var platform = _os.platform(); + var useCaseSensitiveFileNames = platform !== "win32" && platform !== "win64" && platform !== "darwin"; + function readFile(fileName, encoding) { + if (!_fs.existsSync(fileName)) { + return undefined; + } + var buffer = _fs.readFileSync(fileName); + var len = buffer.length; + if (len >= 2 && buffer[0] === 0xFE && buffer[1] === 0xFF) { + len &= ~1; + for (var i = 0; i < len; i += 2) { + var temp = buffer[i]; + buffer[i] = buffer[i + 1]; + buffer[i + 1] = temp; + } + return buffer.toString("utf16le", 2); + } + if (len >= 2 && buffer[0] === 0xFF && buffer[1] === 0xFE) { + return buffer.toString("utf16le", 2); + } + if (len >= 3 && buffer[0] === 0xEF && buffer[1] === 0xBB && buffer[2] === 0xBF) { + return buffer.toString("utf8", 3); + } + return buffer.toString("utf8"); + } + function writeFile(fileName, data) { + _fs.writeFileSync(fileName, data, "utf8"); + } + return { + args: process.argv.slice(2), + newLine: _os.EOL, + useCaseSensitiveFileNames: useCaseSensitiveFileNames, + write: function (s) { + process.stdout.write(s); + }, + writeErr: function (s) { + process.stderr.write(s); + }, + readFile: readFile, + writeFile: writeFile, + resolvePath: function (path) { + return _path.resolve(path); + }, + fileExists: function (path) { + return _fs.existsSync(path); + }, + directoryExists: function (path) { + return _fs.existsSync(path) && _fs.statSync(path).isDirectory(); + }, + createDirectory: function (directoryName) { + if (!this.directoryExists(directoryName)) { + _fs.mkdirSync(directoryName); + } + }, + getExecutingFilePath: function () { + return process.mainModule.filename; + }, + getCurrentDirectory: function () { + return process.cwd(); + }, + getMemoryUsage: function () { + global.gc(); + return process.memoryUsage().heapUsed; + }, + exit: function (exitCode) { + process.exit(exitCode); + } + }; + } + if (typeof WScript !== "undefined" && typeof ActiveXObject === "function") { + return getWScriptSystem(); + } + else if (typeof module !== "undefined" && module.exports) { + return getNodeSystem(); + } + else { + return undefined; + } +})(); +var ts; +(function (ts) { + var nodeConstructors = new Array(180 /* Count */); + function getNodeConstructor(kind) { + return nodeConstructors[kind] || (nodeConstructors[kind] = ts.objectAllocator.getNodeConstructor(kind)); + } + ts.getNodeConstructor = getNodeConstructor; + function createRootNode(kind, pos, end, flags) { + var node = new (getNodeConstructor(kind))(); + node.pos = pos; + node.end = end; + node.flags = flags; + return node; + } + var moduleExtensions = [".d.ts", ".ts", ".js"]; + function getModuleNameFromFilename(filename) { + for (var i = 0; i < moduleExtensions.length; i++) { + var ext = moduleExtensions[i]; + var len = filename.length - ext.length; + if (len > 0 && filename.substr(len) === ext) + return filename.substr(0, len); + } + return filename; + } + ts.getModuleNameFromFilename = getModuleNameFromFilename; + function getSourceFileOfNode(node) { + while (node && node.kind !== 177 /* SourceFile */) + node = node.parent; + return node; + } + ts.getSourceFileOfNode = getSourceFileOfNode; + function nodePosToString(node) { + var file = getSourceFileOfNode(node); + var loc = file.getLineAndCharacterFromPosition(node.pos); + return file.filename + "(" + loc.line + "," + loc.character + ")"; + } + ts.nodePosToString = nodePosToString; + function getStartPosOfNode(node) { + return node.pos; + } + ts.getStartPosOfNode = getStartPosOfNode; + function getTokenPosOfNode(node) { + return ts.skipTrivia(getSourceFileOfNode(node).text, node.pos); + } + ts.getTokenPosOfNode = getTokenPosOfNode; + function getSourceTextOfNodeFromSourceText(sourceText, node) { + return sourceText.substring(ts.skipTrivia(sourceText, node.pos), node.end); + } + ts.getSourceTextOfNodeFromSourceText = getSourceTextOfNodeFromSourceText; + function getSourceTextOfNode(node) { + var text = getSourceFileOfNode(node).text; + return text.substring(ts.skipTrivia(text, node.pos), node.end); + } + ts.getSourceTextOfNode = getSourceTextOfNode; + function escapeIdentifier(identifier) { + return identifier.length >= 2 && identifier.charCodeAt(0) === 95 /* _ */ && identifier.charCodeAt(1) === 95 /* _ */ ? "_" + identifier : identifier; + } + ts.escapeIdentifier = escapeIdentifier; + function unescapeIdentifier(identifier) { + return identifier.length >= 3 && identifier.charCodeAt(0) === 95 /* _ */ && identifier.charCodeAt(1) === 95 /* _ */ && identifier.charCodeAt(2) === 95 /* _ */ ? identifier.substr(1) : identifier; + } + ts.unescapeIdentifier = unescapeIdentifier; + function identifierToString(identifier) { + return identifier.kind === 111 /* Missing */ ? "(Missing)" : getSourceTextOfNode(identifier); + } + ts.identifierToString = identifierToString; + function createDiagnosticForNode(node, message, arg0, arg1, arg2) { + node = getErrorSpanForNode(node); + var file = getSourceFileOfNode(node); + var start = ts.skipTrivia(file.text, node.pos); + var length = node.end - start; + return ts.createFileDiagnostic(file, start, length, message, arg0, arg1, arg2); + } + ts.createDiagnosticForNode = createDiagnosticForNode; + function createDiagnosticForNodeFromMessageChain(node, messageChain, newLine) { + node = getErrorSpanForNode(node); + var file = getSourceFileOfNode(node); + var start = ts.skipTrivia(file.text, node.pos); + var length = node.end - start; + return ts.flattenDiagnosticChain(file, start, length, messageChain, newLine); + } + ts.createDiagnosticForNodeFromMessageChain = createDiagnosticForNodeFromMessageChain; + function getErrorSpanForNode(node) { + var errorSpan; + switch (node.kind) { + case 166 /* VariableDeclaration */: + case 169 /* ClassDeclaration */: + case 170 /* InterfaceDeclaration */: + case 172 /* ModuleDeclaration */: + case 171 /* EnumDeclaration */: + case 176 /* EnumMember */: + errorSpan = node.name; + break; + } + return errorSpan && errorSpan.pos < errorSpan.end ? errorSpan : node; + } + ts.getErrorSpanForNode = getErrorSpanForNode; + function isExternalModule(file) { + return file.externalModuleIndicator !== undefined; + } + ts.isExternalModule = isExternalModule; + function isPrologueDirective(node) { + return node.kind === 146 /* ExpressionStatement */ && node.expression.kind === 3 /* StringLiteral */; + } + ts.isPrologueDirective = isPrologueDirective; + function isEvalOrArgumentsIdentifier(node) { + return node.kind === 55 /* Identifier */ && node.text && (node.text === "eval" || node.text === "arguments"); + } + function isUseStrictPrologueDirective(node) { + ts.Debug.assert(isPrologueDirective(node)); + return node.expression.text === "use strict"; + } + function forEachChild(node, cbNode, cbNodes) { + function child(node) { + if (node) + return cbNode(node); + } + function children(nodes) { + if (nodes) { + if (cbNodes) + return cbNodes(nodes); + var result; + for (var i = 0, len = nodes.length; i < len; i++) { + if (result = cbNode(nodes[i])) + break; + } + return result; + } + } + if (!node) + return; + switch (node.kind) { + case 112 /* QualifiedName */: + return child(node.left) || child(node.right); + case 113 /* TypeParameter */: + return child(node.name) || child(node.constraint); + case 114 /* Parameter */: + return child(node.name) || child(node.type) || child(node.initializer); + case 115 /* Property */: + case 129 /* PropertyAssignment */: + return child(node.name) || child(node.type) || child(node.initializer); + case 120 /* CallSignature */: + case 121 /* ConstructSignature */: + case 122 /* IndexSignature */: + return children(node.typeParameters) || children(node.parameters) || child(node.type); + case 116 /* Method */: + case 117 /* Constructor */: + case 118 /* GetAccessor */: + case 119 /* SetAccessor */: + case 136 /* FunctionExpression */: + case 167 /* FunctionDeclaration */: + case 137 /* ArrowFunction */: + return child(node.name) || children(node.typeParameters) || children(node.parameters) || child(node.type) || child(node.body); + case 123 /* TypeReference */: + return child(node.typeName) || children(node.typeArguments); + case 124 /* TypeQuery */: + return child(node.exprName); + case 125 /* TypeLiteral */: + return children(node.members); + case 126 /* ArrayType */: + return child(node.elementType); + case 127 /* ArrayLiteral */: + return children(node.elements); + case 128 /* ObjectLiteral */: + return children(node.properties); + case 130 /* PropertyAccess */: + return child(node.left) || child(node.right); + case 131 /* IndexedAccess */: + return child(node.object) || child(node.index); + case 132 /* CallExpression */: + case 133 /* NewExpression */: + return child(node.func) || children(node.typeArguments) || children(node.arguments); + case 134 /* TypeAssertion */: + return child(node.type) || child(node.operand); + case 135 /* ParenExpression */: + return child(node.expression); + case 138 /* PrefixOperator */: + case 139 /* PostfixOperator */: + return child(node.operand); + case 140 /* BinaryExpression */: + return child(node.left) || child(node.right); + case 141 /* ConditionalExpression */: + return child(node.condition) || child(node.whenTrue) || child(node.whenFalse); + case 143 /* Block */: + case 162 /* TryBlock */: + case 164 /* FinallyBlock */: + case 168 /* FunctionBlock */: + case 173 /* ModuleBlock */: + case 177 /* SourceFile */: + return children(node.statements); + case 144 /* VariableStatement */: + return children(node.declarations); + case 146 /* ExpressionStatement */: + return child(node.expression); + case 147 /* IfStatement */: + return child(node.expression) || child(node.thenStatement) || child(node.elseStatement); + case 148 /* DoStatement */: + return child(node.statement) || child(node.expression); + case 149 /* WhileStatement */: + return child(node.expression) || child(node.statement); + case 150 /* ForStatement */: + return children(node.declarations) || child(node.initializer) || child(node.condition) || child(node.iterator) || child(node.statement); + case 151 /* ForInStatement */: + return child(node.declaration) || child(node.variable) || child(node.expression) || child(node.statement); + case 152 /* ContinueStatement */: + case 153 /* BreakStatement */: + return child(node.label); + case 154 /* ReturnStatement */: + return child(node.expression); + case 155 /* WithStatement */: + return child(node.expression) || child(node.statement); + case 156 /* SwitchStatement */: + return child(node.expression) || children(node.clauses); + case 157 /* CaseClause */: + case 158 /* DefaultClause */: + return child(node.expression) || children(node.statements); + case 159 /* LabelledStatement */: + return child(node.label) || child(node.statement); + case 160 /* ThrowStatement */: + return child(node.expression); + case 161 /* TryStatement */: + return child(node.tryBlock) || child(node.catchBlock) || child(node.finallyBlock); + case 163 /* CatchBlock */: + return child(node.variable) || children(node.statements); + case 166 /* VariableDeclaration */: + return child(node.name) || child(node.type) || child(node.initializer); + case 169 /* ClassDeclaration */: + return child(node.name) || children(node.typeParameters) || child(node.baseType) || children(node.implementedTypes) || children(node.members); + case 170 /* InterfaceDeclaration */: + return child(node.name) || children(node.typeParameters) || children(node.baseTypes) || children(node.members); + case 171 /* EnumDeclaration */: + return child(node.name) || children(node.members); + case 176 /* EnumMember */: + return child(node.name) || child(node.initializer); + case 172 /* ModuleDeclaration */: + return child(node.name) || child(node.body); + case 174 /* ImportDeclaration */: + return child(node.name) || child(node.entityName) || child(node.externalModuleName); + case 175 /* ExportAssignment */: + return child(node.exportName); + } + } + ts.forEachChild = forEachChild; + function hasRestParameters(s) { + return s.parameters.length > 0 && (s.parameters[s.parameters.length - 1].flags & 8 /* Rest */) !== 0; + } + ts.hasRestParameters = hasRestParameters; + function isInAmbientContext(node) { + while (node) { + if (node.flags & (2 /* Ambient */ | 512 /* DeclarationFile */)) + return true; + node = node.parent; + } + return false; + } + ts.isInAmbientContext = isInAmbientContext; + var ParsingContext; + (function (ParsingContext) { + ParsingContext[ParsingContext["SourceElements"] = 0] = "SourceElements"; + ParsingContext[ParsingContext["ModuleElements"] = 1] = "ModuleElements"; + ParsingContext[ParsingContext["BlockStatements"] = 2] = "BlockStatements"; + ParsingContext[ParsingContext["SwitchClauses"] = 3] = "SwitchClauses"; + ParsingContext[ParsingContext["SwitchClauseStatements"] = 4] = "SwitchClauseStatements"; + ParsingContext[ParsingContext["TypeMembers"] = 5] = "TypeMembers"; + ParsingContext[ParsingContext["ClassMembers"] = 6] = "ClassMembers"; + ParsingContext[ParsingContext["EnumMembers"] = 7] = "EnumMembers"; + ParsingContext[ParsingContext["BaseTypeReferences"] = 8] = "BaseTypeReferences"; + ParsingContext[ParsingContext["VariableDeclarations"] = 9] = "VariableDeclarations"; + ParsingContext[ParsingContext["ArgumentExpressions"] = 10] = "ArgumentExpressions"; + ParsingContext[ParsingContext["ObjectLiteralMembers"] = 11] = "ObjectLiteralMembers"; + ParsingContext[ParsingContext["ArrayLiteralMembers"] = 12] = "ArrayLiteralMembers"; + ParsingContext[ParsingContext["Parameters"] = 13] = "Parameters"; + ParsingContext[ParsingContext["TypeParameters"] = 14] = "TypeParameters"; + ParsingContext[ParsingContext["TypeArguments"] = 15] = "TypeArguments"; + ParsingContext[ParsingContext["Count"] = 16] = "Count"; + })(ParsingContext || (ParsingContext = {})); + var Tristate; + (function (Tristate) { + Tristate[Tristate["False"] = 0] = "False"; + Tristate[Tristate["True"] = 1] = "True"; + Tristate[Tristate["Unknown"] = 2] = "Unknown"; + })(Tristate || (Tristate = {})); + function parsingContextErrors(context) { + switch (context) { + case 0 /* SourceElements */: + return ts.Diagnostics.Declaration_or_statement_expected; + case 1 /* ModuleElements */: + return ts.Diagnostics.Declaration_or_statement_expected; + case 2 /* BlockStatements */: + return ts.Diagnostics.Statement_expected; + case 3 /* SwitchClauses */: + return ts.Diagnostics.case_or_default_expected; + case 4 /* SwitchClauseStatements */: + return ts.Diagnostics.Statement_expected; + case 5 /* TypeMembers */: + return ts.Diagnostics.Property_or_signature_expected; + case 6 /* ClassMembers */: + return ts.Diagnostics.Unexpected_token_A_constructor_method_accessor_or_property_was_expected; + case 7 /* EnumMembers */: + return ts.Diagnostics.Enum_member_expected; + case 8 /* BaseTypeReferences */: + return ts.Diagnostics.Type_reference_expected; + case 9 /* VariableDeclarations */: + return ts.Diagnostics.Variable_declaration_expected; + case 10 /* ArgumentExpressions */: + return ts.Diagnostics.Argument_expression_expected; + case 11 /* ObjectLiteralMembers */: + return ts.Diagnostics.Property_assignment_expected; + case 12 /* ArrayLiteralMembers */: + return ts.Diagnostics.Expression_or_comma_expected; + case 13 /* Parameters */: + return ts.Diagnostics.Parameter_declaration_expected; + case 14 /* TypeParameters */: + return ts.Diagnostics.Type_parameter_declaration_expected; + case 15 /* TypeArguments */: + return ts.Diagnostics.Type_argument_expected; + } + } + ; + var LookAheadMode; + (function (LookAheadMode) { + LookAheadMode[LookAheadMode["NotLookingAhead"] = 0] = "NotLookingAhead"; + LookAheadMode[LookAheadMode["NoErrorYet"] = 1] = "NoErrorYet"; + LookAheadMode[LookAheadMode["Error"] = 2] = "Error"; + })(LookAheadMode || (LookAheadMode = {})); + var ModifierContext; + (function (ModifierContext) { + ModifierContext[ModifierContext["SourceElements"] = 0] = "SourceElements"; + ModifierContext[ModifierContext["ModuleElements"] = 1] = "ModuleElements"; + ModifierContext[ModifierContext["ClassMembers"] = 2] = "ClassMembers"; + ModifierContext[ModifierContext["Parameters"] = 3] = "Parameters"; + })(ModifierContext || (ModifierContext = {})); + var TrailingCommaBehavior; + (function (TrailingCommaBehavior) { + TrailingCommaBehavior[TrailingCommaBehavior["Disallow"] = 0] = "Disallow"; + TrailingCommaBehavior[TrailingCommaBehavior["Allow"] = 1] = "Allow"; + TrailingCommaBehavior[TrailingCommaBehavior["Preserve"] = 2] = "Preserve"; + })(TrailingCommaBehavior || (TrailingCommaBehavior = {})); + var ControlBlockContext; + (function (ControlBlockContext) { + ControlBlockContext[ControlBlockContext["NotNested"] = 0] = "NotNested"; + ControlBlockContext[ControlBlockContext["Nested"] = 1] = "Nested"; + ControlBlockContext[ControlBlockContext["CrossingFunctionBoundary"] = 2] = "CrossingFunctionBoundary"; + })(ControlBlockContext || (ControlBlockContext = {})); + function createSourceFile(filename, sourceText, languageVersion) { + var file; + var scanner; + var token; + var parsingContext; + var commentRanges; + var identifiers = {}; + var identifierCount = 0; + var nodeCount = 0; + var lineStarts; + var isInStrictMode = false; + var lookAheadMode = 0 /* NotLookingAhead */; + var inAmbientContext = false; + var inFunctionBody = false; + var inSwitchStatement = 0 /* NotNested */; + var inIterationStatement = 0 /* NotNested */; + var labelledStatementInfo = (function () { + var functionBoundarySentinel; + var currentLabelSet; + var labelSetStack; + var isIterationStack; + function addLabel(label) { + if (!currentLabelSet) { + currentLabelSet = {}; + } + currentLabelSet[label.text] = true; + } + function pushCurrentLabelSet(isIterationStatement) { + if (!labelSetStack && !isIterationStack) { + labelSetStack = []; + isIterationStack = []; + } + ts.Debug.assert(currentLabelSet !== undefined); + labelSetStack.push(currentLabelSet); + isIterationStack.push(isIterationStatement); + currentLabelSet = undefined; + } + function pushFunctionBoundary() { + if (!functionBoundarySentinel) { + functionBoundarySentinel = {}; + if (!labelSetStack && !isIterationStack) { + labelSetStack = []; + isIterationStack = []; + } + } + ts.Debug.assert(currentLabelSet === undefined); + labelSetStack.push(functionBoundarySentinel); + isIterationStack.push(false); + } + function pop() { + ts.Debug.assert(labelSetStack.length && isIterationStack.length && currentLabelSet === undefined); + labelSetStack.pop(); + isIterationStack.pop(); + } + function nodeIsNestedInLabel(label, requireIterationStatement, stopAtFunctionBoundary) { + if (!requireIterationStatement && currentLabelSet && ts.hasProperty(currentLabelSet, label.text)) { + return 1 /* Nested */; + } + if (!labelSetStack) { + return 0 /* NotNested */; + } + var crossedFunctionBoundary = false; + for (var i = labelSetStack.length - 1; i >= 0; i--) { + var labelSet = labelSetStack[i]; + if (labelSet === functionBoundarySentinel) { + if (stopAtFunctionBoundary) { + break; + } + else { + crossedFunctionBoundary = true; + continue; + } + } + if (requireIterationStatement && isIterationStack[i] === false) { + continue; + } + if (ts.hasProperty(labelSet, label.text)) { + return crossedFunctionBoundary ? 2 /* CrossingFunctionBoundary */ : 1 /* Nested */; + } + } + return 0 /* NotNested */; + } + return { + addLabel: addLabel, + pushCurrentLabelSet: pushCurrentLabelSet, + pushFunctionBoundary: pushFunctionBoundary, + pop: pop, + nodeIsNestedInLabel: nodeIsNestedInLabel + }; + })(); + function getLineAndCharacterlFromSourcePosition(position) { + if (!lineStarts) { + lineStarts = ts.getLineStarts(sourceText); + } + return ts.getLineAndCharacterOfPosition(lineStarts, position); + } + function error(message, arg0, arg1, arg2) { + var start = scanner.getTokenPos(); + var length = scanner.getTextPos() - start; + errorAtPos(start, length, message, arg0, arg1, arg2); + } + function grammarErrorOnNode(node, message, arg0, arg1, arg2) { + var span = getErrorSpanForNode(node); + var start = ts.skipTrivia(file.text, span.pos); + var length = span.end - start; + file.syntacticErrors.push(ts.createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); + } + function reportInvalidUseInStrictMode(node) { + var name = sourceText.substring(ts.skipTrivia(sourceText, node.pos), node.end); + grammarErrorOnNode(node, ts.Diagnostics.Invalid_use_of_0_in_strict_mode, name); + } + function grammarErrorAtPos(start, length, message, arg0, arg1, arg2) { + file.syntacticErrors.push(ts.createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); + } + function errorAtPos(start, length, message, arg0, arg1, arg2) { + var lastErrorPos = file.syntacticErrors.length ? file.syntacticErrors[file.syntacticErrors.length - 1].start : -1; + if (start !== lastErrorPos) { + file.syntacticErrors.push(ts.createFileDiagnostic(file, start, length, message, arg0, arg1, arg2)); + } + if (lookAheadMode === 1 /* NoErrorYet */) { + lookAheadMode = 2 /* Error */; + } + } + function scanError(message) { + var pos = scanner.getTextPos(); + errorAtPos(pos, 0, message); + } + function onComment(pos, end) { + if (commentRanges) + commentRanges.push({ pos: pos, end: end }); + } + function getNodePos() { + return scanner.getStartPos(); + } + function getNodeEnd() { + return scanner.getStartPos(); + } + function nextToken() { + return token = scanner.scan(); + } + function getTokenPos(pos) { + return ts.skipTrivia(sourceText, pos); + } + function reScanGreaterToken() { + return token = scanner.reScanGreaterToken(); + } + function reScanSlashToken() { + return token = scanner.reScanSlashToken(); + } + function lookAheadHelper(callback, alwaysResetState) { + var saveToken = token; + var saveSyntacticErrorsLength = file.syntacticErrors.length; + var saveLookAheadMode = lookAheadMode; + lookAheadMode = 1 /* NoErrorYet */; + var result = callback(); + ts.Debug.assert(lookAheadMode === 2 /* Error */ || lookAheadMode === 1 /* NoErrorYet */); + if (lookAheadMode === 2 /* Error */) { + result = undefined; + } + lookAheadMode = saveLookAheadMode; + if (!result || alwaysResetState) { + token = saveToken; + file.syntacticErrors.length = saveSyntacticErrorsLength; + } + return result; + } + function lookAhead(callback) { + var result; + scanner.tryScan(function () { + result = lookAheadHelper(callback, true); + return false; + }); + return result; + } + function tryParse(callback) { + return scanner.tryScan(function () { return lookAheadHelper(callback, false); }); + } + function isIdentifier() { + return token === 55 /* Identifier */ || (isInStrictMode ? token > ts.SyntaxKind.LastFutureReservedWord : token > ts.SyntaxKind.LastReservedWord); + } + function parseExpected(t) { + if (token === t) { + nextToken(); + return true; + } + error(ts.Diagnostics._0_expected, ts.tokenToString(t)); + return false; + } + function parseOptional(t) { + if (token === t) { + nextToken(); + return true; + } + return false; + } + function canParseSemicolon() { + if (token === 13 /* SemicolonToken */) { + return true; + } + return token === 6 /* CloseBraceToken */ || token === 1 /* EndOfFileToken */ || scanner.hasPrecedingLineBreak(); + } + function parseSemicolon() { + if (canParseSemicolon()) { + if (token === 13 /* SemicolonToken */) { + nextToken(); + } + } + else { + error(ts.Diagnostics._0_expected, ";"); + } + } + function createNode(kind, pos) { + nodeCount++; + var node = new (nodeConstructors[kind] || (nodeConstructors[kind] = ts.objectAllocator.getNodeConstructor(kind)))(); + if (!(pos >= 0)) + pos = scanner.getStartPos(); + node.pos = pos; + node.end = pos; + return node; + } + function finishNode(node) { + node.end = scanner.getStartPos(); + return node; + } + function createMissingNode() { + return createNode(111 /* Missing */); + } + function createIdentifier(isIdentifier) { + identifierCount++; + if (isIdentifier) { + var node = createNode(55 /* Identifier */); + var text = escapeIdentifier(scanner.getTokenValue()); + node.text = ts.hasProperty(identifiers, text) ? identifiers[text] : (identifiers[text] = text); + nextToken(); + return finishNode(node); + } + error(ts.Diagnostics.Identifier_expected); + return createMissingNode(); + } + function parseIdentifier() { + return createIdentifier(isIdentifier()); + } + function parseIdentifierName() { + return createIdentifier(token >= 55 /* Identifier */); + } + function isPropertyName() { + return token >= 55 /* Identifier */ || token === 3 /* StringLiteral */ || token === 2 /* NumericLiteral */; + } + function parsePropertyName() { + if (token === 3 /* StringLiteral */ || token === 2 /* NumericLiteral */) { + return parsePrimaryExpression(); + } + return parseIdentifierName(); + } + function isKeyword(token) { + return ts.SyntaxKind.FirstKeyword <= token && token <= ts.SyntaxKind.LastKeyword; + } + function isModifier(token) { + switch (token) { + case 98 /* PublicKeyword */: + case 96 /* PrivateKeyword */: + case 99 /* StaticKeyword */: + case 68 /* ExportKeyword */: + case 104 /* DeclareKeyword */: + return true; + } + return false; + } + function parseContextualModifier(t) { + return token === t && tryParse(function () { + nextToken(); + return token === 9 /* OpenBracketToken */ || isPropertyName(); + }); + } + function parseAnyContextualModifier() { + return isModifier(token) && tryParse(function () { + nextToken(); + return token === 9 /* OpenBracketToken */ || isPropertyName(); + }); + } + function isListElement(kind, inErrorRecovery) { + switch (kind) { + case 0 /* SourceElements */: + case 1 /* ModuleElements */: + return isSourceElement(inErrorRecovery); + case 2 /* BlockStatements */: + case 4 /* SwitchClauseStatements */: + return isStatement(inErrorRecovery); + case 3 /* SwitchClauses */: + return token === 57 /* CaseKeyword */ || token === 63 /* DefaultKeyword */; + case 5 /* TypeMembers */: + return isTypeMember(); + case 6 /* ClassMembers */: + return lookAhead(isClassMemberStart); + case 7 /* EnumMembers */: + case 11 /* ObjectLiteralMembers */: + return isPropertyName(); + case 8 /* BaseTypeReferences */: + return isIdentifier() && ((token !== 69 /* ExtendsKeyword */ && token !== 92 /* ImplementsKeyword */) || !lookAhead(function () { return (nextToken(), isIdentifier()); })); + case 9 /* VariableDeclarations */: + case 14 /* TypeParameters */: + return isIdentifier(); + case 10 /* ArgumentExpressions */: + return isExpression(); + case 12 /* ArrayLiteralMembers */: + return token === 14 /* CommaToken */ || isExpression(); + case 13 /* Parameters */: + return isParameter(); + case 15 /* TypeArguments */: + return isType(); + } + ts.Debug.fail("Non-exhaustive case in 'isListElement'."); + } + function isListTerminator(kind) { + if (token === 1 /* EndOfFileToken */) { + return true; + } + switch (kind) { + case 1 /* ModuleElements */: + case 2 /* BlockStatements */: + case 3 /* SwitchClauses */: + case 5 /* TypeMembers */: + case 6 /* ClassMembers */: + case 7 /* EnumMembers */: + case 11 /* ObjectLiteralMembers */: + return token === 6 /* CloseBraceToken */; + case 4 /* SwitchClauseStatements */: + return token === 6 /* CloseBraceToken */ || token === 57 /* CaseKeyword */ || token === 63 /* DefaultKeyword */; + case 8 /* BaseTypeReferences */: + return token === 5 /* OpenBraceToken */ || token === 69 /* ExtendsKeyword */ || token === 92 /* ImplementsKeyword */; + case 9 /* VariableDeclarations */: + return isVariableDeclaratorListTerminator(); + case 14 /* TypeParameters */: + return token === 16 /* GreaterThanToken */ || token === 7 /* OpenParenToken */ || token === 5 /* OpenBraceToken */ || token === 69 /* ExtendsKeyword */ || token === 92 /* ImplementsKeyword */; + case 10 /* ArgumentExpressions */: + return token === 8 /* CloseParenToken */ || token === 13 /* SemicolonToken */; + case 12 /* ArrayLiteralMembers */: + return token === 10 /* CloseBracketToken */; + case 13 /* Parameters */: + return token === 8 /* CloseParenToken */ || token === 10 /* CloseBracketToken */ || token === 5 /* OpenBraceToken */; + case 15 /* TypeArguments */: + return token === 16 /* GreaterThanToken */ || token === 7 /* OpenParenToken */; + } + } + function isVariableDeclaratorListTerminator() { + if (canParseSemicolon()) { + return true; + } + if (token === 76 /* InKeyword */) { + return true; + } + if (token === 23 /* EqualsGreaterThanToken */) { + return true; + } + return false; + } + function isInSomeParsingContext() { + for (var kind = 0; kind < 16 /* Count */; kind++) { + if (parsingContext & (1 << kind)) { + if (isListElement(kind, true) || isListTerminator(kind)) { + return true; + } + } + } + return false; + } + function parseList(kind, checkForStrictMode, parseElement) { + var saveParsingContext = parsingContext; + parsingContext |= 1 << kind; + var result = []; + result.pos = getNodePos(); + var saveIsInStrictMode = isInStrictMode; + while (!isListTerminator(kind)) { + if (isListElement(kind, false)) { + var element = parseElement(); + result.push(element); + if (!isInStrictMode && checkForStrictMode) { + if (isPrologueDirective(element)) { + if (isUseStrictPrologueDirective(element)) { + isInStrictMode = true; + checkForStrictMode = false; + } + } + else { + checkForStrictMode = false; + } + } + } + else { + error(parsingContextErrors(kind)); + if (isInSomeParsingContext()) { + break; + } + nextToken(); + } + } + isInStrictMode = saveIsInStrictMode; + result.end = getNodeEnd(); + parsingContext = saveParsingContext; + return result; + } + function parseDelimitedList(kind, parseElement, trailingCommaBehavior) { + var saveParsingContext = parsingContext; + parsingContext |= 1 << kind; + var result = []; + result.pos = getNodePos(); + var errorCountBeforeParsingList = file.syntacticErrors.length; + var commaStart = -1; + while (true) { + if (isListElement(kind, false)) { + result.push(parseElement()); + commaStart = scanner.getTokenPos(); + if (parseOptional(14 /* CommaToken */)) { + continue; + } + commaStart = -1; + if (isListTerminator(kind)) { + break; + } + error(ts.Diagnostics._0_expected, ","); + } + else if (isListTerminator(kind)) { + if (commaStart >= 0) { + if (trailingCommaBehavior === 0 /* Disallow */) { + if (file.syntacticErrors.length === errorCountBeforeParsingList) { + grammarErrorAtPos(commaStart, scanner.getStartPos() - commaStart, ts.Diagnostics.Trailing_comma_not_allowed); + } + } + else if (trailingCommaBehavior === 2 /* Preserve */) { + result.push(createNode(142 /* OmittedExpression */)); + } + } + break; + } + else { + error(parsingContextErrors(kind)); + if (isInSomeParsingContext()) { + break; + } + nextToken(); + } + } + result.end = getNodeEnd(); + parsingContext = saveParsingContext; + return result; + } + function createMissingList() { + var pos = getNodePos(); + var result = []; + result.pos = pos; + result.end = pos; + return result; + } + function createNodeArray(node) { + var result = [node]; + result.pos = node.pos; + result.end = node.end; + return result; + } + function parseBracketedList(kind, parseElement, startToken, endToken) { + if (parseExpected(startToken)) { + var result = parseDelimitedList(kind, parseElement, 0 /* Disallow */); + parseExpected(endToken); + return result; + } + return createMissingList(); + } + function parseEntityName(allowReservedWords) { + var entity = parseIdentifier(); + while (parseOptional(11 /* DotToken */)) { + var node = createNode(112 /* QualifiedName */, entity.pos); + node.left = entity; + node.right = allowReservedWords ? parseIdentifierName() : parseIdentifier(); + entity = finishNode(node); + } + return entity; + } + function parseTokenNode() { + var node = createNode(token); + nextToken(); + return finishNode(node); + } + function parseLiteralNode() { + var node = createNode(token); + node.text = scanner.getTokenValue(); + nextToken(); + return finishNode(node); + } + function parseStringLiteral() { + if (token === 3 /* StringLiteral */) + return parseLiteralNode(); + error(ts.Diagnostics.String_literal_expected); + return createMissingNode(); + } + function parseTypeReference() { + var node = createNode(123 /* TypeReference */); + node.typeName = parseEntityName(false); + if (!scanner.hasPrecedingLineBreak() && token === 15 /* LessThanToken */) { + node.typeArguments = parseTypeArguments(); + } + return finishNode(node); + } + function parseTypeQuery() { + var node = createNode(124 /* TypeQuery */); + parseExpected(87 /* TypeOfKeyword */); + node.exprName = parseEntityName(true); + return finishNode(node); + } + function parseTypeParameter() { + var node = createNode(113 /* TypeParameter */); + node.name = parseIdentifier(); + if (parseOptional(69 /* ExtendsKeyword */)) { + if (isType() || !isExpression()) { + node.constraint = parseType(); + } + else { + var expr = parseUnaryExpression(); + grammarErrorOnNode(expr, ts.Diagnostics.Type_expected); + } + } + return finishNode(node); + } + function parseTypeParameters() { + if (token === 15 /* LessThanToken */) { + var pos = getNodePos(); + var result = parseBracketedList(14 /* TypeParameters */, parseTypeParameter, 15 /* LessThanToken */, 16 /* GreaterThanToken */); + if (!result.length) { + var start = getTokenPos(pos); + var length = getNodePos() - start; + errorAtPos(start, length, ts.Diagnostics.Type_parameter_list_cannot_be_empty); + } + return result; + } + } + function parseParameterType() { + return parseOptional(42 /* ColonToken */) ? token === 3 /* StringLiteral */ ? parseStringLiteral() : parseType() : undefined; + } + function isParameter() { + return token === 12 /* DotDotDotToken */ || isIdentifier() || isModifier(token); + } + function parseParameter(flags) { + if (flags === void 0) { flags = 0; } + var node = createNode(114 /* Parameter */); + node.flags |= parseAndCheckModifiers(3 /* Parameters */); + if (parseOptional(12 /* DotDotDotToken */)) { + node.flags |= 8 /* Rest */; + } + node.name = parseIdentifier(); + if (node.name.kind === 111 /* Missing */ && node.flags === 0 && isModifier(token)) { + nextToken(); + } + if (parseOptional(41 /* QuestionToken */)) { + node.flags |= 4 /* QuestionMark */; + } + node.type = parseParameterType(); + node.initializer = parseInitializer(true); + return finishNode(node); + } + function parseSignature(kind, returnToken) { + if (kind === 121 /* ConstructSignature */) { + parseExpected(78 /* NewKeyword */); + } + var typeParameters = parseTypeParameters(); + var parameters = parseParameterList(7 /* OpenParenToken */, 8 /* CloseParenToken */); + checkParameterList(parameters); + var type = parseOptional(returnToken) ? parseType() : undefined; + return { + typeParameters: typeParameters, + parameters: parameters, + type: type + }; + } + function parseParameterList(startDelimiter, endDelimiter) { + return parseBracketedList(13 /* Parameters */, parseParameter, startDelimiter, endDelimiter); + } + function checkParameterList(parameters) { + var seenOptionalParameter = false; + var parameterCount = parameters.length; + for (var i = 0; i < parameterCount; i++) { + var parameter = parameters[i]; + if (isInStrictMode && isEvalOrArgumentsIdentifier(parameter.name)) { + reportInvalidUseInStrictMode(parameter.name); + return; + } + else if (parameter.flags & 8 /* Rest */) { + if (i !== (parameterCount - 1)) { + grammarErrorOnNode(parameter.name, ts.Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list); + return; + } + if (parameter.flags & 4 /* QuestionMark */) { + grammarErrorOnNode(parameter.name, ts.Diagnostics.A_rest_parameter_cannot_be_optional); + return; + } + if (parameter.initializer) { + grammarErrorOnNode(parameter.name, ts.Diagnostics.A_rest_parameter_cannot_have_an_initializer); + return; + } + } + else if (parameter.flags & 4 /* QuestionMark */ || parameter.initializer) { + seenOptionalParameter = true; + if (parameter.flags & 4 /* QuestionMark */ && parameter.initializer) { + grammarErrorOnNode(parameter.name, ts.Diagnostics.Parameter_cannot_have_question_mark_and_initializer); + return; + } + } + else { + if (seenOptionalParameter) { + grammarErrorOnNode(parameter.name, ts.Diagnostics.A_required_parameter_cannot_follow_an_optional_parameter); + return; + } + } + } + } + function parseSignatureMember(kind, returnToken) { + var node = createNode(kind); + var sig = parseSignature(kind, returnToken); + node.typeParameters = sig.typeParameters; + node.parameters = sig.parameters; + node.type = sig.type; + parseSemicolon(); + return finishNode(node); + } + function parseIndexSignatureMember() { + var node = createNode(122 /* IndexSignature */); + var errorCountBeforeIndexSignature = file.syntacticErrors.length; + var indexerStart = scanner.getTokenPos(); + node.parameters = parseParameterList(9 /* OpenBracketToken */, 10 /* CloseBracketToken */); + var indexerLength = scanner.getStartPos() - indexerStart; + node.type = parseTypeAnnotation(); + parseSemicolon(); + if (file.syntacticErrors.length === errorCountBeforeIndexSignature) { + checkIndexSignature(node, indexerStart, indexerLength); + } + return finishNode(node); + } + function checkIndexSignature(node, indexerStart, indexerLength) { + var parameter = node.parameters[0]; + if (node.parameters.length !== 1) { + var arityDiagnostic = ts.Diagnostics.An_index_signature_must_have_exactly_one_parameter; + if (parameter) { + grammarErrorOnNode(parameter.name, arityDiagnostic); + } + else { + grammarErrorAtPos(indexerStart, indexerLength, arityDiagnostic); + } + return; + } + else if (parameter.flags & 8 /* Rest */) { + grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_cannot_have_a_rest_parameter); + return; + } + else if (parameter.flags & ts.NodeFlags.Modifier) { + grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_an_accessibility_modifier); + return; + } + else if (parameter.flags & 4 /* QuestionMark */) { + grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_a_question_mark); + return; + } + else if (parameter.initializer) { + grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_an_initializer); + return; + } + else if (!parameter.type) { + grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_must_have_a_type_annotation); + return; + } + else if (parameter.type.kind !== 110 /* StringKeyword */ && parameter.type.kind !== 108 /* NumberKeyword */) { + grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_must_be_string_or_number); + return; + } + else if (!node.type) { + grammarErrorAtPos(indexerStart, indexerLength, ts.Diagnostics.An_index_signature_must_have_a_type_annotation); + return; + } + } + function parsePropertyOrMethod() { + var node = createNode(0 /* Unknown */); + node.name = parsePropertyName(); + if (parseOptional(41 /* QuestionToken */)) { + node.flags |= 4 /* QuestionMark */; + } + if (token === 7 /* OpenParenToken */ || token === 15 /* LessThanToken */) { + node.kind = 116 /* Method */; + var sig = parseSignature(120 /* CallSignature */, 42 /* ColonToken */); + node.typeParameters = sig.typeParameters; + node.parameters = sig.parameters; + node.type = sig.type; + } + else { + node.kind = 115 /* Property */; + node.type = parseTypeAnnotation(); + } + parseSemicolon(); + return finishNode(node); + } + function isTypeMember() { + switch (token) { + case 7 /* OpenParenToken */: + case 15 /* LessThanToken */: + case 9 /* OpenBracketToken */: + return true; + default: + return isPropertyName() && lookAhead(function () { return nextToken() === 7 /* OpenParenToken */ || token === 15 /* LessThanToken */ || token === 41 /* QuestionToken */ || token === 42 /* ColonToken */ || canParseSemicolon(); }); + } + } + function parseTypeMember() { + switch (token) { + case 7 /* OpenParenToken */: + case 15 /* LessThanToken */: + return parseSignatureMember(120 /* CallSignature */, 42 /* ColonToken */); + case 9 /* OpenBracketToken */: + return parseIndexSignatureMember(); + case 78 /* NewKeyword */: + if (lookAhead(function () { return nextToken() === 7 /* OpenParenToken */ || token === 15 /* LessThanToken */; })) { + return parseSignatureMember(121 /* ConstructSignature */, 42 /* ColonToken */); + } + case 3 /* StringLiteral */: + case 2 /* NumericLiteral */: + return parsePropertyOrMethod(); + default: + if (token >= 55 /* Identifier */) { + return parsePropertyOrMethod(); + } + } + } + function parseTypeLiteral() { + var node = createNode(125 /* TypeLiteral */); + if (parseExpected(5 /* OpenBraceToken */)) { + node.members = parseList(5 /* TypeMembers */, false, parseTypeMember); + parseExpected(6 /* CloseBraceToken */); + } + else { + node.members = createMissingList(); + } + return finishNode(node); + } + function parseFunctionType(signatureKind) { + var node = createNode(125 /* TypeLiteral */); + var member = createNode(signatureKind); + var sig = parseSignature(signatureKind, 23 /* EqualsGreaterThanToken */); + member.typeParameters = sig.typeParameters; + member.parameters = sig.parameters; + member.type = sig.type; + finishNode(member); + node.members = createNodeArray(member); + return finishNode(node); + } + function parseKeywordAndNoDot() { + var node = parseTokenNode(); + return token === 11 /* DotToken */ ? undefined : node; + } + function parseNonArrayType() { + switch (token) { + case 101 /* AnyKeyword */: + case 110 /* StringKeyword */: + case 108 /* NumberKeyword */: + case 102 /* BooleanKeyword */: + case 89 /* VoidKeyword */: + var node = tryParse(parseKeywordAndNoDot); + return node || parseTypeReference(); + case 87 /* TypeOfKeyword */: + return parseTypeQuery(); + case 5 /* OpenBraceToken */: + return parseTypeLiteral(); + case 7 /* OpenParenToken */: + case 15 /* LessThanToken */: + return parseFunctionType(120 /* CallSignature */); + case 78 /* NewKeyword */: + return parseFunctionType(121 /* ConstructSignature */); + default: + if (isIdentifier()) { + return parseTypeReference(); + } + } + error(ts.Diagnostics.Type_expected); + return createMissingNode(); + } + function isType() { + switch (token) { + case 101 /* AnyKeyword */: + case 110 /* StringKeyword */: + case 108 /* NumberKeyword */: + case 102 /* BooleanKeyword */: + case 89 /* VoidKeyword */: + case 87 /* TypeOfKeyword */: + case 5 /* OpenBraceToken */: + case 15 /* LessThanToken */: + case 78 /* NewKeyword */: + return true; + case 7 /* OpenParenToken */: + return lookAhead(function () { + nextToken(); + return token === 8 /* CloseParenToken */ || isParameter(); + }); + default: + return isIdentifier(); + } + } + function parseType() { + var type = parseNonArrayType(); + while (type && !scanner.hasPrecedingLineBreak() && parseOptional(9 /* OpenBracketToken */)) { + parseExpected(10 /* CloseBracketToken */); + var node = createNode(126 /* ArrayType */, type.pos); + node.elementType = type; + type = finishNode(node); + } + return type; + } + function parseTypeAnnotation() { + return parseOptional(42 /* ColonToken */) ? parseType() : undefined; + } + function isExpression() { + switch (token) { + case 83 /* ThisKeyword */: + case 81 /* SuperKeyword */: + case 79 /* NullKeyword */: + case 85 /* TrueKeyword */: + case 70 /* FalseKeyword */: + case 2 /* NumericLiteral */: + case 3 /* StringLiteral */: + case 7 /* OpenParenToken */: + case 9 /* OpenBracketToken */: + case 5 /* OpenBraceToken */: + case 73 /* FunctionKeyword */: + case 78 /* NewKeyword */: + case 27 /* SlashToken */: + case 47 /* SlashEqualsToken */: + case 24 /* PlusToken */: + case 25 /* MinusToken */: + case 38 /* TildeToken */: + case 37 /* ExclamationToken */: + case 64 /* DeleteKeyword */: + case 87 /* TypeOfKeyword */: + case 89 /* VoidKeyword */: + case 29 /* PlusPlusToken */: + case 30 /* MinusMinusToken */: + case 15 /* LessThanToken */: + case 55 /* Identifier */: + return true; + default: + return isIdentifier(); + } + } + function isExpressionStatement() { + return token !== 5 /* OpenBraceToken */ && token !== 73 /* FunctionKeyword */ && isExpression(); + } + function parseExpression(noIn) { + var expr = parseAssignmentExpression(noIn); + while (parseOptional(14 /* CommaToken */)) { + expr = makeBinaryExpression(expr, 14 /* CommaToken */, parseAssignmentExpression(noIn)); + } + return expr; + } + function parseInitializer(inParameter, noIn) { + if (token !== 43 /* EqualsToken */) { + if (scanner.hasPrecedingLineBreak() || (inParameter && token === 5 /* OpenBraceToken */) || !isExpression()) { + return undefined; + } + } + parseExpected(43 /* EqualsToken */); + return parseAssignmentExpression(noIn); + } + function parseAssignmentExpression(noIn) { + var arrowExpression = tryParseArrowFunctionExpression(); + if (arrowExpression) { + return arrowExpression; + } + var expr = parseConditionalExpression(noIn); + if (isLeftHandSideExpression(expr) && isAssignmentOperator()) { + if (isInStrictMode && isEvalOrArgumentsIdentifier(expr)) { + reportInvalidUseInStrictMode(expr); + } + var operator = token; + nextToken(); + return makeBinaryExpression(expr, operator, parseAssignmentExpression(noIn)); + } + return expr; + } + function isLeftHandSideExpression(expr) { + if (expr) { + switch (expr.kind) { + case 130 /* PropertyAccess */: + case 131 /* IndexedAccess */: + case 133 /* NewExpression */: + case 132 /* CallExpression */: + case 127 /* ArrayLiteral */: + case 135 /* ParenExpression */: + case 128 /* ObjectLiteral */: + case 136 /* FunctionExpression */: + case 55 /* Identifier */: + case 111 /* Missing */: + case 4 /* RegularExpressionLiteral */: + case 2 /* NumericLiteral */: + case 3 /* StringLiteral */: + case 70 /* FalseKeyword */: + case 79 /* NullKeyword */: + case 83 /* ThisKeyword */: + case 85 /* TrueKeyword */: + case 81 /* SuperKeyword */: + return true; + } + } + return false; + } + function tryParseArrowFunctionExpression() { + return isSimpleArrowFunctionExpression() ? parseSimpleArrowFunctionExpression() : tryParseParenthesizedArrowFunctionExpression(); + } + function isSimpleArrowFunctionExpression() { + if (token === 23 /* EqualsGreaterThanToken */) { + return true; + } + if (token === 55 /* Identifier */) { + return lookAhead(function () { + return nextToken() === 23 /* EqualsGreaterThanToken */; + }); + } + return false; + } + function parseSimpleArrowFunctionExpression() { + ts.Debug.assert(token === 55 /* Identifier */ || token === 23 /* EqualsGreaterThanToken */); + var identifier = parseIdentifier(); + ts.Debug.assert(token === 23 /* EqualsGreaterThanToken */, "parseSimpleArrowFunctionExpression should only have been called if we had a =>"); + parseExpected(23 /* EqualsGreaterThanToken */); + var parameter = createNode(114 /* Parameter */, identifier.pos); + parameter.name = identifier; + finishNode(parameter); + var parameters = []; + parameters.push(parameter); + parameters.pos = parameter.pos; + parameters.end = parameter.end; + var signature = { parameters: parameters }; + return parseArrowExpressionTail(identifier.pos, signature, false); + } + function tryParseParenthesizedArrowFunctionExpression() { + var pos = getNodePos(); + var triState = isParenthesizedArrowFunctionExpression(); + if (triState === 0 /* False */) { + return undefined; + } + if (triState === 1 /* True */) { + var sig = parseSignature(120 /* CallSignature */, 42 /* ColonToken */); + if (parseExpected(23 /* EqualsGreaterThanToken */) || token === 5 /* OpenBraceToken */) { + return parseArrowExpressionTail(pos, sig, false); + } + else { + return makeFunctionExpression(137 /* ArrowFunction */, pos, undefined, sig, createMissingNode()); + } + } + var sig = tryParseSignatureIfArrowOrBraceFollows(); + if (sig) { + parseExpected(23 /* EqualsGreaterThanToken */); + return parseArrowExpressionTail(pos, sig, false); + } + else { + return undefined; + } + } + function isParenthesizedArrowFunctionExpression() { + if (token === 7 /* OpenParenToken */ || token === 15 /* LessThanToken */) { + return lookAhead(function () { + var first = token; + var second = nextToken(); + if (first === 7 /* OpenParenToken */) { + if (second === 8 /* CloseParenToken */) { + var third = nextToken(); + switch (third) { + case 23 /* EqualsGreaterThanToken */: + case 42 /* ColonToken */: + case 5 /* OpenBraceToken */: + return 1 /* True */; + default: + return 0 /* False */; + } + } + if (second === 12 /* DotDotDotToken */) { + return 1 /* True */; + } + if (!isIdentifier()) { + return 0 /* False */; + } + if (nextToken() === 42 /* ColonToken */) { + return 1 /* True */; + } + return 2 /* Unknown */; + } + else { + ts.Debug.assert(first === 15 /* LessThanToken */); + if (!isIdentifier()) { + return 0 /* False */; + } + return 2 /* Unknown */; + } + }); + } + return 0 /* False */; + } + function tryParseSignatureIfArrowOrBraceFollows() { + return tryParse(function () { + var sig = parseSignature(120 /* CallSignature */, 42 /* ColonToken */); + if (token === 23 /* EqualsGreaterThanToken */ || token === 5 /* OpenBraceToken */) { + return sig; + } + return undefined; + }); + } + function parseArrowExpressionTail(pos, sig, noIn) { + var body; + if (token === 5 /* OpenBraceToken */) { + body = parseBody(false); + } + else if (isStatement(true) && !isExpressionStatement() && token !== 73 /* FunctionKeyword */) { + body = parseBody(true); + } + else { + body = parseAssignmentExpression(noIn); + } + return makeFunctionExpression(137 /* ArrowFunction */, pos, undefined, sig, body); + } + function isAssignmentOperator() { + return token >= ts.SyntaxKind.FirstAssignment && token <= ts.SyntaxKind.LastAssignment; + } + function parseConditionalExpression(noIn) { + var expr = parseBinaryExpression(noIn); + while (parseOptional(41 /* QuestionToken */)) { + var node = createNode(141 /* ConditionalExpression */, expr.pos); + node.condition = expr; + node.whenTrue = parseAssignmentExpression(false); + parseExpected(42 /* ColonToken */); + node.whenFalse = parseAssignmentExpression(noIn); + expr = finishNode(node); + } + return expr; + } + function parseBinaryExpression(noIn) { + return parseBinaryOperators(parseUnaryExpression(), 0, noIn); + } + function parseBinaryOperators(expr, minPrecedence, noIn) { + while (true) { + reScanGreaterToken(); + var precedence = getOperatorPrecedence(); + if (precedence && precedence > minPrecedence && (!noIn || token !== 76 /* InKeyword */)) { + var operator = token; + nextToken(); + expr = makeBinaryExpression(expr, operator, parseBinaryOperators(parseUnaryExpression(), precedence, noIn)); + continue; + } + return expr; + } + } + function getOperatorPrecedence() { + switch (token) { + case 40 /* BarBarToken */: + return 1; + case 39 /* AmpersandAmpersandToken */: + return 2; + case 35 /* BarToken */: + return 3; + case 36 /* CaretToken */: + return 4; + case 34 /* AmpersandToken */: + return 5; + case 19 /* EqualsEqualsToken */: + case 20 /* ExclamationEqualsToken */: + case 21 /* EqualsEqualsEqualsToken */: + case 22 /* ExclamationEqualsEqualsToken */: + return 6; + case 15 /* LessThanToken */: + case 16 /* GreaterThanToken */: + case 17 /* LessThanEqualsToken */: + case 18 /* GreaterThanEqualsToken */: + case 77 /* InstanceOfKeyword */: + case 76 /* InKeyword */: + return 7; + case 31 /* LessThanLessThanToken */: + case 32 /* GreaterThanGreaterThanToken */: + case 33 /* GreaterThanGreaterThanGreaterThanToken */: + return 8; + case 24 /* PlusToken */: + case 25 /* MinusToken */: + return 9; + case 26 /* AsteriskToken */: + case 27 /* SlashToken */: + case 28 /* PercentToken */: + return 10; + } + return undefined; + } + function makeBinaryExpression(left, operator, right) { + var node = createNode(140 /* BinaryExpression */, left.pos); + node.left = left; + node.operator = operator; + node.right = right; + return finishNode(node); + } + function parseUnaryExpression() { + var pos = getNodePos(); + switch (token) { + case 24 /* PlusToken */: + case 25 /* MinusToken */: + case 38 /* TildeToken */: + case 37 /* ExclamationToken */: + case 64 /* DeleteKeyword */: + case 87 /* TypeOfKeyword */: + case 89 /* VoidKeyword */: + case 29 /* PlusPlusToken */: + case 30 /* MinusMinusToken */: + var operator = token; + nextToken(); + var operand = parseUnaryExpression(); + if (isInStrictMode) { + if ((token === 29 /* PlusPlusToken */ || token === 30 /* MinusMinusToken */) && isEvalOrArgumentsIdentifier(operand)) { + reportInvalidUseInStrictMode(operand); + } + else if (token === 64 /* DeleteKeyword */ && operand.kind === 55 /* Identifier */) { + grammarErrorOnNode(operand, ts.Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode); + } + } + return makeUnaryExpression(138 /* PrefixOperator */, pos, operator, operand); + case 15 /* LessThanToken */: + return parseTypeAssertion(); + } + var primaryExpression = parsePrimaryExpression(); + var illegalUsageOfSuperKeyword = primaryExpression.kind === 81 /* SuperKeyword */ && token !== 7 /* OpenParenToken */ && token !== 11 /* DotToken */; + if (illegalUsageOfSuperKeyword) { + error(ts.Diagnostics.super_must_be_followed_by_argument_list_or_member_access); + } + var expr = parseCallAndAccess(primaryExpression, false); + ts.Debug.assert(isLeftHandSideExpression(expr)); + if ((token === 29 /* PlusPlusToken */ || token === 30 /* MinusMinusToken */) && !scanner.hasPrecedingLineBreak()) { + if (isInStrictMode && isEvalOrArgumentsIdentifier(expr)) { + reportInvalidUseInStrictMode(expr); + } + var operator = token; + nextToken(); + expr = makeUnaryExpression(139 /* PostfixOperator */, expr.pos, operator, expr); + } + return expr; + } + function parseTypeAssertion() { + var node = createNode(134 /* TypeAssertion */); + parseExpected(15 /* LessThanToken */); + node.type = parseType(); + parseExpected(16 /* GreaterThanToken */); + node.operand = parseUnaryExpression(); + return finishNode(node); + } + function makeUnaryExpression(kind, pos, operator, operand) { + var node = createNode(kind, pos); + node.operator = operator; + node.operand = operand; + return finishNode(node); + } + function parseCallAndAccess(expr, inNewExpression) { + while (true) { + if (parseOptional(11 /* DotToken */)) { + var propertyAccess = createNode(130 /* PropertyAccess */, expr.pos); + propertyAccess.left = expr; + propertyAccess.right = parseIdentifierName(); + expr = finishNode(propertyAccess); + continue; + } + var bracketStart = scanner.getTokenPos(); + if (parseOptional(9 /* OpenBracketToken */)) { + var indexedAccess = createNode(131 /* IndexedAccess */, expr.pos); + indexedAccess.object = expr; + if (inNewExpression && parseOptional(10 /* CloseBracketToken */)) { + indexedAccess.index = createMissingNode(); + grammarErrorAtPos(bracketStart, scanner.getStartPos() - bracketStart, ts.Diagnostics.new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead); + } + else { + indexedAccess.index = parseExpression(); + parseExpected(10 /* CloseBracketToken */); + } + expr = finishNode(indexedAccess); + continue; + } + if ((token === 7 /* OpenParenToken */ || token === 15 /* LessThanToken */) && !inNewExpression) { + var callExpr = createNode(132 /* CallExpression */, expr.pos); + callExpr.func = expr; + if (token === 15 /* LessThanToken */) { + if (!(callExpr.typeArguments = tryParse(parseTypeArgumentsAndOpenParen))) + return expr; + } + else { + parseExpected(7 /* OpenParenToken */); + } + callExpr.arguments = parseDelimitedList(10 /* ArgumentExpressions */, parseAssignmentExpression, 0 /* Disallow */); + parseExpected(8 /* CloseParenToken */); + expr = finishNode(callExpr); + continue; + } + return expr; + } + } + function parseTypeArgumentsAndOpenParen() { + var result = parseTypeArguments(); + parseExpected(7 /* OpenParenToken */); + return result; + } + function parseTypeArguments() { + var typeArgumentListStart = scanner.getTokenPos(); + var errorCountBeforeTypeParameterList = file.syntacticErrors.length; + var result = parseBracketedList(15 /* TypeArguments */, parseType, 15 /* LessThanToken */, 16 /* GreaterThanToken */); + if (!result.length && file.syntacticErrors.length === errorCountBeforeTypeParameterList) { + grammarErrorAtPos(typeArgumentListStart, scanner.getStartPos() - typeArgumentListStart, ts.Diagnostics.Type_argument_list_cannot_be_empty); + } + return result; + } + function parsePrimaryExpression() { + switch (token) { + case 83 /* ThisKeyword */: + case 81 /* SuperKeyword */: + case 79 /* NullKeyword */: + case 85 /* TrueKeyword */: + case 70 /* FalseKeyword */: + return parseTokenNode(); + case 2 /* NumericLiteral */: + case 3 /* StringLiteral */: + return parseLiteralNode(); + case 7 /* OpenParenToken */: + return parseParenExpression(); + case 9 /* OpenBracketToken */: + return parseArrayLiteral(); + case 5 /* OpenBraceToken */: + return parseObjectLiteral(); + case 73 /* FunctionKeyword */: + return parseFunctionExpression(); + case 78 /* NewKeyword */: + return parseNewExpression(); + case 27 /* SlashToken */: + case 47 /* SlashEqualsToken */: + if (reScanSlashToken() === 4 /* RegularExpressionLiteral */) { + return parseLiteralNode(); + } + break; + default: + if (isIdentifier()) { + return parseIdentifier(); + } + } + error(ts.Diagnostics.Expression_expected); + return createMissingNode(); + } + function parseParenExpression() { + var node = createNode(135 /* ParenExpression */); + parseExpected(7 /* OpenParenToken */); + node.expression = parseExpression(); + parseExpected(8 /* CloseParenToken */); + return finishNode(node); + } + function parseArrayLiteralElement() { + return token === 14 /* CommaToken */ ? createNode(142 /* OmittedExpression */) : parseAssignmentExpression(); + } + function parseArrayLiteral() { + var node = createNode(127 /* ArrayLiteral */); + parseExpected(9 /* OpenBracketToken */); + if (scanner.hasPrecedingLineBreak()) + node.flags |= 128 /* MultiLine */; + node.elements = parseDelimitedList(12 /* ArrayLiteralMembers */, parseArrayLiteralElement, 2 /* Preserve */); + parseExpected(10 /* CloseBracketToken */); + return finishNode(node); + } + function parsePropertyAssignment() { + var node = createNode(129 /* PropertyAssignment */); + node.name = parsePropertyName(); + if (token === 7 /* OpenParenToken */ || token === 15 /* LessThanToken */) { + var sig = parseSignature(120 /* CallSignature */, 42 /* ColonToken */); + var body = parseBody(false); + node.initializer = makeFunctionExpression(136 /* FunctionExpression */, node.pos, undefined, sig, body); + } + else { + parseExpected(42 /* ColonToken */); + node.initializer = parseAssignmentExpression(false); + } + return finishNode(node); + } + function parseObjectLiteralMember() { + var initialPos = getNodePos(); + var initialToken = token; + if (parseContextualModifier(105 /* GetKeyword */) || parseContextualModifier(109 /* SetKeyword */)) { + var kind = initialToken === 105 /* GetKeyword */ ? 118 /* GetAccessor */ : 119 /* SetAccessor */; + return parseAndCheckMemberAccessorDeclaration(kind, initialPos, 0); + } + return parsePropertyAssignment(); + } + function parseObjectLiteral() { + var node = createNode(128 /* ObjectLiteral */); + parseExpected(5 /* OpenBraceToken */); + if (scanner.hasPrecedingLineBreak()) { + node.flags |= 128 /* MultiLine */; + } + var trailingCommaBehavior = languageVersion === 0 /* ES3 */ ? 1 /* Allow */ : 2 /* Preserve */; + node.properties = parseDelimitedList(11 /* ObjectLiteralMembers */, parseObjectLiteralMember, trailingCommaBehavior); + parseExpected(6 /* CloseBraceToken */); + var seen = {}; + var Property = 1; + var GetAccessor = 2; + var SetAccesor = 4; + var GetOrSetAccessor = GetAccessor | SetAccesor; + ts.forEach(node.properties, function (p) { + if (p.kind === 142 /* OmittedExpression */) { + return; + } + var currentKind; + if (p.kind === 129 /* PropertyAssignment */) { + currentKind = Property; + } + else if (p.kind === 118 /* GetAccessor */) { + currentKind = GetAccessor; + } + else if (p.kind === 119 /* SetAccessor */) { + currentKind = SetAccesor; + } + else { + ts.Debug.fail("Unexpected syntax kind:" + ts.SyntaxKind[p.kind]); + } + if (!ts.hasProperty(seen, p.name.text)) { + seen[p.name.text] = currentKind; + } + else { + var existingKind = seen[p.name.text]; + if (currentKind === Property && existingKind === Property) { + if (isInStrictMode) { + grammarErrorOnNode(p.name, ts.Diagnostics.An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode); + } + } + else if ((currentKind & GetOrSetAccessor) && (existingKind & GetOrSetAccessor)) { + if (existingKind !== GetOrSetAccessor && currentKind !== existingKind) { + seen[p.name.text] = currentKind | existingKind; + } + else { + grammarErrorOnNode(p.name, ts.Diagnostics.An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name); + } + } + else { + grammarErrorOnNode(p.name, ts.Diagnostics.An_object_literal_cannot_have_property_and_accessor_with_the_same_name); + } + } + }); + return finishNode(node); + } + function parseFunctionExpression() { + var pos = getNodePos(); + parseExpected(73 /* FunctionKeyword */); + var name = isIdentifier() ? parseIdentifier() : undefined; + var sig = parseSignature(120 /* CallSignature */, 42 /* ColonToken */); + var body = parseBody(false); + if (name && isInStrictMode && isEvalOrArgumentsIdentifier(name)) { + reportInvalidUseInStrictMode(name); + } + return makeFunctionExpression(136 /* FunctionExpression */, pos, name, sig, body); + } + function makeFunctionExpression(kind, pos, name, sig, body) { + var node = createNode(kind, pos); + node.name = name; + node.typeParameters = sig.typeParameters; + node.parameters = sig.parameters; + node.type = sig.type; + node.body = body; + return finishNode(node); + } + function parseNewExpression() { + var node = createNode(133 /* NewExpression */); + parseExpected(78 /* NewKeyword */); + node.func = parseCallAndAccess(parsePrimaryExpression(), true); + if (parseOptional(7 /* OpenParenToken */) || token === 15 /* LessThanToken */ && (node.typeArguments = tryParse(parseTypeArgumentsAndOpenParen))) { + node.arguments = parseDelimitedList(10 /* ArgumentExpressions */, parseAssignmentExpression, 0 /* Disallow */); + parseExpected(8 /* CloseParenToken */); + } + return finishNode(node); + } + function parseBlock(ignoreMissingOpenBrace, checkForStrictMode) { + var node = createNode(143 /* Block */); + if (parseExpected(5 /* OpenBraceToken */) || ignoreMissingOpenBrace) { + node.statements = parseList(2 /* BlockStatements */, checkForStrictMode, parseStatement); + parseExpected(6 /* CloseBraceToken */); + } + else { + node.statements = createMissingList(); + } + return finishNode(node); + } + function parseBody(ignoreMissingOpenBrace) { + var saveInFunctionBody = inFunctionBody; + var saveInSwitchStatement = inSwitchStatement; + var saveInIterationStatement = inIterationStatement; + inFunctionBody = true; + if (inSwitchStatement === 1 /* Nested */) { + inSwitchStatement = 2 /* CrossingFunctionBoundary */; + } + if (inIterationStatement === 1 /* Nested */) { + inIterationStatement = 2 /* CrossingFunctionBoundary */; + } + labelledStatementInfo.pushFunctionBoundary(); + var block = parseBlock(ignoreMissingOpenBrace, true); + block.kind = 168 /* FunctionBlock */; + labelledStatementInfo.pop(); + inFunctionBody = saveInFunctionBody; + inSwitchStatement = saveInSwitchStatement; + inIterationStatement = saveInIterationStatement; + return block; + } + function parseEmptyStatement() { + var node = createNode(145 /* EmptyStatement */); + parseExpected(13 /* SemicolonToken */); + return finishNode(node); + } + function parseIfStatement() { + var node = createNode(147 /* IfStatement */); + parseExpected(74 /* IfKeyword */); + parseExpected(7 /* OpenParenToken */); + node.expression = parseExpression(); + parseExpected(8 /* CloseParenToken */); + node.thenStatement = parseStatement(); + node.elseStatement = parseOptional(66 /* ElseKeyword */) ? parseStatement() : undefined; + return finishNode(node); + } + function parseDoStatement() { + var node = createNode(148 /* DoStatement */); + parseExpected(65 /* DoKeyword */); + var saveInIterationStatement = inIterationStatement; + inIterationStatement = 1 /* Nested */; + node.statement = parseStatement(); + inIterationStatement = saveInIterationStatement; + parseExpected(90 /* WhileKeyword */); + parseExpected(7 /* OpenParenToken */); + node.expression = parseExpression(); + parseExpected(8 /* CloseParenToken */); + parseOptional(13 /* SemicolonToken */); + return finishNode(node); + } + function parseWhileStatement() { + var node = createNode(149 /* WhileStatement */); + parseExpected(90 /* WhileKeyword */); + parseExpected(7 /* OpenParenToken */); + node.expression = parseExpression(); + parseExpected(8 /* CloseParenToken */); + var saveInIterationStatement = inIterationStatement; + inIterationStatement = 1 /* Nested */; + node.statement = parseStatement(); + inIterationStatement = saveInIterationStatement; + return finishNode(node); + } + function parseForOrForInStatement() { + var pos = getNodePos(); + parseExpected(72 /* ForKeyword */); + parseExpected(7 /* OpenParenToken */); + if (token !== 13 /* SemicolonToken */) { + if (parseOptional(88 /* VarKeyword */)) { + var declarations = parseVariableDeclarationList(0, true); + if (!declarations.length) { + error(ts.Diagnostics.Variable_declaration_list_cannot_be_empty); + } + } + else { + var varOrInit = parseExpression(true); + } + } + var forOrForInStatement; + if (parseOptional(76 /* InKeyword */)) { + var forInStatement = createNode(151 /* ForInStatement */, pos); + if (declarations) { + if (declarations.length > 1) { + error(ts.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement); + } + forInStatement.declaration = declarations[0]; + } + else { + forInStatement.variable = varOrInit; + } + forInStatement.expression = parseExpression(); + parseExpected(8 /* CloseParenToken */); + forOrForInStatement = forInStatement; + } + else { + var forStatement = createNode(150 /* ForStatement */, pos); + if (declarations) + forStatement.declarations = declarations; + if (varOrInit) + forStatement.initializer = varOrInit; + parseExpected(13 /* SemicolonToken */); + if (token !== 13 /* SemicolonToken */ && token !== 8 /* CloseParenToken */) { + forStatement.condition = parseExpression(); + } + parseExpected(13 /* SemicolonToken */); + if (token !== 8 /* CloseParenToken */) { + forStatement.iterator = parseExpression(); + } + parseExpected(8 /* CloseParenToken */); + forOrForInStatement = forStatement; + } + var saveInIterationStatement = inIterationStatement; + inIterationStatement = 1 /* Nested */; + forOrForInStatement.statement = parseStatement(); + inIterationStatement = saveInIterationStatement; + return finishNode(forOrForInStatement); + } + function parseBreakOrContinueStatement(kind) { + var node = createNode(kind); + var errorCountBeforeStatement = file.syntacticErrors.length; + var keywordStart = scanner.getTokenPos(); + var keywordLength = scanner.getTextPos() - keywordStart; + parseExpected(kind === 153 /* BreakStatement */ ? 56 /* BreakKeyword */ : 61 /* ContinueKeyword */); + if (!canParseSemicolon()) + node.label = parseIdentifier(); + parseSemicolon(); + finishNode(node); + if (!inAmbientContext && errorCountBeforeStatement === file.syntacticErrors.length) { + if (node.label) { + checkBreakOrContinueStatementWithLabel(node); + } + else { + checkBareBreakOrContinueStatement(node); + } + } + return node; + } + function checkBareBreakOrContinueStatement(node) { + if (node.kind === 153 /* BreakStatement */) { + if (inIterationStatement === 1 /* Nested */ || inSwitchStatement === 1 /* Nested */) { + return; + } + else if (inIterationStatement === 0 /* NotNested */ && inSwitchStatement === 0 /* NotNested */) { + grammarErrorOnNode(node, ts.Diagnostics.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement); + return; + } + } + else if (node.kind === 152 /* ContinueStatement */) { + if (inIterationStatement === 1 /* Nested */) { + return; + } + else if (inIterationStatement === 0 /* NotNested */) { + grammarErrorOnNode(node, ts.Diagnostics.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement); + return; + } + } + else { + ts.Debug.fail("checkAnonymousBreakOrContinueStatement"); + } + ts.Debug.assert(inIterationStatement === 2 /* CrossingFunctionBoundary */ || inSwitchStatement === 2 /* CrossingFunctionBoundary */); + grammarErrorOnNode(node, ts.Diagnostics.Jump_target_cannot_cross_function_boundary); + } + function checkBreakOrContinueStatementWithLabel(node) { + var nodeIsNestedInLabel = labelledStatementInfo.nodeIsNestedInLabel(node.label, node.kind === 152 /* ContinueStatement */, false); + if (nodeIsNestedInLabel === 1 /* Nested */) { + return; + } + if (nodeIsNestedInLabel === 2 /* CrossingFunctionBoundary */) { + grammarErrorOnNode(node, ts.Diagnostics.Jump_target_cannot_cross_function_boundary); + return; + } + if (node.kind === 152 /* ContinueStatement */) { + grammarErrorOnNode(node, ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement); + } + else if (node.kind === 153 /* BreakStatement */) { + grammarErrorOnNode(node, ts.Diagnostics.A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement); + } + else { + ts.Debug.fail("checkBreakOrContinueStatementWithLabel"); + } + } + function parseReturnStatement() { + var node = createNode(154 /* ReturnStatement */); + var errorCountBeforeReturnStatement = file.syntacticErrors.length; + var returnTokenStart = scanner.getTokenPos(); + var returnTokenLength = scanner.getTextPos() - returnTokenStart; + parseExpected(80 /* ReturnKeyword */); + if (!canParseSemicolon()) + node.expression = parseExpression(); + parseSemicolon(); + if (!inFunctionBody && !inAmbientContext && errorCountBeforeReturnStatement === file.syntacticErrors.length) { + grammarErrorAtPos(returnTokenStart, returnTokenLength, ts.Diagnostics.A_return_statement_can_only_be_used_within_a_function_body); + } + return finishNode(node); + } + function parseWithStatement() { + var node = createNode(155 /* WithStatement */); + var startPos = scanner.getTokenPos(); + parseExpected(91 /* WithKeyword */); + var endPos = scanner.getStartPos(); + parseExpected(7 /* OpenParenToken */); + node.expression = parseExpression(); + parseExpected(8 /* CloseParenToken */); + node.statement = parseStatement(); + node = finishNode(node); + if (isInStrictMode) { + grammarErrorAtPos(startPos, endPos - startPos, ts.Diagnostics.with_statements_are_not_allowed_in_strict_mode); + } + return node; + } + function parseCaseClause() { + var node = createNode(157 /* CaseClause */); + parseExpected(57 /* CaseKeyword */); + node.expression = parseExpression(); + parseExpected(42 /* ColonToken */); + node.statements = parseList(4 /* SwitchClauseStatements */, false, parseStatement); + return finishNode(node); + } + function parseDefaultClause() { + var node = createNode(158 /* DefaultClause */); + parseExpected(63 /* DefaultKeyword */); + parseExpected(42 /* ColonToken */); + node.statements = parseList(4 /* SwitchClauseStatements */, false, parseStatement); + return finishNode(node); + } + function parseCaseOrDefaultClause() { + return token === 57 /* CaseKeyword */ ? parseCaseClause() : parseDefaultClause(); + } + function parseSwitchStatement() { + var node = createNode(156 /* SwitchStatement */); + parseExpected(82 /* SwitchKeyword */); + parseExpected(7 /* OpenParenToken */); + node.expression = parseExpression(); + parseExpected(8 /* CloseParenToken */); + parseExpected(5 /* OpenBraceToken */); + var saveInSwitchStatement = inSwitchStatement; + inSwitchStatement = 1 /* Nested */; + node.clauses = parseList(3 /* SwitchClauses */, false, parseCaseOrDefaultClause); + inSwitchStatement = saveInSwitchStatement; + parseExpected(6 /* CloseBraceToken */); + var defaultClauses = ts.filter(node.clauses, function (clause) { return clause.kind === 158 /* DefaultClause */; }); + for (var i = 1, n = defaultClauses.length; i < n; i++) { + var clause = defaultClauses[i]; + var start = ts.skipTrivia(file.text, clause.pos); + var end = clause.statements.length > 0 ? clause.statements[0].pos : clause.end; + grammarErrorAtPos(start, end - start, ts.Diagnostics.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement); + } + return finishNode(node); + } + function parseThrowStatement() { + var node = createNode(160 /* ThrowStatement */); + parseExpected(84 /* ThrowKeyword */); + if (scanner.hasPrecedingLineBreak()) { + error(ts.Diagnostics.Line_break_not_permitted_here); + } + node.expression = parseExpression(); + parseSemicolon(); + return finishNode(node); + } + function parseTryStatement() { + var node = createNode(161 /* TryStatement */); + node.tryBlock = parseTokenAndBlock(86 /* TryKeyword */, 162 /* TryBlock */); + if (token === 58 /* CatchKeyword */) { + node.catchBlock = parseCatchBlock(); + } + if (token === 71 /* FinallyKeyword */) { + node.finallyBlock = parseTokenAndBlock(71 /* FinallyKeyword */, 164 /* FinallyBlock */); + } + if (!(node.catchBlock || node.finallyBlock)) { + error(ts.Diagnostics.catch_or_finally_expected); + } + return finishNode(node); + } + function parseTokenAndBlock(token, kind) { + var pos = getNodePos(); + parseExpected(token); + var result = parseBlock(false, false); + result.kind = kind; + result.pos = pos; + return result; + } + function parseCatchBlock() { + var pos = getNodePos(); + parseExpected(58 /* CatchKeyword */); + parseExpected(7 /* OpenParenToken */); + var variable = parseIdentifier(); + var typeAnnotationColonStart = scanner.getTokenPos(); + var typeAnnotationColonLength = scanner.getTextPos() - typeAnnotationColonStart; + var typeAnnotation = parseTypeAnnotation(); + parseExpected(8 /* CloseParenToken */); + var result = parseBlock(false, false); + result.kind = 163 /* CatchBlock */; + result.pos = pos; + result.variable = variable; + if (typeAnnotation) { + errorAtPos(typeAnnotationColonStart, typeAnnotationColonLength, ts.Diagnostics.Catch_clause_parameter_cannot_have_a_type_annotation); + } + if (isInStrictMode && isEvalOrArgumentsIdentifier(variable)) { + reportInvalidUseInStrictMode(variable); + } + return result; + } + function parseDebuggerStatement() { + var node = createNode(165 /* DebuggerStatement */); + parseExpected(62 /* DebuggerKeyword */); + parseSemicolon(); + return finishNode(node); + } + function isIterationStatementStart() { + return token === 90 /* WhileKeyword */ || token === 65 /* DoKeyword */ || token === 72 /* ForKeyword */; + } + function parseStatementWithLabelSet() { + labelledStatementInfo.pushCurrentLabelSet(isIterationStatementStart()); + var statement = parseStatement(); + labelledStatementInfo.pop(); + return statement; + } + function isLabel() { + return isIdentifier() && lookAhead(function () { return nextToken() === 42 /* ColonToken */; }); + } + function parseLabelledStatement() { + var node = createNode(159 /* LabelledStatement */); + node.label = parseIdentifier(); + parseExpected(42 /* ColonToken */); + if (labelledStatementInfo.nodeIsNestedInLabel(node.label, false, true)) { + grammarErrorOnNode(node.label, ts.Diagnostics.Duplicate_label_0, getSourceTextOfNodeFromSourceText(sourceText, node.label)); + } + labelledStatementInfo.addLabel(node.label); + node.statement = isLabel() ? parseLabelledStatement() : parseStatementWithLabelSet(); + return finishNode(node); + } + function parseExpressionStatement() { + var node = createNode(146 /* ExpressionStatement */); + node.expression = parseExpression(); + parseSemicolon(); + return finishNode(node); + } + function isStatement(inErrorRecovery) { + switch (token) { + case 13 /* SemicolonToken */: + return !inErrorRecovery; + case 5 /* OpenBraceToken */: + case 88 /* VarKeyword */: + case 73 /* FunctionKeyword */: + case 74 /* IfKeyword */: + case 65 /* DoKeyword */: + case 90 /* WhileKeyword */: + case 72 /* ForKeyword */: + case 61 /* ContinueKeyword */: + case 56 /* BreakKeyword */: + case 80 /* ReturnKeyword */: + case 91 /* WithKeyword */: + case 82 /* SwitchKeyword */: + case 84 /* ThrowKeyword */: + case 86 /* TryKeyword */: + case 62 /* DebuggerKeyword */: + return true; + case 93 /* InterfaceKeyword */: + case 59 /* ClassKeyword */: + case 106 /* ModuleKeyword */: + case 67 /* EnumKeyword */: + if (isDeclaration()) + return false; + case 98 /* PublicKeyword */: + case 96 /* PrivateKeyword */: + case 99 /* StaticKeyword */: + if (lookAhead(function () { return nextToken() >= 55 /* Identifier */; })) + return false; + default: + return isExpression(); + } + } + function parseStatement() { + switch (token) { + case 5 /* OpenBraceToken */: + return parseBlock(false, false); + case 88 /* VarKeyword */: + return parseVariableStatement(); + case 73 /* FunctionKeyword */: + return parseFunctionDeclaration(); + case 13 /* SemicolonToken */: + return parseEmptyStatement(); + case 74 /* IfKeyword */: + return parseIfStatement(); + case 65 /* DoKeyword */: + return parseDoStatement(); + case 90 /* WhileKeyword */: + return parseWhileStatement(); + case 72 /* ForKeyword */: + return parseForOrForInStatement(); + case 61 /* ContinueKeyword */: + return parseBreakOrContinueStatement(152 /* ContinueStatement */); + case 56 /* BreakKeyword */: + return parseBreakOrContinueStatement(153 /* BreakStatement */); + case 80 /* ReturnKeyword */: + return parseReturnStatement(); + case 91 /* WithKeyword */: + return parseWithStatement(); + case 82 /* SwitchKeyword */: + return parseSwitchStatement(); + case 84 /* ThrowKeyword */: + return parseThrowStatement(); + case 86 /* TryKeyword */: + return parseTryStatement(); + case 62 /* DebuggerKeyword */: + return parseDebuggerStatement(); + default: + if (isLabel()) { + return parseLabelledStatement(); + } + return parseExpressionStatement(); + } + } + function parseStatementOrFunction() { + return token === 73 /* FunctionKeyword */ ? parseFunctionDeclaration() : parseStatement(); + } + function parseAndCheckFunctionBody(isConstructor) { + var initialPosition = scanner.getTokenPos(); + var errorCountBeforeBody = file.syntacticErrors.length; + if (token === 5 /* OpenBraceToken */) { + var body = parseBody(false); + if (body && inAmbientContext && file.syntacticErrors.length === errorCountBeforeBody) { + var diagnostic = isConstructor ? ts.Diagnostics.A_constructor_implementation_cannot_be_declared_in_an_ambient_context : ts.Diagnostics.A_function_implementation_cannot_be_declared_in_an_ambient_context; + grammarErrorAtPos(initialPosition, 1, diagnostic); + } + return body; + } + if (canParseSemicolon()) { + parseSemicolon(); + return undefined; + } + error(ts.Diagnostics.Block_or_expected); + } + function parseVariableDeclaration(flags, noIn) { + var node = createNode(166 /* VariableDeclaration */); + node.flags = flags; + var errorCountBeforeVariableDeclaration = file.syntacticErrors.length; + node.name = parseIdentifier(); + node.type = parseTypeAnnotation(); + var initializerStart = scanner.getTokenPos(); + var initializerFirstTokenLength = scanner.getTextPos() - initializerStart; + node.initializer = parseInitializer(false, noIn); + if (inAmbientContext && node.initializer && errorCountBeforeVariableDeclaration === file.syntacticErrors.length) { + grammarErrorAtPos(initializerStart, initializerFirstTokenLength, ts.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts); + } + if (isInStrictMode && isEvalOrArgumentsIdentifier(node.name)) { + reportInvalidUseInStrictMode(node.name); + } + return finishNode(node); + } + function parseVariableDeclarationList(flags, noIn) { + return parseDelimitedList(9 /* VariableDeclarations */, function () { return parseVariableDeclaration(flags, noIn); }, 0 /* Disallow */); + } + function parseVariableStatement(pos, flags) { + var node = createNode(144 /* VariableStatement */, pos); + if (flags) + node.flags = flags; + var errorCountBeforeVarStatement = file.syntacticErrors.length; + parseExpected(88 /* VarKeyword */); + node.declarations = parseVariableDeclarationList(flags, false); + parseSemicolon(); + if (!node.declarations.length && file.syntacticErrors.length === errorCountBeforeVarStatement) { + grammarErrorOnNode(node, ts.Diagnostics.Variable_declaration_list_cannot_be_empty); + } + return finishNode(node); + } + function parseFunctionDeclaration(pos, flags) { + var node = createNode(167 /* FunctionDeclaration */, pos); + if (flags) + node.flags = flags; + parseExpected(73 /* FunctionKeyword */); + node.name = parseIdentifier(); + var sig = parseSignature(120 /* CallSignature */, 42 /* ColonToken */); + node.typeParameters = sig.typeParameters; + node.parameters = sig.parameters; + node.type = sig.type; + node.body = parseAndCheckFunctionBody(false); + if (isInStrictMode && isEvalOrArgumentsIdentifier(node.name)) { + reportInvalidUseInStrictMode(node.name); + } + return finishNode(node); + } + function parseConstructorDeclaration(pos, flags) { + var node = createNode(117 /* Constructor */, pos); + node.flags = flags; + parseExpected(103 /* ConstructorKeyword */); + var sig = parseSignature(120 /* CallSignature */, 42 /* ColonToken */); + node.typeParameters = sig.typeParameters; + node.parameters = sig.parameters; + node.type = sig.type; + node.body = parseAndCheckFunctionBody(true); + if (node.typeParameters) { + grammarErrorAtPos(node.typeParameters.pos, node.typeParameters.end - node.typeParameters.pos, ts.Diagnostics.Type_parameters_cannot_appear_on_a_constructor_declaration); + } + if (node.type) { + grammarErrorOnNode(node.type, ts.Diagnostics.Type_annotation_cannot_appear_on_a_constructor_declaration); + } + return finishNode(node); + } + function parsePropertyMemberDeclaration(pos, flags) { + var errorCountBeforePropertyDeclaration = file.syntacticErrors.length; + var name = parsePropertyName(); + var questionStart = scanner.getTokenPos(); + if (parseOptional(41 /* QuestionToken */)) { + errorAtPos(questionStart, scanner.getStartPos() - questionStart, ts.Diagnostics.A_class_member_cannot_be_declared_optional); + } + if (token === 7 /* OpenParenToken */ || token === 15 /* LessThanToken */) { + var method = createNode(116 /* Method */, pos); + method.flags = flags; + method.name = name; + var sig = parseSignature(120 /* CallSignature */, 42 /* ColonToken */); + method.typeParameters = sig.typeParameters; + method.parameters = sig.parameters; + method.type = sig.type; + method.body = parseAndCheckFunctionBody(false); + return finishNode(method); + } + else { + var property = createNode(115 /* Property */, pos); + property.flags = flags; + property.name = name; + property.type = parseTypeAnnotation(); + var initializerStart = scanner.getTokenPos(); + var initializerFirstTokenLength = scanner.getTextPos() - initializerStart; + property.initializer = parseInitializer(false); + parseSemicolon(); + if (inAmbientContext && property.initializer && errorCountBeforePropertyDeclaration === file.syntacticErrors.length) { + grammarErrorAtPos(initializerStart, initializerFirstTokenLength, ts.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts); + } + return finishNode(property); + } + } + function parseAndCheckMemberAccessorDeclaration(kind, pos, flags) { + var errorCountBeforeAccessor = file.syntacticErrors.length; + var accessor = parseMemberAccessorDeclaration(kind, pos, flags); + if (errorCountBeforeAccessor === file.syntacticErrors.length) { + if (languageVersion < 1 /* ES5 */) { + grammarErrorOnNode(accessor.name, ts.Diagnostics.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher); + } + else if (inAmbientContext) { + grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_be_declared_in_an_ambient_context); + } + else if (accessor.typeParameters) { + grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_have_type_parameters); + } + else if (kind === 118 /* GetAccessor */ && accessor.parameters.length) { + grammarErrorOnNode(accessor.name, ts.Diagnostics.A_get_accessor_cannot_have_parameters); + } + else if (kind === 119 /* SetAccessor */) { + if (accessor.type) { + grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_a_return_type_annotation); + } + else if (accessor.parameters.length !== 1) { + grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_must_have_exactly_one_parameter); + } + else { + var parameter = accessor.parameters[0]; + if (parameter.flags & 8 /* Rest */) { + grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_rest_parameter); + } + else if (parameter.flags & ts.NodeFlags.Modifier) { + grammarErrorOnNode(accessor.name, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation); + } + else if (parameter.flags & 4 /* QuestionMark */) { + grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_an_optional_parameter); + } + else if (parameter.initializer) { + grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_parameter_cannot_have_an_initializer); + } + } + } + } + return accessor; + } + function parseMemberAccessorDeclaration(kind, pos, flags) { + var node = createNode(kind, pos); + node.flags = flags; + node.name = parsePropertyName(); + var sig = parseSignature(120 /* CallSignature */, 42 /* ColonToken */); + node.typeParameters = sig.typeParameters; + node.parameters = sig.parameters; + node.type = sig.type; + if (inAmbientContext && canParseSemicolon()) { + parseSemicolon(); + node.body = createMissingNode(); + } + else { + node.body = parseBody(false); + } + return finishNode(node); + } + function isClassMemberStart() { + var idToken; + while (isModifier(token)) { + idToken = token; + nextToken(); + } + if (isPropertyName()) { + idToken = token; + nextToken(); + } + if (token === 9 /* OpenBracketToken */) { + return true; + } + if (idToken !== undefined) { + if (!isKeyword(idToken) || idToken === 109 /* SetKeyword */ || idToken === 105 /* GetKeyword */) { + return true; + } + switch (token) { + case 7 /* OpenParenToken */: + case 15 /* LessThanToken */: + case 42 /* ColonToken */: + case 43 /* EqualsToken */: + case 41 /* QuestionToken */: + return true; + default: + return canParseSemicolon(); + } + } + return false; + } + function parseAndCheckModifiers(context) { + var flags = 0; + var lastStaticModifierStart; + var lastStaticModifierLength; + var lastDeclareModifierStart; + var lastDeclareModifierLength; + var lastPrivateModifierStart; + var lastPrivateModifierLength; + while (true) { + var modifierStart = scanner.getTokenPos(); + var modifierToken = token; + if (!parseAnyContextualModifier()) + break; + var modifierLength = scanner.getStartPos() - modifierStart; + switch (modifierToken) { + case 98 /* PublicKeyword */: + if (flags & 32 /* Private */ || flags & 16 /* Public */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics.Accessibility_modifier_already_seen); + } + else if (flags & 64 /* Static */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_must_precede_1_modifier, "public", "static"); + } + else if (context === 1 /* ModuleElements */ || context === 0 /* SourceElements */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, "public"); + } + flags |= 16 /* Public */; + break; + case 96 /* PrivateKeyword */: + if (flags & 32 /* Private */ || flags & 16 /* Public */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics.Accessibility_modifier_already_seen); + } + else if (flags & 64 /* Static */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_must_precede_1_modifier, "private", "static"); + } + else if (context === 1 /* ModuleElements */ || context === 0 /* SourceElements */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, "private"); + } + lastPrivateModifierStart = modifierStart; + lastPrivateModifierLength = modifierLength; + flags |= 32 /* Private */; + break; + case 99 /* StaticKeyword */: + if (flags & 64 /* Static */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_already_seen, "static"); + } + else if (context === 1 /* ModuleElements */ || context === 0 /* SourceElements */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_element, "static"); + } + else if (context === 3 /* Parameters */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "static"); + } + lastStaticModifierStart = modifierStart; + lastStaticModifierLength = modifierLength; + flags |= 64 /* Static */; + break; + case 68 /* ExportKeyword */: + if (flags & 1 /* Export */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_already_seen, "export"); + } + else if (flags & 2 /* Ambient */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "declare"); + } + else if (context === 2 /* ClassMembers */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "export"); + } + else if (context === 3 /* Parameters */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "export"); + } + flags |= 1 /* Export */; + break; + case 104 /* DeclareKeyword */: + if (flags & 2 /* Ambient */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_already_seen, "declare"); + } + else if (context === 2 /* ClassMembers */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "declare"); + } + else if (context === 3 /* Parameters */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "declare"); + } + else if (inAmbientContext && context === 1 /* ModuleElements */) { + grammarErrorAtPos(modifierStart, modifierLength, ts.Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context); + } + lastDeclareModifierStart = modifierStart; + lastDeclareModifierLength = modifierLength; + flags |= 2 /* Ambient */; + break; + } + } + if (token === 103 /* ConstructorKeyword */ && flags & 64 /* Static */) { + grammarErrorAtPos(lastStaticModifierStart, lastStaticModifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "static"); + } + else if (token === 103 /* ConstructorKeyword */ && flags & 32 /* Private */) { + grammarErrorAtPos(lastPrivateModifierStart, lastPrivateModifierLength, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "private"); + } + else if (token === 75 /* ImportKeyword */) { + if (flags & 2 /* Ambient */) { + grammarErrorAtPos(lastDeclareModifierStart, lastDeclareModifierLength, ts.Diagnostics.A_declare_modifier_cannot_be_used_with_an_import_declaration, "declare"); + } + } + else if (token === 93 /* InterfaceKeyword */) { + if (flags & 2 /* Ambient */) { + grammarErrorAtPos(lastDeclareModifierStart, lastDeclareModifierLength, ts.Diagnostics.A_declare_modifier_cannot_be_used_with_an_interface_declaration, "declare"); + } + } + else if (token !== 68 /* ExportKeyword */ && !(flags & 2 /* Ambient */) && inAmbientContext && context === 0 /* SourceElements */) { + var declarationStart = scanner.getTokenPos(); + var declarationFirstTokenLength = scanner.getTextPos() - declarationStart; + grammarErrorAtPos(declarationStart, declarationFirstTokenLength, ts.Diagnostics.A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file); + } + return flags; + } + function parseClassMemberDeclaration() { + var pos = getNodePos(); + var flags = parseAndCheckModifiers(2 /* ClassMembers */); + if (parseContextualModifier(105 /* GetKeyword */)) { + return parseAndCheckMemberAccessorDeclaration(118 /* GetAccessor */, pos, flags); + } + if (parseContextualModifier(109 /* SetKeyword */)) { + return parseAndCheckMemberAccessorDeclaration(119 /* SetAccessor */, pos, flags); + } + if (token === 103 /* ConstructorKeyword */) { + return parseConstructorDeclaration(pos, flags); + } + if (token >= 55 /* Identifier */ || token === 3 /* StringLiteral */ || token === 2 /* NumericLiteral */) { + return parsePropertyMemberDeclaration(pos, flags); + } + if (token === 9 /* OpenBracketToken */) { + if (flags) { + var start = getTokenPos(pos); + var length = getNodePos() - start; + errorAtPos(start, length, ts.Diagnostics.Modifiers_not_permitted_on_index_signature_members); + } + return parseIndexSignatureMember(); + } + ts.Debug.fail("Should not have attempted to parse class member declaration."); + } + function parseClassDeclaration(pos, flags) { + var node = createNode(169 /* ClassDeclaration */, pos); + node.flags = flags; + var errorCountBeforeClassDeclaration = file.syntacticErrors.length; + parseExpected(59 /* ClassKeyword */); + node.name = parseIdentifier(); + node.typeParameters = parseTypeParameters(); + node.baseType = parseOptional(69 /* ExtendsKeyword */) ? parseTypeReference() : undefined; + var implementsKeywordStart = scanner.getTokenPos(); + var implementsKeywordLength; + if (parseOptional(92 /* ImplementsKeyword */)) { + implementsKeywordLength = scanner.getStartPos() - implementsKeywordStart; + node.implementedTypes = parseDelimitedList(8 /* BaseTypeReferences */, parseTypeReference, 0 /* Disallow */); + } + var errorCountBeforeClassBody = file.syntacticErrors.length; + if (parseExpected(5 /* OpenBraceToken */)) { + node.members = parseList(6 /* ClassMembers */, false, parseClassMemberDeclaration); + parseExpected(6 /* CloseBraceToken */); + } + else { + node.members = createMissingList(); + } + if (node.implementedTypes && !node.implementedTypes.length && errorCountBeforeClassBody === errorCountBeforeClassDeclaration) { + grammarErrorAtPos(implementsKeywordStart, implementsKeywordLength, ts.Diagnostics._0_list_cannot_be_empty, "implements"); + } + return finishNode(node); + } + function parseInterfaceDeclaration(pos, flags) { + var node = createNode(170 /* InterfaceDeclaration */, pos); + node.flags = flags; + var errorCountBeforeInterfaceDeclaration = file.syntacticErrors.length; + parseExpected(93 /* InterfaceKeyword */); + node.name = parseIdentifier(); + node.typeParameters = parseTypeParameters(); + var extendsKeywordStart = scanner.getTokenPos(); + var extendsKeywordLength; + if (parseOptional(69 /* ExtendsKeyword */)) { + extendsKeywordLength = scanner.getStartPos() - extendsKeywordStart; + node.baseTypes = parseDelimitedList(8 /* BaseTypeReferences */, parseTypeReference, 0 /* Disallow */); + } + var errorCountBeforeInterfaceBody = file.syntacticErrors.length; + node.members = parseTypeLiteral().members; + if (node.baseTypes && !node.baseTypes.length && errorCountBeforeInterfaceBody === errorCountBeforeInterfaceDeclaration) { + grammarErrorAtPos(extendsKeywordStart, extendsKeywordLength, ts.Diagnostics._0_list_cannot_be_empty, "extends"); + } + return finishNode(node); + } + function parseAndCheckEnumDeclaration(pos, flags) { + function isIntegerLiteral(expression) { + function isInteger(literalExpression) { + return /^[0-9]+([eE]\+?[0-9]+)?$/.test(literalExpression.text); + } + if (expression.kind === 138 /* PrefixOperator */) { + var unaryExpression = expression; + if (unaryExpression.operator === 24 /* PlusToken */ || unaryExpression.operator === 25 /* MinusToken */) { + expression = unaryExpression.operand; + } + } + if (expression.kind === 2 /* NumericLiteral */) { + return isInteger(expression); + } + return false; + } + var inConstantEnumMemberSection = true; + function parseAndCheckEnumMember() { + var node = createNode(176 /* EnumMember */); + var errorCountBeforeEnumMember = file.syntacticErrors.length; + node.name = parsePropertyName(); + node.initializer = parseInitializer(false); + if (inAmbientContext) { + if (node.initializer && !isIntegerLiteral(node.initializer) && errorCountBeforeEnumMember === file.syntacticErrors.length) { + grammarErrorOnNode(node.name, ts.Diagnostics.Ambient_enum_elements_can_only_have_integer_literal_initializers); + } + } + else if (node.initializer) { + inConstantEnumMemberSection = isIntegerLiteral(node.initializer); + } + else if (!inConstantEnumMemberSection && errorCountBeforeEnumMember === file.syntacticErrors.length) { + grammarErrorOnNode(node.name, ts.Diagnostics.Enum_member_must_have_initializer); + } + return finishNode(node); + } + var node = createNode(171 /* EnumDeclaration */, pos); + node.flags = flags; + parseExpected(67 /* EnumKeyword */); + node.name = parseIdentifier(); + if (parseExpected(5 /* OpenBraceToken */)) { + node.members = parseDelimitedList(7 /* EnumMembers */, parseAndCheckEnumMember, 1 /* Allow */); + parseExpected(6 /* CloseBraceToken */); + } + else { + node.members = createMissingList(); + } + return finishNode(node); + } + function parseModuleBody() { + var node = createNode(173 /* ModuleBlock */); + if (parseExpected(5 /* OpenBraceToken */)) { + node.statements = parseList(1 /* ModuleElements */, false, parseModuleElement); + parseExpected(6 /* CloseBraceToken */); + } + else { + node.statements = createMissingList(); + } + return finishNode(node); + } + function parseInternalModuleTail(pos, flags) { + var node = createNode(172 /* ModuleDeclaration */, pos); + node.flags = flags; + node.name = parseIdentifier(); + if (parseOptional(11 /* DotToken */)) { + node.body = parseInternalModuleTail(getNodePos(), 1 /* Export */); + } + else { + node.body = parseModuleBody(); + ts.forEach(node.body.statements, function (s) { + if (s.kind === 175 /* ExportAssignment */) { + grammarErrorOnNode(s, ts.Diagnostics.An_export_assignment_cannot_be_used_in_an_internal_module); + } + else if (s.kind === 174 /* ImportDeclaration */ && s.externalModuleName) { + grammarErrorOnNode(s, ts.Diagnostics.Import_declarations_in_an_internal_module_cannot_reference_an_external_module); + } + }); + } + return finishNode(node); + } + function parseAmbientExternalModuleDeclaration(pos, flags) { + var node = createNode(172 /* ModuleDeclaration */, pos); + node.flags = flags; + node.name = parseStringLiteral(); + if (!inAmbientContext) { + var errorCount = file.syntacticErrors.length; + if (!errorCount || file.syntacticErrors[errorCount - 1].start < getTokenPos(pos)) { + grammarErrorOnNode(node.name, ts.Diagnostics.Only_ambient_modules_can_use_quoted_names); + } + } + var saveInAmbientContext = inAmbientContext; + inAmbientContext = true; + node.body = parseModuleBody(); + inAmbientContext = saveInAmbientContext; + return finishNode(node); + } + function parseModuleDeclaration(pos, flags) { + parseExpected(106 /* ModuleKeyword */); + return token === 3 /* StringLiteral */ ? parseAmbientExternalModuleDeclaration(pos, flags) : parseInternalModuleTail(pos, flags); + } + function parseImportDeclaration(pos, flags) { + var node = createNode(174 /* ImportDeclaration */, pos); + node.flags = flags; + parseExpected(75 /* ImportKeyword */); + node.name = parseIdentifier(); + parseExpected(43 /* EqualsToken */); + var entityName = parseEntityName(false); + if (entityName.kind === 55 /* Identifier */ && entityName.text === "require" && parseOptional(7 /* OpenParenToken */)) { + node.externalModuleName = parseStringLiteral(); + parseExpected(8 /* CloseParenToken */); + } + else { + node.entityName = entityName; + } + parseSemicolon(); + return finishNode(node); + } + function parseExportAssignmentTail(pos) { + var node = createNode(175 /* ExportAssignment */, pos); + node.exportName = parseIdentifier(); + parseSemicolon(); + return finishNode(node); + } + function isDeclaration() { + switch (token) { + case 88 /* VarKeyword */: + case 73 /* FunctionKeyword */: + return true; + case 59 /* ClassKeyword */: + case 93 /* InterfaceKeyword */: + case 67 /* EnumKeyword */: + case 75 /* ImportKeyword */: + return lookAhead(function () { return nextToken() >= 55 /* Identifier */; }); + case 106 /* ModuleKeyword */: + return lookAhead(function () { return nextToken() >= 55 /* Identifier */ || token === 3 /* StringLiteral */; }); + case 68 /* ExportKeyword */: + return lookAhead(function () { return nextToken() === 43 /* EqualsToken */ || isDeclaration(); }); + case 104 /* DeclareKeyword */: + case 98 /* PublicKeyword */: + case 96 /* PrivateKeyword */: + case 99 /* StaticKeyword */: + return lookAhead(function () { + nextToken(); + return isDeclaration(); + }); + } + } + function parseDeclaration(modifierContext) { + var pos = getNodePos(); + var errorCountBeforeModifiers = file.syntacticErrors.length; + var flags = parseAndCheckModifiers(modifierContext); + if (token === 68 /* ExportKeyword */) { + var modifiersEnd = scanner.getStartPos(); + nextToken(); + if (parseOptional(43 /* EqualsToken */)) { + var exportAssignmentTail = parseExportAssignmentTail(pos); + if (flags !== 0 && errorCountBeforeModifiers === file.syntacticErrors.length) { + var modifiersStart = ts.skipTrivia(sourceText, pos); + grammarErrorAtPos(modifiersStart, modifiersEnd - modifiersStart, ts.Diagnostics.An_export_assignment_cannot_have_modifiers); + } + return exportAssignmentTail; + } + } + var saveInAmbientContext = inAmbientContext; + if (flags & 2 /* Ambient */) { + inAmbientContext = true; + } + var result; + switch (token) { + case 88 /* VarKeyword */: + result = parseVariableStatement(pos, flags); + break; + case 73 /* FunctionKeyword */: + result = parseFunctionDeclaration(pos, flags); + break; + case 59 /* ClassKeyword */: + result = parseClassDeclaration(pos, flags); + break; + case 93 /* InterfaceKeyword */: + result = parseInterfaceDeclaration(pos, flags); + break; + case 67 /* EnumKeyword */: + result = parseAndCheckEnumDeclaration(pos, flags); + break; + case 106 /* ModuleKeyword */: + result = parseModuleDeclaration(pos, flags); + break; + case 75 /* ImportKeyword */: + result = parseImportDeclaration(pos, flags); + break; + default: + error(ts.Diagnostics.Declaration_expected); + } + inAmbientContext = saveInAmbientContext; + return result; + } + function isSourceElement(inErrorRecovery) { + return isDeclaration() || isStatement(inErrorRecovery); + } + function parseSourceElement() { + return parseSourceElementOrModuleElement(0 /* SourceElements */); + } + function parseModuleElement() { + return parseSourceElementOrModuleElement(1 /* ModuleElements */); + } + function parseSourceElementOrModuleElement(modifierContext) { + if (isDeclaration()) { + return parseDeclaration(modifierContext); + } + var statementStart = scanner.getTokenPos(); + var statementFirstTokenLength = scanner.getTextPos() - statementStart; + var errorCountBeforeStatement = file.syntacticErrors.length; + var statement = parseStatement(); + if (inAmbientContext && file.syntacticErrors.length === errorCountBeforeStatement) { + grammarErrorAtPos(statementStart, statementFirstTokenLength, ts.Diagnostics.Statements_are_not_allowed_in_ambient_contexts); + } + return statement; + } + function processReferenceComments() { + var referencedFiles = []; + var amdDependencies = []; + commentRanges = []; + token = scanner.scan(); + for (var i = 0; i < commentRanges.length; i++) { + var range = commentRanges[i]; + var comment = sourceText.substring(range.pos, range.end); + var simpleReferenceRegEx = /^\/\/\/\s*/gim; + if (isNoDefaultLibRegEx.exec(comment)) { + file.hasNoDefaultLib = true; + } + else { + var fullReferenceRegEx = /^(\/\/\/\s*/; + var matchResult = fullReferenceRegEx.exec(comment); + if (!matchResult) { + var start = range.pos; + var length = range.end - start; + errorAtPos(start, length, ts.Diagnostics.Invalid_reference_comment); + } + else { + referencedFiles.push({ + pos: range.pos, + end: range.end, + filename: matchResult[3] + }); + } + } + } + else { + var amdDependencyRegEx = /^\/\/\/\s*= 0 ? filename : filename + extension; + } + function processRootFile(filename, isDefaultLib) { + processSourceFile(ts.normalizePath(addExtension(filename, ".ts")), isDefaultLib); + } + function processSourceFile(filename, isDefaultLib, refFile, refPos, refEnd) { + if (refEnd !== undefined && refPos !== undefined) { + var start = refPos; + var length = refEnd - refPos; + } + if (!ts.fileExtensionIs(filename, ".ts")) { + errors.push(ts.createFileDiagnostic(refFile, start, length, ts.Diagnostics.File_0_must_have_extension_ts_or_d_ts, filename)); + } + else if (!findSourceFile(filename, isDefaultLib, refFile, refPos, refEnd)) { + errors.push(ts.createFileDiagnostic(refFile, start, length, ts.Diagnostics.File_0_not_found, filename)); + } + } + function findSourceFile(filename, isDefaultLib, refFile, refStart, refLength) { + var canonicalName = host.getCanonicalFileName(filename); + var file = getSourceFile(filename); + if (file) { + if (host.useCaseSensitiveFileNames() && canonicalName !== file.filename) { + errors.push(ts.createFileDiagnostic(refFile, refStart, refLength, ts.Diagnostics.Filename_0_differs_from_already_included_filename_1_only_in_casing, filename, file.filename)); + } + } + else { + file = host.getSourceFile(filename, options.target, function (hostErrorMessage) { + errors.push(ts.createFileDiagnostic(refFile, refStart, refLength, ts.Diagnostics.Cannot_read_file_0_Colon_1, filename, hostErrorMessage)); + }); + if (file) { + filesByName[host.getCanonicalFileName(filename)] = file; + seenNoDefaultLib = seenNoDefaultLib || file.hasNoDefaultLib; + if (!options.noResolve) { + var basePath = ts.getDirectoryPath(filename); + processReferencedFiles(file, basePath); + processImportedModules(file, basePath); + } + if (isDefaultLib) { + files.unshift(file); + } + else { + files.push(file); + } + ts.forEach(file.syntacticErrors, function (e) { + errors.push(e); + }); + } + } + return file; + } + function processReferencedFiles(file, basePath) { + ts.forEach(file.referencedFiles, function (ref) { + processSourceFile(ts.normalizePath(ts.combinePaths(basePath, ref.filename)), false, file, ref.pos, ref.end); + }); + } + function processImportedModules(file, basePath) { + ts.forEach(file.statements, function (node) { + if (node.kind === 174 /* ImportDeclaration */ && node.externalModuleName) { + var nameLiteral = node.externalModuleName; + var moduleName = nameLiteral.text; + if (moduleName) { + var searchPath = basePath; + while (true) { + var searchName = ts.normalizePath(ts.combinePaths(searchPath, moduleName)); + if (findModuleSourceFile(searchName + ".ts", nameLiteral) || findModuleSourceFile(searchName + ".d.ts", nameLiteral)) + break; + var parentPath = ts.getDirectoryPath(searchPath); + if (parentPath === searchPath) + break; + searchPath = parentPath; + } + } + } + else if (node.kind === 172 /* ModuleDeclaration */ && node.name.kind === 3 /* StringLiteral */ && (node.flags & 2 /* Ambient */ || file.flags & 512 /* DeclarationFile */)) { + forEachChild(node.body, function (node) { + if (node.kind === 174 /* ImportDeclaration */ && node.externalModuleName) { + var nameLiteral = node.externalModuleName; + var moduleName = nameLiteral.text; + if (moduleName) { + var searchName = ts.normalizePath(ts.combinePaths(basePath, moduleName)); + var tsFile = findModuleSourceFile(searchName + ".ts", nameLiteral); + if (!tsFile) { + findModuleSourceFile(searchName + ".d.ts", nameLiteral); + } + } + } + }); + } + }); + function findModuleSourceFile(filename, nameLiteral) { + return findSourceFile(filename, false, file, nameLiteral.pos, nameLiteral.end - nameLiteral.pos); + } + } + function verifyCompilerOptions() { + if (!options.sourceMap && (options.mapRoot || options.sourceRoot)) { + if (options.mapRoot) { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option)); + } + if (options.sourceRoot) { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option)); + } + return; + } + var firstExternalModule = ts.forEach(files, function (f) { return isExternalModule(f) ? f : undefined; }); + if (firstExternalModule && options.module === 0 /* None */) { + var externalModuleErrorSpan = getErrorSpanForNode(firstExternalModule.externalModuleIndicator); + var errorStart = ts.skipTrivia(firstExternalModule.text, externalModuleErrorSpan.pos); + var errorLength = externalModuleErrorSpan.end - errorStart; + errors.push(ts.createFileDiagnostic(firstExternalModule, errorStart, errorLength, ts.Diagnostics.Cannot_compile_external_modules_unless_the_module_flag_is_provided)); + } + if (options.outDir || options.sourceRoot || (options.mapRoot && (!options.out || firstExternalModule !== undefined))) { + var commonPathComponents; + ts.forEach(files, function (sourceFile) { + if (!(sourceFile.flags & 512 /* DeclarationFile */) && !ts.fileExtensionIs(sourceFile.filename, ".js")) { + var sourcePathCompoments = ts.getNormalizedPathComponents(sourceFile.filename, host.getCurrentDirectory()); + sourcePathCompoments.pop(); + if (commonPathComponents) { + for (var i = 0; i < Math.min(commonPathComponents.length, sourcePathCompoments.length); i++) { + if (commonPathComponents[i] !== sourcePathCompoments[i]) { + if (i === 0) { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_find_the_common_subdirectory_path_for_the_input_files)); + return; + } + commonPathComponents.length = i; + break; + } + } + if (sourcePathCompoments.length < commonPathComponents.length) { + commonPathComponents.length = sourcePathCompoments.length; + } + } + else { + commonPathComponents = sourcePathCompoments; + } + } + }); + commonSourceDirectory = ts.getNormalizedPathFromPathCompoments(commonPathComponents); + if (commonSourceDirectory) { + commonSourceDirectory += ts.directorySeparator; + } + } + } + } + ts.createProgram = createProgram; +})(ts || (ts = {})); +var ts; +(function (ts) { + function isInstantiated(node) { + if (node.kind === 170 /* InterfaceDeclaration */) { + return false; + } + else if (node.kind === 174 /* ImportDeclaration */ && !(node.flags & 1 /* Export */)) { + return false; + } + else if (node.kind === 173 /* ModuleBlock */ && !ts.forEachChild(node, isInstantiated)) { + return false; + } + else if (node.kind === 172 /* ModuleDeclaration */ && !isInstantiated(node.body)) { + return false; + } + else { + return true; + } + } + ts.isInstantiated = isInstantiated; + function bindSourceFile(file) { + var parent; + var container; + var lastContainer; + var symbolCount = 0; + var Symbol = ts.objectAllocator.getSymbolConstructor(); + if (!file.locals) { + file.locals = {}; + container = file; + bind(file); + file.symbolCount = symbolCount; + } + function createSymbol(flags, name) { + symbolCount++; + return new Symbol(flags, name); + } + function addDeclarationToSymbol(symbol, node, symbolKind) { + symbol.flags |= symbolKind; + if (!symbol.declarations) + symbol.declarations = []; + symbol.declarations.push(node); + if (symbolKind & ts.SymbolFlags.HasExports && !symbol.exports) + symbol.exports = {}; + if (symbolKind & ts.SymbolFlags.HasMembers && !symbol.members) + symbol.members = {}; + node.symbol = symbol; + if (symbolKind & ts.SymbolFlags.Value && !symbol.valueDeclaration) + symbol.valueDeclaration = node; + } + function getDeclarationName(node) { + if (node.name) { + if (node.kind === 172 /* ModuleDeclaration */ && node.name.kind === 3 /* StringLiteral */) { + return '"' + node.name.text + '"'; + } + return node.name.text; + } + switch (node.kind) { + case 117 /* Constructor */: + return "__constructor"; + case 120 /* CallSignature */: + return "__call"; + case 121 /* ConstructSignature */: + return "__new"; + case 122 /* IndexSignature */: + return "__index"; + } + } + function getDisplayName(node) { + return node.name ? ts.identifierToString(node.name) : getDeclarationName(node); + } + function declareSymbol(symbols, parent, node, includes, excludes) { + var name = getDeclarationName(node); + if (name !== undefined) { + var symbol = ts.hasProperty(symbols, name) ? symbols[name] : (symbols[name] = createSymbol(0, name)); + if (symbol.flags & excludes) { + if (node.name) { + node.name.parent = node; + } + file.semanticErrors.push(ts.createDiagnosticForNode(node.name ? node.name : node, ts.Diagnostics.Duplicate_identifier_0, getDisplayName(node))); + symbol = createSymbol(0, name); + } + } + else { + symbol = createSymbol(0, "__missing"); + } + addDeclarationToSymbol(symbol, node, includes); + symbol.parent = parent; + if (node.kind === 169 /* ClassDeclaration */ && symbol.exports) { + var prototypeSymbol = createSymbol(2 /* Property */ | 67108864 /* Prototype */, "prototype"); + if (ts.hasProperty(symbol.exports, prototypeSymbol.name)) { + if (node.name) { + node.name.parent = node; + } + file.semanticErrors.push(ts.createDiagnosticForNode(symbol.exports[prototypeSymbol.name].declarations[0], ts.Diagnostics.Duplicate_identifier_0, prototypeSymbol.name)); + } + symbol.exports[prototypeSymbol.name] = prototypeSymbol; + prototypeSymbol.parent = symbol; + } + return symbol; + } + function isAmbientContext(node) { + while (node) { + if (node.flags & 2 /* Ambient */) + return true; + node = node.parent; + } + return false; + } + function declareModuleMember(node, symbolKind, symbolExcludes) { + var exportKind = 0; + if (symbolKind & ts.SymbolFlags.Value) { + exportKind |= 524288 /* ExportValue */; + } + if (symbolKind & ts.SymbolFlags.Type) { + exportKind |= 1048576 /* ExportType */; + } + if (symbolKind & ts.SymbolFlags.Namespace) { + exportKind |= 2097152 /* ExportNamespace */; + } + if (node.flags & 1 /* Export */ || (node.kind !== 174 /* ImportDeclaration */ && isAmbientContext(container))) { + if (exportKind) { + var local = declareSymbol(container.locals, undefined, node, exportKind, symbolExcludes); + local.exportSymbol = declareSymbol(container.symbol.exports, container.symbol, node, symbolKind, symbolExcludes); + node.localSymbol = local; + } + else { + declareSymbol(container.symbol.exports, container.symbol, node, symbolKind, symbolExcludes); + } + } + else { + declareSymbol(container.locals, undefined, node, symbolKind, symbolExcludes); + } + } + function bindChildren(node, symbolKind) { + if (symbolKind & ts.SymbolFlags.HasLocals) { + node.locals = {}; + } + var saveParent = parent; + var saveContainer = container; + parent = node; + if (symbolKind & ts.SymbolFlags.IsContainer) { + container = node; + if (lastContainer) + lastContainer.nextContainer = container; + lastContainer = container; + } + ts.forEachChild(node, bind); + container = saveContainer; + parent = saveParent; + } + function bindDeclaration(node, symbolKind, symbolExcludes) { + switch (container.kind) { + case 172 /* ModuleDeclaration */: + declareModuleMember(node, symbolKind, symbolExcludes); + break; + case 177 /* SourceFile */: + if (ts.isExternalModule(container)) { + declareModuleMember(node, symbolKind, symbolExcludes); + break; + } + case 120 /* CallSignature */: + case 121 /* ConstructSignature */: + case 122 /* IndexSignature */: + case 116 /* Method */: + case 117 /* Constructor */: + case 118 /* GetAccessor */: + case 119 /* SetAccessor */: + case 167 /* FunctionDeclaration */: + case 136 /* FunctionExpression */: + case 137 /* ArrowFunction */: + declareSymbol(container.locals, undefined, node, symbolKind, symbolExcludes); + break; + case 169 /* ClassDeclaration */: + if (node.flags & 64 /* Static */) { + declareSymbol(container.symbol.exports, container.symbol, node, symbolKind, symbolExcludes); + break; + } + case 125 /* TypeLiteral */: + case 128 /* ObjectLiteral */: + case 170 /* InterfaceDeclaration */: + declareSymbol(container.symbol.members, container.symbol, node, symbolKind, symbolExcludes); + break; + case 171 /* EnumDeclaration */: + declareSymbol(container.symbol.exports, container.symbol, node, symbolKind, symbolExcludes); + break; + } + bindChildren(node, symbolKind); + } + function bindConstructorDeclaration(node) { + bindDeclaration(node, 4096 /* Constructor */, 0); + ts.forEach(node.parameters, function (p) { + if (p.flags & (16 /* Public */ | 32 /* Private */)) { + bindDeclaration(p, 2 /* Property */, ts.SymbolFlags.PropertyExcludes); + } + }); + } + function bindModuleDeclaration(node) { + if (node.name.kind === 3 /* StringLiteral */) { + bindDeclaration(node, 128 /* ValueModule */, ts.SymbolFlags.ValueModuleExcludes); + } + else if (isInstantiated(node)) { + bindDeclaration(node, 128 /* ValueModule */, ts.SymbolFlags.ValueModuleExcludes); + } + else { + bindDeclaration(node, 256 /* NamespaceModule */, 0 /* NamespaceModuleExcludes */); + } + } + function bindAnonymousDeclaration(node, symbolKind, name) { + var symbol = createSymbol(symbolKind, name); + addDeclarationToSymbol(symbol, node, symbolKind); + bindChildren(node, symbolKind); + } + function bindCatchVariableDeclaration(node) { + var symbol = createSymbol(1 /* Variable */, node.variable.text || "__missing"); + addDeclarationToSymbol(symbol, node.variable, 1 /* Variable */); + var saveParent = parent; + parent = node; + ts.forEachChild(node, bind); + parent = saveParent; + } + function bind(node) { + node.parent = parent; + switch (node.kind) { + case 113 /* TypeParameter */: + bindDeclaration(node, 262144 /* TypeParameter */, ts.SymbolFlags.TypeParameterExcludes); + break; + case 114 /* Parameter */: + bindDeclaration(node, 1 /* Variable */, ts.SymbolFlags.ParameterExcludes); + break; + case 166 /* VariableDeclaration */: + bindDeclaration(node, 1 /* Variable */, ts.SymbolFlags.VariableExcludes); + break; + case 115 /* Property */: + case 129 /* PropertyAssignment */: + bindDeclaration(node, 2 /* Property */, ts.SymbolFlags.PropertyExcludes); + break; + case 176 /* EnumMember */: + bindDeclaration(node, 4 /* EnumMember */, ts.SymbolFlags.EnumMemberExcludes); + break; + case 120 /* CallSignature */: + bindDeclaration(node, 32768 /* CallSignature */, 0); + break; + case 116 /* Method */: + bindDeclaration(node, 2048 /* Method */, ts.SymbolFlags.MethodExcludes); + break; + case 121 /* ConstructSignature */: + bindDeclaration(node, 65536 /* ConstructSignature */, 0); + break; + case 122 /* IndexSignature */: + bindDeclaration(node, 131072 /* IndexSignature */, 0); + break; + case 167 /* FunctionDeclaration */: + bindDeclaration(node, 8 /* Function */, ts.SymbolFlags.FunctionExcludes); + break; + case 117 /* Constructor */: + bindConstructorDeclaration(node); + break; + case 118 /* GetAccessor */: + bindDeclaration(node, 8192 /* GetAccessor */, ts.SymbolFlags.GetAccessorExcludes); + break; + case 119 /* SetAccessor */: + bindDeclaration(node, 16384 /* SetAccessor */, ts.SymbolFlags.SetAccessorExcludes); + break; + case 125 /* TypeLiteral */: + bindAnonymousDeclaration(node, 512 /* TypeLiteral */, "__type"); + break; + case 128 /* ObjectLiteral */: + bindAnonymousDeclaration(node, 1024 /* ObjectLiteral */, "__object"); + break; + case 136 /* FunctionExpression */: + case 137 /* ArrowFunction */: + bindAnonymousDeclaration(node, 8 /* Function */, "__function"); + break; + case 163 /* CatchBlock */: + bindCatchVariableDeclaration(node); + break; + case 169 /* ClassDeclaration */: + bindDeclaration(node, 16 /* Class */, ts.SymbolFlags.ClassExcludes); + break; + case 170 /* InterfaceDeclaration */: + bindDeclaration(node, 32 /* Interface */, ts.SymbolFlags.InterfaceExcludes); + break; + case 171 /* EnumDeclaration */: + bindDeclaration(node, 64 /* Enum */, ts.SymbolFlags.EnumExcludes); + break; + case 172 /* ModuleDeclaration */: + bindModuleDeclaration(node); + break; + case 174 /* ImportDeclaration */: + bindDeclaration(node, 4194304 /* Import */, ts.SymbolFlags.ImportExcludes); + break; + case 177 /* SourceFile */: + if (ts.isExternalModule(node)) { + bindAnonymousDeclaration(node, 128 /* ValueModule */, '"' + ts.getModuleNameFromFilename(node.filename) + '"'); + break; + } + default: + var saveParent = parent; + parent = node; + ts.forEachChild(node, bind); + parent = saveParent; + } + } + } + ts.bindSourceFile = bindSourceFile; +})(ts || (ts = {})); +var ts; +(function (ts) { + var indentStrings = []; + function getIndentString(level) { + return indentStrings[level] || (indentStrings[level] = level === 0 ? "" : getIndentString(level - 1) + " "); + } + function emitFiles(resolver) { + var program = resolver.getProgram(); + var compilerHost = program.getCompilerHost(); + var compilerOptions = program.getCompilerOptions(); + var sourceMapDataList = compilerOptions.sourceMap ? [] : undefined; + var diagnostics = []; + var newLine = program.getCompilerHost().getNewLine(); + function getSourceFilePathInNewDir(newDirPath, sourceFile) { + var sourceFilePath = ts.getNormalizedPathFromPathCompoments(ts.getNormalizedPathComponents(sourceFile.filename, compilerHost.getCurrentDirectory())); + sourceFilePath = sourceFilePath.replace(program.getCommonSourceDirectory(), ""); + return ts.combinePaths(newDirPath, sourceFilePath); + } + function shouldEmitToOwnFile(sourceFile) { + if (!(sourceFile.flags & 512 /* DeclarationFile */)) { + if ((ts.isExternalModule(sourceFile) || !compilerOptions.out) && !ts.fileExtensionIs(sourceFile.filename, ".js")) { + return true; + } + } + } + function getOwnEmitOutputFilePath(sourceFile, extension) { + if (program.getCompilerOptions().outDir) { + var emitOutputFilePathWithoutExtension = ts.getModuleNameFromFilename(getSourceFilePathInNewDir(program.getCompilerOptions().outDir, sourceFile)); + } + else { + var emitOutputFilePathWithoutExtension = ts.getModuleNameFromFilename(sourceFile.filename); + } + return emitOutputFilePathWithoutExtension + extension; + } + function isExternalModuleOrDeclarationFile(sourceFile) { + return ts.isExternalModule(sourceFile) || (sourceFile.flags & 512 /* DeclarationFile */) !== 0; + } + function getFirstConstructorWithBody(node) { + return ts.forEach(node.members, function (member) { + if (member.kind === 117 /* Constructor */ && member.body) { + return member; + } + }); + } + function getAllAccessorDeclarations(node, accessor) { + var firstAccessor; + var getAccessor; + var setAccessor; + ts.forEach(node.members, function (member) { + if ((member.kind === 118 /* GetAccessor */ || member.kind === 119 /* SetAccessor */) && member.name.text === accessor.name.text && (member.flags & 64 /* Static */) === (accessor.flags & 64 /* Static */)) { + if (!firstAccessor) { + firstAccessor = member; + } + if (member.kind === 118 /* GetAccessor */ && !getAccessor) { + getAccessor = member; + } + if (member.kind === 119 /* SetAccessor */ && !setAccessor) { + setAccessor = member; + } + } + }); + return { + firstAccessor: firstAccessor, + getAccessor: getAccessor, + setAccessor: setAccessor + }; + } + function createTextWriter() { + var output = ""; + var indent = 0; + var lineStart = true; + var lineCount = 0; + var linePos = 0; + function write(s) { + if (s && s.length) { + if (lineStart) { + output += getIndentString(indent); + lineStart = false; + } + output += s; + } + } + function writeLiteral(s) { + if (s && s.length) { + write(s); + var pos = 0; + while (pos < s.length) { + switch (s.charCodeAt(pos++)) { + case 13 /* carriageReturn */: + if (pos < s.length && s.charCodeAt(pos) === 10 /* lineFeed */) { + pos++; + } + case 10 /* lineFeed */: + lineCount++; + linePos = output.length - s.length + pos; + break; + } + } + } + } + function writeLine() { + if (!lineStart) { + output += newLine; + lineCount++; + linePos = output.length; + lineStart = true; + } + } + return { + write: write, + writeLiteral: writeLiteral, + writeLine: writeLine, + increaseIndent: function () { return indent++; }, + decreaseIndent: function () { return indent--; }, + getTextPos: function () { return output.length; }, + getLine: function () { return lineCount + 1; }, + getColumn: function () { return lineStart ? indent * 4 + 1 : output.length - linePos + 1; }, + getText: function () { return output; } + }; + } + var currentSourceFile; + function getSourceTextOfLocalNode(node) { + var text = currentSourceFile.text; + return text.substring(ts.skipTrivia(text, node.pos), node.end); + } + function writeFile(filename, data) { + compilerHost.writeFile(filename, data, function (hostErrorMessage) { + diagnostics.push(ts.createCompilerDiagnostic(ts.Diagnostics.Could_not_write_file_0_Colon_1, filename, hostErrorMessage)); + }); + } + function emitJavaScript(jsFilePath, root) { + var writer = createTextWriter(); + var write = writer.write; + var writeLine = writer.writeLine; + var increaseIndent = writer.increaseIndent; + var decreaseIndent = writer.decreaseIndent; + var extendsEmitted = false; + var writeEmittedFiles = writeJavaScriptFile; + var emit = emitNode; + var emitStart = function (node) { + }; + var emitEnd = function (node) { + }; + var emitToken = emitTokenText; + var emitNewSourceFileStart = function (node) { + }; + var scopeEmitStart = function (scopeDeclaration, scopeName) { + }; + var scopeEmitEnd = function () { + }; + var sourceMapData; + function initializeEmitterWithSourceMaps() { + var sourceMapDir; + var sourceMapSourceIndex = -1; + var sourceMapNameIndexMap = {}; + var sourceMapNameIndices = []; + function getSourceMapNameIndex() { + return sourceMapNameIndices.length ? sourceMapNameIndices[sourceMapNameIndices.length - 1] : -1; + } + var lastRecordedSourceMapSpan; + var lastEncodedSourceMapSpan = { + emittedLine: 1, + emittedColumn: 1, + sourceLine: 1, + sourceColumn: 1, + sourceIndex: 0 + }; + var lastEncodedNameIndex = 0; + function encodeLastRecordedSourceMapSpan() { + if (!lastRecordedSourceMapSpan || lastRecordedSourceMapSpan === lastEncodedSourceMapSpan) { + return; + } + var prevEncodedEmittedColumn = lastEncodedSourceMapSpan.emittedColumn; + if (lastEncodedSourceMapSpan.emittedLine == lastRecordedSourceMapSpan.emittedLine) { + if (sourceMapData.sourceMapMappings) { + sourceMapData.sourceMapMappings += ","; + } + } + else { + for (var encodedLine = lastEncodedSourceMapSpan.emittedLine; encodedLine < lastRecordedSourceMapSpan.emittedLine; encodedLine++) { + sourceMapData.sourceMapMappings += ";"; + } + prevEncodedEmittedColumn = 1; + } + sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.emittedColumn - prevEncodedEmittedColumn); + sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.sourceIndex - lastEncodedSourceMapSpan.sourceIndex); + sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.sourceLine - lastEncodedSourceMapSpan.sourceLine); + sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.sourceColumn - lastEncodedSourceMapSpan.sourceColumn); + if (lastRecordedSourceMapSpan.nameIndex >= 0) { + sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.nameIndex - lastEncodedNameIndex); + lastEncodedNameIndex = lastRecordedSourceMapSpan.nameIndex; + } + lastEncodedSourceMapSpan = lastRecordedSourceMapSpan; + sourceMapData.sourceMapDecodedMappings.push(lastEncodedSourceMapSpan); + function base64VLQFormatEncode(inValue) { + function base64FormatEncode(inValue) { + if (inValue < 64) { + return 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.charAt(inValue); + } + throw TypeError(inValue + ": not a 64 based value"); + } + if (inValue < 0) { + inValue = ((-inValue) << 1) + 1; + } + else { + inValue = inValue << 1; + } + var encodedStr = ""; + do { + var currentDigit = inValue & 31; + inValue = inValue >> 5; + if (inValue > 0) { + currentDigit = currentDigit | 32; + } + encodedStr = encodedStr + base64FormatEncode(currentDigit); + } while (inValue > 0); + return encodedStr; + } + } + function recordSourceMapSpan(pos) { + var sourceLinePos = currentSourceFile.getLineAndCharacterFromPosition(pos); + var emittedLine = writer.getLine(); + var emittedColumn = writer.getColumn(); + if (!lastRecordedSourceMapSpan || lastRecordedSourceMapSpan.emittedLine != emittedLine || lastRecordedSourceMapSpan.emittedColumn != emittedColumn || lastRecordedSourceMapSpan.sourceLine > sourceLinePos.line || (lastRecordedSourceMapSpan.sourceLine === sourceLinePos.line && lastRecordedSourceMapSpan.sourceColumn > sourceLinePos.character)) { + encodeLastRecordedSourceMapSpan(); + lastRecordedSourceMapSpan = { + emittedLine: emittedLine, + emittedColumn: emittedColumn, + sourceLine: sourceLinePos.line, + sourceColumn: sourceLinePos.character, + nameIndex: getSourceMapNameIndex(), + sourceIndex: sourceMapSourceIndex + }; + } + else { + lastRecordedSourceMapSpan.sourceLine = sourceLinePos.line; + lastRecordedSourceMapSpan.sourceColumn = sourceLinePos.character; + } + } + function recordEmitNodeStartSpan(node) { + recordSourceMapSpan(ts.getTokenPosOfNode(node)); + } + function recordEmitNodeEndSpan(node) { + recordSourceMapSpan(node.end); + } + function writeTextWithSpanRecord(tokenKind, startPos, emitFn) { + var tokenStartPos = ts.skipTrivia(currentSourceFile.text, startPos); + recordSourceMapSpan(tokenStartPos); + var tokenEndPos = emitTokenText(tokenKind, tokenStartPos, emitFn); + recordSourceMapSpan(tokenEndPos); + return tokenEndPos; + } + function recordNewSourceFileStart(node) { + var sourcesDirectoryPath = compilerOptions.sourceRoot ? program.getCommonSourceDirectory() : sourceMapDir; + sourceMapData.sourceMapSources.push(ts.getRelativePathToDirectoryOrUrl(sourcesDirectoryPath, node.filename, compilerHost.getCurrentDirectory(), true)); + sourceMapSourceIndex = sourceMapData.sourceMapSources.length - 1; + sourceMapData.inputSourceFileNames.push(node.filename); + } + function recordScopeNameOfNode(node, scopeName) { + function recordScopeNameIndex(scopeNameIndex) { + sourceMapNameIndices.push(scopeNameIndex); + } + function recordScopeNameStart(scopeName) { + var scopeNameIndex = -1; + if (scopeName) { + var parentIndex = getSourceMapNameIndex(); + if (parentIndex !== -1) { + scopeName = sourceMapData.sourceMapNames[parentIndex] + "." + scopeName; + } + scopeNameIndex = ts.getProperty(sourceMapNameIndexMap, scopeName); + if (scopeNameIndex === undefined) { + scopeNameIndex = sourceMapData.sourceMapNames.length; + sourceMapData.sourceMapNames.push(scopeName); + sourceMapNameIndexMap[scopeName] = scopeNameIndex; + } + } + recordScopeNameIndex(scopeNameIndex); + } + if (scopeName) { + recordScopeNameStart(scopeName); + } + else if (node.kind === 167 /* FunctionDeclaration */ || node.kind === 136 /* FunctionExpression */ || node.kind === 116 /* Method */ || node.kind === 118 /* GetAccessor */ || node.kind === 119 /* SetAccessor */ || node.kind === 172 /* ModuleDeclaration */ || node.kind === 169 /* ClassDeclaration */ || node.kind === 171 /* EnumDeclaration */) { + if (node.name) { + scopeName = node.name.text; + } + recordScopeNameStart(scopeName); + } + else { + recordScopeNameIndex(getSourceMapNameIndex()); + } + } + function recordScopeNameEnd() { + sourceMapNameIndices.pop(); + } + ; + function writeJavaScriptAndSourceMapFile(emitOutput) { + encodeLastRecordedSourceMapSpan(); + writeFile(sourceMapData.sourceMapFilePath, JSON.stringify({ + version: 3, + file: sourceMapData.sourceMapFile, + sourceRoot: sourceMapData.sourceMapSourceRoot, + sources: sourceMapData.sourceMapSources, + names: sourceMapData.sourceMapNames, + mappings: sourceMapData.sourceMapMappings + })); + sourceMapDataList.push(sourceMapData); + writeJavaScriptFile(emitOutput + "//# sourceMappingURL=" + sourceMapData.jsSourceMappingURL); + } + var sourceMapJsFile = ts.getBaseFilename(ts.normalizeSlashes(jsFilePath)); + sourceMapData = { + sourceMapFilePath: jsFilePath + ".map", + jsSourceMappingURL: sourceMapJsFile + ".map", + sourceMapFile: sourceMapJsFile, + sourceMapSourceRoot: compilerOptions.sourceRoot || "", + sourceMapSources: [], + inputSourceFileNames: [], + sourceMapNames: [], + sourceMapMappings: "", + sourceMapDecodedMappings: [] + }; + sourceMapData.sourceMapSourceRoot = ts.normalizeSlashes(sourceMapData.sourceMapSourceRoot); + if (sourceMapData.sourceMapSourceRoot.length && sourceMapData.sourceMapSourceRoot.charCodeAt(sourceMapData.sourceMapSourceRoot.length - 1) !== 47 /* slash */) { + sourceMapData.sourceMapSourceRoot += ts.directorySeparator; + } + if (compilerOptions.mapRoot) { + sourceMapDir = ts.normalizeSlashes(compilerOptions.mapRoot); + if (root) { + sourceMapDir = ts.getDirectoryPath(getSourceFilePathInNewDir(sourceMapDir, root)); + } + if (!ts.isRootedDiskPath(sourceMapDir) && !ts.isUrl(sourceMapDir)) { + sourceMapDir = ts.combinePaths(program.getCommonSourceDirectory(), sourceMapDir); + sourceMapData.jsSourceMappingURL = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizePath(jsFilePath)), ts.combinePaths(sourceMapDir, sourceMapData.jsSourceMappingURL), compilerHost.getCurrentDirectory(), true); + } + else { + sourceMapData.jsSourceMappingURL = ts.combinePaths(sourceMapDir, sourceMapData.jsSourceMappingURL); + } + } + else { + sourceMapDir = ts.getDirectoryPath(ts.normalizePath(jsFilePath)); + } + function emitNodeWithMap(node) { + if (node) { + if (node.kind != 177 /* SourceFile */) { + recordEmitNodeStartSpan(node); + emitNode(node); + recordEmitNodeEndSpan(node); + } + else { + recordNewSourceFileStart(node); + emitNode(node); + } + } + } + writeEmittedFiles = writeJavaScriptAndSourceMapFile; + emit = emitNodeWithMap; + emitStart = recordEmitNodeStartSpan; + emitEnd = recordEmitNodeEndSpan; + emitToken = writeTextWithSpanRecord; + emitNewSourceFileStart = recordNewSourceFileStart; + scopeEmitStart = recordScopeNameOfNode; + scopeEmitEnd = recordScopeNameEnd; + } + function writeJavaScriptFile(emitOutput) { + writeFile(jsFilePath, emitOutput); + } + function emitTokenText(tokenKind, startPos, emitFn) { + var tokenString = ts.tokenToString(tokenKind); + if (emitFn) { + emitFn(); + } + else { + write(tokenString); + } + return startPos + tokenString.length; + } + function emitOptional(prefix, node) { + if (node) { + write(prefix); + emit(node); + } + } + function emitCommaList(nodes, count) { + if (!(count >= 0)) + count = nodes.length; + if (nodes) { + for (var i = 0; i < count; i++) { + if (i) + write(", "); + emit(nodes[i]); + } + } + } + function emitMultiLineList(nodes) { + if (nodes) { + for (var i = 0; i < nodes.length; i++) { + if (i) + write(","); + writeLine(); + emit(nodes[i]); + } + } + } + function emitLines(nodes) { + emitLinesStartingAt(nodes, 0); + } + function emitLinesStartingAt(nodes, startIndex) { + for (var i = startIndex; i < nodes.length; i++) { + writeLine(); + emit(nodes[i]); + } + } + function emitLiteral(node) { + var text = getSourceTextOfLocalNode(node); + if (node.kind === 3 /* StringLiteral */ && compilerOptions.sourceMap) { + writer.writeLiteral(text); + } + else { + write(text); + } + } + function emitQuotedIdentifier(node) { + if (node.kind === 3 /* StringLiteral */) { + emitLiteral(node); + } + else { + write("\""); + if (node.kind === 2 /* NumericLiteral */) { + write(node.text); + } + else { + write(getSourceTextOfLocalNode(node)); + } + write("\""); + } + } + function isNonExpressionIdentifier(node) { + var parent = node.parent; + switch (parent.kind) { + case 114 /* Parameter */: + case 166 /* VariableDeclaration */: + case 115 /* Property */: + case 129 /* PropertyAssignment */: + case 176 /* EnumMember */: + case 116 /* Method */: + case 167 /* FunctionDeclaration */: + case 118 /* GetAccessor */: + case 119 /* SetAccessor */: + case 136 /* FunctionExpression */: + case 169 /* ClassDeclaration */: + case 170 /* InterfaceDeclaration */: + case 171 /* EnumDeclaration */: + case 172 /* ModuleDeclaration */: + case 174 /* ImportDeclaration */: + return parent.name === node; + case 153 /* BreakStatement */: + case 152 /* ContinueStatement */: + case 175 /* ExportAssignment */: + return false; + case 159 /* LabelledStatement */: + return node.parent.label === node; + case 163 /* CatchBlock */: + return node.parent.variable === node; + } + } + function emitIdentifier(node) { + if (!isNonExpressionIdentifier(node)) { + var prefix = resolver.getExpressionNamePrefix(node); + if (prefix) { + write(prefix); + write("."); + } + } + write(getSourceTextOfLocalNode(node)); + } + function emitThis(node) { + if (resolver.getNodeCheckFlags(node) & 2 /* LexicalThis */) { + write("_this"); + } + else { + write("this"); + } + } + function emitSuper(node) { + var flags = resolver.getNodeCheckFlags(node); + if (flags & 16 /* SuperInstance */) { + write("_super.prototype"); + } + else if (flags & 32 /* SuperStatic */) { + write("_super"); + } + else { + write("super"); + } + } + function emitArrayLiteral(node) { + if (node.flags & 128 /* MultiLine */) { + write("["); + increaseIndent(); + emitMultiLineList(node.elements); + decreaseIndent(); + writeLine(); + write("]"); + } + else { + write("["); + emitCommaList(node.elements); + write("]"); + } + } + function emitObjectLiteral(node) { + if (!node.properties.length) { + write("{}"); + } + else if (node.flags & 128 /* MultiLine */) { + write("{"); + increaseIndent(); + emitMultiLineList(node.properties); + decreaseIndent(); + writeLine(); + write("}"); + } + else { + write("{ "); + emitCommaList(node.properties); + write(" }"); + } + } + function emitPropertyAssignment(node) { + emit(node.name); + write(": "); + emit(node.initializer); + } + function emitPropertyAccess(node) { + var text = resolver.getPropertyAccessSubstitution(node); + if (text) { + write(text); + return; + } + emit(node.left); + write("."); + emit(node.right); + } + function emitIndexedAccess(node) { + emit(node.object); + write("["); + emit(node.index); + write("]"); + } + function emitCallExpression(node) { + var superCall = false; + if (node.func.kind === 81 /* SuperKeyword */) { + write("_super"); + superCall = true; + } + else { + emit(node.func); + superCall = node.func.kind === 130 /* PropertyAccess */ && node.func.left.kind === 81 /* SuperKeyword */; + } + if (superCall) { + write(".call("); + emitThis(node.func); + if (node.arguments.length) { + write(", "); + emitCommaList(node.arguments); + } + write(")"); + } + else { + write("("); + emitCommaList(node.arguments); + write(")"); + } + } + function emitNewExpression(node) { + write("new "); + emit(node.func); + if (node.arguments) { + write("("); + emitCommaList(node.arguments); + write(")"); + } + } + function emitParenExpression(node) { + if (node.expression.kind === 134 /* TypeAssertion */) { + var operand = node.expression.operand; + while (operand.kind == 134 /* TypeAssertion */) { + operand = operand.operand; + } + if (operand.kind !== 138 /* PrefixOperator */ && operand.kind !== 139 /* PostfixOperator */ && operand.kind !== 133 /* NewExpression */ && !(operand.kind === 132 /* CallExpression */ && node.parent.kind === 133 /* NewExpression */) && !(operand.kind === 136 /* FunctionExpression */ && node.parent.kind === 132 /* CallExpression */)) { + emit(operand); + return; + } + } + write("("); + emit(node.expression); + write(")"); + } + function emitUnaryExpression(node) { + if (node.kind === 138 /* PrefixOperator */) { + write(ts.tokenToString(node.operator)); + } + if (node.operator >= 55 /* Identifier */) { + write(" "); + } + else if (node.kind === 138 /* PrefixOperator */ && node.operand.kind === 138 /* PrefixOperator */) { + var operand = node.operand; + if (node.operator === 24 /* PlusToken */ && (operand.operator === 24 /* PlusToken */ || operand.operator === 29 /* PlusPlusToken */)) { + write(" "); + } + else if (node.operator === 25 /* MinusToken */ && (operand.operator === 25 /* MinusToken */ || operand.operator === 30 /* MinusMinusToken */)) { + write(" "); + } + } + emit(node.operand); + if (node.kind === 139 /* PostfixOperator */) { + write(ts.tokenToString(node.operator)); + } + } + function emitBinaryExpression(node) { + emit(node.left); + if (node.operator !== 14 /* CommaToken */) + write(" "); + write(ts.tokenToString(node.operator)); + write(" "); + emit(node.right); + } + function emitConditionalExpression(node) { + emit(node.condition); + write(" ? "); + emit(node.whenTrue); + write(" : "); + emit(node.whenFalse); + } + function emitBlock(node) { + emitToken(5 /* OpenBraceToken */, node.pos); + increaseIndent(); + scopeEmitStart(node.parent); + if (node.kind === 173 /* ModuleBlock */) { + ts.Debug.assert(node.parent.kind === 172 /* ModuleDeclaration */); + emitCaptureThisForNodeIfNecessary(node.parent); + } + emitLines(node.statements); + decreaseIndent(); + writeLine(); + emitToken(6 /* CloseBraceToken */, node.statements.end); + scopeEmitEnd(); + } + function emitEmbeddedStatement(node) { + if (node.kind === 143 /* Block */) { + write(" "); + emit(node); + } + else { + increaseIndent(); + writeLine(); + emit(node); + decreaseIndent(); + } + } + function emitExpressionStatement(node) { + var isArrowExpression = node.expression.kind === 137 /* ArrowFunction */; + if (isArrowExpression) + write("("); + emit(node.expression); + if (isArrowExpression) + write(")"); + write(";"); + } + function emitIfStatement(node) { + var endPos = emitToken(74 /* IfKeyword */, node.pos); + write(" "); + endPos = emitToken(7 /* OpenParenToken */, endPos); + emit(node.expression); + emitToken(8 /* CloseParenToken */, node.expression.end); + emitEmbeddedStatement(node.thenStatement); + if (node.elseStatement) { + writeLine(); + emitToken(66 /* ElseKeyword */, node.thenStatement.end); + if (node.elseStatement.kind === 147 /* IfStatement */) { + write(" "); + emit(node.elseStatement); + } + else { + emitEmbeddedStatement(node.elseStatement); + } + } + } + function emitDoStatement(node) { + write("do"); + emitEmbeddedStatement(node.statement); + if (node.statement.kind === 143 /* Block */) { + write(" "); + } + else { + writeLine(); + } + write("while ("); + emit(node.expression); + write(");"); + } + function emitWhileStatement(node) { + write("while ("); + emit(node.expression); + write(")"); + emitEmbeddedStatement(node.statement); + } + function emitForStatement(node) { + var endPos = emitToken(72 /* ForKeyword */, node.pos); + write(" "); + endPos = emitToken(7 /* OpenParenToken */, endPos); + if (node.declarations) { + emitToken(88 /* VarKeyword */, endPos); + write(" "); + emitCommaList(node.declarations); + } + if (node.initializer) { + emit(node.initializer); + } + write(";"); + emitOptional(" ", node.condition); + write(";"); + emitOptional(" ", node.iterator); + write(")"); + emitEmbeddedStatement(node.statement); + } + function emitForInStatement(node) { + var endPos = emitToken(72 /* ForKeyword */, node.pos); + write(" "); + endPos = emitToken(7 /* OpenParenToken */, endPos); + if (node.declaration) { + emitToken(88 /* VarKeyword */, endPos); + write(" "); + emit(node.declaration); + } + else { + emit(node.variable); + } + write(" in "); + emit(node.expression); + emitToken(8 /* CloseParenToken */, node.expression.end); + emitEmbeddedStatement(node.statement); + } + function emitBreakOrContinueStatement(node) { + emitToken(node.kind === 153 /* BreakStatement */ ? 56 /* BreakKeyword */ : 61 /* ContinueKeyword */, node.pos); + emitOptional(" ", node.label); + write(";"); + } + function emitReturnStatement(node) { + emitToken(80 /* ReturnKeyword */, node.pos); + emitOptional(" ", node.expression); + write(";"); + } + function emitWithStatement(node) { + write("with ("); + emit(node.expression); + write(")"); + emitEmbeddedStatement(node.statement); + } + function emitSwitchStatement(node) { + var endPos = emitToken(82 /* SwitchKeyword */, node.pos); + write(" "); + emitToken(7 /* OpenParenToken */, endPos); + emit(node.expression); + endPos = emitToken(8 /* CloseParenToken */, node.expression.end); + write(" "); + emitToken(5 /* OpenBraceToken */, endPos); + increaseIndent(); + emitLines(node.clauses); + decreaseIndent(); + writeLine(); + emitToken(6 /* CloseBraceToken */, node.clauses.end); + } + function emitCaseOrDefaultClause(node) { + if (node.kind === 157 /* CaseClause */) { + write("case "); + emit(node.expression); + write(":"); + } + else { + write("default:"); + } + increaseIndent(); + emitLines(node.statements); + decreaseIndent(); + } + function emitThrowStatement(node) { + write("throw "); + emit(node.expression); + write(";"); + } + function emitTryStatement(node) { + write("try "); + emit(node.tryBlock); + emit(node.catchBlock); + if (node.finallyBlock) { + writeLine(); + write("finally "); + emit(node.finallyBlock); + } + } + function emitCatchBlock(node) { + writeLine(); + var endPos = emitToken(58 /* CatchKeyword */, node.pos); + write(" "); + emitToken(7 /* OpenParenToken */, endPos); + emit(node.variable); + emitToken(8 /* CloseParenToken */, node.variable.end); + write(" "); + emitBlock(node); + } + function emitDebuggerStatement(node) { + emitToken(62 /* DebuggerKeyword */, node.pos); + write(";"); + } + function emitLabelledStatement(node) { + emit(node.label); + write(": "); + emit(node.statement); + } + function getContainingModule(node) { + do { + node = node.parent; + } while (node && node.kind !== 172 /* ModuleDeclaration */); + return node; + } + function emitModuleMemberName(node) { + emitStart(node.name); + if (node.flags & 1 /* Export */) { + var container = getContainingModule(node); + write(container ? resolver.getLocalNameOfContainer(container) : "exports"); + write("."); + } + emitNode(node.name); + emitEnd(node.name); + } + function emitVariableDeclaration(node) { + emitModuleMemberName(node); + emitOptional(" = ", node.initializer); + } + function emitVariableStatement(node) { + if (!(node.flags & 1 /* Export */)) + write("var "); + emitCommaList(node.declarations); + write(";"); + } + function emitParameter(node) { + emit(node.name); + } + function emitDefaultValueAssignments(node) { + ts.forEach(node.parameters, function (param) { + if (param.initializer) { + writeLine(); + emitStart(param); + write("if ("); + emitNode(param.name); + write(" === void 0)"); + emitEnd(param); + write(" { "); + emitStart(param); + emitNode(param.name); + write(" = "); + emitNode(param.initializer); + emitEnd(param); + write("; }"); + } + }); + } + function emitRestParameter(node) { + if (ts.hasRestParameters(node)) { + var restIndex = node.parameters.length - 1; + var restParam = node.parameters[restIndex]; + writeLine(); + emitStart(restParam); + write("var "); + emitNode(restParam.name); + write(" = [];"); + emitEnd(restParam); + writeLine(); + write("for ("); + emitStart(restParam); + write("var _i = " + restIndex + ";"); + emitEnd(restParam); + write(" "); + emitStart(restParam); + write("_i < arguments.length;"); + emitEnd(restParam); + write(" "); + emitStart(restParam); + write("_i++"); + emitEnd(restParam); + write(") {"); + increaseIndent(); + writeLine(); + emitStart(restParam); + emitNode(restParam.name); + write("[_i - " + restIndex + "] = arguments[_i];"); + emitEnd(restParam); + decreaseIndent(); + writeLine(); + write("}"); + } + } + function emitAccessor(node) { + write(node.kind === 118 /* GetAccessor */ ? "get " : "set "); + emit(node.name); + emitSignatureAndBody(node); + } + function emitFunctionDeclaration(node) { + if (!node.body) + return; + write("function "); + if (node.kind === 167 /* FunctionDeclaration */ || (node.kind === 136 /* FunctionExpression */ && node.name)) { + emit(node.name); + } + emitSignatureAndBody(node); + } + function emitCaptureThisForNodeIfNecessary(node) { + if (resolver.getNodeCheckFlags(node) & 4 /* CaptureThis */) { + writeLine(); + emitStart(node); + write("var _this = this;"); + emitEnd(node); + } + } + function emitSignatureParameters(node) { + write("("); + if (node) { + emitCommaList(node.parameters, node.parameters.length - (ts.hasRestParameters(node) ? 1 : 0)); + } + write(")"); + } + function emitSignatureAndBody(node) { + emitSignatureParameters(node); + write(" {"); + scopeEmitStart(node); + increaseIndent(); + var startIndex = 0; + if (node.body.kind === 168 /* FunctionBlock */) { + startIndex = emitDirectivePrologues(node.body.statements, true); + } + var outPos = writer.getTextPos(); + emitCaptureThisForNodeIfNecessary(node); + emitDefaultValueAssignments(node); + emitRestParameter(node); + if (node.body.kind !== 168 /* FunctionBlock */ && outPos === writer.getTextPos()) { + decreaseIndent(); + write(" "); + emitStart(node.body); + write("return "); + emitNode(node.body); + emitEnd(node.body); + write("; "); + emitStart(node.body); + write("}"); + emitEnd(node.body); + } + else { + if (node.body.kind === 168 /* FunctionBlock */) { + emitLinesStartingAt(node.body.statements, startIndex); + } + else { + writeLine(); + write("return "); + emit(node.body); + write(";"); + } + decreaseIndent(); + writeLine(); + if (node.body.kind === 168 /* FunctionBlock */) { + emitToken(6 /* CloseBraceToken */, node.body.statements.end); + } + else { + emitStart(node.body); + write("}"); + emitEnd(node.body); + } + } + scopeEmitEnd(); + if (node.flags & 1 /* Export */) { + writeLine(); + emitStart(node); + emitModuleMemberName(node); + write(" = "); + emit(node.name); + emitEnd(node); + write(";"); + } + } + function findInitialSuperCall(ctor) { + if (ctor.body) { + var statement = ctor.body.statements[0]; + if (statement && statement.kind === 146 /* ExpressionStatement */) { + var expr = statement.expression; + if (expr && expr.kind === 132 /* CallExpression */) { + var func = expr.func; + if (func && func.kind === 81 /* SuperKeyword */) { + return statement; + } + } + } + } + } + function emitParameterPropertyAssignments(node) { + ts.forEach(node.parameters, function (param) { + if (param.flags & (16 /* Public */ | 32 /* Private */)) { + writeLine(); + emitStart(param); + emitStart(param.name); + write("this."); + emitNode(param.name); + emitEnd(param.name); + write(" = "); + emit(param.name); + write(";"); + emitEnd(param); + } + }); + } + function emitMemberAccess(memberName) { + if (memberName.kind === 3 /* StringLiteral */ || memberName.kind === 2 /* NumericLiteral */) { + write("["); + emitNode(memberName); + write("]"); + } + else { + write("."); + emitNode(memberName); + } + } + function emitMemberAssignments(node, staticFlag) { + ts.forEach(node.members, function (member) { + if (member.kind === 115 /* Property */ && (member.flags & 64 /* Static */) === staticFlag && member.initializer) { + writeLine(); + emitStart(member); + emitStart(member.name); + if (staticFlag) { + emitNode(node.name); + } + else { + write("this"); + } + emitMemberAccess(member.name); + emitEnd(member.name); + write(" = "); + emit(member.initializer); + write(";"); + emitEnd(member); + } + }); + } + function emitMemberFunctions(node) { + ts.forEach(node.members, function (member) { + if (member.kind === 116 /* Method */) { + if (!member.body) + return; + writeLine(); + emitStart(member); + emitStart(member.name); + emitNode(node.name); + if (!(member.flags & 64 /* Static */)) { + write(".prototype"); + } + emitMemberAccess(member.name); + emitEnd(member.name); + write(" = "); + emitStart(member); + emitFunctionDeclaration(member); + emitEnd(member); + emitEnd(member); + write(";"); + } + else if (member.kind === 118 /* GetAccessor */ || member.kind === 119 /* SetAccessor */) { + var accessors = getAllAccessorDeclarations(node, member); + if (member === accessors.firstAccessor) { + writeLine(); + emitStart(member); + write("Object.defineProperty("); + emitStart(member.name); + emitNode(node.name); + if (!(member.flags & 64 /* Static */)) { + write(".prototype"); + } + write(", "); + emitQuotedIdentifier(member.name); + emitEnd(member.name); + write(", {"); + increaseIndent(); + if (accessors.getAccessor) { + writeLine(); + write("get: "); + emitStart(accessors.getAccessor); + write("function "); + emitSignatureAndBody(accessors.getAccessor); + emitEnd(accessors.getAccessor); + write(","); + } + if (accessors.setAccessor) { + writeLine(); + write("set: "); + emitStart(accessors.setAccessor); + write("function "); + emitSignatureAndBody(accessors.setAccessor); + emitEnd(accessors.setAccessor); + write(","); + } + writeLine(); + write("enumerable: true,"); + writeLine(); + write("configurable: true"); + decreaseIndent(); + writeLine(); + write("});"); + emitEnd(member); + } + } + }); + } + function emitClassDeclaration(node) { + var ctor = getFirstConstructorWithBody(node); + write("var "); + emit(node.name); + write(" = (function ("); + if (node.baseType) + write("_super"); + write(") {"); + increaseIndent(); + scopeEmitStart(node); + if (node.baseType) { + writeLine(); + emitStart(node.baseType); + write("__extends("); + emit(node.name); + write(", _super);"); + emitEnd(node.baseType); + } + writeLine(); + emitStart(ctor || node); + write("function "); + emit(node.name); + emitSignatureParameters(ctor); + write(" {"); + scopeEmitStart(node, "constructor"); + increaseIndent(); + emitCaptureThisForNodeIfNecessary(node); + if (ctor) { + emitDefaultValueAssignments(ctor); + emitRestParameter(ctor); + if (node.baseType) { + var superCall = findInitialSuperCall(ctor); + if (superCall) { + writeLine(); + emit(superCall); + } + } + emitParameterPropertyAssignments(ctor); + } + else { + if (node.baseType) { + writeLine(); + emitStart(node.baseType); + write("_super.apply(this, arguments);"); + emitEnd(node.baseType); + } + } + emitMemberAssignments(node, 0); + if (ctor) { + var statements = ctor.body.statements; + if (superCall) + statements = statements.slice(1); + emitLines(statements); + } + decreaseIndent(); + writeLine(); + emitToken(6 /* CloseBraceToken */, ctor ? ctor.body.statements.end : node.members.end); + scopeEmitEnd(); + emitEnd(ctor || node); + emitMemberFunctions(node); + emitMemberAssignments(node, 64 /* Static */); + writeLine(); + function emitClassReturnStatement() { + write("return "); + emitNode(node.name); + } + emitToken(6 /* CloseBraceToken */, node.members.end, emitClassReturnStatement); + write(";"); + decreaseIndent(); + writeLine(); + emitToken(6 /* CloseBraceToken */, node.members.end); + scopeEmitEnd(); + emitStart(node); + write(")("); + if (node.baseType) { + emit(node.baseType.typeName); + } + write(");"); + emitEnd(node); + if (node.flags & 1 /* Export */) { + writeLine(); + emitStart(node); + emitModuleMemberName(node); + write(" = "); + emit(node.name); + emitEnd(node); + write(";"); + } + } + function emitEnumDeclaration(node) { + if (!(node.flags & 1 /* Export */)) { + emitStart(node); + write("var "); + emit(node.name); + emitEnd(node); + write(";"); + } + writeLine(); + emitStart(node); + write("(function ("); + emitStart(node.name); + write(resolver.getLocalNameOfContainer(node)); + emitEnd(node.name); + write(") {"); + increaseIndent(); + scopeEmitStart(node); + ts.forEach(node.members, function (member) { + writeLine(); + emitStart(member); + write(resolver.getLocalNameOfContainer(node)); + write("["); + write(resolver.getLocalNameOfContainer(node)); + write("["); + emitQuotedIdentifier(member.name); + write("] = "); + if (member.initializer) { + emit(member.initializer); + } + else { + write(resolver.getEnumMemberValue(member).toString()); + } + write("] = "); + emitQuotedIdentifier(member.name); + emitEnd(member); + write(";"); + }); + decreaseIndent(); + writeLine(); + emitToken(6 /* CloseBraceToken */, node.members.end); + scopeEmitEnd(); + write(")("); + emitModuleMemberName(node); + write(" || ("); + emitModuleMemberName(node); + write(" = {}));"); + emitEnd(node); + if (node.flags & 1 /* Export */) { + writeLine(); + emitStart(node); + write("var "); + emit(node.name); + write(" = "); + emitModuleMemberName(node); + emitEnd(node); + write(";"); + } + } + function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration) { + if (moduleDeclaration.body.kind === 172 /* ModuleDeclaration */) { + var recursiveInnerModule = getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration.body); + return recursiveInnerModule || moduleDeclaration.body; + } + } + function emitModuleDeclaration(node) { + if (!ts.isInstantiated(node)) + return; + if (!(node.flags & 1 /* Export */)) { + emitStart(node); + write("var "); + emit(node.name); + write(";"); + emitEnd(node); + writeLine(); + } + emitStart(node); + write("(function ("); + emitStart(node.name); + write(resolver.getLocalNameOfContainer(node)); + emitEnd(node.name); + write(") "); + if (node.body.kind === 173 /* ModuleBlock */) { + emit(node.body); + } + else { + write("{"); + increaseIndent(); + scopeEmitStart(node); + emitCaptureThisForNodeIfNecessary(node); + writeLine(); + emit(node.body); + decreaseIndent(); + writeLine(); + var moduleBlock = getInnerMostModuleDeclarationFromDottedModule(node).body; + emitToken(6 /* CloseBraceToken */, moduleBlock.statements.end); + scopeEmitEnd(); + } + write(")("); + emitModuleMemberName(node); + write(" || ("); + emitModuleMemberName(node); + write(" = {}));"); + emitEnd(node); + if (node.flags & 1 /* Export */) { + writeLine(); + emitStart(node); + write("var "); + emit(node.name); + write(" = "); + emitModuleMemberName(node); + emitEnd(node); + write(";"); + } + } + function emitImportDeclaration(node) { + var emitImportDeclaration = resolver.isReferencedImportDeclaration(node); + if (!emitImportDeclaration) { + emitImportDeclaration = !ts.isExternalModule(currentSourceFile) && resolver.isTopLevelValueImportedViaEntityName(node); + } + if (emitImportDeclaration) { + if (node.externalModuleName && node.parent.kind === 177 /* SourceFile */ && compilerOptions.module === 2 /* AMD */) { + if (node.flags & 1 /* Export */) { + writeLine(); + emitStart(node); + emitModuleMemberName(node); + write(" = "); + emit(node.name); + write(";"); + emitEnd(node); + } + } + else { + writeLine(); + emitStart(node); + if (!(node.flags & 1 /* Export */)) + write("var "); + emitModuleMemberName(node); + write(" = "); + if (node.entityName) { + emit(node.entityName); + } + else { + write("require("); + emitStart(node.externalModuleName); + emitLiteral(node.externalModuleName); + emitEnd(node.externalModuleName); + emitToken(8 /* CloseParenToken */, node.externalModuleName.end); + } + write(";"); + emitEnd(node); + } + } + } + function getExternalImportDeclarations(node) { + var result = []; + ts.forEach(node.statements, function (stat) { + if (stat.kind === 174 /* ImportDeclaration */ && stat.externalModuleName && resolver.isReferencedImportDeclaration(stat)) { + result.push(stat); + } + }); + return result; + } + function getFirstExportAssignment(sourceFile) { + return ts.forEach(sourceFile.statements, function (node) { + if (node.kind === 175 /* ExportAssignment */) { + return node; + } + }); + } + function emitAMDModule(node, startIndex) { + var imports = getExternalImportDeclarations(node); + writeLine(); + write("define([\"require\", \"exports\""); + ts.forEach(imports, function (imp) { + write(", "); + emitLiteral(imp.externalModuleName); + }); + ts.forEach(node.amdDependencies, function (amdDependency) { + var text = "\"" + amdDependency + "\""; + write(", "); + write(text); + }); + write("], function (require, exports"); + ts.forEach(imports, function (imp) { + write(", "); + emit(imp.name); + }); + write(") {"); + increaseIndent(); + emitCaptureThisForNodeIfNecessary(node); + emitLinesStartingAt(node.statements, startIndex); + var exportName = resolver.getExportAssignmentName(node); + if (exportName) { + writeLine(); + var exportAssignement = getFirstExportAssignment(node); + emitStart(exportAssignement); + write("return "); + emitStart(exportAssignement.exportName); + write(exportName); + emitEnd(exportAssignement.exportName); + write(";"); + emitEnd(exportAssignement); + } + decreaseIndent(); + writeLine(); + write("});"); + } + function emitCommonJSModule(node, startIndex) { + emitCaptureThisForNodeIfNecessary(node); + emitLinesStartingAt(node.statements, startIndex); + var exportName = resolver.getExportAssignmentName(node); + if (exportName) { + writeLine(); + var exportAssignement = getFirstExportAssignment(node); + emitStart(exportAssignement); + write("module.exports = "); + emitStart(exportAssignement.exportName); + write(exportName); + emitEnd(exportAssignement.exportName); + write(";"); + emitEnd(exportAssignement); + } + } + function emitDirectivePrologues(statements, startWithNewLine) { + for (var i = 0; i < statements.length; ++i) { + if (ts.isPrologueDirective(statements[i])) { + if (startWithNewLine || i > 0) { + writeLine(); + } + emit(statements[i]); + } + else { + return i; + } + } + return statements.length; + } + function emitSourceFile(node) { + currentSourceFile = node; + var startIndex = emitDirectivePrologues(node.statements, false); + if (!extendsEmitted && resolver.getNodeCheckFlags(node) & 8 /* EmitExtends */) { + writeLine(); + write("var __extends = this.__extends || function (d, b) {"); + increaseIndent(); + writeLine(); + write("for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];"); + writeLine(); + write("function __() { this.constructor = d; }"); + writeLine(); + write("__.prototype = b.prototype;"); + writeLine(); + write("d.prototype = new __();"); + decreaseIndent(); + writeLine(); + write("};"); + extendsEmitted = true; + } + if (ts.isExternalModule(node)) { + if (compilerOptions.module === 2 /* AMD */) { + emitAMDModule(node, startIndex); + } + else { + emitCommonJSModule(node, startIndex); + } + } + else { + emitCaptureThisForNodeIfNecessary(node); + emitLinesStartingAt(node.statements, startIndex); + } + } + function emitNode(node) { + if (!node || node.flags & 2 /* Ambient */) + return; + switch (node.kind) { + case 55 /* Identifier */: + return emitIdentifier(node); + case 114 /* Parameter */: + return emitParameter(node); + case 118 /* GetAccessor */: + case 119 /* SetAccessor */: + return emitAccessor(node); + case 83 /* ThisKeyword */: + return emitThis(node); + case 81 /* SuperKeyword */: + return emitSuper(node); + case 79 /* NullKeyword */: + return write("null"); + case 85 /* TrueKeyword */: + return write("true"); + case 70 /* FalseKeyword */: + return write("false"); + case 2 /* NumericLiteral */: + case 3 /* StringLiteral */: + case 4 /* RegularExpressionLiteral */: + return emitLiteral(node); + case 112 /* QualifiedName */: + return emitPropertyAccess(node); + case 127 /* ArrayLiteral */: + return emitArrayLiteral(node); + case 128 /* ObjectLiteral */: + return emitObjectLiteral(node); + case 129 /* PropertyAssignment */: + return emitPropertyAssignment(node); + case 130 /* PropertyAccess */: + return emitPropertyAccess(node); + case 131 /* IndexedAccess */: + return emitIndexedAccess(node); + case 132 /* CallExpression */: + return emitCallExpression(node); + case 133 /* NewExpression */: + return emitNewExpression(node); + case 134 /* TypeAssertion */: + return emit(node.operand); + case 135 /* ParenExpression */: + return emitParenExpression(node); + case 167 /* FunctionDeclaration */: + case 136 /* FunctionExpression */: + case 137 /* ArrowFunction */: + return emitFunctionDeclaration(node); + case 138 /* PrefixOperator */: + case 139 /* PostfixOperator */: + return emitUnaryExpression(node); + case 140 /* BinaryExpression */: + return emitBinaryExpression(node); + case 141 /* ConditionalExpression */: + return emitConditionalExpression(node); + case 142 /* OmittedExpression */: + return; + case 143 /* Block */: + case 162 /* TryBlock */: + case 164 /* FinallyBlock */: + case 168 /* FunctionBlock */: + case 173 /* ModuleBlock */: + return emitBlock(node); + case 144 /* VariableStatement */: + return emitVariableStatement(node); + case 145 /* EmptyStatement */: + return write(";"); + case 146 /* ExpressionStatement */: + return emitExpressionStatement(node); + case 147 /* IfStatement */: + return emitIfStatement(node); + case 148 /* DoStatement */: + return emitDoStatement(node); + case 149 /* WhileStatement */: + return emitWhileStatement(node); + case 150 /* ForStatement */: + return emitForStatement(node); + case 151 /* ForInStatement */: + return emitForInStatement(node); + case 152 /* ContinueStatement */: + case 153 /* BreakStatement */: + return emitBreakOrContinueStatement(node); + case 154 /* ReturnStatement */: + return emitReturnStatement(node); + case 155 /* WithStatement */: + return emitWithStatement(node); + case 156 /* SwitchStatement */: + return emitSwitchStatement(node); + case 157 /* CaseClause */: + case 158 /* DefaultClause */: + return emitCaseOrDefaultClause(node); + case 159 /* LabelledStatement */: + return emitLabelledStatement(node); + case 160 /* ThrowStatement */: + return emitThrowStatement(node); + case 161 /* TryStatement */: + return emitTryStatement(node); + case 163 /* CatchBlock */: + return emitCatchBlock(node); + case 165 /* DebuggerStatement */: + return emitDebuggerStatement(node); + case 166 /* VariableDeclaration */: + return emitVariableDeclaration(node); + case 169 /* ClassDeclaration */: + return emitClassDeclaration(node); + case 171 /* EnumDeclaration */: + return emitEnumDeclaration(node); + case 172 /* ModuleDeclaration */: + return emitModuleDeclaration(node); + case 174 /* ImportDeclaration */: + return emitImportDeclaration(node); + case 177 /* SourceFile */: + return emitSourceFile(node); + } + } + if (compilerOptions.sourceMap) { + initializeEmitterWithSourceMaps(); + } + if (root) { + emit(root); + } + else { + ts.forEach(program.getSourceFiles(), function (sourceFile) { + if (!isExternalModuleOrDeclarationFile(sourceFile)) { + emit(sourceFile); + } + }); + } + writeLine(); + writeEmittedFiles(writer.getText()); + } + function emitDeclarations(jsFilePath, root) { + var writer = createTextWriter(); + var write = writer.write; + var writeLine = writer.writeLine; + var increaseIndent = writer.increaseIndent; + var decreaseIndent = writer.decreaseIndent; + var enclosingDeclaration; + function emitLines(nodes) { + for (var i = 0, n = nodes.length; i < n; i++) { + emitNode(nodes[i]); + } + } + function emitCommaList(nodes, eachNodeEmitFn) { + var currentWriterPos = writer.getTextPos(); + for (var i = 0, n = nodes.length; i < n; i++) { + if (currentWriterPos !== writer.getTextPos()) { + write(", "); + } + currentWriterPos = writer.getTextPos(); + eachNodeEmitFn(nodes[i]); + } + } + function emitSourceTextOfNode(node) { + write(getSourceTextOfLocalNode(node)); + } + function emitSourceFile(node) { + currentSourceFile = node; + enclosingDeclaration = node; + emitLines(node.statements); + } + function emitExportAssignment(node) { + write("export = "); + emitSourceTextOfNode(node.exportName); + write(";"); + writeLine(); + } + function emitDeclarationFlags(node) { + if (node.flags & 64 /* Static */) { + if (node.flags & 32 /* Private */) { + write("private "); + } + write("static "); + } + else { + if (node.flags & 32 /* Private */) { + write("private "); + } + else if (node.parent === currentSourceFile) { + if (node.flags & 1 /* Export */) { + write("export "); + } + if (node.kind !== 170 /* InterfaceDeclaration */) { + write("declare "); + } + } + } + } + function emitImportDeclaration(node) { + if (resolver.isDeclarationVisible(node)) { + if (node.flags & 1 /* Export */) { + write("export "); + } + write("import "); + emitSourceTextOfNode(node.name); + write(" = "); + if (node.entityName) { + emitSourceTextOfNode(node.entityName); + write(";"); + } + else { + write("require("); + emitSourceTextOfNode(node.externalModuleName); + write(");"); + } + writeLine(); + } + } + function emitModuleDeclaration(node) { + if (resolver.isDeclarationVisible(node)) { + emitDeclarationFlags(node); + write("module "); + emitSourceTextOfNode(node.name); + while (node.body.kind !== 173 /* ModuleBlock */) { + node = node.body; + write("."); + emitSourceTextOfNode(node.name); + } + var prevEnclosingDeclaration = enclosingDeclaration; + enclosingDeclaration = node; + write(" {"); + writeLine(); + increaseIndent(); + emitLines(node.body.statements); + decreaseIndent(); + write("}"); + writeLine(); + enclosingDeclaration = prevEnclosingDeclaration; + } + } + function emitEnumDeclaration(node) { + if (resolver.isDeclarationVisible(node)) { + emitDeclarationFlags(node); + write("enum "); + emitSourceTextOfNode(node.name); + write(" {"); + writeLine(); + increaseIndent(); + emitLines(node.members); + decreaseIndent(); + write("}"); + writeLine(); + } + } + function emitEnumMemberDeclaration(node) { + emitSourceTextOfNode(node.name); + var enumMemberValue = resolver.getEnumMemberValue(node); + if (enumMemberValue !== undefined) { + write(" = "); + write(enumMemberValue.toString()); + } + write(","); + writeLine(); + } + function emitTypeParameters(typeParameters) { + function emitTypeParameter(node) { + emitSourceTextOfNode(node.name); + if (node.constraint) { + write(" extends "); + resolver.writeTypeAtLocation(node.constraint, enclosingDeclaration, 0 /* None */, writer); + } + } + if (typeParameters) { + write("<"); + emitCommaList(typeParameters, emitTypeParameter); + write(">"); + } + } + function emitHeritageClause(typeReferences, isImplementsList) { + function emitTypeOfTypeReference(node) { + resolver.writeTypeAtLocation(node, enclosingDeclaration, 1 /* WriteArrayAsGenericType */, writer); + } + if (typeReferences) { + write(isImplementsList ? " implements " : " extends "); + emitCommaList(typeReferences, emitTypeOfTypeReference); + } + } + function emitClassDeclaration(node) { + function emitParameterProperties(constructorDeclaration) { + if (constructorDeclaration) { + ts.forEach(constructorDeclaration.parameters, function (param) { + if (param.flags & (16 /* Public */ | 32 /* Private */)) { + emitPropertyDeclaration(param); + } + }); + } + } + if (resolver.isDeclarationVisible(node)) { + emitDeclarationFlags(node); + write("class "); + emitSourceTextOfNode(node.name); + var prevEnclosingDeclaration = enclosingDeclaration; + enclosingDeclaration = node; + emitTypeParameters(node.typeParameters); + if (node.baseType) { + emitHeritageClause([node.baseType], false); + } + emitHeritageClause(node.implementedTypes, true); + write(" {"); + writeLine(); + increaseIndent(); + emitParameterProperties(getFirstConstructorWithBody(node)); + emitLines(node.members); + decreaseIndent(); + write("}"); + writeLine(); + enclosingDeclaration = prevEnclosingDeclaration; + } + } + function emitInterfaceDeclaration(node) { + if (resolver.isDeclarationVisible(node)) { + emitDeclarationFlags(node); + write("interface "); + emitSourceTextOfNode(node.name); + var prevEnclosingDeclaration = enclosingDeclaration; + enclosingDeclaration = node; + emitTypeParameters(node.typeParameters); + emitHeritageClause(node.baseTypes, false); + write(" {"); + writeLine(); + increaseIndent(); + emitLines(node.members); + decreaseIndent(); + write("}"); + writeLine(); + enclosingDeclaration = prevEnclosingDeclaration; + } + } + function emitPropertyDeclaration(node) { + emitDeclarationFlags(node); + emitVariableDeclaration(node); + write(";"); + writeLine(); + } + function emitVariableDeclaration(node) { + if (node.kind !== 166 /* VariableDeclaration */ || resolver.isDeclarationVisible(node)) { + emitSourceTextOfNode(node.name); + if (node.kind === 115 /* Property */ && (node.flags & 4 /* QuestionMark */)) { + write("?"); + } + if (!(node.flags & 32 /* Private */)) { + write(": "); + resolver.writeTypeAtLocation(node, enclosingDeclaration, 0 /* None */, writer); + } + } + } + function emitVariableStatement(node) { + var hasDeclarationWithEmit = ts.forEach(node.declarations, function (varDeclaration) { return resolver.isDeclarationVisible(varDeclaration); }); + if (hasDeclarationWithEmit) { + emitDeclarationFlags(node); + write("var "); + emitCommaList(node.declarations, emitVariableDeclaration); + write(";"); + writeLine(); + } + } + function emitAccessorDeclaration(node) { + var accessors = getAllAccessorDeclarations(node.parent, node); + if (node === accessors.firstAccessor) { + emitDeclarationFlags(node); + emitSourceTextOfNode(node.name); + if (!(node.flags & 32 /* Private */)) { + write(": "); + resolver.writeTypeAtLocation(node, enclosingDeclaration, 0 /* None */, writer); + } + write(";"); + writeLine(); + } + } + function emitFunctionDeclaration(node) { + if ((node.kind !== 167 /* FunctionDeclaration */ || resolver.isDeclarationVisible(node)) && !resolver.isImplementationOfOverload(node)) { + emitDeclarationFlags(node); + if (node.kind === 167 /* FunctionDeclaration */) { + write("function "); + emitSourceTextOfNode(node.name); + } + else if (node.kind === 117 /* Constructor */) { + write("constructor"); + } + else { + emitSourceTextOfNode(node.name); + if (node.flags & 4 /* QuestionMark */) { + write("?"); + } + } + emitSignatureDeclaration(node); + } + } + function emitConstructSignatureDeclaration(node) { + write("new "); + emitSignatureDeclaration(node); + } + function emitSignatureDeclaration(node) { + emitTypeParameters(node.typeParameters); + if (node.kind === 122 /* IndexSignature */) { + write("["); + } + else { + write("("); + } + emitCommaList(node.parameters, emitParameterDeclaration); + if (node.kind === 122 /* IndexSignature */) { + write("]"); + } + else { + write(")"); + } + if (node.kind !== 117 /* Constructor */ && !(node.flags & 32 /* Private */)) { + write(": "); + resolver.writeReturnTypeOfSignatureDeclaration(node, enclosingDeclaration, 0 /* None */, writer); + } + write(";"); + writeLine(); + } + function emitParameterDeclaration(node) { + if (node.flags & 8 /* Rest */) { + write("..."); + } + emitSourceTextOfNode(node.name); + if (node.initializer || (node.flags & 4 /* QuestionMark */)) { + write("?"); + } + if (!(node.parent.flags & 32 /* Private */)) { + write(": "); + resolver.writeTypeAtLocation(node, enclosingDeclaration, 0 /* None */, writer); + } + } + function emitNode(node) { + switch (node.kind) { + case 117 /* Constructor */: + case 167 /* FunctionDeclaration */: + case 116 /* Method */: + return emitFunctionDeclaration(node); + case 121 /* ConstructSignature */: + return emitConstructSignatureDeclaration(node); + case 120 /* CallSignature */: + case 122 /* IndexSignature */: + return emitSignatureDeclaration(node); + case 118 /* GetAccessor */: + case 119 /* SetAccessor */: + return emitAccessorDeclaration(node); + case 144 /* VariableStatement */: + return emitVariableStatement(node); + case 115 /* Property */: + return emitPropertyDeclaration(node); + case 170 /* InterfaceDeclaration */: + return emitInterfaceDeclaration(node); + case 169 /* ClassDeclaration */: + return emitClassDeclaration(node); + case 176 /* EnumMember */: + return emitEnumMemberDeclaration(node); + case 171 /* EnumDeclaration */: + return emitEnumDeclaration(node); + case 172 /* ModuleDeclaration */: + return emitModuleDeclaration(node); + case 174 /* ImportDeclaration */: + return emitImportDeclaration(node); + case 175 /* ExportAssignment */: + return emitExportAssignment(node); + case 177 /* SourceFile */: + return emitSourceFile(node); + } + } + function resolveScriptReference(sourceFile, reference) { + var referenceFileName = compilerOptions.noResolve ? reference.filename : ts.normalizePath(ts.combinePaths(ts.getDirectoryPath(sourceFile.filename), reference.filename)); + return program.getSourceFile(referenceFileName); + } + var referencePathsOutput = ""; + function writeReferencePath(referencedFile) { + var declFileName = referencedFile.flags & 512 /* DeclarationFile */ ? referencedFile.filename : shouldEmitToOwnFile(referencedFile) ? getOwnEmitOutputFilePath(referencedFile, ".d.ts") : ts.getModuleNameFromFilename(compilerOptions.out) + ".d.ts"; + declFileName = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizeSlashes(jsFilePath)), declFileName, compilerHost.getCurrentDirectory(), false); + referencePathsOutput += "/// " + newLine; + } + if (root) { + var addedGlobalFileReference = false; + ts.forEach(root.referencedFiles, function (fileReference) { + var referencedFile = resolveScriptReference(root, fileReference); + if ((referencedFile.flags & 512 /* DeclarationFile */) || shouldEmitToOwnFile(referencedFile) || !addedGlobalFileReference) { + writeReferencePath(referencedFile); + if (!isExternalModuleOrDeclarationFile(referencedFile)) { + addedGlobalFileReference = true; + } + } + }); + emitNode(root); + } + else { + var emittedReferencedFiles = []; + ts.forEach(program.getSourceFiles(), function (sourceFile) { + if (!isExternalModuleOrDeclarationFile(sourceFile)) { + ts.forEach(sourceFile.referencedFiles, function (fileReference) { + var referencedFile = resolveScriptReference(sourceFile, fileReference); + if (isExternalModuleOrDeclarationFile(referencedFile) && !ts.contains(emittedReferencedFiles, referencedFile)) { + writeReferencePath(referencedFile); + emittedReferencedFiles.push(referencedFile); + } + }); + emitNode(sourceFile); + } + }); + } + writeFile(ts.getModuleNameFromFilename(jsFilePath) + ".d.ts", referencePathsOutput + writer.getText()); + } + var shouldEmitDeclarations = resolver.shouldEmitDeclarations(); + function emitFile(jsFilePath, sourceFile) { + emitJavaScript(jsFilePath, sourceFile); + if (shouldEmitDeclarations) { + emitDeclarations(jsFilePath, sourceFile); + } + } + ts.forEach(program.getSourceFiles(), function (sourceFile) { + if (shouldEmitToOwnFile(sourceFile)) { + var jsFilePath = getOwnEmitOutputFilePath(sourceFile, ".js"); + emitFile(jsFilePath, sourceFile); + } + }); + if (compilerOptions.out) { + emitFile(compilerOptions.out); + } + return { + errors: diagnostics, + sourceMaps: sourceMapDataList + }; + } + ts.emitFiles = emitFiles; +})(ts || (ts = {})); +var ts; +(function (ts) { + var nextSymbolId = 1; + var nextNodeId = 1; + var nextMergeId = 1; + function createTypeChecker(program) { + var Symbol = ts.objectAllocator.getSymbolConstructor(); + var Type = ts.objectAllocator.getTypeConstructor(); + var Signature = ts.objectAllocator.getSignatureConstructor(); + var typeCount = 0; + var emptyArray = []; + var emptySymbols = {}; + var undefinedSymbol = createSymbol(2 /* Property */ | 33554432 /* Transient */, "undefined"); + var argumentsSymbol = createSymbol(2 /* Property */ | 33554432 /* Transient */, "arguments"); + var unknownSymbol = createSymbol(2 /* Property */ | 33554432 /* Transient */, "unknown"); + var resolvingSymbol = createSymbol(33554432 /* Transient */, "__resolving__"); + var anyType = createIntrinsicType(1 /* Any */, "any"); + var stringType = createIntrinsicType(2 /* String */, "string"); + var numberType = createIntrinsicType(4 /* Number */, "number"); + var booleanType = createIntrinsicType(8 /* Boolean */, "boolean"); + var voidType = createIntrinsicType(16 /* Void */, "void"); + var undefinedType = createIntrinsicType(32 /* Undefined */, "undefined"); + var nullType = createIntrinsicType(64 /* Null */, "null"); + var unknownType = createIntrinsicType(1 /* Any */, "unknown"); + var resolvingType = createIntrinsicType(1 /* Any */, "__resolving__"); + var emptyObjectType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); + var anyFunctionType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); + var noConstraintType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); + var globals = {}; + var globalObjectType; + var globalFunctionType; + var globalArrayType; + var globalStringType; + var globalNumberType; + var globalBooleanType; + var globalRegExpType; + var stringLiteralTypes = {}; + var emitExtends = false; + var mergedSymbols = []; + var symbolLinks = []; + var nodeLinks = []; + var potentialThisCollisions = []; + var diagnostics = []; + var diagnosticsModified = false; + var checker = { + getProgram: function () { return program; }, + getDiagnostics: getDiagnostics, + getGlobalDiagnostics: getGlobalDiagnostics, + getNodeCount: function () { return ts.sum(program.getSourceFiles(), "nodeCount"); }, + getIdentifierCount: function () { return ts.sum(program.getSourceFiles(), "identifierCount"); }, + getSymbolCount: function () { return ts.sum(program.getSourceFiles(), "symbolCount"); }, + getTypeCount: function () { return typeCount; }, + checkProgram: checkProgram, + emitFiles: invokeEmitter, + getSymbolOfNode: getSymbolOfNode, + getParentOfSymbol: getParentOfSymbol, + getTypeOfSymbol: getTypeOfSymbol, + getDeclaredTypeOfSymbol: getDeclaredTypeOfSymbol, + getPropertiesOfType: getPropertiesOfType, + getSignaturesOfType: getSignaturesOfType, + getIndexTypeOfType: getIndexTypeOfType, + getReturnTypeOfSignature: getReturnTypeOfSignature, + resolveEntityName: resolveEntityName, + getSymbolsInScope: getSymbolsInScope, + getSymbolOfIdentifier: getSymbolOfIdentifier, + getTypeOfExpression: getTypeOfExpression, + typeToString: typeToString, + symbolToString: symbolToString, + getAugmentedPropertiesOfApparentType: getAugmentedPropertiesOfApparentType + }; + function addDiagnostic(diagnostic) { + diagnostics.push(diagnostic); + diagnosticsModified = true; + } + function error(location, message, arg0, arg1, arg2) { + var diagnostic = location ? ts.createDiagnosticForNode(location, message, arg0, arg1, arg2) : ts.createCompilerDiagnostic(message, arg0, arg1, arg2); + addDiagnostic(diagnostic); + } + function createSymbol(flags, name) { + return new Symbol(flags, name); + } + function getExcludedSymbolFlags(flags) { + var result = 0; + if (flags & 1 /* Variable */) + result |= ts.SymbolFlags.VariableExcludes; + if (flags & 2 /* Property */) + result |= ts.SymbolFlags.PropertyExcludes; + if (flags & 4 /* EnumMember */) + result |= ts.SymbolFlags.EnumMemberExcludes; + if (flags & 8 /* Function */) + result |= ts.SymbolFlags.FunctionExcludes; + if (flags & 16 /* Class */) + result |= ts.SymbolFlags.ClassExcludes; + if (flags & 32 /* Interface */) + result |= ts.SymbolFlags.InterfaceExcludes; + if (flags & 64 /* Enum */) + result |= ts.SymbolFlags.EnumExcludes; + if (flags & 128 /* ValueModule */) + result |= ts.SymbolFlags.ValueModuleExcludes; + if (flags & 2048 /* Method */) + result |= ts.SymbolFlags.MethodExcludes; + if (flags & 8192 /* GetAccessor */) + result |= ts.SymbolFlags.GetAccessorExcludes; + if (flags & 16384 /* SetAccessor */) + result |= ts.SymbolFlags.SetAccessorExcludes; + if (flags & 262144 /* TypeParameter */) + result |= ts.SymbolFlags.TypeParameterExcludes; + if (flags & 4194304 /* Import */) + result |= ts.SymbolFlags.ImportExcludes; + return result; + } + function recordMergedSymbol(target, source) { + if (!source.mergeId) + source.mergeId = nextMergeId++; + mergedSymbols[source.mergeId] = target; + } + function cloneSymbol(symbol) { + var result = createSymbol(symbol.flags | 16777216 /* Merged */, symbol.name); + result.declarations = symbol.declarations.slice(0); + result.parent = symbol.parent; + if (symbol.valueDeclaration) + result.valueDeclaration = symbol.valueDeclaration; + if (symbol.members) + result.members = cloneSymbolTable(symbol.members); + if (symbol.exports) + result.exports = cloneSymbolTable(symbol.exports); + recordMergedSymbol(result, symbol); + return result; + } + function extendSymbol(target, source) { + if (!(target.flags & getExcludedSymbolFlags(source.flags))) { + target.flags |= source.flags; + if (!target.valueDeclaration && source.valueDeclaration) + target.valueDeclaration = source.valueDeclaration; + ts.forEach(source.declarations, function (node) { + target.declarations.push(node); + }); + if (source.members) { + if (!target.members) + target.members = {}; + extendSymbolTable(target.members, source.members); + } + if (source.exports) { + if (!target.exports) + target.exports = {}; + extendSymbolTable(target.exports, source.exports); + } + recordMergedSymbol(target, source); + } + else { + ts.forEach(source.declarations, function (node) { + error(node.name ? node.name : node, ts.Diagnostics.Duplicate_identifier_0, symbolToString(source)); + }); + } + } + function cloneSymbolTable(symbolTable) { + var result = {}; + for (var id in symbolTable) { + if (ts.hasProperty(symbolTable, id)) { + result[id] = symbolTable[id]; + } + } + return result; + } + function extendSymbolTable(target, source) { + for (var id in source) { + if (ts.hasProperty(source, id)) { + if (!ts.hasProperty(target, id)) { + target[id] = source[id]; + } + else { + var symbol = target[id]; + if (!(symbol.flags & 16777216 /* Merged */)) { + target[id] = symbol = cloneSymbol(symbol); + } + extendSymbol(symbol, source[id]); + } + } + } + } + function getSymbolLinks(symbol) { + if (symbol.flags & 33554432 /* Transient */) + return symbol; + if (!symbol.id) + symbol.id = nextSymbolId++; + return symbolLinks[symbol.id] || (symbolLinks[symbol.id] = {}); + } + function getNodeLinks(node) { + if (!node.id) + node.id = nextNodeId++; + return nodeLinks[node.id] || (nodeLinks[node.id] = {}); + } + function getSourceFile(node) { + return getAncestor(node, 177 /* SourceFile */); + } + function isGlobalSourceFile(node) { + return node.kind === 177 /* SourceFile */ && !ts.isExternalModule(node); + } + function getSymbol(symbols, name, meaning) { + if (meaning && ts.hasProperty(symbols, name)) { + var symbol = symbols[name]; + ts.Debug.assert((symbol.flags & 8388608 /* Instantiated */) === 0, "Should never get an instantiated symbol here."); + if (symbol.flags & meaning) { + return symbol; + } + if (symbol.flags & 4194304 /* Import */) { + var target = resolveImport(symbol); + if (target === unknownSymbol || target.flags & meaning) { + return symbol; + } + } + } + } + function resolveName(location, name, meaning, nameNotFoundMessage, nameArg) { + var errorLocation = location; + var result; + var lastLocation; + var memberWithInitializerThatReferencesIdentifierFromConstructor; + function returnResolvedSymbol(s) { + if (s && memberWithInitializerThatReferencesIdentifierFromConstructor) { + var propertyName = memberWithInitializerThatReferencesIdentifierFromConstructor.name; + error(errorLocation, ts.Diagnostics.Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor, ts.identifierToString(propertyName), nameArg); + return undefined; + } + if (!s && nameNotFoundMessage) { + error(errorLocation, nameNotFoundMessage, nameArg); + } + return s; + } + while (location) { + if (location.locals && !isGlobalSourceFile(location)) { + if (result = getSymbol(location.locals, name, meaning)) { + return returnResolvedSymbol(result); + } + } + switch (location.kind) { + case 177 /* SourceFile */: + if (!ts.isExternalModule(location)) + break; + case 172 /* ModuleDeclaration */: + if (result = getSymbol(getSymbolOfNode(location).exports, name, meaning & ts.SymbolFlags.ModuleMember)) { + return returnResolvedSymbol(result); + } + break; + case 171 /* EnumDeclaration */: + if (result = getSymbol(getSymbolOfNode(location).exports, name, meaning & 4 /* EnumMember */)) { + return returnResolvedSymbol(result); + } + break; + case 115 /* Property */: + if (location.parent.kind === 169 /* ClassDeclaration */ && !(location.flags & 64 /* Static */)) { + var ctor = findConstructorDeclaration(location.parent); + if (ctor && ctor.locals) { + if (getSymbol(ctor.locals, name, meaning & ts.SymbolFlags.Value)) { + memberWithInitializerThatReferencesIdentifierFromConstructor = location; + } + } + } + break; + case 169 /* ClassDeclaration */: + case 170 /* InterfaceDeclaration */: + if (result = getSymbol(getSymbolOfNode(location).members, name, meaning & ts.SymbolFlags.Type)) { + if (lastLocation && lastLocation.flags & 64 /* Static */) { + error(errorLocation, ts.Diagnostics.Static_members_cannot_reference_class_type_parameters); + return undefined; + } + else { + return returnResolvedSymbol(result); + } + } + break; + case 116 /* Method */: + case 117 /* Constructor */: + case 118 /* GetAccessor */: + case 119 /* SetAccessor */: + case 167 /* FunctionDeclaration */: + case 137 /* ArrowFunction */: + if (name === "arguments") { + return returnResolvedSymbol(argumentsSymbol); + } + break; + case 136 /* FunctionExpression */: + if (name === "arguments") { + return returnResolvedSymbol(argumentsSymbol); + } + var id = location.name; + if (id && name === id.text) { + return returnResolvedSymbol(location.symbol); + } + break; + case 163 /* CatchBlock */: + var id = location.variable; + if (name === id.text) { + return returnResolvedSymbol(location.variable.symbol); + } + break; + } + lastLocation = location; + location = location.parent; + } + if (result = getSymbol(globals, name, meaning)) { + return returnResolvedSymbol(result); + } + return returnResolvedSymbol(undefined); + } + function resolveImport(symbol) { + ts.Debug.assert((symbol.flags & 4194304 /* Import */) !== 0, "Should only get Imports here."); + var links = getSymbolLinks(symbol); + if (!links.target) { + links.target = resolvingSymbol; + var node = getDeclarationOfKind(symbol, 174 /* ImportDeclaration */); + var target = node.externalModuleName ? resolveExternalModuleName(node, node.externalModuleName) : resolveEntityName(node, node.entityName, node.entityName.kind === 112 /* QualifiedName */ ? ts.SymbolFlags.Value | ts.SymbolFlags.Type | ts.SymbolFlags.Namespace : ts.SymbolFlags.Namespace); + if (links.target === resolvingSymbol) { + links.target = target || unknownSymbol; + } + else { + error(node, ts.Diagnostics.Circular_definition_of_import_alias_0, symbolToString(symbol)); + } + } + else if (links.target === resolvingSymbol) { + links.target = unknownSymbol; + } + return links.target; + } + function getFullyQualifiedName(symbol) { + return symbol.parent ? getFullyQualifiedName(symbol.parent) + "." + symbolToString(symbol) : symbolToString(symbol); + } + function resolveEntityName(location, name, meaning) { + if (name.kind === 55 /* Identifier */) { + var symbol = resolveName(location, name.text, meaning, ts.Diagnostics.Cannot_find_name_0, ts.identifierToString(name)); + if (!symbol) { + return; + } + } + else if (name.kind === 112 /* QualifiedName */) { + var namespace = resolveEntityName(location, name.left, ts.SymbolFlags.Namespace); + if (!namespace || namespace === unknownSymbol || name.right.kind === 111 /* Missing */) + return; + var symbol = getSymbol(namespace.exports, name.right.text, meaning); + if (!symbol) { + error(location, ts.Diagnostics.Module_0_has_no_exported_member_1, getFullyQualifiedName(namespace), ts.identifierToString(name.right)); + return; + } + } + else { + return; + } + ts.Debug.assert((symbol.flags & 8388608 /* Instantiated */) === 0, "Should never get an instantiated symbol here."); + return symbol.flags & meaning ? symbol : resolveImport(symbol); + } + function isExternalModuleNameRelative(moduleName) { + return moduleName.substr(0, 2) === "./" || moduleName.substr(0, 3) === "../" || moduleName.substr(0, 2) === ".\\" || moduleName.substr(0, 3) === "..\\"; + } + function resolveExternalModuleName(location, moduleLiteral) { + var searchPath = ts.getDirectoryPath(getSourceFile(location).filename); + var moduleName = moduleLiteral.text; + if (!moduleName) + return; + var isRelative = isExternalModuleNameRelative(moduleName); + if (!isRelative) { + var symbol = getSymbol(globals, '"' + moduleName + '"', 128 /* ValueModule */); + if (symbol) { + return getResolvedExportSymbol(symbol); + } + } + while (true) { + var filename = ts.normalizePath(ts.combinePaths(searchPath, moduleName)); + var sourceFile = program.getSourceFile(filename + ".ts") || program.getSourceFile(filename + ".d.ts"); + if (sourceFile || isRelative) + break; + var parentPath = ts.getDirectoryPath(searchPath); + if (parentPath === searchPath) + break; + searchPath = parentPath; + } + if (sourceFile) { + if (sourceFile.symbol) { + return getResolvedExportSymbol(sourceFile.symbol); + } + error(moduleLiteral, ts.Diagnostics.File_0_is_not_an_external_module, sourceFile.filename); + return; + } + error(moduleLiteral, ts.Diagnostics.Cannot_find_external_module_0, moduleName); + } + function getResolvedExportSymbol(moduleSymbol) { + var symbol = getExportAssignmentSymbol(moduleSymbol); + if (symbol) { + if (symbol.flags & (ts.SymbolFlags.Value | ts.SymbolFlags.Type | ts.SymbolFlags.Namespace)) { + return symbol; + } + if (symbol.flags & 4194304 /* Import */) { + return resolveImport(symbol); + } + } + return moduleSymbol; + } + function getExportAssignmentSymbol(symbol) { + checkTypeOfExportAssignmentSymbol(symbol); + return symbol.exportAssignSymbol === unknownSymbol ? undefined : symbol.exportAssignSymbol; + } + function checkTypeOfExportAssignmentSymbol(containerSymbol) { + if (!containerSymbol.exportAssignSymbol) { + var exportInformation = collectExportInformationForSourceFileOrModule(containerSymbol); + if (exportInformation.exportAssignments.length) { + if (exportInformation.exportAssignments.length > 1) { + ts.forEach(exportInformation.exportAssignments, function (node) { return error(node, ts.Diagnostics.A_module_cannot_have_more_than_one_export_assignment); }); + } + var node = exportInformation.exportAssignments[0]; + if (exportInformation.hasExportedMember) { + error(node, ts.Diagnostics.An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements); + } + if (node.exportName.text) { + var meaning = ts.SymbolFlags.Value | ts.SymbolFlags.Type | ts.SymbolFlags.Namespace; + var exportSymbol = resolveName(node, node.exportName.text, meaning, ts.Diagnostics.Cannot_find_name_0, ts.identifierToString(node.exportName)); + } + } + containerSymbol.exportAssignSymbol = exportSymbol || unknownSymbol; + } + } + function collectExportInformationForSourceFileOrModule(symbol) { + var seenExportedMember = false; + var result = []; + ts.forEach(symbol.declarations, function (declaration) { + var block = (declaration.kind === 177 /* SourceFile */ ? declaration : declaration.body); + ts.forEach(block.statements, function (node) { + if (node.kind === 175 /* ExportAssignment */) { + result.push(node); + } + else { + seenExportedMember = seenExportedMember || (node.flags & 1 /* Export */) !== 0; + } + }); + }); + return { + hasExportedMember: seenExportedMember, + exportAssignments: result + }; + } + function getMergedSymbol(symbol) { + var merged; + return symbol && symbol.mergeId && (merged = mergedSymbols[symbol.mergeId]) ? merged : symbol; + } + function getSymbolOfNode(node) { + return getMergedSymbol(node.symbol); + } + function getParentOfSymbol(symbol) { + return getMergedSymbol(symbol.parent); + } + function getExportSymbolOfValueSymbolIfExported(symbol) { + return symbol && (symbol.flags & 524288 /* ExportValue */) !== 0 ? getMergedSymbol(symbol.exportSymbol) : symbol; + } + function symbolIsValue(symbol) { + if (symbol.flags & ts.SymbolFlags.Value) { + return true; + } + if (symbol.flags & 4194304 /* Import */) { + return (resolveImport(symbol).flags & ts.SymbolFlags.Value) !== 0; + } + if (symbol.flags & 8388608 /* Instantiated */) { + return (getSymbolLinks(symbol).target.flags & ts.SymbolFlags.Value) !== 0; + } + return false; + } + function getDeclarationOfKind(symbol, kind) { + var declarations = symbol.declarations; + for (var i = 0; i < declarations.length; i++) { + var declaration = declarations[i]; + if (declaration.kind === kind) { + return declaration; + } + } + return undefined; + } + function findConstructorDeclaration(node) { + var members = node.members; + for (var i = 0; i < members.length; i++) { + var member = members[i]; + if (member.kind === 117 /* Constructor */ && member.body) { + return member; + } + } + } + function createType(flags) { + var result = new Type(checker, flags); + result.id = typeCount++; + return result; + } + function createIntrinsicType(kind, intrinsicName) { + var type = createType(kind); + type.intrinsicName = intrinsicName; + return type; + } + function createObjectType(kind, symbol) { + var type = createType(kind); + type.symbol = symbol; + return type; + } + function isReservedMemberName(name) { + return name.charCodeAt(0) === 95 /* _ */ && name.charCodeAt(1) === 95 /* _ */ && name.charCodeAt(2) !== 95 /* _ */; + } + function getNamedMembers(members) { + var result; + for (var id in members) { + if (ts.hasProperty(members, id)) { + if (!isReservedMemberName(id)) { + if (!result) + result = []; + var symbol = members[id]; + if (symbolIsValue(symbol)) { + result.push(symbol); + } + } + } + } + return result || emptyArray; + } + function setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexType, numberIndexType) { + type.members = members; + type.properties = getNamedMembers(members); + type.callSignatures = callSignatures; + type.constructSignatures = constructSignatures; + if (stringIndexType) + type.stringIndexType = stringIndexType; + if (numberIndexType) + type.numberIndexType = numberIndexType; + return type; + } + function createAnonymousType(symbol, members, callSignatures, constructSignatures, stringIndexType, numberIndexType) { + return setObjectTypeMembers(createObjectType(8192 /* Anonymous */, symbol), members, callSignatures, constructSignatures, stringIndexType, numberIndexType); + } + function isOptionalProperty(propertySymbol) { + if (propertySymbol.flags & 67108864 /* Prototype */) { + return false; + } + return (propertySymbol.valueDeclaration.flags & 4 /* QuestionMark */) && propertySymbol.valueDeclaration.kind !== 114 /* Parameter */; + } + function forEachSymbolTableInScope(enclosingDeclaration, callback) { + var result; + for (var location = enclosingDeclaration; location; location = location.parent) { + if (location.locals && !isGlobalSourceFile(location)) { + if (result = callback(location.locals)) { + return result; + } + } + switch (location.kind) { + case 177 /* SourceFile */: + if (!ts.isExternalModule(location)) { + break; + } + case 172 /* ModuleDeclaration */: + if (result = callback(getSymbolOfNode(location).exports)) { + return result; + } + break; + case 169 /* ClassDeclaration */: + case 170 /* InterfaceDeclaration */: + if (result = callback(getSymbolOfNode(location).members)) { + return result; + } + break; + } + } + return callback(globals); + } + function getAccessibleSymbol(symbol, enclosingDeclaration, meaning) { + function getAccessibleSymbolFromSymbolTable(symbols) { + function isAccessible(symbolFromSymbolTable, resolvedAliasSymbol) { + if (symbol === (resolvedAliasSymbol || symbolFromSymbolTable)) { + if (!needsQualification(symbolFromSymbolTable, enclosingDeclaration, meaning)) { + return true; + } + var accessibleParent = getAccessibleSymbol(symbolFromSymbolTable.parent, enclosingDeclaration, ts.SymbolFlags.Namespace); + return !!accessibleParent; + } + } + if (isAccessible(symbols[symbol.name])) { + return symbol; + } + return ts.forEachValue(symbols, function (symbolFromSymbolTable) { + if (symbolFromSymbolTable.flags & 4194304 /* Import */) { + if (isAccessible(symbolFromSymbolTable, resolveImport(symbolFromSymbolTable))) { + return symbolFromSymbolTable; + } + } + }); + } + if (symbol) { + return forEachSymbolTableInScope(enclosingDeclaration, getAccessibleSymbolFromSymbolTable); + } + } + function needsQualification(symbol, enclosingDeclaration, meaning) { + var qualify = false; + forEachSymbolTableInScope(enclosingDeclaration, function (symbolTable) { + if (!symbolTable[symbol.name]) { + return false; + } + var symbolFromSymbolTable = symbolTable[symbol.name]; + if (symbolFromSymbolTable === symbol) { + return true; + } + symbolFromSymbolTable = (symbolFromSymbolTable.flags & 4194304 /* Import */) ? resolveImport(symbolFromSymbolTable) : symbolFromSymbolTable; + if (symbolFromSymbolTable.flags & meaning) { + qualify = true; + return true; + } + return false; + }); + return qualify; + } + function symbolToString(symbol, enclosingDeclaration, meaning) { + function getSymbolName(symbol) { + if (symbol.declarations && symbol.declarations.length > 0) { + var declaration = symbol.declarations[0]; + if (declaration.name) { + return ts.identifierToString(declaration.name); + } + } + return symbol.name; + } + if (enclosingDeclaration && !(symbol.flags & ts.SymbolFlags.PropertyOrAccessor & ts.SymbolFlags.Signature & 4096 /* Constructor */ & 2048 /* Method */ & 262144 /* TypeParameter */)) { + var symbolName; + while (symbol) { + var isFirstName = !symbolName; + var meaningToLook = isFirstName ? meaning : ts.SymbolFlags.Namespace; + var accessibleSymbol = getAccessibleSymbol(symbol, enclosingDeclaration, meaningToLook); + symbolName = getSymbolName(accessibleSymbol || symbol) + (isFirstName ? "" : ("." + symbolName)); + if (accessibleSymbol && !needsQualification(accessibleSymbol, enclosingDeclaration, meaningToLook)) { + break; + } + symbol = accessibleSymbol ? accessibleSymbol.parent : symbol.parent; + } + return symbolName; + } + return getSymbolName(symbol); + } + function createSingleLineTextWriter() { + var result = ""; + return { + write: function (s) { + result += s; + }, + writeLine: function () { + result += " "; + }, + increaseIndent: function () { + }, + decreaseIndent: function () { + }, + getText: function () { + return result; + } + }; + } + function typeToString(type, enclosingDeclaration, flags) { + var stringWriter = createSingleLineTextWriter(); + writeTypeToTextWriter(type, enclosingDeclaration, flags, stringWriter); + return stringWriter.getText(); + } + function writeTypeToTextWriter(type, enclosingDeclaration, flags, writer) { + var typeStack; + return writeType(type, true); + function writeType(type, allowFunctionOrConstructorTypeLiteral) { + if (type.flags & ts.TypeFlags.Intrinsic) { + writer.write(type.intrinsicName); + } + else if (type.flags & 4096 /* Reference */) { + writeTypeReference(type); + } + else if (type.flags & (1024 /* Class */ | 2048 /* Interface */ | 128 /* Enum */ | 512 /* TypeParameter */)) { + writer.write(symbolToString(type.symbol, enclosingDeclaration, ts.SymbolFlags.Type)); + } + else if (type.flags & 8192 /* Anonymous */) { + writeAnonymousType(type, allowFunctionOrConstructorTypeLiteral); + } + else if (type.flags & 256 /* StringLiteral */) { + writer.write(type.text); + } + else { + writer.write("{ ... }"); + } + } + function writeTypeReference(type) { + if (type.target === globalArrayType && !(flags & 1 /* WriteArrayAsGenericType */)) { + writeType(type.typeArguments[0], false); + writer.write("[]"); + } + else { + writer.write(symbolToString(type.target.symbol, enclosingDeclaration, ts.SymbolFlags.Type)); + writer.write("<"); + for (var i = 0; i < type.typeArguments.length; i++) { + if (i > 0) { + writer.write(", "); + } + writeType(type.typeArguments[i], true); + } + writer.write(">"); + } + } + function writeAnonymousType(type, allowFunctionOrConstructorTypeLiteral) { + if (type.symbol && type.symbol.flags & (16 /* Class */ | 64 /* Enum */ | 128 /* ValueModule */)) { + writeTypeofSymbol(type); + } + else if (type.symbol && type.symbol.flags & (8 /* Function */ | 2048 /* Method */) && typeStack && ts.contains(typeStack, type)) { + writeTypeofSymbol(type); + } + else { + if (!typeStack) { + typeStack = []; + } + typeStack.push(type); + writeLiteralType(type, allowFunctionOrConstructorTypeLiteral); + typeStack.pop(); + } + } + function writeTypeofSymbol(type) { + writer.write("typeof "); + writer.write(symbolToString(type.symbol, enclosingDeclaration, ts.SymbolFlags.Value)); + } + function writeLiteralType(type, allowFunctionOrConstructorTypeLiteral) { + var resolved = resolveObjectTypeMembers(type); + if (!resolved.properties.length && !resolved.stringIndexType && !resolved.numberIndexType) { + if (!resolved.callSignatures.length && !resolved.constructSignatures.length) { + writer.write("{}"); + return; + } + if (allowFunctionOrConstructorTypeLiteral) { + if (resolved.callSignatures.length === 1 && !resolved.constructSignatures.length) { + writeSignature(resolved.callSignatures[0], true); + return; + } + if (resolved.constructSignatures.length === 1 && !resolved.callSignatures.length) { + writer.write("new "); + writeSignature(resolved.constructSignatures[0], true); + return; + } + } + } + writer.write("{"); + writer.writeLine(); + writer.increaseIndent(); + for (var i = 0; i < resolved.callSignatures.length; i++) { + writeSignature(resolved.callSignatures[i]); + writer.write(";"); + writer.writeLine(); + } + for (var i = 0; i < resolved.constructSignatures.length; i++) { + writer.write("new "); + writeSignature(resolved.constructSignatures[i]); + writer.write(";"); + writer.writeLine(); + } + if (resolved.stringIndexType) { + writer.write("[x: string]: "); + writeType(resolved.stringIndexType, true); + writer.write(";"); + writer.writeLine(); + } + if (resolved.numberIndexType) { + writer.write("[x: number]: "); + writeType(resolved.numberIndexType, true); + writer.write(";"); + writer.writeLine(); + } + for (var i = 0; i < resolved.properties.length; i++) { + var p = resolved.properties[i]; + var t = getTypeOfSymbol(p); + if (p.flags & (8 /* Function */ | 2048 /* Method */) && !getPropertiesOfType(t).length) { + var signatures = getSignaturesOfType(t, 0 /* Call */); + for (var j = 0; j < signatures.length; j++) { + writer.write(symbolToString(p)); + if (isOptionalProperty(p)) { + writer.write("?"); + } + writeSignature(signatures[j]); + writer.write(";"); + writer.writeLine(); + } + } + else { + writer.write(symbolToString(p)); + if (isOptionalProperty(p)) { + writer.write("?"); + } + writer.write(": "); + writeType(t, true); + writer.write(";"); + writer.writeLine(); + } + } + writer.decreaseIndent(); + writer.write("}"); + } + function writeSignature(signature, arrowStyle) { + if (signature.typeParameters) { + writer.write("<"); + for (var i = 0; i < signature.typeParameters.length; i++) { + if (i > 0) { + writer.write(", "); + } + var tp = signature.typeParameters[i]; + writer.write(symbolToString(tp.symbol)); + var constraint = getConstraintOfTypeParameter(tp); + if (constraint) { + writer.write(" extends "); + writeType(constraint, true); + } + } + writer.write(">"); + } + writer.write("("); + for (var i = 0; i < signature.parameters.length; i++) { + if (i > 0) { + writer.write(", "); + } + var p = signature.parameters[i]; + if (getDeclarationFlagsFromSymbol(p) & 8 /* Rest */) { + writer.write("..."); + } + writer.write(symbolToString(p)); + if (p.valueDeclaration.flags & 4 /* QuestionMark */ || p.valueDeclaration.initializer) { + writer.write("?"); + } + writer.write(": "); + writeType(getTypeOfSymbol(p), true); + } + writer.write(arrowStyle ? ") => " : "): "); + writeType(getReturnTypeOfSignature(signature), true); + } + } + function isDeclarationVisible(node) { + function getContainingExternalModule(node) { + for (; node; node = node.parent) { + if (node.kind === 172 /* ModuleDeclaration */) { + if (node.name.kind === 3 /* StringLiteral */) { + return node; + } + } + else if (node.kind === 177 /* SourceFile */) { + return ts.isExternalModule(node) ? node : undefined; + } + } + ts.Debug.fail("getContainingModule cant reach here"); + } + function isUsedInExportAssignment(node) { + var externalModule = getContainingExternalModule(node); + if (externalModule) { + var externalModuleSymbol = getSymbolOfNode(externalModule); + var exportAssignmentSymbol = getExportAssignmentSymbol(externalModuleSymbol); + var symbolOfNode = getSymbolOfNode(node); + if (exportAssignmentSymbol === symbolOfNode) { + return true; + } + if (exportAssignmentSymbol && !!(exportAssignmentSymbol.flags & 4194304 /* Import */)) { + var resolvedExportSymbol = resolveImport(exportAssignmentSymbol); + if (resolvedExportSymbol === symbolOfNode) { + return true; + } + return ts.forEach(resolvedExportSymbol.declarations, function (declaration) { + while (declaration) { + if (declaration === node) { + return true; + } + declaration = declaration.parent; + } + }); + } + } + } + function determineIfDeclarationIsVisible() { + switch (node.kind) { + case 166 /* VariableDeclaration */: + if (!(node.flags & 1 /* Export */)) { + return isGlobalSourceFile(node.parent.parent) || isUsedInExportAssignment(node); + } + return isDeclarationVisible(node.parent.parent); + case 172 /* ModuleDeclaration */: + case 169 /* ClassDeclaration */: + case 170 /* InterfaceDeclaration */: + case 167 /* FunctionDeclaration */: + case 171 /* EnumDeclaration */: + case 174 /* ImportDeclaration */: + if (!(node.flags & 1 /* Export */)) { + return isGlobalSourceFile(node.parent) || isUsedInExportAssignment(node); + } + return isDeclarationVisible(node.parent); + case 115 /* Property */: + case 116 /* Method */: + if (node.flags & 32 /* Private */) { + return false; + } + case 117 /* Constructor */: + case 121 /* ConstructSignature */: + case 120 /* CallSignature */: + case 122 /* IndexSignature */: + case 114 /* Parameter */: + case 173 /* ModuleBlock */: + return isDeclarationVisible(node.parent); + case 177 /* SourceFile */: + return true; + default: + ts.Debug.fail("isDeclarationVisible unknown: SyntaxKind: " + ts.SyntaxKind[node.kind]); + } + } + if (node) { + var links = getNodeLinks(node); + if (links.isVisible === undefined) { + links.isVisible = determineIfDeclarationIsVisible(); + } + return links.isVisible; + } + } + function getApparentType(type) { + if (type.flags & 512 /* TypeParameter */) { + do { + type = getConstraintOfTypeParameter(type); + } while (type && type.flags & 512 /* TypeParameter */); + if (!type) + type = emptyObjectType; + } + if (type.flags & ts.TypeFlags.StringLike) { + type = globalStringType; + } + else if (type.flags & ts.TypeFlags.NumberLike) { + type = globalNumberType; + } + else if (type.flags & 8 /* Boolean */) { + type = globalBooleanType; + } + return type; + } + function getTypeOfPrototypeProperty(prototype) { + var classType = getDeclaredTypeOfSymbol(prototype.parent); + return classType.typeParameters ? createTypeReference(classType, ts.map(classType.typeParameters, function (_) { return anyType; })) : classType; + } + function getTypeOfVariableDeclaration(declaration) { + var type; + if (declaration.parent.kind === 163 /* CatchBlock */ || declaration.parent.kind === 151 /* ForInStatement */) { + type = anyType; + } + else if (declaration.type) { + type = getTypeFromTypeNode(declaration.type); + } + else { + if (declaration.kind === 114 /* Parameter */ && declaration.parent.kind === 119 /* SetAccessor */) { + var getter = getDeclarationOfKind(declaration.parent.symbol, 118 /* GetAccessor */); + if (getter) { + type = getReturnTypeOfSignature(getSignatureFromDeclaration(getter)); + } + } + var unwidenedType; + if (!type) { + if (declaration.initializer) { + unwidenedType = checkAndMarkExpression(declaration.initializer); + type = getWidenedType(unwidenedType); + } + else if (declaration.flags & 8 /* Rest */) { + type = createArrayType(anyType); + } + else { + type = anyType; + } + } + if (program.getCompilerOptions().noImplicitAny && shouldReportNoImplicitAnyOnVariableOrParameterOrProperty(declaration, type, unwidenedType)) { + reportNoImplicitAnyOnVariableOrParameterOrProperty(declaration, type); + } + } + return type; + function shouldReportNoImplicitAnyOnVariableOrParameterOrProperty(declaration, type, unwidenedType) { + if (type === unwidenedType) { + return false; + } + if (getInnermostTypeOfNestedArrayTypes(type) !== anyType) { + return false; + } + if (isPrivateWithinAmbient(declaration) || (declaration.kind === 114 /* Parameter */ && isPrivateWithinAmbient(declaration.parent))) { + return false; + } + return true; + } + function reportNoImplicitAnyOnVariableOrParameterOrProperty(declaration, type) { + var varName = ts.identifierToString(declaration.name); + var typeName = typeToString(type); + switch (declaration.kind) { + case 166 /* VariableDeclaration */: + error(declaration, ts.Diagnostics.Variable_0_implicitly_has_an_1_type, varName, typeName); + break; + case 115 /* Property */: + error(declaration, ts.Diagnostics.Member_0_implicitly_has_an_1_type, varName, typeName); + break; + case 114 /* Parameter */: + var funcDeclaration = declaration.parent; + if (declaration.flags & 8 /* Rest */) { + error(declaration, ts.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type, varName); + } + else { + error(declaration, ts.Diagnostics.Parameter_0_implicitly_has_an_1_type, varName, typeName); + } + break; + default: + ts.Debug.fail("Received a '" + ts.SyntaxKind[declaration.kind] + "', but expected '" + ts.SyntaxKind[166 /* VariableDeclaration */] + "', '" + ts.SyntaxKind[115 /* Property */] + "', or '" + ts.SyntaxKind[114 /* Parameter */] + "'.\r\n"); + } + } + } + function getTypeOfVariableOrParameterOrProperty(symbol) { + var links = getSymbolLinks(symbol); + if (!links.type) { + if (symbol.flags & 67108864 /* Prototype */) { + links.type = getTypeOfPrototypeProperty(symbol); + } + else { + links.type = resolvingType; + var type = getTypeOfVariableDeclaration(symbol.valueDeclaration); + if (links.type === resolvingType) { + links.type = type; + } + } + } + else if (links.type === resolvingType) { + links.type = anyType; + } + return links.type; + } + function getSetAccessorTypeAnnotationNode(accessor) { + return accessor && accessor.parameters.length > 0 && accessor.parameters[0].type; + } + function getAnnotatedAccessorType(accessor) { + if (accessor) { + if (accessor.kind === 118 /* GetAccessor */) { + return accessor.type && getTypeFromTypeNode(accessor.type); + } + else { + var setterTypeAnnotation = getSetAccessorTypeAnnotationNode(accessor); + return setterTypeAnnotation && getTypeFromTypeNode(setterTypeAnnotation); + } + } + return undefined; + } + function getTypeOfAccessors(symbol) { + var links = getSymbolLinks(symbol); + checkAndStoreTypeOfAccessors(symbol, links); + return links.type; + } + function checkAndStoreTypeOfAccessors(symbol, links) { + links = links || getSymbolLinks(symbol); + if (!links.type) { + links.type = resolvingType; + var getter = getDeclarationOfKind(symbol, 118 /* GetAccessor */); + var setter = getDeclarationOfKind(symbol, 119 /* SetAccessor */); + var type; + var getterReturnType = getAnnotatedAccessorType(getter); + if (getterReturnType) { + type = getterReturnType; + } + else { + var setterParameterType = getAnnotatedAccessorType(setter); + if (setterParameterType) { + type = setterParameterType; + } + else { + if (getter) { + type = getReturnTypeFromBody(getter); + } + else { + if (program.getCompilerOptions().noImplicitAny) { + error(setter, ts.Diagnostics.Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_type_annotation, symbol.name); + } + type = anyType; + } + } + } + if (links.type === resolvingType) { + links.type = type; + } + } + else if (links.type === resolvingType) { + links.type = anyType; + } + } + function getTypeOfFuncClassEnumModule(symbol) { + var links = getSymbolLinks(symbol); + if (!links.type) { + var type = links.type = createObjectType(8192 /* Anonymous */, symbol); + } + return links.type; + } + function getTypeOfEnumMember(symbol) { + var links = getSymbolLinks(symbol); + if (!links.type) { + links.type = getDeclaredTypeOfEnum(getParentOfSymbol(symbol)); + } + return links.type; + } + function getTypeOfImport(symbol) { + var links = getSymbolLinks(symbol); + if (!links.type) { + links.type = getTypeOfSymbol(resolveImport(symbol)); + } + return links.type; + } + function getTypeOfInstantiatedSymbol(symbol) { + var links = getSymbolLinks(symbol); + if (!links.type) { + links.type = instantiateType(getTypeOfSymbol(links.target), links.mapper); + } + return links.type; + } + function getTypeOfSymbol(symbol) { + if (symbol.flags & (1 /* Variable */ | 2 /* Property */)) { + return getTypeOfVariableOrParameterOrProperty(symbol); + } + if (symbol.flags & (8 /* Function */ | 2048 /* Method */ | 16 /* Class */ | 64 /* Enum */ | 128 /* ValueModule */)) { + return getTypeOfFuncClassEnumModule(symbol); + } + if (symbol.flags & 4 /* EnumMember */) { + return getTypeOfEnumMember(symbol); + } + if (symbol.flags & ts.SymbolFlags.Accessor) { + return getTypeOfAccessors(symbol); + } + if (symbol.flags & 4194304 /* Import */) { + return getTypeOfImport(symbol); + } + if (symbol.flags & 8388608 /* Instantiated */) { + return getTypeOfInstantiatedSymbol(symbol); + } + return unknownType; + } + function getTargetType(type) { + return type.flags & 4096 /* Reference */ ? type.target : type; + } + function hasBaseType(type, checkBase) { + return check(type); + function check(type) { + var target = getTargetType(type); + return target === checkBase || ts.forEach(target.baseTypes, check); + } + } + function getTypeParametersOfClassOrInterface(symbol) { + var result; + ts.forEach(symbol.declarations, function (node) { + if (node.kind === 170 /* InterfaceDeclaration */ || node.kind === 169 /* ClassDeclaration */) { + var declaration = node; + if (declaration.typeParameters && declaration.typeParameters.length) { + ts.forEach(declaration.typeParameters, function (node) { + var tp = getDeclaredTypeOfTypeParameter(getSymbolOfNode(node)); + if (!result) { + result = [tp]; + } + else if (!ts.contains(result, tp)) { + result.push(tp); + } + }); + } + } + }); + return result; + } + function getDeclaredTypeOfClass(symbol) { + var links = getSymbolLinks(symbol); + if (!links.declaredType) { + var type = links.declaredType = createObjectType(1024 /* Class */, symbol); + var typeParameters = getTypeParametersOfClassOrInterface(symbol); + if (typeParameters) { + type.flags |= 4096 /* Reference */; + type.typeParameters = typeParameters; + type.instantiations = {}; + type.instantiations[getTypeListId(type.typeParameters)] = type; + type.target = type; + type.typeArguments = type.typeParameters; + } + type.baseTypes = []; + var declaration = getDeclarationOfKind(symbol, 169 /* ClassDeclaration */); + if (declaration.baseType) { + var baseType = getTypeFromTypeReferenceNode(declaration.baseType); + if (baseType !== unknownType) { + if (getTargetType(baseType).flags & 1024 /* Class */) { + if (type !== baseType && !hasBaseType(baseType, type)) { + type.baseTypes.push(baseType); + } + else { + error(declaration, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, undefined, 1 /* WriteArrayAsGenericType */)); + } + } + else { + error(declaration.baseType, ts.Diagnostics.A_class_may_only_extend_another_class); + } + } + } + type.declaredProperties = getNamedMembers(symbol.members); + type.declaredCallSignatures = emptyArray; + type.declaredConstructSignatures = emptyArray; + type.declaredStringIndexType = getIndexTypeOfSymbol(symbol, 0 /* String */); + type.declaredNumberIndexType = getIndexTypeOfSymbol(symbol, 1 /* Number */); + } + return links.declaredType; + } + function getDeclaredTypeOfInterface(symbol) { + var links = getSymbolLinks(symbol); + if (!links.declaredType) { + var type = links.declaredType = createObjectType(2048 /* Interface */, symbol); + var typeParameters = getTypeParametersOfClassOrInterface(symbol); + if (typeParameters) { + type.flags |= 4096 /* Reference */; + type.typeParameters = typeParameters; + type.instantiations = {}; + type.instantiations[getTypeListId(type.typeParameters)] = type; + type.target = type; + type.typeArguments = type.typeParameters; + } + type.baseTypes = []; + ts.forEach(symbol.declarations, function (declaration) { + if (declaration.kind === 170 /* InterfaceDeclaration */ && declaration.baseTypes) { + ts.forEach(declaration.baseTypes, function (node) { + var baseType = getTypeFromTypeReferenceNode(node); + if (baseType !== unknownType) { + if (getTargetType(baseType).flags & (1024 /* Class */ | 2048 /* Interface */)) { + if (type !== baseType && !hasBaseType(baseType, type)) { + type.baseTypes.push(baseType); + } + else { + error(declaration, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, undefined, 1 /* WriteArrayAsGenericType */)); + } + } + else { + error(node, ts.Diagnostics.An_interface_may_only_extend_a_class_or_another_interface); + } + } + }); + } + }); + type.declaredProperties = getNamedMembers(symbol.members); + type.declaredCallSignatures = getSignaturesOfSymbol(symbol.members["__call"]); + type.declaredConstructSignatures = getSignaturesOfSymbol(symbol.members["__new"]); + type.declaredStringIndexType = getIndexTypeOfSymbol(symbol, 0 /* String */); + type.declaredNumberIndexType = getIndexTypeOfSymbol(symbol, 1 /* Number */); + } + return links.declaredType; + } + function getDeclaredTypeOfEnum(symbol) { + var links = getSymbolLinks(symbol); + if (!links.declaredType) { + var type = createType(128 /* Enum */); + type.symbol = symbol; + links.declaredType = type; + } + return links.declaredType; + } + function getDeclaredTypeOfTypeParameter(symbol) { + var links = getSymbolLinks(symbol); + if (!links.declaredType) { + var type = createType(512 /* TypeParameter */); + type.symbol = symbol; + if (!getDeclarationOfKind(symbol, 113 /* TypeParameter */).constraint) { + type.constraint = noConstraintType; + } + links.declaredType = type; + } + return links.declaredType; + } + function getDeclaredTypeOfImport(symbol) { + var links = getSymbolLinks(symbol); + if (!links.declaredType) { + links.declaredType = getDeclaredTypeOfSymbol(resolveImport(symbol)); + } + return links.declaredType; + } + function getDeclaredTypeOfSymbol(symbol) { + if (symbol.flags & 16 /* Class */) { + return getDeclaredTypeOfClass(symbol); + } + if (symbol.flags & 32 /* Interface */) { + return getDeclaredTypeOfInterface(symbol); + } + if (symbol.flags & 64 /* Enum */) { + return getDeclaredTypeOfEnum(symbol); + } + if (symbol.flags & 262144 /* TypeParameter */) { + return getDeclaredTypeOfTypeParameter(symbol); + } + if (symbol.flags & 4194304 /* Import */) { + return getDeclaredTypeOfImport(symbol); + } + ts.Debug.assert((symbol.flags & 8388608 /* Instantiated */) === 0); + return unknownType; + } + function createSymbolTable(symbols) { + var result = {}; + for (var i = 0; i < symbols.length; i++) { + var symbol = symbols[i]; + result[symbol.name] = symbol; + } + return result; + } + function createInstantiatedSymbolTable(symbols, mapper) { + var result = {}; + for (var i = 0; i < symbols.length; i++) { + var symbol = symbols[i]; + result[symbol.name] = instantiateSymbol(symbol, mapper); + } + return result; + } + function addInheritedMembers(symbols, baseSymbols) { + for (var i = 0; i < baseSymbols.length; i++) { + var s = baseSymbols[i]; + if (!ts.hasProperty(symbols, s.name)) { + symbols[s.name] = s; + } + } + } + function addInheritedSignatures(signatures, baseSignatures) { + if (baseSignatures) { + for (var i = 0; i < baseSignatures.length; i++) { + signatures.push(baseSignatures[i]); + } + } + } + function resolveClassOrInterfaceMembers(type) { + var members = type.symbol.members; + var callSignatures = type.declaredCallSignatures; + var constructSignatures = type.declaredConstructSignatures; + var stringIndexType = type.declaredStringIndexType; + var numberIndexType = type.declaredNumberIndexType; + if (type.baseTypes.length) { + members = createSymbolTable(type.declaredProperties); + ts.forEach(type.baseTypes, function (baseType) { + addInheritedMembers(members, getPropertiesOfType(baseType)); + callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(baseType, 0 /* Call */)); + constructSignatures = ts.concatenate(constructSignatures, getSignaturesOfType(baseType, 1 /* Construct */)); + stringIndexType = stringIndexType || getIndexTypeOfType(baseType, 0 /* String */); + numberIndexType = numberIndexType || getIndexTypeOfType(baseType, 1 /* Number */); + }); + } + setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexType, numberIndexType); + } + function resolveTypeReferenceMembers(type) { + var target = type.target; + var mapper = createTypeMapper(target.typeParameters, type.typeArguments); + var members = createInstantiatedSymbolTable(target.declaredProperties, mapper); + var callSignatures = instantiateList(target.declaredCallSignatures, mapper, instantiateSignature); + var constructSignatures = instantiateList(target.declaredConstructSignatures, mapper, instantiateSignature); + var stringIndexType = target.declaredStringIndexType ? instantiateType(target.declaredStringIndexType, mapper) : undefined; + var numberIndexType = target.declaredNumberIndexType ? instantiateType(target.declaredNumberIndexType, mapper) : undefined; + ts.forEach(target.baseTypes, function (baseType) { + var instantiatedBaseType = instantiateType(baseType, mapper); + addInheritedMembers(members, getPropertiesOfType(instantiatedBaseType)); + callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(instantiatedBaseType, 0 /* Call */)); + constructSignatures = ts.concatenate(constructSignatures, getSignaturesOfType(instantiatedBaseType, 1 /* Construct */)); + stringIndexType = stringIndexType || getIndexTypeOfType(instantiatedBaseType, 0 /* String */); + numberIndexType = numberIndexType || getIndexTypeOfType(instantiatedBaseType, 1 /* Number */); + }); + setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexType, numberIndexType); + } + function createSignature(declaration, typeParameters, parameters, resolvedReturnType, minArgumentCount, hasRestParameter, hasStringLiterals) { + var sig = new Signature(checker); + sig.declaration = declaration; + sig.typeParameters = typeParameters; + sig.parameters = parameters; + sig.resolvedReturnType = resolvedReturnType; + sig.minArgumentCount = minArgumentCount; + sig.hasRestParameter = hasRestParameter; + sig.hasStringLiterals = hasStringLiterals; + return sig; + } + function cloneSignature(sig) { + return createSignature(sig.declaration, sig.typeParameters, sig.parameters, sig.resolvedReturnType, sig.minArgumentCount, sig.hasRestParameter, sig.hasStringLiterals); + } + function getDefaultConstructSignatures(classType) { + if (classType.baseTypes.length) { + var baseType = classType.baseTypes[0]; + var baseSignatures = getSignaturesOfType(getTypeOfSymbol(baseType.symbol), 1 /* Construct */); + return ts.map(baseSignatures, function (baseSignature) { + var signature = baseType.flags & 4096 /* Reference */ ? getSignatureInstantiation(baseSignature, baseType.typeArguments) : cloneSignature(baseSignature); + signature.typeParameters = classType.typeParameters; + signature.resolvedReturnType = classType; + return signature; + }); + } + return [createSignature(undefined, classType.typeParameters, emptyArray, classType, 0, false, false)]; + } + function resolveAnonymousTypeMembers(type) { + var symbol = type.symbol; + var members = emptySymbols; + var callSignatures = emptyArray; + var constructSignatures = emptyArray; + if (symbol.flags & ts.SymbolFlags.HasExports) { + members = symbol.exports; + } + if (symbol.flags & (8 /* Function */ | 2048 /* Method */)) { + callSignatures = getSignaturesOfSymbol(symbol); + } + if (symbol.flags & 16 /* Class */) { + var classType = getDeclaredTypeOfClass(symbol); + constructSignatures = getSignaturesOfSymbol(symbol.members["__constructor"]); + if (!constructSignatures.length) + constructSignatures = getDefaultConstructSignatures(classType); + if (classType.baseTypes.length) { + var members = createSymbolTable(getNamedMembers(members)); + addInheritedMembers(members, getPropertiesOfType(getTypeOfSymbol(classType.baseTypes[0].symbol))); + } + } + var numberIndexType = (symbol.flags & 64 /* Enum */) ? stringType : undefined; + setObjectTypeMembers(type, members, callSignatures, constructSignatures, undefined, numberIndexType); + } + function resolveObjectTypeMembers(type) { + if (!type.members) { + if (type.flags & (1024 /* Class */ | 2048 /* Interface */)) { + resolveClassOrInterfaceMembers(type); + } + else if (type.flags & 8192 /* Anonymous */) { + resolveAnonymousTypeMembers(type); + } + else { + resolveTypeReferenceMembers(type); + } + } + return type; + } + function getPropertiesOfType(type) { + if (type.flags & ts.TypeFlags.ObjectType) { + return resolveObjectTypeMembers(type).properties; + } + return emptyArray; + } + function getPropertyOfType(type, name) { + if (type.flags & ts.TypeFlags.ObjectType) { + var resolved = resolveObjectTypeMembers(type); + if (ts.hasProperty(resolved.members, name)) { + var symbol = resolved.members[name]; + if (symbolIsValue(symbol)) { + return symbol; + } + } + } + } + function getPropertyOfApparentType(type, name) { + if (type.flags & ts.TypeFlags.ObjectType) { + var resolved = resolveObjectTypeMembers(type); + if (ts.hasProperty(resolved.members, name)) { + var symbol = resolved.members[name]; + if (symbolIsValue(symbol)) { + return symbol; + } + } + if (resolved === anyFunctionType || resolved.callSignatures.length || resolved.constructSignatures.length) { + var symbol = getPropertyOfType(globalFunctionType, name); + if (symbol) + return symbol; + } + return getPropertyOfType(globalObjectType, name); + } + } + function getSignaturesOfType(type, kind) { + if (type.flags & ts.TypeFlags.ObjectType) { + var resolved = resolveObjectTypeMembers(type); + return kind === 0 /* Call */ ? resolved.callSignatures : resolved.constructSignatures; + } + return emptyArray; + } + function getIndexTypeOfType(type, kind) { + if (type.flags & ts.TypeFlags.ObjectType) { + var resolved = resolveObjectTypeMembers(type); + return kind === 0 /* String */ ? resolved.stringIndexType : resolved.numberIndexType; + } + } + function getTypeParametersFromDeclaration(typeParameterDeclarations) { + var result = []; + ts.forEach(typeParameterDeclarations, function (node) { + var tp = getDeclaredTypeOfTypeParameter(node.symbol); + if (!ts.contains(result, tp)) { + result.push(tp); + } + }); + return result; + } + function getSignatureFromDeclaration(declaration) { + var links = getNodeLinks(declaration); + if (!links.resolvedSignature) { + var classType = declaration.kind === 117 /* Constructor */ ? getDeclaredTypeOfClass(declaration.parent.symbol) : undefined; + var typeParameters = classType ? classType.typeParameters : declaration.typeParameters ? getTypeParametersFromDeclaration(declaration.typeParameters) : undefined; + var parameters = []; + var hasStringLiterals = false; + var minArgumentCount = -1; + for (var i = 0, n = declaration.parameters.length; i < n; i++) { + var param = declaration.parameters[i]; + parameters.push(param.symbol); + if (param.type && param.type.kind === 3 /* StringLiteral */) { + hasStringLiterals = true; + } + if (minArgumentCount < 0) { + if (param.initializer || param.flags & (4 /* QuestionMark */ | 8 /* Rest */)) { + minArgumentCount = i; + } + } + } + if (minArgumentCount < 0) { + minArgumentCount = declaration.parameters.length; + } + var returnType; + if (classType) { + returnType = classType; + } + else if (declaration.type) { + returnType = getTypeFromTypeNode(declaration.type); + } + else { + if (declaration.kind === 118 /* GetAccessor */) { + var setter = getDeclarationOfKind(declaration.symbol, 119 /* SetAccessor */); + returnType = getAnnotatedAccessorType(setter); + } + if (!returnType && !declaration.body) { + returnType = anyType; + } + } + links.resolvedSignature = createSignature(declaration, typeParameters, parameters, returnType, minArgumentCount, ts.hasRestParameters(declaration), hasStringLiterals); + } + return links.resolvedSignature; + } + function getSignaturesOfSymbol(symbol) { + if (!symbol) + return emptyArray; + var result = []; + for (var i = 0, len = symbol.declarations.length; i < len; i++) { + var node = symbol.declarations[i]; + switch (node.kind) { + case 167 /* FunctionDeclaration */: + case 116 /* Method */: + case 117 /* Constructor */: + case 120 /* CallSignature */: + case 121 /* ConstructSignature */: + case 122 /* IndexSignature */: + case 118 /* GetAccessor */: + case 119 /* SetAccessor */: + case 136 /* FunctionExpression */: + case 137 /* ArrowFunction */: + if (i > 0 && node.body) { + var previous = symbol.declarations[i - 1]; + if (node.parent === previous.parent && node.kind === previous.kind && node.pos === previous.end) { + break; + } + } + result.push(getSignatureFromDeclaration(node)); + } + } + return result; + } + function getReturnTypeOfSignature(signature) { + if (!signature.resolvedReturnType) { + signature.resolvedReturnType = resolvingType; + if (signature.target) { + var type = instantiateType(getReturnTypeOfSignature(signature.target), signature.mapper); + } + else { + var type = getReturnTypeFromBody(signature.declaration); + } + if (signature.resolvedReturnType === resolvingType) { + signature.resolvedReturnType = type; + } + } + else if (signature.resolvedReturnType === resolvingType) { + signature.resolvedReturnType = anyType; + } + return signature.resolvedReturnType; + } + function getRestTypeOfSignature(signature) { + if (signature.hasRestParameter) { + var type = getTypeOfSymbol(signature.parameters[signature.parameters.length - 1]); + if (type.flags & 4096 /* Reference */ && type.target === globalArrayType) { + return type.typeArguments[0]; + } + } + return anyType; + } + function getSignatureInstantiation(signature, typeArguments) { + return instantiateSignature(signature, createTypeMapper(signature.typeParameters, typeArguments), true); + } + function getErasedSignature(signature) { + if (!signature.typeParameters) + return signature; + if (!signature.erasedSignatureCache) { + if (signature.target) { + signature.erasedSignatureCache = instantiateSignature(getErasedSignature(signature.target), signature.mapper); + } + else { + signature.erasedSignatureCache = instantiateSignature(signature, createTypeEraser(signature.typeParameters), true); + } + } + return signature.erasedSignatureCache; + } + function getOrCreateTypeFromSignature(signature) { + if (!signature.isolatedSignatureType) { + var isConstructor = signature.declaration.kind === 117 /* Constructor */ || signature.declaration.kind === 121 /* ConstructSignature */; + var type = createObjectType(8192 /* Anonymous */ | 16384 /* FromSignature */); + type.members = emptySymbols; + type.properties = emptyArray; + type.callSignatures = !isConstructor ? [signature] : emptyArray; + type.constructSignatures = isConstructor ? [signature] : emptyArray; + signature.isolatedSignatureType = type; + } + return signature.isolatedSignatureType; + } + function getIndexSymbol(symbol) { + return symbol.members["__index"]; + } + function getIndexDeclarationOfSymbol(symbol, kind) { + var syntaxKind = kind === 1 /* Number */ ? 108 /* NumberKeyword */ : 110 /* StringKeyword */; + var indexSymbol = getIndexSymbol(symbol); + if (indexSymbol) { + var len = indexSymbol.declarations.length; + for (var i = 0; i < len; i++) { + var node = indexSymbol.declarations[i]; + if (node.parameters.length === 1) { + var parameter = node.parameters[0]; + if (parameter && parameter.type && parameter.type.kind === syntaxKind) { + return node; + } + } + } + } + return undefined; + } + function getIndexTypeOfSymbol(symbol, kind) { + var declaration = getIndexDeclarationOfSymbol(symbol, kind); + return declaration ? declaration.type ? getTypeFromTypeNode(declaration.type) : anyType : undefined; + } + function getConstraintOfTypeParameter(type) { + if (!type.constraint) { + if (type.target) { + var targetConstraint = getConstraintOfTypeParameter(type.target); + type.constraint = targetConstraint ? instantiateType(targetConstraint, type.mapper) : noConstraintType; + } + else { + type.constraint = getTypeFromTypeNode(getDeclarationOfKind(type.symbol, 113 /* TypeParameter */).constraint); + } + } + return type.constraint === noConstraintType ? undefined : type.constraint; + } + function getTypeListId(types) { + switch (types.length) { + case 1: + return "" + types[0].id; + case 2: + return types[0].id + "," + types[1].id; + default: + var result = ""; + for (var i = 0; i < types.length; i++) { + if (i > 0) + result += ","; + result += types[i].id; + } + return result; + } + } + function createTypeReference(target, typeArguments) { + var id = getTypeListId(typeArguments); + var type = target.instantiations[id]; + if (!type) { + type = target.instantiations[id] = createObjectType(4096 /* Reference */, target.symbol); + type.target = target; + type.typeArguments = typeArguments; + } + return type; + } + function isTypeParameterReferenceIllegalInConstraint(typeReferenceNode, typeParameterSymbol) { + var links = getNodeLinks(typeReferenceNode); + if (links.isIllegalTypeReferenceInConstraint !== undefined) { + return links.isIllegalTypeReferenceInConstraint; + } + var currentNode = typeReferenceNode; + while (!ts.forEach(typeParameterSymbol.declarations, function (d) { return d.parent === currentNode.parent; })) { + currentNode = currentNode.parent; + } + links.isIllegalTypeReferenceInConstraint = currentNode.kind === 113 /* TypeParameter */; + return links.isIllegalTypeReferenceInConstraint; + } + function checkTypeParameterHasIllegalReferencesInConstraint(typeParameter) { + var typeParameterSymbol; + function check(n) { + if (n.kind === 123 /* TypeReference */ && n.typeName.kind === 55 /* Identifier */) { + var links = getNodeLinks(n); + if (links.isIllegalTypeReferenceInConstraint === undefined) { + var symbol = resolveName(typeParameter, n.typeName.text, ts.SymbolFlags.Type, undefined, undefined); + if (symbol && (symbol.flags & 262144 /* TypeParameter */)) { + links.isIllegalTypeReferenceInConstraint = ts.forEach(symbol.declarations, function (d) { return d.parent == typeParameter.parent; }); + } + } + if (links.isIllegalTypeReferenceInConstraint) { + error(typeParameter, ts.Diagnostics.Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list); + } + } + ts.forEachChild(n, check); + } + if (typeParameter.constraint) { + typeParameterSymbol = getSymbolOfNode(typeParameter); + check(typeParameter.constraint); + } + } + function getTypeFromTypeReferenceNode(node) { + var links = getNodeLinks(node); + if (!links.resolvedType) { + var symbol = resolveEntityName(node, node.typeName, ts.SymbolFlags.Type); + if (symbol) { + var type; + if ((symbol.flags & 262144 /* TypeParameter */) && isTypeParameterReferenceIllegalInConstraint(node, symbol)) { + type = unknownType; + } + else { + type = getDeclaredTypeOfSymbol(symbol); + if (type.flags & (1024 /* Class */ | 2048 /* Interface */) && type.flags & 4096 /* Reference */) { + var typeParameters = type.typeParameters; + if (node.typeArguments && node.typeArguments.length === typeParameters.length) { + type = createTypeReference(type, ts.map(node.typeArguments, function (t) { return getTypeFromTypeNode(t); })); + } + else { + error(node, ts.Diagnostics.Generic_type_0_requires_1_type_argument_s, typeToString(type, undefined, 1 /* WriteArrayAsGenericType */), typeParameters.length); + type = undefined; + } + } + else { + if (node.typeArguments) { + error(node, ts.Diagnostics.Type_0_is_not_generic, typeToString(type)); + type = undefined; + } + } + } + } + links.resolvedType = type || unknownType; + } + return links.resolvedType; + } + function getTypeFromTypeQueryNode(node) { + var links = getNodeLinks(node); + if (!links.resolvedType) { + links.resolvedType = getWidenedType(checkExpression(node.exprName)); + } + return links.resolvedType; + } + function getGlobalType(name, arity) { + if (arity === void 0) { arity = 0; } + function getTypeDeclaration(symbol) { + var declarations = symbol.declarations; + for (var i = 0; i < declarations.length; i++) { + var declaration = declarations[i]; + switch (declaration.kind) { + case 169 /* ClassDeclaration */: + case 170 /* InterfaceDeclaration */: + case 171 /* EnumDeclaration */: + case 125 /* TypeLiteral */: + case 167 /* FunctionDeclaration */: + return declaration; + } + } + } + var symbol = resolveName(undefined, name, ts.SymbolFlags.Type, ts.Diagnostics.Cannot_find_global_type_0, name); + if (!symbol) { + return emptyObjectType; + } + var type = getDeclaredTypeOfSymbol(symbol); + if (!(type.flags & ts.TypeFlags.ObjectType)) { + error(getTypeDeclaration(symbol), ts.Diagnostics.Global_type_0_must_be_a_class_or_interface_type, name); + return emptyObjectType; + } + if ((type.typeParameters ? type.typeParameters.length : 0) !== arity) { + error(getTypeDeclaration(symbol), ts.Diagnostics.Global_type_0_must_have_1_type_parameter_s, name, arity); + return emptyObjectType; + } + return type; + } + function createArrayType(elementType, arrayType) { + var rootType = globalArrayType || arrayType; + return rootType !== emptyObjectType ? createTypeReference(rootType, [elementType]) : emptyObjectType; + } + function getTypeFromArrayTypeNode(node) { + var links = getNodeLinks(node); + if (!links.resolvedType) { + var arrayType = globalArrayType; + if (!arrayType) { + var arrayTypeSymbol = resolveName(node, "Array", ts.SymbolFlags.Type, undefined, undefined); + ts.Debug.assert(arrayTypeSymbol); + arrayType = getDeclaredTypeOfSymbol(arrayTypeSymbol); + ts.Debug.assert(arrayType); + } + links.resolvedType = createArrayType(getTypeFromTypeNode(node.elementType), arrayType); + } + return links.resolvedType; + } + function getTypeFromTypeLiteralNode(node) { + var links = getNodeLinks(node); + if (!links.resolvedType) { + var symbol = node.symbol; + var members = symbol.members; + var callSignatures = getSignaturesOfSymbol(members["__call"]); + var constructSignatures = getSignaturesOfSymbol(members["__new"]); + var stringIndexType = getIndexTypeOfSymbol(symbol, 0 /* String */); + var numberIndexType = getIndexTypeOfSymbol(symbol, 1 /* Number */); + links.resolvedType = createAnonymousType(symbol, members, callSignatures, constructSignatures, stringIndexType, numberIndexType); + } + return links.resolvedType; + } + function getStringLiteralType(node) { + if (ts.hasProperty(stringLiteralTypes, node.text)) + return stringLiteralTypes[node.text]; + var type = stringLiteralTypes[node.text] = createType(256 /* StringLiteral */); + type.text = ts.getSourceTextOfNode(node); + return type; + } + function getTypeFromStringLiteral(node) { + var links = getNodeLinks(node); + if (!links.resolvedType) { + links.resolvedType = getStringLiteralType(node); + } + return links.resolvedType; + } + function getTypeFromTypeNode(node) { + switch (node.kind) { + case 101 /* AnyKeyword */: + return anyType; + case 110 /* StringKeyword */: + return stringType; + case 108 /* NumberKeyword */: + return numberType; + case 102 /* BooleanKeyword */: + return booleanType; + case 89 /* VoidKeyword */: + return voidType; + case 3 /* StringLiteral */: + return getTypeFromStringLiteral(node); + case 123 /* TypeReference */: + return getTypeFromTypeReferenceNode(node); + case 124 /* TypeQuery */: + return getTypeFromTypeQueryNode(node); + case 126 /* ArrayType */: + return getTypeFromArrayTypeNode(node); + case 125 /* TypeLiteral */: + return getTypeFromTypeLiteralNode(node); + default: + return unknownType; + } + } + function instantiateList(items, mapper, instantiator) { + if (items && items.length) { + var result = []; + for (var i = 0; i < items.length; i++) { + result.push(instantiator(items[i], mapper)); + } + return result; + } + return items; + } + function createUnaryTypeMapper(source, target) { + return function (t) { return t === source ? target : t; }; + } + function createBinaryTypeMapper(source1, target1, source2, target2) { + return function (t) { return t === source1 ? target1 : t === source2 ? target2 : t; }; + } + function createTypeMapper(sources, targets) { + switch (sources.length) { + case 1: + return createUnaryTypeMapper(sources[0], targets[0]); + case 2: + return createBinaryTypeMapper(sources[0], targets[0], sources[1], targets[1]); + } + return function (t) { + for (var i = 0; i < sources.length; i++) { + if (t === sources[i]) + return targets[i]; + } + return t; + }; + } + function createUnaryTypeEraser(source) { + return function (t) { return t === source ? anyType : t; }; + } + function createBinaryTypeEraser(source1, source2) { + return function (t) { return t === source1 || t === source2 ? anyType : t; }; + } + function createTypeEraser(sources) { + switch (sources.length) { + case 1: + return createUnaryTypeEraser(sources[0]); + case 2: + return createBinaryTypeEraser(sources[0], sources[1]); + } + return function (t) { + for (var i = 0; i < sources.length; i++) { + if (t === sources[i]) + return anyType; + } + return t; + }; + } + function createInferenceMapper(context) { + return function (t) { + for (var i = 0; i < context.typeParameters.length; i++) { + if (t === context.typeParameters[i]) { + return getInferredType(context, i); + } + } + return t; + }; + } + function identityMapper(type) { + return type; + } + function combineTypeMappers(mapper1, mapper2) { + return function (t) { return mapper2(mapper1(t)); }; + } + function instantiateTypeParameter(typeParameter, mapper) { + var result = createType(512 /* TypeParameter */); + result.symbol = typeParameter.symbol; + if (typeParameter.constraint) { + result.constraint = instantiateType(typeParameter.constraint, mapper); + } + else { + result.target = typeParameter; + result.mapper = mapper; + } + return result; + } + function instantiateSignature(signature, mapper, eraseTypeParameters) { + if (signature.typeParameters && !eraseTypeParameters) { + var freshTypeParameters = instantiateList(signature.typeParameters, mapper, instantiateTypeParameter); + mapper = combineTypeMappers(createTypeMapper(signature.typeParameters, freshTypeParameters), mapper); + } + var result = createSignature(signature.declaration, freshTypeParameters, instantiateList(signature.parameters, mapper, instantiateSymbol), signature.resolvedReturnType ? instantiateType(signature.resolvedReturnType, mapper) : undefined, signature.minArgumentCount, signature.hasRestParameter, signature.hasStringLiterals); + result.target = signature; + result.mapper = mapper; + return result; + } + function instantiateSymbol(symbol, mapper) { + if (symbol.flags & 8388608 /* Instantiated */) { + var links = getSymbolLinks(symbol); + symbol = links.target; + mapper = combineTypeMappers(links.mapper, mapper); + } + var result = createSymbol(8388608 /* Instantiated */ | 33554432 /* Transient */, symbol.name); + result.declarations = symbol.declarations; + result.parent = symbol.parent; + result.target = symbol; + result.mapper = mapper; + if (symbol.valueDeclaration) { + result.valueDeclaration = symbol.valueDeclaration; + } + return result; + } + function instantiateAnonymousType(type, mapper) { + var result = createObjectType(8192 /* Anonymous */, type.symbol); + result.properties = instantiateList(getPropertiesOfType(type), mapper, instantiateSymbol); + result.members = createSymbolTable(result.properties); + result.callSignatures = instantiateList(getSignaturesOfType(type, 0 /* Call */), mapper, instantiateSignature); + result.constructSignatures = instantiateList(getSignaturesOfType(type, 1 /* Construct */), mapper, instantiateSignature); + var stringIndexType = getIndexTypeOfType(type, 0 /* String */); + var numberIndexType = getIndexTypeOfType(type, 1 /* Number */); + if (stringIndexType) + result.stringIndexType = instantiateType(stringIndexType, mapper); + if (numberIndexType) + result.numberIndexType = instantiateType(numberIndexType, mapper); + return result; + } + function instantiateType(type, mapper) { + if (type.flags & 512 /* TypeParameter */) { + return mapper(type); + } + if (type.flags & 8192 /* Anonymous */) { + return type.symbol && type.symbol.flags & (8 /* Function */ | 2048 /* Method */ | 512 /* TypeLiteral */ | 1024 /* ObjectLiteral */) ? instantiateAnonymousType(type, mapper) : type; + } + if (type.flags & 4096 /* Reference */) { + return createTypeReference(type.target, instantiateList(type.typeArguments, mapper, instantiateType)); + } + return type; + } + function isContextSensitiveExpression(node) { + switch (node.kind) { + case 136 /* FunctionExpression */: + case 137 /* ArrowFunction */: + return !node.typeParameters && !ts.forEach(node.parameters, function (p) { return p.type; }); + case 128 /* ObjectLiteral */: + return ts.forEach(node.properties, function (p) { return p.kind === 129 /* PropertyAssignment */ && isContextSensitiveExpression(p.initializer); }); + case 127 /* ArrayLiteral */: + return ts.forEach(node.elements, function (e) { return isContextSensitiveExpression(e); }); + case 141 /* ConditionalExpression */: + return isContextSensitiveExpression(node.whenTrue) || isContextSensitiveExpression(node.whenFalse); + case 140 /* BinaryExpression */: + return node.operator === 40 /* BarBarToken */ && (isContextSensitiveExpression(node.left) || isContextSensitiveExpression(node.right)); + } + return false; + } + function getTypeWithoutConstructors(type) { + if (type.flags & ts.TypeFlags.ObjectType) { + var resolved = resolveObjectTypeMembers(type); + if (resolved.constructSignatures.length) { + var result = createObjectType(8192 /* Anonymous */, type.symbol); + result.members = resolved.members; + result.properties = resolved.properties; + result.callSignatures = resolved.callSignatures; + result.constructSignatures = emptyArray; + type = result; + } + } + return type; + } + var subtypeRelation = {}; + var assignableRelation = {}; + var identityRelation = {}; + function isTypeIdenticalTo(source, target) { + return checkTypeRelatedTo(source, target, identityRelation, undefined, undefined, undefined); + } + function isTypeSubtypeOf(source, target) { + return checkTypeSubtypeOf(source, target, undefined, undefined, undefined); + } + function checkTypeSubtypeOf(source, target, errorNode, chainedMessage, terminalMessage) { + return checkTypeRelatedTo(source, target, subtypeRelation, errorNode, chainedMessage, terminalMessage); + } + function isTypeAssignableTo(source, target) { + return checkTypeAssignableTo(source, target, undefined, undefined, undefined); + } + function checkTypeAssignableTo(source, target, errorNode, chainedMessage, terminalMessage) { + return checkTypeRelatedTo(source, target, assignableRelation, errorNode, chainedMessage, terminalMessage); + } + function isTypeRelatedTo(source, target, relation) { + return checkTypeRelatedTo(source, target, relation, undefined, undefined, undefined); + } + function isSignatureAssignableTo(source, target) { + var sourceType = getOrCreateTypeFromSignature(source); + var targetType = getOrCreateTypeFromSignature(target); + return checkTypeRelatedTo(sourceType, targetType, assignableRelation, undefined, undefined, undefined); + } + function isPropertyIdenticalTo(sourceProp, targetProp) { + return isPropertyIdenticalToRecursive(sourceProp, targetProp, false, function (s, t, _reportErrors) { return isTypeIdenticalTo(s, t); }); + } + function checkInheritedPropertiesAreIdentical(type, typeNode) { + if (!type.baseTypes.length || type.baseTypes.length === 1) { + return true; + } + var seen = {}; + ts.forEach(type.declaredProperties, function (p) { + seen[p.name] = { prop: p, containingType: type }; + }); + var ok = true; + for (var i = 0, len = type.baseTypes.length; i < len; ++i) { + var base = type.baseTypes[i]; + var properties = getPropertiesOfType(base); + for (var j = 0, proplen = properties.length; j < proplen; ++j) { + var prop = properties[j]; + if (!ts.hasProperty(seen, prop.name)) { + seen[prop.name] = { prop: prop, containingType: base }; + } + else { + var existing = seen[prop.name]; + var isInheritedProperty = existing.containingType !== type; + if (isInheritedProperty && !isPropertyIdenticalTo(existing.prop, prop)) { + ok = false; + var typeName1 = typeToString(existing.containingType); + var typeName2 = typeToString(base); + var errorInfo = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.Named_properties_0_of_types_1_and_2_are_not_identical, prop.name, typeName1, typeName2); + errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Interface_0_cannot_simultaneously_extend_types_1_and_2_Colon, typeToString(type), typeName1, typeName2); + addDiagnostic(ts.createDiagnosticForNodeFromMessageChain(typeNode, errorInfo, program.getCompilerHost().getNewLine())); + } + } + } + } + return ok; + } + function isPropertyIdenticalToRecursive(sourceProp, targetProp, reportErrors, relate) { + ts.Debug.assert(sourceProp); + if (!targetProp) { + return false; + } + var sourcePropIsPrivate = getDeclarationFlagsFromSymbol(sourceProp) & 32 /* Private */; + var targetPropIsPrivate = getDeclarationFlagsFromSymbol(targetProp) & 32 /* Private */; + if (sourcePropIsPrivate !== targetPropIsPrivate) { + return false; + } + if (sourcePropIsPrivate) { + return (getTargetSymbol(sourceProp).parent === getTargetSymbol(targetProp).parent) && relate(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp), reportErrors); + } + else { + return isOptionalProperty(sourceProp) === isOptionalProperty(targetProp) && relate(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp), reportErrors); + } + } + function checkTypeRelatedTo(source, target, relation, errorNode, chainedMessage, terminalMessage) { + var errorInfo; + var sourceStack; + var targetStack; + var expandingFlags; + var depth = 0; + var overflow = false; + ts.Debug.assert(relation !== identityRelation || !errorNode, "no error reporting in identity checking"); + var result = isRelatedToWithCustomErrors(source, target, errorNode !== undefined, chainedMessage, terminalMessage); + if (overflow) { + error(errorNode, ts.Diagnostics.Excessive_stack_depth_comparing_types_0_and_1, typeToString(source), typeToString(target)); + } + else if (errorInfo) { + addDiagnostic(ts.createDiagnosticForNodeFromMessageChain(errorNode, errorInfo, program.getCompilerHost().getNewLine())); + } + return result; + function reportError(message, arg0, arg1) { + errorInfo = ts.chainDiagnosticMessages(errorInfo, message, arg0, arg1); + } + function isRelatedTo(source, target, reportErrors) { + return isRelatedToWithCustomErrors(source, target, reportErrors, undefined, undefined); + } + function isRelatedToWithCustomErrors(source, target, reportErrors, chainedMessage, terminalMessage) { + if (relation === identityRelation) { + if (source === target) + return true; + } + else { + if (source === target) + return true; + if (target.flags & 1 /* Any */) + return true; + if (source === undefinedType) + return true; + if (source === nullType && target !== undefinedType) + return true; + if (source.flags & 128 /* Enum */ && target === numberType) + return true; + if (source.flags & 256 /* StringLiteral */ && target === stringType) + return true; + if (relation === assignableRelation) { + if (source.flags & 1 /* Any */) + return true; + if (source === numberType && target.flags & 128 /* Enum */) + return true; + } + } + if (source.flags & 512 /* TypeParameter */ && target.flags & 512 /* TypeParameter */) { + if (typeParameterRelatedTo(source, target, reportErrors)) { + return true; + } + } + else { + var saveErrorInfo = errorInfo; + if (source.flags & 4096 /* Reference */ && target.flags & 4096 /* Reference */ && source.target === target.target) { + if (typesRelatedTo(source.typeArguments, target.typeArguments, reportErrors)) { + return true; + } + } + var reportStructuralErrors = reportErrors && errorInfo === saveErrorInfo; + var sourceOrApparentType = relation === identityRelation ? source : getApparentType(source); + if (sourceOrApparentType.flags & ts.TypeFlags.ObjectType && target.flags & ts.TypeFlags.ObjectType && objectTypeRelatedTo(sourceOrApparentType, target, reportStructuralErrors)) { + errorInfo = saveErrorInfo; + return true; + } + } + if (reportErrors) { + chainedMessage = chainedMessage || ts.Diagnostics.Type_0_is_not_assignable_to_type_1_Colon; + terminalMessage = terminalMessage || ts.Diagnostics.Type_0_is_not_assignable_to_type_1; + var diagnosticKey = errorInfo ? chainedMessage : terminalMessage; + ts.Debug.assert(diagnosticKey); + reportError(diagnosticKey, typeToString(source), typeToString(target)); + } + return false; + } + function typesRelatedTo(sources, targets, reportErrors) { + for (var i = 0, len = sources.length; i < len; i++) { + if (!isRelatedTo(sources[i], targets[i], reportErrors)) + return false; + } + return true; + } + function typeParameterRelatedTo(source, target, reportErrors) { + if (relation === identityRelation) { + if (source.symbol.name !== target.symbol.name) { + return false; + } + if (source.constraint === target.constraint) { + return true; + } + if (source.constraint === noConstraintType || target.constraint === noConstraintType) { + return false; + } + return isRelatedTo(source.constraint, target.constraint, reportErrors); + } + else { + while (true) { + var constraint = getConstraintOfTypeParameter(source); + if (constraint === target) + return true; + if (!(constraint && constraint.flags & 512 /* TypeParameter */)) + break; + source = constraint; + } + return false; + } + } + function objectTypeRelatedTo(source, target, reportErrors) { + if (overflow) + return false; + var result; + var id = source.id + "," + target.id; + if ((result = relation[id]) !== undefined) + return result; + if (depth > 0) { + for (var i = 0; i < depth; i++) { + if (source === sourceStack[i] && target === targetStack[i]) + return true; + } + if (depth === 100) { + overflow = true; + return false; + } + } + else { + sourceStack = []; + targetStack = []; + expandingFlags = 0; + } + sourceStack[depth] = source; + targetStack[depth] = target; + depth++; + var saveExpandingFlags = expandingFlags; + if (!(expandingFlags & 1) && isDeeplyNestedGeneric(source, sourceStack)) + expandingFlags |= 1; + if (!(expandingFlags & 2) && isDeeplyNestedGeneric(target, targetStack)) + expandingFlags |= 2; + result = expandingFlags === 3 || propertiesRelatedTo(source, target, reportErrors) && signaturesRelatedTo(source, target, 0 /* Call */, reportErrors) && signaturesRelatedTo(source, target, 1 /* Construct */, reportErrors) && stringIndexTypesRelatedTo(source, target, reportErrors) && numberIndexTypesRelatedTo(source, target, reportErrors); + expandingFlags = saveExpandingFlags; + depth--; + if (depth === 0) { + relation[id] = result; + } + return result; + } + function isDeeplyNestedGeneric(type, stack) { + if (type.flags & 4096 /* Reference */ && depth >= 10) { + var target = type.target; + var count = 0; + for (var i = 0; i < depth; i++) { + var t = stack[i]; + if (t.flags & 4096 /* Reference */ && t.target === target) { + count++; + if (count >= 10) + return true; + } + } + } + return false; + } + function propertiesRelatedTo(source, target, reportErrors) { + if (relation === identityRelation) { + return propertiesAreIdenticalTo(source, target, reportErrors); + } + else { + return propertiesAreSubtypeOrAssignableTo(source, target, reportErrors); + } + } + function propertiesAreIdenticalTo(source, target, reportErrors) { + if (source === target) { + return true; + } + var sourceProperties = getPropertiesOfType(source); + var targetProperties = getPropertiesOfType(target); + if (sourceProperties.length !== targetProperties.length) { + return false; + } + for (var i = 0, len = sourceProperties.length; i < len; ++i) { + var sourceProp = sourceProperties[i]; + var targetProp = getPropertyOfType(target, sourceProp.name); + if (!isPropertyIdenticalToRecursive(sourceProp, targetProp, reportErrors, isRelatedTo)) { + return false; + } + } + return true; + } + function propertiesAreSubtypeOrAssignableTo(source, target, reportErrors) { + var properties = getPropertiesOfType(target); + for (var i = 0; i < properties.length; i++) { + var targetProp = properties[i]; + var sourceProp = getPropertyOfApparentType(source, targetProp.name); + if (sourceProp === targetProp) { + continue; + } + var targetPropIsOptional = isOptionalProperty(targetProp); + if (!sourceProp) { + if (!targetPropIsOptional) { + if (reportErrors) { + reportError(ts.Diagnostics.Property_0_is_missing_in_type_1, symbolToString(targetProp), typeToString(source)); + } + return false; + } + } + else if (sourceProp !== targetProp) { + if (targetProp.flags & 67108864 /* Prototype */) { + continue; + } + if (getDeclarationFlagsFromSymbol(sourceProp) & 32 /* Private */ || getDeclarationFlagsFromSymbol(targetProp) & 32 /* Private */) { + if (reportErrors) { + reportError(ts.Diagnostics.Private_property_0_cannot_be_reimplemented, symbolToString(targetProp)); + } + return false; + } + if (!isRelatedTo(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp), reportErrors)) { + if (reportErrors) { + reportError(ts.Diagnostics.Types_of_property_0_are_incompatible_Colon, symbolToString(targetProp)); + } + return false; + } + else if (isOptionalProperty(sourceProp) && !targetPropIsOptional) { + if (reportErrors) { + reportError(ts.Diagnostics.Required_property_0_cannot_be_reimplemented_with_optional_property_in_1, targetProp.name, typeToString(source)); + } + return false; + } + } + } + return true; + } + function signaturesRelatedTo(source, target, kind, reportErrors) { + if (relation === identityRelation) { + return areSignaturesIdenticalTo(source, target, kind, reportErrors); + } + else { + return areSignaturesSubtypeOrAssignableTo(source, target, kind, reportErrors); + } + } + function areSignaturesIdenticalTo(source, target, kind, reportErrors) { + var sourceSignatures = getSignaturesOfType(source, kind); + var targetSignatures = getSignaturesOfType(target, kind); + if (sourceSignatures.length !== targetSignatures.length) { + return false; + } + for (var i = 0, len = sourceSignatures.length; i < len; ++i) { + if (!isSignatureIdenticalTo(sourceSignatures[i], targetSignatures[i], reportErrors)) { + return false; + } + } + return true; + } + function isSignatureIdenticalTo(source, target, reportErrors) { + if (source === target) { + return true; + } + if (source.hasRestParameter !== target.hasRestParameter) { + return false; + } + if (source.parameters.length !== target.parameters.length) { + return false; + } + if (source.minArgumentCount !== target.minArgumentCount) { + return false; + } + if (source.typeParameters && target.typeParameters) { + if (source.typeParameters.length !== target.typeParameters.length) { + return false; + } + for (var i = 0, len = source.typeParameters.length; i < len; ++i) { + if (!isRelatedTo(source.typeParameters[i], target.typeParameters[i], reportErrors)) { + return false; + } + } + } + else if (source.typeParameters || source.typeParameters) { + return false; + } + source = getErasedSignature(source); + target = getErasedSignature(target); + for (var i = 0, len = source.parameters.length; i < len; i++) { + var s = source.hasRestParameter && i === len - 1 ? getRestTypeOfSignature(source) : getTypeOfSymbol(source.parameters[i]); + var t = target.hasRestParameter && i === len - 1 ? getRestTypeOfSignature(target) : getTypeOfSymbol(target.parameters[i]); + if (!isRelatedTo(s, t, reportErrors)) { + return false; + } + } + var t = getReturnTypeOfSignature(target); + var s = getReturnTypeOfSignature(source); + return isRelatedTo(s, t, reportErrors); + } + function areSignaturesSubtypeOrAssignableTo(source, target, kind, reportErrors) { + if (target === anyFunctionType || source === anyFunctionType) + return true; + var sourceSignatures = getSignaturesOfType(source, kind); + var targetSignatures = getSignaturesOfType(target, kind); + var saveErrorInfo = errorInfo; + outer: for (var i = 0; i < targetSignatures.length; i++) { + var t = targetSignatures[i]; + if (!t.hasStringLiterals || target.flags & 16384 /* FromSignature */) { + var localErrors = reportErrors; + for (var j = 0; j < sourceSignatures.length; j++) { + var s = sourceSignatures[j]; + if (!s.hasStringLiterals || source.flags & 16384 /* FromSignature */) { + if (isSignatureSubtypeOrAssignableTo(s, t, localErrors)) { + errorInfo = saveErrorInfo; + continue outer; + } + localErrors = false; + } + } + return false; + } + } + return true; + } + function isSignatureSubtypeOrAssignableTo(source, target, reportErrors) { + if (source === target) { + return true; + } + if (!target.hasRestParameter && source.minArgumentCount > target.parameters.length) { + return false; + } + var sourceMax = source.parameters.length; + var targetMax = target.parameters.length; + var checkCount; + if (source.hasRestParameter && target.hasRestParameter) { + checkCount = sourceMax > targetMax ? sourceMax : targetMax; + sourceMax--; + targetMax--; + } + else if (source.hasRestParameter) { + sourceMax--; + checkCount = targetMax; + } + else if (target.hasRestParameter) { + targetMax--; + checkCount = sourceMax; + } + else { + checkCount = sourceMax < targetMax ? sourceMax : targetMax; + } + source = getErasedSignature(source); + target = getErasedSignature(target); + for (var i = 0; i < checkCount; i++) { + var s = i < sourceMax ? getTypeOfSymbol(source.parameters[i]) : getRestTypeOfSignature(source); + var t = i < targetMax ? getTypeOfSymbol(target.parameters[i]) : getRestTypeOfSignature(target); + var saveErrorInfo = errorInfo; + if (!isRelatedTo(s, t, reportErrors)) { + if (!isRelatedTo(t, s, false)) { + if (reportErrors) { + reportError(ts.Diagnostics.Types_of_parameters_0_and_1_are_incompatible_Colon, source.parameters[i < sourceMax ? i : sourceMax].name, target.parameters[i < targetMax ? i : targetMax].name); + } + return false; + } + errorInfo = saveErrorInfo; + } + } + var t = getReturnTypeOfSignature(target); + if (t === voidType) + return true; + var s = getReturnTypeOfSignature(source); + return isRelatedTo(s, t, reportErrors); + } + function stringIndexTypesRelatedTo(source, target, reportErrors) { + if (relation === identityRelation) { + return areIndexTypesIdenticalTo(0 /* String */, source, target, reportErrors); + } + else { + var targetType = getIndexTypeOfType(target, 0 /* String */); + if (targetType) { + var sourceType = getIndexTypeOfType(source, 0 /* String */); + if (!sourceType) { + if (reportErrors) { + reportError(ts.Diagnostics.Index_signature_is_missing_in_type_0, typeToString(source)); + } + return false; + } + if (!isRelatedTo(sourceType, targetType, reportErrors)) { + if (reportErrors) { + reportError(ts.Diagnostics.Index_signatures_are_incompatible_Colon); + } + return false; + } + } + return true; + } + } + function numberIndexTypesRelatedTo(source, target, reportErrors) { + if (relation === identityRelation) { + return areIndexTypesIdenticalTo(1 /* Number */, source, target, reportErrors); + } + else { + var targetType = getIndexTypeOfType(target, 1 /* Number */); + if (targetType) { + var sourceStringType = getIndexTypeOfType(source, 0 /* String */); + var sourceNumberType = getIndexTypeOfType(source, 1 /* Number */); + if (!(sourceStringType || sourceNumberType)) { + if (reportErrors) { + reportError(ts.Diagnostics.Index_signature_is_missing_in_type_0, typeToString(source)); + } + return false; + } + if (sourceStringType && sourceNumberType) { + var compatible = isRelatedTo(sourceStringType, targetType, false) || isRelatedTo(sourceNumberType, targetType, reportErrors); + } + else { + var compatible = isRelatedTo(sourceStringType || sourceNumberType, targetType, reportErrors); + } + if (!compatible) { + if (reportErrors) { + reportError(ts.Diagnostics.Index_signatures_are_incompatible_Colon); + } + return false; + } + } + return true; + } + } + function areIndexTypesIdenticalTo(indexKind, source, target, reportErrors) { + var targetType = getIndexTypeOfType(target, indexKind); + var sourceType = getIndexTypeOfType(source, indexKind); + return (!sourceType && !targetType) || (sourceType && targetType && isRelatedTo(sourceType, targetType, reportErrors)); + } + } + function isSupertypeOfEach(candidate, types) { + for (var i = 0, len = types.length; i < len; i++) { + if (candidate !== types[i] && !isTypeSubtypeOf(types[i], candidate)) + return false; + } + return true; + } + function getBestCommonType(types, contextualType, candidatesOnly) { + if (contextualType && isSupertypeOfEach(contextualType, types)) + return contextualType; + return ts.forEach(types, function (t) { return isSupertypeOfEach(t, types) ? t : undefined; }) || (candidatesOnly ? undefined : emptyObjectType); + } + function isTypeOfObjectLiteral(type) { + return (type.flags & 8192 /* Anonymous */) && type.symbol && (type.symbol.flags & 1024 /* ObjectLiteral */) ? true : false; + } + function getWidenedTypeOfObjectLiteral(type) { + var properties = getPropertiesOfType(type); + if (properties.length) { + var widenedTypes = []; + var propTypeWasWidened = false; + ts.forEach(properties, function (p) { + var propType = getTypeOfSymbol(p); + var widenedType = getWidenedType(propType); + if (propType !== widenedType) { + propTypeWasWidened = true; + if (program.getCompilerOptions().noImplicitAny && getInnermostTypeOfNestedArrayTypes(widenedType) === anyType) { + error(p.valueDeclaration, ts.Diagnostics.Object_literal_s_property_0_implicitly_has_an_1_type, p.name, typeToString(widenedType)); + } + } + widenedTypes.push(widenedType); + }); + if (propTypeWasWidened) { + var members = {}; + var index = 0; + ts.forEach(properties, function (p) { + var symbol = createSymbol(2 /* Property */ | 33554432 /* Transient */, p.name); + symbol.declarations = p.declarations; + symbol.parent = p.parent; + symbol.type = widenedTypes[index++]; + if (p.valueDeclaration) + symbol.valueDeclaration = p.valueDeclaration; + members[symbol.name] = symbol; + }); + var stringIndexType = getIndexTypeOfType(type, 0 /* String */); + var numberIndexType = getIndexTypeOfType(type, 1 /* Number */); + if (stringIndexType) + stringIndexType = getWidenedType(stringIndexType); + if (numberIndexType) + numberIndexType = getWidenedType(numberIndexType); + type = createAnonymousType(type.symbol, members, emptyArray, emptyArray, stringIndexType, numberIndexType); + } + } + return type; + } + function isArrayType(type) { + return type.flags & 4096 /* Reference */ && type.target === globalArrayType; + } + function getInnermostTypeOfNestedArrayTypes(type) { + while (isArrayType(type)) { + type = type.typeArguments[0]; + } + return type; + } + function getWidenedTypeOfArrayLiteral(type) { + var elementType = type.typeArguments[0]; + var widenedType = getWidenedType(elementType); + type = elementType !== widenedType ? createArrayType(widenedType) : type; + return type; + } + function getWidenedType(type) { + if (type.flags & (32 /* Undefined */ | 64 /* Null */)) { + return anyType; + } + if (isTypeOfObjectLiteral(type)) { + return getWidenedTypeOfObjectLiteral(type); + } + if (isArrayType(type)) { + return getWidenedTypeOfArrayLiteral(type); + } + return type; + } + function forEachMatchingParameterType(source, target, callback) { + var sourceMax = source.parameters.length; + var targetMax = target.parameters.length; + var count; + if (source.hasRestParameter && target.hasRestParameter) { + count = sourceMax > targetMax ? sourceMax : targetMax; + sourceMax--; + targetMax--; + } + else if (source.hasRestParameter) { + sourceMax--; + count = targetMax; + } + else if (target.hasRestParameter) { + targetMax--; + count = sourceMax; + } + else { + count = sourceMax < targetMax ? sourceMax : targetMax; + } + for (var i = 0; i < count; i++) { + var s = i < sourceMax ? getTypeOfSymbol(source.parameters[i]) : getRestTypeOfSignature(source); + var t = i < targetMax ? getTypeOfSymbol(target.parameters[i]) : getRestTypeOfSignature(target); + callback(s, t); + } + } + function createInferenceContext(typeParameters) { + var inferences = []; + for (var i = 0; i < typeParameters.length; i++) + inferences.push([]); + return { + typeParameters: typeParameters, + inferences: inferences, + inferredTypes: new Array(typeParameters.length) + }; + } + function inferTypes(context, source, target) { + var sourceStack; + var targetStack; + var depth = 0; + inferFromTypes(source, target); + function isInProcess(source, target) { + for (var i = 0; i < depth; i++) { + if (source === sourceStack[i] && target === targetStack[i]) + return true; + } + return false; + } + function isWithinDepthLimit(type, stack) { + if (depth >= 5) { + var target = type.target; + var count = 0; + for (var i = 0; i < depth; i++) { + var t = stack[i]; + if (t.flags & 4096 /* Reference */ && t.target === target) + count++; + } + return count < 5; + } + return true; + } + function inferFromTypes(source, target) { + if (target.flags & 512 /* TypeParameter */) { + var typeParameters = context.typeParameters; + for (var i = 0; i < typeParameters.length; i++) { + if (target === typeParameters[i]) { + var inferences = context.inferences[i]; + if (!ts.contains(inferences, source)) + inferences.push(source); + break; + } + } + } + else if (source.flags & 4096 /* Reference */ && target.flags & 4096 /* Reference */ && source.target === target.target) { + var sourceTypes = source.typeArguments; + var targetTypes = target.typeArguments; + for (var i = 0; i < sourceTypes.length; i++) { + inferFromTypes(sourceTypes[i], targetTypes[i]); + } + } + else if (source.flags & ts.TypeFlags.ObjectType && (target.flags & 4096 /* Reference */ || (target.flags & 8192 /* Anonymous */) && target.symbol && target.symbol.flags & (2048 /* Method */ | 512 /* TypeLiteral */))) { + if (!isInProcess(source, target) && isWithinDepthLimit(source, sourceStack) && isWithinDepthLimit(target, targetStack)) { + if (depth === 0) { + sourceStack = []; + targetStack = []; + } + sourceStack[depth] = source; + targetStack[depth] = target; + depth++; + inferFromProperties(source, target); + inferFromSignatures(source, target, 0 /* Call */); + inferFromSignatures(source, target, 1 /* Construct */); + inferFromIndexTypes(source, target, 0 /* String */, 0 /* String */); + inferFromIndexTypes(source, target, 1 /* Number */, 1 /* Number */); + inferFromIndexTypes(source, target, 0 /* String */, 1 /* Number */); + depth--; + } + } + } + function inferFromProperties(source, target) { + var properties = getPropertiesOfType(target); + for (var i = 0; i < properties.length; i++) { + var targetProp = properties[i]; + var sourceProp = getPropertyOfType(source, targetProp.name); + if (sourceProp) { + inferFromTypes(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp)); + } + } + } + function inferFromSignatures(source, target, kind) { + var sourceSignatures = getSignaturesOfType(source, kind); + var targetSignatures = getSignaturesOfType(target, kind); + var sourceLen = sourceSignatures.length; + var targetLen = targetSignatures.length; + var len = sourceLen < targetLen ? sourceLen : targetLen; + for (var i = 0; i < len; i++) { + inferFromSignature(getErasedSignature(sourceSignatures[sourceLen - len + i]), getErasedSignature(targetSignatures[targetLen - len + i])); + } + } + function inferFromSignature(source, target) { + forEachMatchingParameterType(source, target, inferFromTypes); + inferFromTypes(getReturnTypeOfSignature(source), getReturnTypeOfSignature(target)); + } + function inferFromIndexTypes(source, target, sourceKind, targetKind) { + var targetIndexType = getIndexTypeOfType(target, targetKind); + if (targetIndexType) { + var sourceIndexType = getIndexTypeOfType(source, sourceKind); + if (sourceIndexType) { + inferFromTypes(sourceIndexType, targetIndexType); + } + } + } + } + function getInferredType(context, index) { + var result = context.inferredTypes[index]; + if (!result) { + var commonType = getWidenedType(getBestCommonType(context.inferences[index])); + var constraint = getConstraintOfTypeParameter(context.typeParameters[index]); + var result = constraint && !isTypeAssignableTo(commonType, constraint) ? constraint : commonType; + context.inferredTypes[index] = result; + } + return result; + } + function getInferredTypes(context) { + for (var i = 0; i < context.inferredTypes.length; i++) { + getInferredType(context, i); + } + context.inferences = undefined; + return context.inferredTypes; + } + function hasAncestor(node, kind) { + return getAncestor(node, kind) !== undefined; + } + function getAncestor(node, kind) { + switch (kind) { + case 169 /* ClassDeclaration */: + while (node) { + switch (node.kind) { + case 169 /* ClassDeclaration */: + return node; + case 171 /* EnumDeclaration */: + case 170 /* InterfaceDeclaration */: + case 172 /* ModuleDeclaration */: + case 174 /* ImportDeclaration */: + return undefined; + default: + node = node.parent; + continue; + } + } + break; + default: + while (node) { + if (node.kind === kind) { + return node; + } + else { + node = node.parent; + } + } + break; + } + return undefined; + } + function checkIdentifier(node) { + function isInTypeQuery(node) { + while (node) { + switch (node.kind) { + case 124 /* TypeQuery */: + return true; + case 55 /* Identifier */: + case 112 /* QualifiedName */: + node = node.parent; + continue; + default: + return false; + } + } + ts.Debug.fail("should not get here"); + } + var symbol = resolveName(node, node.text, ts.SymbolFlags.Value | 524288 /* ExportValue */, ts.Diagnostics.Cannot_find_name_0, ts.identifierToString(node)); + if (!symbol) { + symbol = unknownSymbol; + } + if (symbol.flags & 4194304 /* Import */) { + getSymbolLinks(symbol).referenced = !isInTypeQuery(node); + } + getNodeLinks(node).resolvedSymbol = symbol; + checkCollisionWithCapturedSuperVariable(node, node); + checkCollisionWithCapturedThisVariable(node, node); + checkCollisionWithIndexVariableInGeneratedCode(node, node); + return getTypeOfSymbol(getExportSymbolOfValueSymbolIfExported(symbol)); + } + function getThisContainer(node) { + while (true) { + node = node.parent; + if (!node) { + return node; + } + switch (node.kind) { + case 167 /* FunctionDeclaration */: + case 136 /* FunctionExpression */: + case 172 /* ModuleDeclaration */: + case 115 /* Property */: + case 116 /* Method */: + case 117 /* Constructor */: + case 118 /* GetAccessor */: + case 119 /* SetAccessor */: + case 171 /* EnumDeclaration */: + case 177 /* SourceFile */: + case 137 /* ArrowFunction */: + return node; + } + } + } + function captureLexicalThis(node, container) { + var classNode = container.parent && container.parent.kind === 169 /* ClassDeclaration */ ? container.parent : undefined; + getNodeLinks(node).flags |= 2 /* LexicalThis */; + if (container.kind === 115 /* Property */ || container.kind === 117 /* Constructor */) { + getNodeLinks(classNode).flags |= 4 /* CaptureThis */; + } + else { + getNodeLinks(container).flags |= 4 /* CaptureThis */; + } + } + function checkThisExpression(node) { + var container = getThisContainer(node); + var needToCaptureLexicalThis = false; + while (container.kind === 137 /* ArrowFunction */) { + container = getThisContainer(container); + needToCaptureLexicalThis = true; + } + switch (container.kind) { + case 172 /* ModuleDeclaration */: + error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_module_body); + break; + case 171 /* EnumDeclaration */: + error(node, ts.Diagnostics.this_cannot_be_referenced_in_current_location); + break; + case 117 /* Constructor */: + if (isInConstructorArgumentInitializer(node, container)) { + error(node, ts.Diagnostics.this_cannot_be_referenced_in_constructor_arguments); + } + break; + case 115 /* Property */: + if (container.flags & 64 /* Static */) { + error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_static_property_initializer); + } + break; + } + if (needToCaptureLexicalThis) { + captureLexicalThis(node, container); + } + var classNode = container.parent && container.parent.kind === 169 /* ClassDeclaration */ ? container.parent : undefined; + if (classNode) { + var symbol = getSymbolOfNode(classNode); + return container.flags & 64 /* Static */ ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol); + } + return anyType; + } + function getSuperContainer(node) { + while (true) { + node = node.parent; + if (!node) + return node; + switch (node.kind) { + case 167 /* FunctionDeclaration */: + case 136 /* FunctionExpression */: + case 137 /* ArrowFunction */: + case 115 /* Property */: + case 116 /* Method */: + case 117 /* Constructor */: + case 118 /* GetAccessor */: + case 119 /* SetAccessor */: + return node; + } + } + } + function isInConstructorArgumentInitializer(node, constructorDecl) { + for (var n = node; n && n !== constructorDecl; n = n.parent) { + if (n.kind === 114 /* Parameter */) { + return true; + } + } + return false; + } + function checkSuperExpression(node, isCallExpression) { + var enclosingClass = getAncestor(node, 169 /* ClassDeclaration */); + var baseClass; + if (enclosingClass && enclosingClass.baseType) { + var classType = getDeclaredTypeOfSymbol(getSymbolOfNode(enclosingClass)); + baseClass = classType.baseTypes.length && classType.baseTypes[0]; + } + if (!baseClass) { + error(node, ts.Diagnostics.super_can_only_be_referenced_in_a_derived_class); + return unknownType; + } + var container = getSuperContainer(node); + if (container) { + var canUseSuperExpression = false; + if (isCallExpression) { + canUseSuperExpression = container.kind === 117 /* Constructor */; + } + else { + var needToCaptureLexicalThis = false; + while (container && container.kind === 137 /* ArrowFunction */) { + container = getSuperContainer(container); + needToCaptureLexicalThis = true; + } + if (container && container.parent && container.parent.kind === 169 /* ClassDeclaration */) { + if (container.flags & 64 /* Static */) { + canUseSuperExpression = container.kind === 116 /* Method */ || container.kind === 118 /* GetAccessor */ || container.kind === 119 /* SetAccessor */; + } + else { + canUseSuperExpression = container.kind === 116 /* Method */ || container.kind === 118 /* GetAccessor */ || container.kind === 119 /* SetAccessor */ || container.kind === 115 /* Property */ || container.kind === 117 /* Constructor */; + } + } + } + if (canUseSuperExpression) { + var returnType; + if ((container.flags & 64 /* Static */) || isCallExpression) { + getNodeLinks(node).flags |= 32 /* SuperStatic */; + returnType = getTypeOfSymbol(baseClass.symbol); + } + else { + getNodeLinks(node).flags |= 16 /* SuperInstance */; + returnType = baseClass; + } + if (container.kind === 117 /* Constructor */ && isInConstructorArgumentInitializer(node, container)) { + error(node, ts.Diagnostics.super_cannot_be_referenced_in_constructor_arguments); + returnType = unknownType; + } + if (!isCallExpression && needToCaptureLexicalThis) { + captureLexicalThis(node.parent, container); + } + return returnType; + } + } + if (isCallExpression) { + error(node, ts.Diagnostics.Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors); + } + else { + error(node, ts.Diagnostics.super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class); + } + return unknownType; + } + function isInferentialContext(mapper) { + return mapper && mapper !== identityMapper; + } + function checkArrayLiteral(node, contextualType, contextualMapper) { + var contextualElementType = contextualType && getIndexTypeOfType(contextualType, 1 /* Number */); + var elementTypes = []; + ts.forEach(node.elements, function (element) { + if (element.kind !== 142 /* OmittedExpression */) { + var type = checkExpression(element, contextualElementType, contextualMapper); + if (!ts.contains(elementTypes, type)) + elementTypes.push(type); + } + }); + var elementType = getBestCommonType(elementTypes, isInferentialContext(contextualMapper) ? undefined : contextualElementType, true); + if (!elementType) + elementType = elementTypes.length ? emptyObjectType : undefinedType; + return createArrayType(elementType); + } + function isNumericName(name) { + return !isNaN(name); + } + function getContextualTypeForProperty(type, name) { + var prop = getPropertyOfType(type, name); + if (prop) + return getTypeOfSymbol(prop); + return isNumericName(name) && getIndexTypeOfType(type, 1 /* Number */) || getIndexTypeOfType(type, 0 /* String */); + } + function checkObjectLiteral(node, contextualType, contextualMapper) { + var members = node.symbol.members; + var properties = {}; + for (var id in members) { + if (ts.hasProperty(members, id)) { + var member = members[id]; + if (member.flags & 2 /* Property */) { + var contextualPropType = contextualType && getContextualTypeForProperty(contextualType, member.name); + var type = checkExpression(member.declarations[0].initializer, contextualPropType, contextualMapper); + var prop = createSymbol(2 /* Property */ | 33554432 /* Transient */, member.name); + prop.declarations = member.declarations; + prop.parent = member.parent; + if (member.valueDeclaration) + prop.valueDeclaration = member.valueDeclaration; + prop.type = type; + member = prop; + } + else { + var getAccessor = getDeclarationOfKind(member, 118 /* GetAccessor */); + if (getAccessor) { + checkAccessorDeclaration(getAccessor); + } + var setAccessor = getDeclarationOfKind(member, 119 /* SetAccessor */); + if (setAccessor) { + checkAccessorDeclaration(setAccessor); + } + } + properties[member.name] = member; + } + } + var stringIndexType = getIndexType(properties, 0 /* String */); + var numberIndexType = getIndexType(properties, 1 /* Number */); + return createAnonymousType(node.symbol, properties, emptyArray, emptyArray, stringIndexType, numberIndexType); + function getIndexType(properties, kind) { + if (contextualType) { + var indexType = getIndexTypeOfType(contextualType, kind); + if (indexType) { + var propTypes = []; + for (var id in properties) { + if (ts.hasProperty(properties, id)) { + if (kind === 0 /* String */ || isNumericName(id)) { + var type = getTypeOfSymbol(properties[id]); + if (!ts.contains(propTypes, type)) + propTypes.push(type); + } + } + } + return getBestCommonType(propTypes, isInferentialContext(contextualMapper) ? undefined : indexType); + } + } + } + } + function getDeclarationKindFromSymbol(s) { + return s.flags & 67108864 /* Prototype */ ? 115 /* Property */ : s.valueDeclaration.kind; + } + function getDeclarationFlagsFromSymbol(s) { + return s.flags & 67108864 /* Prototype */ ? 16 /* Public */ | 64 /* Static */ : s.valueDeclaration.flags; + } + function checkPropertyAccess(node) { + var type = checkExpression(node.left); + if (type === unknownType) + return type; + if (type !== anyType) { + var apparentType = getApparentType(getWidenedType(type)); + if (apparentType === unknownType) { + return unknownType; + } + var prop = getPropertyOfApparentType(apparentType, node.right.text); + if (!prop) { + if (node.right.text) { + error(node.right, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.identifierToString(node.right), typeToString(type)); + } + return unknownType; + } + getNodeLinks(node).resolvedSymbol = prop; + if (prop.parent && prop.parent.flags & 16 /* Class */) { + if (node.left.kind === 81 /* SuperKeyword */ && getDeclarationKindFromSymbol(prop) !== 116 /* Method */) { + error(node.right, ts.Diagnostics.Only_public_methods_of_the_base_class_are_accessible_via_the_super_keyword); + } + else if (getDeclarationFlagsFromSymbol(prop) & 32 /* Private */) { + var classDeclaration = getAncestor(node, 169 /* ClassDeclaration */); + if (!classDeclaration || !ts.contains(prop.parent.declarations, classDeclaration)) { + error(node, ts.Diagnostics.Property_0_is_inaccessible, getFullyQualifiedName(prop)); + } + } + } + return getTypeOfSymbol(prop); + } + return anyType; + } + function checkIndexedAccess(node) { + var objectType = checkExpression(node.object); + var indexType = checkExpression(node.index); + if (objectType === unknownType) + return unknownType; + var apparentType = getApparentType(objectType); + if (apparentType === unknownType) { + return unknownType; + } + if (node.index.kind === 3 /* StringLiteral */ || node.index.kind === 2 /* NumericLiteral */) { + var name = node.index.text; + var prop = getPropertyOfApparentType(apparentType, name); + if (prop) { + return getTypeOfSymbol(prop); + } + } + if (indexType.flags & (1 /* Any */ | ts.TypeFlags.StringLike | ts.TypeFlags.NumberLike)) { + if (indexType.flags & (1 /* Any */ | ts.TypeFlags.NumberLike)) { + var numberIndexType = getIndexTypeOfType(apparentType, 1 /* Number */); + if (numberIndexType) { + return numberIndexType; + } + } + var stringIndexType = getIndexTypeOfType(apparentType, 0 /* String */); + if (stringIndexType) { + return stringIndexType; + } + if (program.getCompilerOptions().noImplicitAny && objectType !== anyType) { + error(node, ts.Diagnostics.Index_signature_of_object_type_implicitly_has_an_any_type); + } + return anyType; + } + error(node, ts.Diagnostics.An_index_expression_argument_must_be_of_type_string_number_or_any); + return unknownType; + } + function checkUntypedCall(node) { + ts.forEach(node.arguments, function (argument) { + checkExpression(argument); + }); + return anyType; + } + function checkErrorCall(node) { + checkUntypedCall(node); + return unknownType; + } + function isCandidateSignature(node, signature) { + var args = node.arguments || emptyArray; + return args.length >= signature.minArgumentCount && (signature.hasRestParameter || args.length <= signature.parameters.length) && (!node.typeArguments || signature.typeParameters && node.typeArguments.length === signature.typeParameters.length); + } + function collectCandidates(node, signatures) { + var result = []; + var lastParent; + var pos; + for (var i = 0; i < signatures.length; i++) { + var signature = signatures[i]; + if (isCandidateSignature(node, signature)) { + var parent = signature.declaration ? signature.declaration.parent : undefined; + if (lastParent && parent === lastParent) { + pos++; + } + else { + lastParent = parent; + pos = 0; + } + for (var j = result.length; j > pos; j--) { + result[j] = result[j - 1]; + } + result[pos] = signature; + } + } + return result; + } + function getSingleCallSignature(type) { + if (type.flags & ts.TypeFlags.ObjectType) { + var resolved = resolveObjectTypeMembers(type); + if (resolved.callSignatures.length === 1 && resolved.constructSignatures.length === 0 && resolved.properties.length === 0 && !resolved.stringIndexType && !resolved.numberIndexType) { + return resolved.callSignatures[0]; + } + } + return undefined; + } + function instantiateSignatureInContextOf(signature, contextualSignature, contextualMapper) { + var context = createInferenceContext(signature.typeParameters); + forEachMatchingParameterType(contextualSignature, signature, function (source, target) { + inferTypes(context, instantiateType(source, contextualMapper), target); + }); + return getSignatureInstantiation(signature, getInferredTypes(context)); + } + function inferentiallyTypeExpession(expr, contextualType, contextualMapper) { + var type = checkExpression(expr, contextualType, contextualMapper); + var signature = getSingleCallSignature(type); + if (signature && signature.typeParameters) { + var contextualSignature = getSingleCallSignature(contextualType); + if (contextualSignature && !contextualSignature.typeParameters) { + type = getOrCreateTypeFromSignature(instantiateSignatureInContextOf(signature, contextualSignature, contextualMapper)); + } + } + return type; + } + function inferTypeArguments(signature, args, excludeArgument) { + var typeParameters = signature.typeParameters; + var context = createInferenceContext(typeParameters); + var mapper = createInferenceMapper(context); + for (var i = 0; i < args.length; i++) { + if (!excludeArgument || excludeArgument[i] === undefined) { + var parameterType = getTypeAtPosition(signature, i); + inferTypes(context, inferentiallyTypeExpession(args[i], parameterType, mapper), parameterType); + } + } + if (excludeArgument) { + for (var i = 0; i < args.length; i++) { + if (excludeArgument[i] === false) { + var parameterType = getTypeAtPosition(signature, i); + inferTypes(context, inferentiallyTypeExpession(args[i], parameterType, mapper), parameterType); + } + } + } + return getInferredTypes(context); + } + function checkTypeArguments(signature, typeArguments) { + var typeParameters = signature.typeParameters; + var result = []; + for (var i = 0; i < typeParameters.length; i++) { + var typeArgNode = typeArguments[i]; + var typeArgument = getTypeFromTypeNode(typeArgNode); + var constraint = getConstraintOfTypeParameter(typeParameters[i]); + if (constraint) { + checkTypeAssignableTo(typeArgument, constraint, typeArgNode, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1_Colon, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1); + } + result.push(typeArgument); + } + return result; + } + function checkApplicableSignature(node, signature, relation, excludeArgument, reportErrors) { + if (node.arguments) { + for (var i = 0; i < node.arguments.length; i++) { + var arg = node.arguments[i]; + var paramType = getTypeAtPosition(signature, i); + var argType = arg.kind === 3 /* StringLiteral */ && !reportErrors ? getStringLiteralType(arg) : checkExpression(arg, paramType, excludeArgument && excludeArgument[i] ? identityMapper : undefined); + var isValidArgument = checkTypeRelatedTo(argType, paramType, relation, reportErrors ? arg : undefined, ts.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1, ts.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1); + if (!isValidArgument) { + return false; + } + } + } + return true; + } + function checkCall(node, signatures) { + ts.forEach(node.typeArguments, checkSourceElement); + var candidates = collectCandidates(node, signatures); + if (!candidates.length) { + error(node, ts.Diagnostics.Supplied_parameters_do_not_match_any_signature_of_call_target); + return checkErrorCall(node); + } + var args = node.arguments || emptyArray; + var excludeArgument; + for (var i = 0; i < args.length; i++) { + if (isContextSensitiveExpression(args[i])) { + if (!excludeArgument) + excludeArgument = new Array(args.length); + excludeArgument[i] = true; + } + } + var relation = candidates.length === 1 ? assignableRelation : subtypeRelation; + while (true) { + for (var i = 0; i < candidates.length; i++) { + while (true) { + var candidate = candidates[i]; + if (candidate.typeParameters) { + var typeArguments = node.typeArguments ? checkTypeArguments(candidate, node.typeArguments) : inferTypeArguments(candidate, args, excludeArgument); + candidate = getSignatureInstantiation(candidate, typeArguments); + } + if (!checkApplicableSignature(node, candidate, relation, excludeArgument, false)) { + break; + } + var index = excludeArgument ? ts.indexOf(excludeArgument, true) : -1; + if (index < 0) { + return getReturnTypeOfSignature(candidate); + } + excludeArgument[index] = false; + } + } + if (relation === assignableRelation) { + break; + } + relation = assignableRelation; + } + checkApplicableSignature(node, candidate, relation, undefined, true); + return checkErrorCall(node); + } + function checkCallExpression(node) { + if (node.func.kind === 81 /* SuperKeyword */) { + var superType = checkSuperExpression(node.func, true); + if (superType !== unknownType) { + checkCall(node, getSignaturesOfType(superType, 1 /* Construct */)); + } + else { + checkUntypedCall(node); + } + return voidType; + } + var funcType = checkExpression(node.func); + if (funcType === unknownType) { + return checkErrorCall(node); + } + var apparentType = getApparentType(funcType); + if (apparentType === unknownType) { + return checkErrorCall(node); + } + var callSignatures = getSignaturesOfType(apparentType, 0 /* Call */); + var constructSignatures = getSignaturesOfType(apparentType, 1 /* Construct */); + if ((funcType === anyType) || (!callSignatures.length && !constructSignatures.length && isTypeAssignableTo(funcType, globalFunctionType))) { + if (node.typeArguments) { + error(node, ts.Diagnostics.Untyped_function_calls_may_not_accept_type_arguments); + } + return checkUntypedCall(node); + } + if (!callSignatures.length) { + if (constructSignatures.length) { + error(node, ts.Diagnostics.Value_of_type_0_is_not_callable_Did_you_mean_to_include_new, typeToString(funcType)); + } + else { + error(node, ts.Diagnostics.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature); + } + return checkErrorCall(node); + } + return checkCall(node, callSignatures); + } + function checkNewExpression(node) { + var expressionType = checkExpression(node.func); + if (expressionType === unknownType) { + return checkErrorCall(node); + } + if (expressionType === anyType) { + if (node.typeArguments) { + error(node, ts.Diagnostics.Untyped_function_calls_may_not_accept_type_arguments); + } + return checkUntypedCall(node); + } + expressionType = getApparentType(expressionType); + if (expressionType === unknownType) { + return checkErrorCall(node); + } + var constructSignatures = getSignaturesOfType(expressionType, 1 /* Construct */); + if (constructSignatures.length) { + return checkCall(node, constructSignatures); + } + var callSignatures = getSignaturesOfType(expressionType, 0 /* Call */); + if (callSignatures.length) { + var type = checkCall(node, callSignatures); + if (type !== voidType) { + error(node, ts.Diagnostics.Only_a_void_function_can_be_called_with_the_new_keyword); + } + if (program.getCompilerOptions().noImplicitAny) { + error(node, ts.Diagnostics.new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type); + } + return anyType; + } + error(node, ts.Diagnostics.Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature); + return checkErrorCall(node); + } + function checkTypeAssertion(node) { + var targetType = getTypeFromTypeNode(node.type); + if (targetType === unknownType) + return unknownType; + var exprType = checkExpression(node.operand, targetType); + var widenedType = getWidenedType(exprType); + if (!(isTypeAssignableTo(exprType, targetType) || isTypeAssignableTo(targetType, widenedType))) { + checkTypeAssignableTo(targetType, widenedType, node, ts.Diagnostics.Neither_type_0_nor_type_1_is_assignable_to_the_other_Colon, ts.Diagnostics.Neither_type_0_nor_type_1_is_assignable_to_the_other); + } + return targetType; + } + function getContextualSignature(contextualType) { + if (contextualType) { + var signatures = getSignaturesOfType(contextualType, 0 /* Call */); + if (signatures.length === 1) { + var signature = signatures[0]; + if (!signature.typeParameters) { + return signature; + } + } + } + } + function getTypeAtPosition(signature, pos) { + return signature.hasRestParameter ? pos < signature.parameters.length - 1 ? getTypeOfSymbol(signature.parameters[pos]) : getRestTypeOfSignature(signature) : pos < signature.parameters.length ? getTypeOfSymbol(signature.parameters[pos]) : anyType; + } + function assignContextualParameterTypes(signature, context, mapper) { + var len = signature.parameters.length - (signature.hasRestParameter ? 1 : 0); + for (var i = 0; i < len; i++) { + var parameter = signature.parameters[i]; + var links = getSymbolLinks(parameter); + if (!links.type) { + links.type = instantiateType(getTypeAtPosition(context, i), mapper); + } + } + if (signature.hasRestParameter && context.hasRestParameter && signature.parameters.length >= context.parameters.length) { + var parameter = signature.parameters[signature.parameters.length - 1]; + var links = getSymbolLinks(parameter); + if (!links.type) { + links.type = instantiateType(getTypeOfSymbol(context.parameters[context.parameters.length - 1]), mapper); + } + } + } + function getReturnTypeFromBody(func, contextualType, contextualMapper) { + if (func.body.kind !== 168 /* FunctionBlock */) { + var unwidenedType = checkAndMarkExpression(func.body, contextualType, contextualMapper); + var widenedType = getWidenedType(unwidenedType); + if (program.getCompilerOptions().noImplicitAny && widenedType !== unwidenedType && getInnermostTypeOfNestedArrayTypes(widenedType) === anyType) { + error(func, ts.Diagnostics.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeToString(widenedType)); + } + return widenedType; + } + var types = checkAndAggregateReturnExpressionTypes(func.body, contextualType, contextualMapper); + if (types.length > 0) { + var commonType = getBestCommonType(types, undefined, true); + if (!commonType) { + error(func, ts.Diagnostics.No_best_common_type_exists_among_return_expressions); + return unknownType; + } + var widenedType = getWidenedType(commonType); + if (program.getCompilerOptions().noImplicitAny && widenedType !== commonType && getInnermostTypeOfNestedArrayTypes(widenedType) === anyType) { + var typeName = typeToString(widenedType); + if (func.name) { + error(func, ts.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type, ts.identifierToString(func.name), typeName); + } + else { + error(func, ts.Diagnostics.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeName); + } + } + return widenedType; + } + return voidType; + } + function forEachReturnStatement(body, visitor) { + return traverse(body); + function traverse(node) { + switch (node.kind) { + case 154 /* ReturnStatement */: + return visitor(node); + case 143 /* Block */: + case 168 /* FunctionBlock */: + case 147 /* IfStatement */: + case 148 /* DoStatement */: + case 149 /* WhileStatement */: + case 150 /* ForStatement */: + case 151 /* ForInStatement */: + case 155 /* WithStatement */: + case 156 /* SwitchStatement */: + case 157 /* CaseClause */: + case 158 /* DefaultClause */: + case 159 /* LabelledStatement */: + case 161 /* TryStatement */: + case 162 /* TryBlock */: + case 163 /* CatchBlock */: + case 164 /* FinallyBlock */: + return ts.forEachChild(node, traverse); + } + } + } + function checkAndAggregateReturnExpressionTypes(body, contextualType, contextualMapper) { + var aggregatedTypes = []; + forEachReturnStatement(body, function (returnStatement) { + var expr = returnStatement.expression; + if (expr) { + var type = checkAndMarkExpression(expr, contextualType, contextualMapper); + if (!ts.contains(aggregatedTypes, type)) { + aggregatedTypes.push(type); + } + } + }); + return aggregatedTypes; + } + function bodyContainsAReturnStatement(funcBody) { + return forEachReturnStatement(funcBody, function (returnStatement) { + return true; + }); + } + function bodyContainsSingleThrowStatement(body) { + return (body.statements.length === 1) && (body.statements[0].kind === 160 /* ThrowStatement */); + } + function checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(func, returnType) { + if (returnType === voidType || returnType === anyType) { + return; + } + if (!func.body || func.body.kind !== 168 /* FunctionBlock */) { + return; + } + var bodyBlock = func.body; + if (bodyContainsAReturnStatement(bodyBlock)) { + return; + } + if (bodyContainsSingleThrowStatement(bodyBlock)) { + return; + } + error(func.type, ts.Diagnostics.A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_or_consist_of_a_single_throw_statement); + } + function checkFunctionExpression(node, contextualType, contextualMapper) { + if (contextualMapper === identityMapper) { + return anyFunctionType; + } + var type = getTypeOfSymbol(node.symbol); + var links = getNodeLinks(node); + if (!(links.flags & 1 /* TypeChecked */)) { + var signature = getSignaturesOfType(type, 0 /* Call */)[0]; + var contextualSignature = getContextualSignature(contextualType); + if (contextualSignature) { + if (!node.typeParameters && !ts.forEach(node.parameters, function (p) { return p.type; })) { + assignContextualParameterTypes(signature, contextualSignature, contextualMapper || identityMapper); + } + if (!node.type) { + signature.resolvedReturnType = resolvingType; + var returnType = getReturnTypeFromBody(node, getReturnTypeOfSignature(contextualSignature), contextualMapper); + if (signature.resolvedReturnType === resolvingType) { + signature.resolvedReturnType = returnType; + } + } + else { + checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(node, getTypeFromTypeNode(node.type)); + } + } + checkSignatureDeclaration(node); + if (node.body.kind === 168 /* FunctionBlock */) { + checkSourceElement(node.body); + } + else { + var returnType = getReturnTypeOfSignature(signature); + if (node.type) { + checkTypeAssignableTo(checkExpression(node.body, returnType), returnType, node.body, undefined, undefined); + } + } + links.flags |= 1 /* TypeChecked */; + } + return type; + } + function checkArithmeticOperandType(operand, type, diagnostic) { + if (!(type.flags & (1 /* Any */ | ts.TypeFlags.NumberLike))) { + error(operand, diagnostic); + return false; + } + return true; + } + function checkReferenceExpression(n, message) { + function findSymbol(n) { + var symbol = getNodeLinks(n).resolvedSymbol; + return symbol && getExportSymbolOfValueSymbolIfExported(symbol); + } + function isReferenceOrErrorExpression(n) { + switch (n.kind) { + case 55 /* Identifier */: + var symbol = findSymbol(n); + return !symbol || symbol === unknownSymbol || symbol === argumentsSymbol || (symbol.flags & 1 /* Variable */) !== 0; + case 130 /* PropertyAccess */: + var symbol = findSymbol(n); + return !symbol || symbol === unknownSymbol || (symbol.flags & ~4 /* EnumMember */) !== 0; + case 131 /* IndexedAccess */: + return true; + case 135 /* ParenExpression */: + return isReferenceOrErrorExpression(n.expression); + default: + return false; + } + } + if (!isReferenceOrErrorExpression(n)) { + error(n, message); + return false; + } + return true; + } + function checkPrefixExpression(node) { + var operandType = checkExpression(node.operand); + switch (node.operator) { + case 24 /* PlusToken */: + case 25 /* MinusToken */: + case 38 /* TildeToken */: + return numberType; + case 37 /* ExclamationToken */: + case 64 /* DeleteKeyword */: + return booleanType; + case 87 /* TypeOfKeyword */: + return stringType; + case 89 /* VoidKeyword */: + return undefinedType; + case 29 /* PlusPlusToken */: + case 30 /* MinusMinusToken */: + var ok = checkArithmeticOperandType(node.operand, operandType, ts.Diagnostics.An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type); + if (ok) { + checkReferenceExpression(node.operand, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer); + } + return numberType; + } + return unknownType; + } + function checkPostfixExpression(node) { + var operandType = checkExpression(node.operand); + var ok = checkArithmeticOperandType(node.operand, operandType, ts.Diagnostics.An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type); + if (ok) { + checkReferenceExpression(node.operand, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer); + } + return numberType; + } + function isTypeAnyTypeObjectTypeOrTypeParameter(type) { + return type === anyType || ((type.flags & (ts.TypeFlags.ObjectType | 512 /* TypeParameter */)) !== 0); + } + function checkInstanceOfExpression(node, leftType, rightType) { + if (!isTypeAnyTypeObjectTypeOrTypeParameter(leftType)) { + error(node.left, ts.Diagnostics.The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter); + } + if (rightType !== anyType && !isTypeSubtypeOf(rightType, globalFunctionType)) { + error(node.right, ts.Diagnostics.The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type); + } + return booleanType; + } + function checkInExpression(node, leftType, rightType) { + if (leftType !== anyType && leftType !== stringType && leftType !== numberType) { + error(node.left, ts.Diagnostics.The_left_hand_side_of_an_in_expression_must_be_of_types_any_string_or_number); + } + if (!isTypeAnyTypeObjectTypeOrTypeParameter(rightType)) { + error(node.right, ts.Diagnostics.The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter); + } + return booleanType; + } + function checkBinaryExpression(node, contextualType, contextualMapper) { + var operator = node.operator; + var leftContextualType = operator === 40 /* BarBarToken */ ? contextualType : undefined; + var leftType = checkExpression(node.left, leftContextualType, contextualMapper); + var rightContextualType = operator >= ts.SyntaxKind.FirstAssignment && operator <= ts.SyntaxKind.LastAssignment ? leftType : operator === 40 /* BarBarToken */ ? contextualType || leftType : undefined; + var rightType = checkExpression(node.right, rightContextualType, contextualMapper); + switch (operator) { + case 26 /* AsteriskToken */: + case 46 /* AsteriskEqualsToken */: + case 27 /* SlashToken */: + case 47 /* SlashEqualsToken */: + case 28 /* PercentToken */: + case 48 /* PercentEqualsToken */: + case 25 /* MinusToken */: + case 45 /* MinusEqualsToken */: + case 31 /* LessThanLessThanToken */: + case 49 /* LessThanLessThanEqualsToken */: + case 32 /* GreaterThanGreaterThanToken */: + case 50 /* GreaterThanGreaterThanEqualsToken */: + case 33 /* GreaterThanGreaterThanGreaterThanToken */: + case 51 /* GreaterThanGreaterThanGreaterThanEqualsToken */: + case 35 /* BarToken */: + case 53 /* BarEqualsToken */: + case 36 /* CaretToken */: + case 54 /* CaretEqualsToken */: + case 34 /* AmpersandToken */: + case 52 /* AmpersandEqualsToken */: + if (leftType.flags & (32 /* Undefined */ | 64 /* Null */)) + leftType = rightType; + if (rightType.flags & (32 /* Undefined */ | 64 /* Null */)) + rightType = leftType; + var leftOk = checkArithmeticOperandType(node.left, leftType, ts.Diagnostics.The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type); + var rightOk = checkArithmeticOperandType(node.right, rightType, ts.Diagnostics.The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type); + if (leftOk && rightOk) { + checkAssignmentOperator(numberType); + } + return numberType; + case 24 /* PlusToken */: + case 44 /* PlusEqualsToken */: + if (leftType.flags & (32 /* Undefined */ | 64 /* Null */)) + leftType = rightType; + if (rightType.flags & (32 /* Undefined */ | 64 /* Null */)) + rightType = leftType; + var resultType; + if (leftType.flags & ts.TypeFlags.NumberLike && rightType.flags & ts.TypeFlags.NumberLike) { + resultType = numberType; + } + else if (leftType.flags & ts.TypeFlags.StringLike || rightType.flags & ts.TypeFlags.StringLike) { + resultType = stringType; + } + else if (leftType.flags & 1 /* Any */ || leftType === unknownType || rightType.flags & 1 /* Any */ || rightType === unknownType) { + resultType = anyType; + } + if (!resultType) { + reportOperatorError(); + return anyType; + } + if (operator === 44 /* PlusEqualsToken */) { + checkAssignmentOperator(resultType); + } + return resultType; + case 19 /* EqualsEqualsToken */: + case 20 /* ExclamationEqualsToken */: + case 21 /* EqualsEqualsEqualsToken */: + case 22 /* ExclamationEqualsEqualsToken */: + case 15 /* LessThanToken */: + case 16 /* GreaterThanToken */: + case 17 /* LessThanEqualsToken */: + case 18 /* GreaterThanEqualsToken */: + if (!isTypeSubtypeOf(leftType, rightType) && !isTypeSubtypeOf(rightType, leftType)) { + reportOperatorError(); + } + return booleanType; + case 77 /* InstanceOfKeyword */: + return checkInstanceOfExpression(node, leftType, rightType); + case 76 /* InKeyword */: + return checkInExpression(node, leftType, rightType); + case 39 /* AmpersandAmpersandToken */: + return rightType; + case 40 /* BarBarToken */: + return getBestCommonType([leftType, rightType], isInferentialContext(contextualMapper) ? undefined : contextualType); + case 43 /* EqualsToken */: + checkAssignmentOperator(rightType); + return rightType; + case 14 /* CommaToken */: + return rightType; + } + function checkAssignmentOperator(valueType) { + if (operator >= ts.SyntaxKind.FirstAssignment && operator <= ts.SyntaxKind.LastAssignment) { + var ok = checkReferenceExpression(node.left, ts.Diagnostics.Invalid_left_hand_side_of_assignment_expression); + if (ok) { + checkTypeAssignableTo(valueType, leftType, node.left, undefined, undefined); + } + } + } + function reportOperatorError() { + error(node, ts.Diagnostics.Operator_0_cannot_be_applied_to_types_1_and_2, ts.tokenToString(node.operator), typeToString(leftType), typeToString(rightType)); + } + } + function checkConditionalExpression(node, contextualType, contextualMapper) { + checkExpression(node.condition); + var type1 = checkExpression(node.whenTrue, contextualType, contextualMapper); + var type2 = checkExpression(node.whenFalse, contextualType, contextualMapper); + var resultType = getBestCommonType([type1, type2], isInferentialContext(contextualMapper) ? undefined : contextualType, true); + if (!resultType) { + if (contextualType && !isInferentialContext(contextualMapper)) { + error(node, ts.Diagnostics.No_best_common_type_exists_between_0_1_and_2, typeToString(contextualType), typeToString(type1), typeToString(type2)); + } + else { + error(node, ts.Diagnostics.No_best_common_type_exists_between_0_and_1, typeToString(type1), typeToString(type2)); + } + resultType = emptyObjectType; + } + return resultType; + } + function checkAndMarkExpression(node, contextualType, contextualMapper) { + var result = checkExpression(node, contextualType, contextualMapper); + getNodeLinks(node).flags |= 1 /* TypeChecked */; + return result; + } + function checkExpression(node, contextualType, contextualMapper) { + switch (node.kind) { + case 55 /* Identifier */: + return checkIdentifier(node); + case 83 /* ThisKeyword */: + return checkThisExpression(node); + case 81 /* SuperKeyword */: + return checkSuperExpression(node, false); + case 79 /* NullKeyword */: + return nullType; + case 85 /* TrueKeyword */: + case 70 /* FalseKeyword */: + return booleanType; + case 2 /* NumericLiteral */: + return numberType; + case 3 /* StringLiteral */: + return stringType; + case 4 /* RegularExpressionLiteral */: + return globalRegExpType; + case 112 /* QualifiedName */: + return checkPropertyAccess(node); + case 127 /* ArrayLiteral */: + return checkArrayLiteral(node, contextualType, contextualMapper); + case 128 /* ObjectLiteral */: + return checkObjectLiteral(node, contextualType, contextualMapper); + case 130 /* PropertyAccess */: + return checkPropertyAccess(node); + case 131 /* IndexedAccess */: + return checkIndexedAccess(node); + case 132 /* CallExpression */: + return checkCallExpression(node); + case 133 /* NewExpression */: + return checkNewExpression(node); + case 134 /* TypeAssertion */: + return checkTypeAssertion(node); + case 135 /* ParenExpression */: + return checkExpression(node.expression); + case 136 /* FunctionExpression */: + case 137 /* ArrowFunction */: + return checkFunctionExpression(node, contextualType, contextualMapper); + case 138 /* PrefixOperator */: + return checkPrefixExpression(node); + case 139 /* PostfixOperator */: + return checkPostfixExpression(node); + case 140 /* BinaryExpression */: + return checkBinaryExpression(node, contextualType, contextualMapper); + case 141 /* ConditionalExpression */: + return checkConditionalExpression(node, contextualType, contextualMapper); + } + return unknownType; + } + function checkTypeParameter(node) { + checkTypeNameIsReserved(node.name, ts.Diagnostics.Type_parameter_name_cannot_be_0); + checkSourceElement(node.constraint); + checkTypeParameterHasIllegalReferencesInConstraint(node); + } + function checkParameter(parameterDeclaration) { + checkVariableDeclaration(parameterDeclaration); + checkCollisionWithIndexVariableInGeneratedCode(parameterDeclaration, parameterDeclaration.name); + if (parameterDeclaration.flags & (16 /* Public */ | 32 /* Private */) && !(parameterDeclaration.parent.kind === 117 /* Constructor */ && parameterDeclaration.parent.body)) { + error(parameterDeclaration, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation); + } + if (parameterDeclaration.flags & 8 /* Rest */) { + if (!isArrayType(getTypeOfSymbol(parameterDeclaration.symbol))) { + error(parameterDeclaration, ts.Diagnostics.A_rest_parameter_must_be_of_an_array_type); + } + } + else { + if (parameterDeclaration.initializer && !parameterDeclaration.parent.body) { + error(parameterDeclaration, ts.Diagnostics.A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation); + } + } + function checkReferencesInInitializer(n) { + if (n.kind === 55 /* Identifier */) { + var referencedSymbol = getNodeLinks(n).resolvedSymbol; + if (referencedSymbol && referencedSymbol !== unknownSymbol && getSymbol(parameterDeclaration.parent.locals, referencedSymbol.name, ts.SymbolFlags.Value) === referencedSymbol) { + if (referencedSymbol.valueDeclaration.kind === 114 /* Parameter */) { + if (referencedSymbol.valueDeclaration === parameterDeclaration) { + error(n, ts.Diagnostics.Parameter_0_cannot_be_referenced_in_its_initializer, ts.identifierToString(parameterDeclaration.name)); + return; + } + var enclosingOrReferencedParameter = ts.forEach(parameterDeclaration.parent.parameters, function (p) { return p === parameterDeclaration || p === referencedSymbol.valueDeclaration ? p : undefined; }); + if (enclosingOrReferencedParameter === referencedSymbol.valueDeclaration) { + return; + } + } + error(n, ts.Diagnostics.Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it, ts.identifierToString(parameterDeclaration.name), ts.identifierToString(n)); + } + } + else { + ts.forEachChild(n, checkReferencesInInitializer); + } + } + if (parameterDeclaration.initializer) { + checkReferencesInInitializer(parameterDeclaration.initializer); + } + } + function checkSignatureDeclaration(node) { + checkTypeParameters(node.typeParameters); + ts.forEach(node.parameters, checkParameter); + if (node.type) { + checkSourceElement(node.type); + } + checkCollisionWithCapturedSuperVariable(node, node.name); + checkCollisionWithCapturedThisVariable(node, node.name); + checkCollisionWithArgumentsInGeneratedCode(node); + if (program.getCompilerOptions().noImplicitAny && !node.type) { + switch (node.kind) { + case 121 /* ConstructSignature */: + error(node, ts.Diagnostics.Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type); + break; + case 120 /* CallSignature */: + error(node, ts.Diagnostics.Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type); + break; + } + } + checkSpecializedSignatureDeclaration(node); + } + function checkTypeForDuplicateIndexSignatures(node) { + if (node.kind === 170 /* InterfaceDeclaration */) { + var nodeSymbol = getSymbolOfNode(node); + if (nodeSymbol.declarations.length > 0 && nodeSymbol.declarations[0] !== node) { + return; + } + } + var indexSymbol = getIndexSymbol(getSymbolOfNode(node)); + if (indexSymbol) { + var seenNumericIndexer = false; + var seenStringIndexer = false; + for (var i = 0, len = indexSymbol.declarations.length; i < len; ++i) { + var declaration = indexSymbol.declarations[i]; + if (declaration.parameters.length == 1 && declaration.parameters[0].type) { + switch (declaration.parameters[0].type.kind) { + case 110 /* StringKeyword */: + if (!seenStringIndexer) { + seenStringIndexer = true; + } + else { + error(declaration, ts.Diagnostics.Duplicate_string_index_signature); + } + break; + case 108 /* NumberKeyword */: + if (!seenNumericIndexer) { + seenNumericIndexer = true; + } + else { + error(declaration, ts.Diagnostics.Duplicate_number_index_signature); + } + break; + } + } + } + } + } + function checkPropertyDeclaration(node) { + checkVariableDeclaration(node); + } + function checkMethodDeclaration(node) { + checkFunctionDeclaration(node); + } + function checkConstructorDeclaration(node) { + checkSignatureDeclaration(node); + checkSourceElement(node.body); + var symbol = getSymbolOfNode(node); + var firstDeclaration = getDeclarationOfKind(symbol, node.kind); + if (node === firstDeclaration) { + checkFunctionOrConstructorSymbol(symbol); + } + if (!node.body) { + return; + } + function isSuperCallExpression(n) { + return n.kind === 132 /* CallExpression */ && n.func.kind === 81 /* SuperKeyword */; + } + function containsSuperCall(n) { + if (isSuperCallExpression(n)) { + return true; + } + switch (n.kind) { + case 136 /* FunctionExpression */: + case 167 /* FunctionDeclaration */: + case 137 /* ArrowFunction */: + case 128 /* ObjectLiteral */: + return false; + default: + return ts.forEachChild(n, containsSuperCall); + } + } + function markThisReferencesAsErrors(n) { + if (n.kind === 83 /* ThisKeyword */) { + error(n, ts.Diagnostics.this_cannot_be_referenced_in_current_location); + } + else if (n.kind !== 136 /* FunctionExpression */ && n.kind !== 167 /* FunctionDeclaration */) { + ts.forEachChild(n, markThisReferencesAsErrors); + } + } + function isInstancePropertyWithInitializer(n) { + return n.kind === 115 /* Property */ && !(n.flags & 64 /* Static */) && !!n.initializer; + } + if (node.parent.baseType) { + if (containsSuperCall(node.body)) { + var superCallShouldBeFirst = ts.forEach(node.parent.members, isInstancePropertyWithInitializer) || ts.forEach(node.parameters, function (p) { return p.flags & (16 /* Public */ | 32 /* Private */); }); + if (superCallShouldBeFirst) { + var statements = node.body.statements; + if (!statements.length || statements[0].kind !== 146 /* ExpressionStatement */ || !isSuperCallExpression(statements[0].expression)) { + error(node, ts.Diagnostics.A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties); + } + else { + markThisReferencesAsErrors(statements[0].expression); + } + } + } + else { + error(node, ts.Diagnostics.Constructors_for_derived_classes_must_contain_a_super_call); + } + } + } + function checkAccessorDeclaration(node) { + if (node.kind === 118 /* GetAccessor */) { + if (!ts.isInAmbientContext(node) && node.body && !(bodyContainsAReturnStatement(node.body) || bodyContainsSingleThrowStatement(node.body))) { + error(node.name, ts.Diagnostics.A_get_accessor_must_return_a_value_or_consist_of_a_single_throw_statement); + } + } + var otherKind = node.kind === 118 /* GetAccessor */ ? 119 /* SetAccessor */ : 118 /* GetAccessor */; + var otherAccessor = getDeclarationOfKind(node.symbol, otherKind); + if (otherAccessor) { + var visibilityFlags = 32 /* Private */ | 16 /* Public */; + if (((node.flags & visibilityFlags) !== (otherAccessor.flags & visibilityFlags))) { + error(node.name, ts.Diagnostics.Getter_and_setter_accessors_do_not_agree_in_visibility); + } + var thisType = getAnnotatedAccessorType(node); + var otherType = getAnnotatedAccessorType(otherAccessor); + if (thisType && otherType) { + if (!isTypeIdenticalTo(thisType, otherType)) { + error(node, ts.Diagnostics.get_and_set_accessor_must_have_the_same_type); + } + } + } + checkFunctionDeclaration(node); + checkAndStoreTypeOfAccessors(getSymbolOfNode(node)); + } + function checkTypeReference(node) { + var type = getTypeFromTypeReferenceNode(node); + if (type !== unknownType && node.typeArguments) { + var len = node.typeArguments.length; + for (var i = 0; i < len; i++) { + checkSourceElement(node.typeArguments[i]); + var constraint = getConstraintOfTypeParameter(type.target.typeParameters[i]); + if (constraint) { + var typeArgument = type.typeArguments[i]; + checkTypeAssignableTo(typeArgument, constraint, node, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1_Colon, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1); + } + } + } + } + function checkTypeQuery(node) { + getTypeFromTypeQueryNode(node); + } + function checkTypeLiteral(node) { + ts.forEach(node.members, checkSourceElement); + var type = getTypeFromTypeLiteralNode(node); + checkIndexConstraints(type); + checkTypeForDuplicateIndexSignatures(node); + } + function checkArrayType(node) { + getTypeFromArrayTypeNode(node); + } + function isPrivateWithinAmbient(node) { + return (node.flags & 32 /* Private */) && ts.isInAmbientContext(node); + } + function checkSpecializedSignatureDeclaration(signatureDeclarationNode) { + var signature = getSignatureFromDeclaration(signatureDeclarationNode); + if (!signature.hasStringLiterals) { + return; + } + if (signatureDeclarationNode.body) { + error(signatureDeclarationNode, ts.Diagnostics.A_signature_with_an_implementation_cannot_use_a_string_literal_type); + return; + } + var signaturesOfSymbol = getSignaturesOfSymbol(getSymbolOfNode(signatureDeclarationNode)); + for (var i = 0; i < signaturesOfSymbol.length; i++) { + var otherSignature = signaturesOfSymbol[i]; + if (!otherSignature.hasStringLiterals && isSignatureAssignableTo(signature, otherSignature)) { + return; + } + } + error(signatureDeclarationNode, ts.Diagnostics.Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature); + } + function getEffectiveDeclarationFlags(n, flagsToCheck) { + var flags = n.flags; + if (n.parent.kind !== 170 /* InterfaceDeclaration */ && ts.isInAmbientContext(n)) { + if (!(flags & 2 /* Ambient */)) { + flags |= 1 /* Export */; + } + flags |= 2 /* Ambient */; + } + return flags & flagsToCheck; + } + function checkFunctionOrConstructorSymbol(symbol) { + function checkFlagAgreementBetweenOverloads(overloads, implementation, flagsToCheck, someOverloadFlags, allOverloadFlags) { + var someButNotAllOverloadFlags = someOverloadFlags ^ allOverloadFlags; + if (someButNotAllOverloadFlags !== 0) { + var implementationSharesContainerWithFirstOverload = implementation !== undefined && implementation.parent === overloads[0].parent; + var canonicalFlags = implementationSharesContainerWithFirstOverload ? getEffectiveDeclarationFlags(implementation, flagsToCheck) : getEffectiveDeclarationFlags(overloads[0], flagsToCheck); + ts.forEach(overloads, function (o) { + var deviation = getEffectiveDeclarationFlags(o, flagsToCheck) ^ canonicalFlags; + if (deviation & 1 /* Export */) { + error(o.name, ts.Diagnostics.Overload_signatures_must_all_be_exported_or_not_exported); + } + else if (deviation & 2 /* Ambient */) { + error(o.name, ts.Diagnostics.Overload_signatures_must_all_be_ambient_or_non_ambient); + } + else if (deviation & 32 /* Private */) { + error(o.name, ts.Diagnostics.Overload_signatures_must_all_be_public_or_private); + } + else if (deviation & 4 /* QuestionMark */) { + error(o.name, ts.Diagnostics.Overload_signatures_must_all_be_optional_or_required); + } + }); + } + } + var flagsToCheck = 1 /* Export */ | 2 /* Ambient */ | 32 /* Private */ | 4 /* QuestionMark */; + var someNodeFlags = 0; + var allNodeFlags = flagsToCheck; + var hasOverloads = false; + var bodyDeclaration; + var lastSeenNonAmbientDeclaration; + var previousDeclaration; + var declarations = symbol.declarations; + var isConstructor = (symbol.flags & 4096 /* Constructor */) !== 0; + function reportImplementationExpectedError(node) { + var seen = false; + var subsequentNode = ts.forEachChild(node.parent, function (c) { + if (seen) { + return c; + } + else { + seen = c === node; + } + }); + if (subsequentNode) { + if (subsequentNode.kind === node.kind) { + var errorNode = subsequentNode.name || subsequentNode; + if (node.name && subsequentNode.name && node.name.text === subsequentNode.name.text) { + ts.Debug.assert(node.kind === 116 /* Method */); + ts.Debug.assert((node.flags & 64 /* Static */) !== (subsequentNode.flags & 64 /* Static */)); + var diagnostic = node.flags & 64 /* Static */ ? ts.Diagnostics.Function_overload_must_be_static : ts.Diagnostics.Function_overload_must_not_be_static; + error(errorNode, diagnostic); + return; + } + else if (subsequentNode.body) { + error(errorNode, ts.Diagnostics.Function_implementation_name_must_be_0, ts.identifierToString(node.name)); + return; + } + } + } + var errorNode = node.name || node; + if (isConstructor) { + error(errorNode, ts.Diagnostics.Constructor_implementation_is_missing); + } + else { + error(errorNode, ts.Diagnostics.Function_implementation_is_missing_or_not_immediately_following_the_declaration); + } + } + var isExportSymbolInsideModule = symbol.parent && symbol.parent.flags & ts.SymbolFlags.Module; + for (var i = 0; i < declarations.length; i++) { + var node = declarations[i]; + var inAmbientContext = ts.isInAmbientContext(node); + var inAmbientContextOrInterface = node.parent.kind === 170 /* InterfaceDeclaration */ || node.parent.kind === 125 /* TypeLiteral */ || inAmbientContext; + if (inAmbientContextOrInterface) { + previousDeclaration = undefined; + } + if (node.kind === 167 /* FunctionDeclaration */ || node.kind === 116 /* Method */ || node.kind === 117 /* Constructor */) { + var currentNodeFlags = getEffectiveDeclarationFlags(node, flagsToCheck); + someNodeFlags |= currentNodeFlags; + allNodeFlags &= currentNodeFlags; + if (node.body && bodyDeclaration) { + if (isConstructor) { + error(node, ts.Diagnostics.Multiple_constructor_implementations_are_not_allowed); + } + else { + error(node, ts.Diagnostics.Duplicate_function_implementation); + } + } + else if (!isExportSymbolInsideModule && previousDeclaration && previousDeclaration.parent === node.parent && previousDeclaration.end !== node.pos) { + reportImplementationExpectedError(previousDeclaration); + } + if (node.body) { + if (!bodyDeclaration) { + bodyDeclaration = node; + } + } + else { + hasOverloads = true; + } + previousDeclaration = node; + if (!inAmbientContextOrInterface) { + lastSeenNonAmbientDeclaration = node; + } + } + } + if (!isExportSymbolInsideModule && lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body) { + reportImplementationExpectedError(lastSeenNonAmbientDeclaration); + } + if (hasOverloads) { + checkFlagAgreementBetweenOverloads(declarations, bodyDeclaration, flagsToCheck, someNodeFlags, allNodeFlags); + if (bodyDeclaration) { + var signatures = getSignaturesOfSymbol(symbol); + var bodySignature = getSignatureFromDeclaration(bodyDeclaration); + if (!bodySignature.hasStringLiterals) { + for (var i = 0, len = signatures.length; i < len; ++i) { + if (!signatures[i].hasStringLiterals && !isSignatureAssignableTo(bodySignature, signatures[i])) { + error(signatures[i].declaration, ts.Diagnostics.Overload_signature_is_not_compatible_with_function_implementation); + break; + } + } + } + } + } + } + function checkExportsOnMergedDeclarations(node) { + var symbol; + var symbol = node.localSymbol; + if (!symbol) { + symbol = getSymbolOfNode(node); + if (!(symbol.flags & ts.SymbolFlags.Export)) { + return; + } + } + if (getDeclarationOfKind(symbol, node.kind) !== node) { + return; + } + var exportedDeclarationSpaces = 0; + var nonExportedDeclarationSpaces = 0; + ts.forEach(symbol.declarations, function (d) { + var declarationSpaces = getDeclarationSpaces(d); + if (getEffectiveDeclarationFlags(d, 1 /* Export */)) { + exportedDeclarationSpaces |= declarationSpaces; + } + else { + nonExportedDeclarationSpaces |= declarationSpaces; + } + }); + var commonDeclarationSpace = exportedDeclarationSpaces & nonExportedDeclarationSpaces; + if (commonDeclarationSpace) { + ts.forEach(symbol.declarations, function (d) { + if (getDeclarationSpaces(d) & commonDeclarationSpace) { + error(d.name, ts.Diagnostics.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local, ts.identifierToString(d.name)); + } + }); + } + function getDeclarationSpaces(d) { + switch (d.kind) { + case 170 /* InterfaceDeclaration */: + return 1048576 /* ExportType */; + case 172 /* ModuleDeclaration */: + return d.name.kind === 3 /* StringLiteral */ || ts.isInstantiated(d) ? 2097152 /* ExportNamespace */ | 524288 /* ExportValue */ : 2097152 /* ExportNamespace */; + case 169 /* ClassDeclaration */: + case 171 /* EnumDeclaration */: + return 1048576 /* ExportType */ | 524288 /* ExportValue */; + case 174 /* ImportDeclaration */: + var result = 0; + var target = resolveImport(getSymbolOfNode(d)); + ts.forEach(target.declarations, function (d) { + result |= getDeclarationSpaces(d); + }); + return result; + default: + return 524288 /* ExportValue */; + } + } + } + function checkFunctionDeclaration(node) { + checkSignatureDeclaration(node); + var symbol = getSymbolOfNode(node); + var localSymbol = node.localSymbol || symbol; + var firstDeclaration = getDeclarationOfKind(localSymbol, node.kind); + if (node === firstDeclaration) { + checkFunctionOrConstructorSymbol(localSymbol); + } + if (symbol.parent) { + if (getDeclarationOfKind(symbol, node.kind) === node) { + checkFunctionOrConstructorSymbol(symbol); + } + } + checkSourceElement(node.body); + if (node.type && !isAccessor(node.kind)) { + checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(node, getTypeFromTypeNode(node.type)); + } + if (program.getCompilerOptions().noImplicitAny && !node.body && !node.type) { + if (!isPrivateWithinAmbient(node)) { + var typeName = typeToString(anyType); + if (node.name) { + error(node, ts.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type, ts.identifierToString(node.name), typeName); + } + else { + error(node, ts.Diagnostics.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeName); + } + } + } + } + function checkBlock(node) { + ts.forEach(node.statements, checkSourceElement); + } + function checkCollisionWithArgumentsInGeneratedCode(node) { + if (!ts.hasRestParameters(node) || ts.isInAmbientContext(node) || !node.body) { + return; + } + ts.forEach(node.parameters, function (p) { + if (p.name && p.name.text === argumentsSymbol.name) { + error(p, ts.Diagnostics.Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters); + } + }); + } + function checkCollisionWithIndexVariableInGeneratedCode(node, name) { + if (!(name && name.text === "_i")) { + return; + } + if (node.kind === 114 /* Parameter */) { + if (node.parent.body && ts.hasRestParameters(node.parent) && !ts.isInAmbientContext(node)) { + error(node, ts.Diagnostics.Duplicate_identifier_i_Compiler_uses_i_to_initialize_rest_parameter); + } + return; + } + var symbol = getNodeLinks(node).resolvedSymbol; + if (symbol === unknownSymbol) { + return; + } + var current = node; + while (current) { + var definedOnCurrentLevel = ts.forEach(symbol.declarations, function (d) { return d.parent === current ? d : undefined; }); + if (definedOnCurrentLevel) { + return; + } + switch (current.kind) { + case 167 /* FunctionDeclaration */: + case 136 /* FunctionExpression */: + case 116 /* Method */: + case 137 /* ArrowFunction */: + case 117 /* Constructor */: + if (ts.hasRestParameters(current)) { + error(node, ts.Diagnostics.Expression_resolves_to_variable_declaration_i_that_compiler_uses_to_initialize_rest_parameter); + return; + } + break; + } + current = current.parent; + } + } + function needCollisionCheckForIdentifier(node, identifier, name) { + if (!(identifier && identifier.text === name)) { + return false; + } + if (node.kind === 115 /* Property */ || node.kind === 116 /* Method */ || node.kind === 118 /* GetAccessor */ || node.kind === 119 /* SetAccessor */) { + return false; + } + if (ts.isInAmbientContext(node)) { + return false; + } + if (node.kind === 114 /* Parameter */ && !node.parent.body) { + return false; + } + return true; + } + function checkCollisionWithCapturedThisVariable(node, name) { + if (!needCollisionCheckForIdentifier(node, name, "_this")) { + return; + } + potentialThisCollisions.push(node); + } + function checkIfThisIsCapturedInEnclosingScope(node) { + var current = node; + while (current) { + if (getNodeCheckFlags(current) & 4 /* CaptureThis */) { + var isDeclaration = node.kind !== 55 /* Identifier */; + if (isDeclaration) { + error(node.name, ts.Diagnostics.Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference); + } + else { + error(node, ts.Diagnostics.Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference); + } + return; + } + current = current.parent; + } + } + function checkCollisionWithCapturedSuperVariable(node, name) { + if (!needCollisionCheckForIdentifier(node, name, "_super")) { + return; + } + var enclosingClass = getAncestor(node, 169 /* ClassDeclaration */); + if (!enclosingClass || ts.isInAmbientContext(enclosingClass)) { + return; + } + if (enclosingClass.baseType) { + var isDeclaration = node.kind !== 55 /* Identifier */; + if (isDeclaration) { + error(node, ts.Diagnostics.Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference); + } + else { + error(node, ts.Diagnostics.Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference); + } + } + } + function checkVariableDeclaration(node) { + checkSourceElement(node.type); + checkExportsOnMergedDeclarations(node); + var symbol = getSymbolOfNode(node); + var typeOfValueDeclaration = getTypeOfVariableOrParameterOrProperty(symbol); + var type; + var useTypeFromValueDeclaration = node === symbol.valueDeclaration; + if (useTypeFromValueDeclaration) { + type = typeOfValueDeclaration; + } + else { + type = getTypeOfVariableDeclaration(node); + } + if (node.initializer) { + if (!(getNodeLinks(node.initializer).flags & 1 /* TypeChecked */)) { + checkTypeAssignableTo(checkAndMarkExpression(node.initializer, type), type, node, undefined, undefined); + } + } + checkCollisionWithCapturedSuperVariable(node, node.name); + checkCollisionWithCapturedThisVariable(node, node.name); + if (!useTypeFromValueDeclaration) { + if (typeOfValueDeclaration !== unknownType && type !== unknownType && !isTypeIdenticalTo(typeOfValueDeclaration, type)) { + error(node.name, ts.Diagnostics.Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2, ts.identifierToString(node.name), typeToString(typeOfValueDeclaration), typeToString(type)); + } + } + } + function checkVariableStatement(node) { + ts.forEach(node.declarations, checkVariableDeclaration); + } + function checkExpressionStatement(node) { + checkExpression(node.expression); + } + function checkIfStatement(node) { + checkExpression(node.expression); + checkSourceElement(node.thenStatement); + checkSourceElement(node.elseStatement); + } + function checkDoStatement(node) { + checkSourceElement(node.statement); + checkExpression(node.expression); + } + function checkWhileStatement(node) { + checkExpression(node.expression); + checkSourceElement(node.statement); + } + function checkForStatement(node) { + if (node.declarations) + ts.forEach(node.declarations, checkVariableDeclaration); + if (node.initializer) + checkExpression(node.initializer); + if (node.condition) + checkExpression(node.condition); + if (node.iterator) + checkExpression(node.iterator); + checkSourceElement(node.statement); + } + function checkForInStatement(node) { + if (node.declaration) { + checkVariableDeclaration(node.declaration); + if (node.declaration.type) { + error(node.declaration, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation); + } + } + if (node.variable) { + var exprType = checkExpression(node.variable); + if (exprType !== anyType && exprType !== stringType) { + error(node.variable, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any); + } + else { + checkReferenceExpression(node.variable, ts.Diagnostics.Invalid_left_hand_side_in_for_in_statement); + } + } + var exprType = checkExpression(node.expression); + if (!isTypeAnyTypeObjectTypeOrTypeParameter(exprType) && exprType !== unknownType) { + error(node.expression, ts.Diagnostics.The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter); + } + checkSourceElement(node.statement); + } + function checkBreakOrContinueStatement(node) { + } + function getContainingFunction(node) { + while (true) { + node = node.parent; + if (!node || node.kind === 167 /* FunctionDeclaration */ || node.kind === 136 /* FunctionExpression */ || node.kind === 137 /* ArrowFunction */ || node.kind === 116 /* Method */ || node.kind === 117 /* Constructor */ || node.kind === 118 /* GetAccessor */ || node.kind === 119 /* SetAccessor */) { + return node; + } + } + } + function checkReturnStatement(node) { + if (node.expression && !(getNodeLinks(node.expression).flags & 1 /* TypeChecked */)) { + var func = getContainingFunction(node); + if (func) { + if (func.kind === 119 /* SetAccessor */) { + if (node.expression) { + error(node.expression, ts.Diagnostics.Setters_cannot_return_a_value); + } + } + else { + var returnType = getReturnTypeOfSignature(getSignatureFromDeclaration(func)); + var checkAssignability = func.type || (func.kind === 118 /* GetAccessor */ && getSetAccessorTypeAnnotationNode(getDeclarationOfKind(func.symbol, 119 /* SetAccessor */))); + if (checkAssignability) { + checkTypeAssignableTo(checkExpression(node.expression, returnType), returnType, node.expression, undefined, undefined); + } + else if (func.kind == 117 /* Constructor */) { + if (!isTypeAssignableTo(checkExpression(node.expression, returnType), returnType)) { + error(node.expression, ts.Diagnostics.Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class); + } + } + } + } + } + } + function checkWithStatement(node) { + checkExpression(node.expression); + error(node.expression, ts.Diagnostics.All_symbols_within_a_with_block_will_be_resolved_to_any); + } + function checkSwitchStatement(node) { + var expressionType = checkExpression(node.expression); + ts.forEach(node.clauses, function (clause) { + if (clause.expression) { + var caseType = checkExpression(clause.expression); + if (!isTypeAssignableTo(expressionType, caseType)) { + checkTypeAssignableTo(caseType, expressionType, clause.expression, undefined, undefined); + } + } + checkBlock(clause); + }); + } + function checkLabelledStatement(node) { + checkSourceElement(node.statement); + } + function checkThrowStatement(node) { + checkExpression(node.expression); + } + function checkTryStatement(node) { + checkBlock(node.tryBlock); + if (node.catchBlock) + checkBlock(node.catchBlock); + if (node.finallyBlock) + checkBlock(node.finallyBlock); + } + function checkIndexConstraints(type) { + function checkIndexConstraintForProperty(prop, propertyType, indexDeclaration, indexType, indexKind) { + if (!indexType) { + return; + } + if (indexKind === 1 /* Number */ && !isNumericName(prop.name)) { + return; + } + var errorNode; + if (prop.parent === type.symbol) { + errorNode = prop.valueDeclaration; + } + else if (indexDeclaration) { + errorNode = indexDeclaration; + } + else if (type.flags & 2048 /* Interface */) { + var someBaseClassHasBothPropertyAndIndexer = ts.forEach(type.baseTypes, function (base) { return getPropertyOfType(base, prop.name) && getIndexTypeOfType(base, indexKind); }); + errorNode = someBaseClassHasBothPropertyAndIndexer ? undefined : type.symbol.declarations[0]; + } + if (errorNode && !isTypeAssignableTo(propertyType, indexType)) { + var errorMessage = indexKind === 0 /* String */ ? ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_string_index_type_2 : ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2; + error(errorNode, errorMessage, symbolToString(prop), typeToString(propertyType), typeToString(indexType)); + } + } + var declaredNumberIndexer = getIndexDeclarationOfSymbol(type.symbol, 1 /* Number */); + var declaredStringIndexer = getIndexDeclarationOfSymbol(type.symbol, 0 /* String */); + var stringIndexType = getIndexTypeOfType(type, 0 /* String */); + var numberIndexType = getIndexTypeOfType(type, 1 /* Number */); + if (stringIndexType || numberIndexType) { + ts.forEach(getPropertiesOfType(type), function (prop) { + var propType = getTypeOfSymbol(prop); + checkIndexConstraintForProperty(prop, propType, declaredStringIndexer, stringIndexType, 0 /* String */); + checkIndexConstraintForProperty(prop, propType, declaredNumberIndexer, numberIndexType, 1 /* Number */); + }); + } + var errorNode; + if (stringIndexType && numberIndexType) { + errorNode = declaredNumberIndexer || declaredStringIndexer; + if (!errorNode && (type.flags & 2048 /* Interface */)) { + var someBaseTypeHasBothIndexers = ts.forEach(type.baseTypes, function (base) { return getIndexTypeOfType(base, 0 /* String */) && getIndexTypeOfType(base, 1 /* Number */); }); + errorNode = someBaseTypeHasBothIndexers ? undefined : type.symbol.declarations[0]; + } + } + if (errorNode && !isTypeAssignableTo(numberIndexType, stringIndexType)) { + error(errorNode, ts.Diagnostics.Numeric_index_type_0_is_not_assignable_to_string_index_type_1, typeToString(numberIndexType), typeToString(stringIndexType)); + } + } + function checkTypeNameIsReserved(name, message) { + switch (name.text) { + case "any": + case "number": + case "boolean": + case "string": + case "void": + error(name, message, name.text); + } + } + function checkTypeParameters(typeParameterDeclarations) { + if (typeParameterDeclarations) { + for (var i = 0; i < typeParameterDeclarations.length; i++) { + var node = typeParameterDeclarations[i]; + checkTypeParameter(node); + for (var j = 0; j < i; j++) { + if (typeParameterDeclarations[j].symbol === node.symbol) { + error(node.name, ts.Diagnostics.Duplicate_identifier_0, ts.identifierToString(node.name)); + } + } + } + } + } + function checkClassDeclaration(node) { + checkTypeNameIsReserved(node.name, ts.Diagnostics.Class_name_cannot_be_0); + checkTypeParameters(node.typeParameters); + checkCollisionWithCapturedThisVariable(node, node.name); + checkExportsOnMergedDeclarations(node); + var symbol = getSymbolOfNode(node); + var type = getDeclaredTypeOfSymbol(symbol); + var staticType = getTypeOfSymbol(symbol); + if (node.baseType) { + emitExtends = emitExtends || !ts.isInAmbientContext(node); + checkTypeReference(node.baseType); + } + if (type.baseTypes.length) { + var baseType = type.baseTypes[0]; + checkTypeAssignableTo(type, baseType, node.name, ts.Diagnostics.Class_0_incorrectly_extends_base_class_1_Colon, ts.Diagnostics.Class_0_incorrectly_extends_base_class_1); + var staticBaseType = getTypeOfSymbol(baseType.symbol); + checkTypeAssignableTo(staticType, getTypeWithoutConstructors(staticBaseType), node.name, ts.Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1_Colon, ts.Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1); + if (baseType.symbol !== resolveEntityName(node, node.baseType.typeName, ts.SymbolFlags.Value)) { + error(node.baseType, ts.Diagnostics.Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_0, typeToString(baseType)); + } + checkExpression(node.baseType.typeName); + checkKindsOfPropertyMemberOverrides(type, baseType); + } + if (node.implementedTypes) { + ts.forEach(node.implementedTypes, function (typeRefNode) { + checkTypeReference(typeRefNode); + var t = getTypeFromTypeReferenceNode(typeRefNode); + if (t !== unknownType) { + var declaredType = (t.flags & 4096 /* Reference */) ? t.target : t; + if (declaredType.flags & (1024 /* Class */ | 2048 /* Interface */)) { + checkTypeAssignableTo(type, t, node.name, ts.Diagnostics.Class_0_incorrectly_implements_interface_1_Colon, ts.Diagnostics.Class_0_incorrectly_implements_interface_1); + } + else { + error(typeRefNode, ts.Diagnostics.A_class_may_only_implement_another_class_or_interface); + } + } + }); + } + checkIndexConstraints(type); + ts.forEach(node.members, checkSourceElement); + checkTypeForDuplicateIndexSignatures(node); + } + function getTargetSymbol(s) { + return s.flags & 8388608 /* Instantiated */ ? getSymbolLinks(s).target : s; + } + function checkKindsOfPropertyMemberOverrides(type, baseType) { + var baseProperties = getPropertiesOfType(baseType); + for (var i = 0, len = baseProperties.length; i < len; ++i) { + var base = getTargetSymbol(baseProperties[i]); + if (base.flags & 67108864 /* Prototype */) { + continue; + } + var derived = getTargetSymbol(getPropertyOfType(type, base.name)); + if (derived) { + var baseDeclarationFlags = getDeclarationFlagsFromSymbol(base); + var derivedDeclarationFlags = getDeclarationFlagsFromSymbol(derived); + if ((baseDeclarationFlags & 32 /* Private */) || (derivedDeclarationFlags & 32 /* Private */)) { + continue; + } + if ((baseDeclarationFlags & 64 /* Static */) !== (derivedDeclarationFlags & 64 /* Static */)) { + continue; + } + if ((base.flags & derived.flags & 2048 /* Method */) || ((base.flags & ts.SymbolFlags.PropertyOrAccessor) && (derived.flags & ts.SymbolFlags.PropertyOrAccessor))) { + continue; + } + var errorMessage; + if (base.flags & 2048 /* Method */) { + if (derived.flags & ts.SymbolFlags.Accessor) { + errorMessage = ts.Diagnostics.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor; + } + else { + ts.Debug.assert(derived.flags & 2 /* Property */); + errorMessage = ts.Diagnostics.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property; + } + } + else if (base.flags & 2 /* Property */) { + ts.Debug.assert(derived.flags & 2048 /* Method */); + errorMessage = ts.Diagnostics.Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function; + } + else { + ts.Debug.assert(base.flags & ts.SymbolFlags.Accessor); + ts.Debug.assert(derived.flags & 2048 /* Method */); + errorMessage = ts.Diagnostics.Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function; + } + error(derived.valueDeclaration.name, errorMessage, typeToString(baseType), symbolToString(base), typeToString(type)); + } + } + } + function isAccessor(kind) { + return kind === 118 /* GetAccessor */ || kind === 119 /* SetAccessor */; + } + function areTypeParametersIdentical(list1, list2) { + if (!list1 && !list2) { + return true; + } + if (!list1 || !list2 || list1.length !== list2.length) { + return false; + } + for (var i = 0, len = list1.length; i < len; i++) { + var tp1 = list1[i]; + var tp2 = list2[i]; + if (tp1.name.text !== tp2.name.text) { + return false; + } + if (!tp1.constraint && !tp2.constraint) { + continue; + } + if (!tp1.constraint || !tp2.constraint) { + return false; + } + if (!isTypeIdenticalTo(getTypeFromTypeNode(tp1.constraint), getTypeFromTypeNode(tp2.constraint))) { + return false; + } + } + return true; + } + function checkInterfaceDeclaration(node) { + checkTypeNameIsReserved(node.name, ts.Diagnostics.Interface_name_cannot_be_0); + checkTypeParameters(node.typeParameters); + checkExportsOnMergedDeclarations(node); + var symbol = getSymbolOfNode(node); + var firstInterfaceDecl = getDeclarationOfKind(symbol, 170 /* InterfaceDeclaration */); + if (symbol.declarations.length > 1) { + if (node !== firstInterfaceDecl && !areTypeParametersIdentical(firstInterfaceDecl.typeParameters, node.typeParameters)) { + error(node.name, ts.Diagnostics.All_declarations_of_an_interface_must_have_identical_type_parameters); + } + } + if (node === firstInterfaceDecl) { + var type = getDeclaredTypeOfSymbol(symbol); + if (checkInheritedPropertiesAreIdentical(type, node.name)) { + ts.forEach(type.baseTypes, function (baseType) { + checkTypeAssignableTo(type, baseType, node.name, ts.Diagnostics.Interface_0_incorrectly_extends_interface_1_Colon, ts.Diagnostics.Interface_0_incorrectly_extends_interface_1); + }); + checkIndexConstraints(type); + } + } + ts.forEach(node.baseTypes, checkTypeReference); + ts.forEach(node.members, checkSourceElement); + checkTypeForDuplicateIndexSignatures(node); + } + function getConstantValue(node) { + var isNegative = false; + if (node.kind === 138 /* PrefixOperator */) { + var unaryExpression = node; + if (unaryExpression.operator === 25 /* MinusToken */ || unaryExpression.operator === 24 /* PlusToken */) { + node = unaryExpression.operand; + isNegative = unaryExpression.operator === 25 /* MinusToken */; + } + } + if (node.kind === 2 /* NumericLiteral */) { + var literalText = node.text; + return isNegative ? -literalText : +literalText; + } + return undefined; + } + function checkEnumDeclaration(node) { + checkTypeNameIsReserved(node.name, ts.Diagnostics.Enum_name_cannot_be_0); + checkCollisionWithCapturedThisVariable(node, node.name); + checkExportsOnMergedDeclarations(node); + var enumSymbol = getSymbolOfNode(node); + var enumType = getDeclaredTypeOfSymbol(enumSymbol); + var autoValue = 0; + var ambient = ts.isInAmbientContext(node); + ts.forEach(node.members, function (member) { + var initializer = member.initializer; + if (initializer) { + autoValue = getConstantValue(initializer); + if (autoValue === undefined && !ambient) { + checkTypeAssignableTo(checkExpression(initializer), enumType, initializer, undefined, undefined); + } + } + else if (ambient) { + autoValue = undefined; + } + if (autoValue !== undefined) { + getNodeLinks(member).enumMemberValue = autoValue++; + } + }); + var firstDeclaration = getDeclarationOfKind(enumSymbol, node.kind); + if (node === firstDeclaration) { + var seenEnumMissingInitialInitializer = false; + ts.forEach(enumSymbol.declarations, function (declaration) { + if (declaration.kind !== 171 /* EnumDeclaration */) { + return false; + } + var enumDeclaration = declaration; + if (!enumDeclaration.members.length) { + return false; + } + var firstEnumMember = enumDeclaration.members[0]; + if (!firstEnumMember.initializer) { + if (seenEnumMissingInitialInitializer) { + error(firstEnumMember.name, ts.Diagnostics.In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element); + } + else { + seenEnumMissingInitialInitializer = true; + } + } + }); + } + } + function getFirstNonAmbientClassOrFunctionDeclaration(symbol) { + var declarations = symbol.declarations; + for (var i = 0; i < declarations.length; i++) { + var declaration = declarations[i]; + if ((declaration.kind === 169 /* ClassDeclaration */ || (declaration.kind === 167 /* FunctionDeclaration */ && declaration.body)) && !ts.isInAmbientContext(declaration)) { + return declaration; + } + } + return undefined; + } + function checkModuleDeclaration(node) { + checkCollisionWithCapturedThisVariable(node, node.name); + checkExportsOnMergedDeclarations(node); + var symbol = getSymbolOfNode(node); + if (symbol.flags & 128 /* ValueModule */ && symbol.declarations.length > 1 && !ts.isInAmbientContext(node)) { + var classOrFunc = getFirstNonAmbientClassOrFunctionDeclaration(symbol); + if (classOrFunc) { + if (ts.getSourceFileOfNode(node) !== ts.getSourceFileOfNode(classOrFunc)) { + error(node.name, ts.Diagnostics.A_module_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged); + } + else if (node.pos < classOrFunc.pos) { + error(node.name, ts.Diagnostics.A_module_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged); + } + } + } + if (node.name.kind === 3 /* StringLiteral */) { + if (!isGlobalSourceFile(node.parent)) { + error(node.name, ts.Diagnostics.Ambient_external_modules_cannot_be_nested_in_other_modules); + } + if (isExternalModuleNameRelative(node.name.text)) { + error(node.name, ts.Diagnostics.Ambient_external_module_declaration_cannot_specify_relative_module_name); + } + } + checkSourceElement(node.body); + } + function getFirstIdentifier(node) { + while (node.kind === 112 /* QualifiedName */) { + node = node.left; + } + return node; + } + function checkImportDeclaration(node) { + checkCollisionWithCapturedThisVariable(node, node.name); + var symbol = getSymbolOfNode(node); + var target; + if (node.entityName) { + target = resolveImport(symbol); + if (target !== unknownSymbol) { + if (target.flags & ts.SymbolFlags.Value) { + var moduleName = getFirstIdentifier(node.entityName); + if (resolveEntityName(node, moduleName, ts.SymbolFlags.Value | ts.SymbolFlags.Namespace).flags & ts.SymbolFlags.Namespace) { + checkExpression(node.entityName); + } + else { + error(moduleName, ts.Diagnostics.Module_0_is_hidden_by_a_local_declaration_with_the_same_name, ts.identifierToString(moduleName)); + } + } + if (target.flags & ts.SymbolFlags.Type) { + checkTypeNameIsReserved(node.name, ts.Diagnostics.Import_name_cannot_be_0); + } + } + } + else { + if (node.parent.kind === 177 /* SourceFile */) { + target = resolveImport(symbol); + } + else if (node.parent.kind === 173 /* ModuleBlock */ && node.parent.parent.name.kind === 3 /* StringLiteral */) { + if (isExternalModuleNameRelative(node.externalModuleName.text)) { + error(node, ts.Diagnostics.Import_declaration_in_an_ambient_external_module_declaration_cannot_reference_external_module_through_relative_external_module_name); + target = unknownSymbol; + } + else { + target = resolveImport(symbol); + } + } + else { + target = unknownSymbol; + } + } + if (target !== unknownSymbol) { + var excludedMeanings = (symbol.flags & ts.SymbolFlags.Value ? ts.SymbolFlags.Value : 0) | (symbol.flags & ts.SymbolFlags.Type ? ts.SymbolFlags.Type : 0) | (symbol.flags & ts.SymbolFlags.Namespace ? ts.SymbolFlags.Namespace : 0); + if (target.flags & excludedMeanings) { + error(node, ts.Diagnostics.Import_declaration_conflicts_with_local_declaration_of_0, symbolToString(symbol)); + } + } + } + function checkExportAssignment(node) { + var container = node.parent; + if (container.kind !== 177 /* SourceFile */) { + container = container.parent; + } + checkTypeOfExportAssignmentSymbol(getSymbolOfNode(container)); + } + function checkSourceElement(node) { + if (!node) + return; + switch (node.kind) { + case 113 /* TypeParameter */: + return checkTypeParameter(node); + case 114 /* Parameter */: + return checkParameter(node); + case 115 /* Property */: + return checkPropertyDeclaration(node); + case 120 /* CallSignature */: + case 121 /* ConstructSignature */: + case 122 /* IndexSignature */: + return checkSignatureDeclaration(node); + case 116 /* Method */: + return checkMethodDeclaration(node); + case 117 /* Constructor */: + return checkConstructorDeclaration(node); + case 118 /* GetAccessor */: + case 119 /* SetAccessor */: + return checkAccessorDeclaration(node); + case 123 /* TypeReference */: + return checkTypeReference(node); + case 124 /* TypeQuery */: + return checkTypeQuery(node); + case 125 /* TypeLiteral */: + return checkTypeLiteral(node); + case 126 /* ArrayType */: + return checkArrayType(node); + case 167 /* FunctionDeclaration */: + return checkFunctionDeclaration(node); + case 143 /* Block */: + case 168 /* FunctionBlock */: + case 173 /* ModuleBlock */: + return checkBlock(node); + case 144 /* VariableStatement */: + return checkVariableStatement(node); + case 146 /* ExpressionStatement */: + return checkExpressionStatement(node); + case 147 /* IfStatement */: + return checkIfStatement(node); + case 148 /* DoStatement */: + return checkDoStatement(node); + case 149 /* WhileStatement */: + return checkWhileStatement(node); + case 150 /* ForStatement */: + return checkForStatement(node); + case 151 /* ForInStatement */: + return checkForInStatement(node); + case 152 /* ContinueStatement */: + case 153 /* BreakStatement */: + return checkBreakOrContinueStatement(node); + case 154 /* ReturnStatement */: + return checkReturnStatement(node); + case 155 /* WithStatement */: + return checkWithStatement(node); + case 156 /* SwitchStatement */: + return checkSwitchStatement(node); + case 159 /* LabelledStatement */: + return checkLabelledStatement(node); + case 160 /* ThrowStatement */: + return checkThrowStatement(node); + case 161 /* TryStatement */: + return checkTryStatement(node); + case 166 /* VariableDeclaration */: + return ts.Debug.fail("Checker encountered variable declaration"); + case 169 /* ClassDeclaration */: + return checkClassDeclaration(node); + case 170 /* InterfaceDeclaration */: + return checkInterfaceDeclaration(node); + case 171 /* EnumDeclaration */: + return checkEnumDeclaration(node); + case 172 /* ModuleDeclaration */: + return checkModuleDeclaration(node); + case 174 /* ImportDeclaration */: + return checkImportDeclaration(node); + case 175 /* ExportAssignment */: + return checkExportAssignment(node); + } + } + function checkSourceFile(node) { + var links = getNodeLinks(node); + if (!(links.flags & 1 /* TypeChecked */)) { + emitExtends = false; + potentialThisCollisions.length = 0; + ts.forEach(node.statements, checkSourceElement); + if (ts.isExternalModule(node)) { + var symbol = getExportAssignmentSymbol(node.symbol); + if (symbol && symbol.flags & 4194304 /* Import */) { + getSymbolLinks(symbol).referenced = true; + } + } + if (potentialThisCollisions.length) { + ts.forEach(potentialThisCollisions, checkIfThisIsCapturedInEnclosingScope); + potentialThisCollisions.length = 0; + } + if (emitExtends) + links.flags |= 8 /* EmitExtends */; + links.flags |= 1 /* TypeChecked */; + } + } + function checkProgram() { + ts.forEach(program.getSourceFiles(), checkSourceFile); + } + function getSortedDiagnostics() { + if (diagnosticsModified) { + diagnostics.sort(ts.compareDiagnostics); + diagnostics = ts.deduplicateSortedDiagnostics(diagnostics); + diagnosticsModified = false; + } + return diagnostics; + } + function getDiagnostics(sourceFile) { + if (sourceFile) { + checkSourceFile(sourceFile); + return ts.filter(getSortedDiagnostics(), function (d) { return d.file === sourceFile; }); + } + checkProgram(); + return getSortedDiagnostics(); + } + function getGlobalDiagnostics() { + return ts.filter(getSortedDiagnostics(), function (d) { return !d.file; }); + } + function getNodeAtPosition(sourceFile, position) { + function findChildAtPosition(parent) { + var child = ts.forEachChild(parent, function (node) { + if (position >= node.pos && position <= node.end && position >= ts.getTokenPosOfNode(node)) { + return findChildAtPosition(node); + } + }); + return child || parent; + } + if (position < sourceFile.pos) + position = sourceFile.pos; + if (position > sourceFile.end) + position = sourceFile.end; + return findChildAtPosition(sourceFile); + } + function getSymbolsInScope(location, meaning) { + var symbols = {}; + var memberFlags = 0; + function copySymbol(symbol, meaning) { + if (symbol.flags & meaning) { + var id = symbol.name; + if (!isReservedMemberName(id) && !ts.hasProperty(symbols, id)) { + symbols[id] = symbol; + } + } + } + function copySymbols(source, meaning) { + if (meaning) { + for (var id in source) { + if (ts.hasProperty(source, id)) { + copySymbol(source[id], meaning); + } + } + } + } + while (location) { + if (location.locals && !isGlobalSourceFile(location)) { + copySymbols(location.locals, meaning); + } + switch (location.kind) { + case 177 /* SourceFile */: + if (!ts.isExternalModule(location)) + break; + case 172 /* ModuleDeclaration */: + copySymbols(getSymbolOfNode(location).exports, meaning & ts.SymbolFlags.ModuleMember); + break; + case 171 /* EnumDeclaration */: + copySymbols(getSymbolOfNode(location).exports, meaning & 4 /* EnumMember */); + break; + case 169 /* ClassDeclaration */: + case 170 /* InterfaceDeclaration */: + if (!(memberFlags & 64 /* Static */)) { + copySymbols(getSymbolOfNode(location).members, meaning & ts.SymbolFlags.Type); + } + break; + case 136 /* FunctionExpression */: + if (location.name) { + copySymbol(location.symbol, meaning); + } + break; + case 163 /* CatchBlock */: + if (location.variable.text) { + copySymbol(location.symbol, meaning); + } + break; + } + memberFlags = location.flags; + location = location.parent; + } + copySymbols(globals, meaning); + return ts.mapToArray(symbols); + } + function isDeclarationIdentifier(identifier) { + if (identifier.parent) { + switch (identifier.parent.kind) { + case 113 /* TypeParameter */: + case 114 /* Parameter */: + case 166 /* VariableDeclaration */: + case 115 /* Property */: + case 129 /* PropertyAssignment */: + case 176 /* EnumMember */: + case 116 /* Method */: + case 167 /* FunctionDeclaration */: + case 136 /* FunctionExpression */: + case 118 /* GetAccessor */: + case 119 /* SetAccessor */: + case 169 /* ClassDeclaration */: + case 170 /* InterfaceDeclaration */: + case 171 /* EnumDeclaration */: + case 172 /* ModuleDeclaration */: + case 174 /* ImportDeclaration */: + return identifier.parent.name === identifier; + case 163 /* CatchBlock */: + return identifier.parent.variable === identifier; + } + } + return false; + } + function isTypeReferenceIdentifier(identifier) { + var node = identifier; + if (node.parent && node.parent.kind === 112 /* QualifiedName */) + node = node.parent; + return node.parent && node.parent.kind === 123 /* TypeReference */; + } + function isExpression(node) { + switch (node.kind) { + case 83 /* ThisKeyword */: + case 81 /* SuperKeyword */: + case 79 /* NullKeyword */: + case 85 /* TrueKeyword */: + case 70 /* FalseKeyword */: + case 4 /* RegularExpressionLiteral */: + case 127 /* ArrayLiteral */: + case 128 /* ObjectLiteral */: + case 130 /* PropertyAccess */: + case 131 /* IndexedAccess */: + case 132 /* CallExpression */: + case 133 /* NewExpression */: + case 134 /* TypeAssertion */: + case 135 /* ParenExpression */: + case 136 /* FunctionExpression */: + case 137 /* ArrowFunction */: + case 138 /* PrefixOperator */: + case 139 /* PostfixOperator */: + case 140 /* BinaryExpression */: + case 141 /* ConditionalExpression */: + return true; + case 112 /* QualifiedName */: + while (node.parent && node.parent.kind === 112 /* QualifiedName */) + node = node.parent; + return node.parent && node.parent.kind === 124 /* TypeQuery */; + case 55 /* Identifier */: + case 2 /* NumericLiteral */: + case 3 /* StringLiteral */: + var parent = node.parent; + if (parent) { + if (isExpression(parent)) + return true; + switch (parent.kind) { + case 166 /* VariableDeclaration */: + case 114 /* Parameter */: + case 115 /* Property */: + case 176 /* EnumMember */: + return parent.initializer === node; + case 146 /* ExpressionStatement */: + case 147 /* IfStatement */: + case 148 /* DoStatement */: + case 149 /* WhileStatement */: + case 154 /* ReturnStatement */: + case 155 /* WithStatement */: + case 156 /* SwitchStatement */: + case 157 /* CaseClause */: + case 160 /* ThrowStatement */: + case 156 /* SwitchStatement */: + return parent.expression === node; + case 150 /* ForStatement */: + return parent.initializer === node || parent.condition === node || parent.iterator === node; + case 151 /* ForInStatement */: + return parent.variable === node || parent.expression === node; + } + } + } + return false; + } + function isRightSideOfQualifiedName(node) { + return (node.parent.kind === 112 /* QualifiedName */ || node.parent.kind === 130 /* PropertyAccess */) && node.parent.right === node; + } + function getSymbolOfIdentifier(identifier) { + if (isExpression(identifier)) { + if (isRightSideOfQualifiedName(identifier)) { + var node = identifier.parent; + var symbol = getNodeLinks(node).resolvedSymbol; + if (!symbol) { + checkPropertyAccess(node); + } + return getNodeLinks(node).resolvedSymbol; + } + return resolveEntityName(identifier, identifier, ts.SymbolFlags.Value); + } + if (isDeclarationIdentifier(identifier)) { + return getSymbolOfNode(identifier.parent); + } + if (isTypeReferenceIdentifier(identifier)) { + var entityName = isRightSideOfQualifiedName(identifier) ? identifier.parent : identifier; + var meaning = entityName.parent.kind === 123 /* TypeReference */ ? ts.SymbolFlags.Type : ts.SymbolFlags.Namespace; + return resolveEntityName(entityName, entityName, meaning); + } + } + function getTypeOfExpression(node) { + if (isExpression(node)) { + while (isRightSideOfQualifiedName(node)) { + node = node.parent; + } + return getApparentType(checkExpression(node)); + } + return unknownType; + } + function getAugmentedPropertiesOfApparentType(type) { + var apparentType = getApparentType(type); + if (apparentType.flags & ts.TypeFlags.ObjectType) { + var propertiesByName = {}; + var results = []; + ts.forEach(getPropertiesOfType(apparentType), function (s) { + propertiesByName[s.name] = s; + results.push(s); + }); + var resolved = resolveObjectTypeMembers(type); + ts.forEachValue(resolved.members, function (s) { + if (symbolIsValue(s) && !propertiesByName[s.name]) { + propertiesByName[s.name] = s; + results.push(s); + } + }); + if (resolved === anyFunctionType || resolved.callSignatures.length || resolved.constructSignatures.length) { + ts.forEach(getPropertiesOfType(globalFunctionType), function (s) { + if (!propertiesByName[s.name]) { + propertiesByName[s.name] = s; + results.push(s); + } + }); + } + return results; + } + else { + return getPropertiesOfType(apparentType); + } + } + function isExternalModuleSymbol(symbol) { + return symbol.flags & 128 /* ValueModule */ && symbol.declarations.length === 1 && symbol.declarations[0].kind === 177 /* SourceFile */; + } + function isNodeDescendentOf(node, ancestor) { + while (node) { + if (node === ancestor) + return true; + node = node.parent; + } + return false; + } + function isUniqueLocalName(name, container) { + for (var node = container; isNodeDescendentOf(node, container); node = node.nextContainer) { + if (node.locals && ts.hasProperty(node.locals, name) && node.locals[name].flags & (ts.SymbolFlags.Value | 524288 /* ExportValue */)) { + return false; + } + } + return true; + } + function getLocalNameOfContainer(container) { + var links = getNodeLinks(container); + if (!links.localModuleName) { + var prefix = ""; + var name = ts.unescapeIdentifier(container.name.text); + while (!isUniqueLocalName(ts.escapeIdentifier(prefix + name), container)) { + prefix += "_"; + } + links.localModuleName = prefix + ts.getSourceTextOfNode(container.name); + } + return links.localModuleName; + } + function getLocalNameForSymbol(symbol, location) { + var node = location; + while (node) { + if ((node.kind === 172 /* ModuleDeclaration */ || node.kind === 171 /* EnumDeclaration */) && getSymbolOfNode(node) === symbol) { + return getLocalNameOfContainer(node); + } + node = node.parent; + } + ts.Debug.fail("getLocalNameForSymbol failed"); + } + function getExpressionNamePrefix(node) { + var symbol = getNodeLinks(node).resolvedSymbol; + if (symbol) { + var exportSymbol = getExportSymbolOfValueSymbolIfExported(symbol); + if (symbol !== exportSymbol && !(exportSymbol.flags & ts.SymbolFlags.ExportHasLocal)) { + symbol = exportSymbol; + } + if (symbol.parent) { + return isExternalModuleSymbol(symbol.parent) ? "exports" : getLocalNameForSymbol(getParentOfSymbol(symbol), node.parent); + } + } + } + function getPropertyAccessSubstitution(node) { + var symbol = getNodeLinks(node).resolvedSymbol; + if (symbol && (symbol.flags & 4 /* EnumMember */)) { + var declaration = symbol.valueDeclaration; + var constantValue; + if (declaration.kind === 176 /* EnumMember */ && (constantValue = getNodeLinks(declaration).enumMemberValue) !== undefined) { + return constantValue.toString() + " /* " + ts.identifierToString(declaration.name) + " */"; + } + } + } + function getExportAssignmentName(node) { + var symbol = getExportAssignmentSymbol(getSymbolOfNode(node)); + return symbol && symbolIsValue(symbol) ? symbolToString(symbol) : undefined; + } + function isTopLevelValueImportedViaEntityName(node) { + if (node.parent.kind !== 177 /* SourceFile */ || !node.entityName) { + return false; + } + var symbol = getSymbolOfNode(node); + var target = resolveImport(symbol); + return target !== unknownSymbol && ((target.flags & ts.SymbolFlags.Value) !== 0); + } + function shouldEmitDeclarations() { + return program.getCompilerOptions().declaration && !program.getDiagnostics().length && !getDiagnostics().length; + } + function isReferencedImportDeclaration(node) { + var symbol = getSymbolOfNode(node); + if (getSymbolLinks(symbol).referenced) { + return true; + } + if (node.flags & 1 /* Export */) { + var target = resolveImport(symbol); + if (target !== unknownSymbol && target.flags & ts.SymbolFlags.Value) { + return true; + } + } + return false; + } + function isImplementationOfOverload(node) { + if (node.body) { + var symbol = getSymbolOfNode(node); + return getSignaturesOfSymbol(symbol).length > 1; + } + return false; + } + function getNodeCheckFlags(node) { + return getNodeLinks(node).flags; + } + function getEnumMemberValue(node) { + return getNodeLinks(node).enumMemberValue; + } + function writeTypeAtLocation(location, enclosingDeclaration, flags, writer) { + var symbol = getSymbolOfNode(location); + var type = symbol && !(symbol.flags & 512 /* TypeLiteral */) ? getTypeOfSymbol(symbol) : getTypeFromTypeNode(location); + writeTypeToTextWriter(type, enclosingDeclaration, flags, writer); + } + function writeReturnTypeOfSignatureDeclaration(signatureDeclaration, enclosingDeclaration, flags, writer) { + var signature = getSignatureFromDeclaration(signatureDeclaration); + writeTypeToTextWriter(getReturnTypeOfSignature(signature), enclosingDeclaration, flags, writer); + } + function invokeEmitter() { + var resolver = { + getProgram: function () { return program; }, + getLocalNameOfContainer: getLocalNameOfContainer, + getExpressionNamePrefix: getExpressionNamePrefix, + getPropertyAccessSubstitution: getPropertyAccessSubstitution, + getExportAssignmentName: getExportAssignmentName, + isReferencedImportDeclaration: isReferencedImportDeclaration, + getNodeCheckFlags: getNodeCheckFlags, + getEnumMemberValue: getEnumMemberValue, + isTopLevelValueImportedViaEntityName: isTopLevelValueImportedViaEntityName, + shouldEmitDeclarations: shouldEmitDeclarations, + isDeclarationVisible: isDeclarationVisible, + isImplementationOfOverload: isImplementationOfOverload, + writeTypeAtLocation: writeTypeAtLocation, + writeReturnTypeOfSignatureDeclaration: writeReturnTypeOfSignatureDeclaration + }; + checkProgram(); + return ts.emitFiles(resolver); + } + function initializeTypeChecker() { + ts.forEach(program.getSourceFiles(), function (file) { + ts.bindSourceFile(file); + ts.forEach(file.semanticErrors, addDiagnostic); + }); + ts.forEach(program.getSourceFiles(), function (file) { + if (!ts.isExternalModule(file)) { + extendSymbolTable(globals, file.locals); + } + }); + getSymbolLinks(undefinedSymbol).type = undefinedType; + getSymbolLinks(argumentsSymbol).type = getGlobalType("IArguments"); + getSymbolLinks(unknownSymbol).type = unknownType; + globals[undefinedSymbol.name] = undefinedSymbol; + globalArrayType = getGlobalType("Array", 1); + globalObjectType = getGlobalType("Object"); + globalFunctionType = getGlobalType("Function"); + globalStringType = getGlobalType("String"); + globalNumberType = getGlobalType("Number"); + globalBooleanType = getGlobalType("Boolean"); + globalRegExpType = getGlobalType("RegExp"); + } + initializeTypeChecker(); + return checker; + } + ts.createTypeChecker = createTypeChecker; +})(ts || (ts = {})); +var TypeScript; +(function (TypeScript) { + TypeScript.DiagnosticCode = { + error_TS_0_1: "error TS{0}: {1}", + warning_TS_0_1: "warning TS{0}: {1}", + Unrecognized_escape_sequence: "Unrecognized escape sequence.", + Unexpected_character_0: "Unexpected character {0}.", + Missing_close_quote_character: "Missing close quote character.", + Identifier_expected: "Identifier expected.", + _0_keyword_expected: "'{0}' keyword expected.", + _0_expected: "'{0}' expected.", + Identifier_expected_0_is_a_keyword: "Identifier expected; '{0}' is a keyword.", + Automatic_semicolon_insertion_not_allowed: "Automatic semicolon insertion not allowed.", + Unexpected_token_0_expected: "Unexpected token; '{0}' expected.", + Trailing_comma_not_allowed: "Trailing comma not allowed.", + AsteriskSlash_expected: "'*/' expected.", + public_or_private_modifier_must_precede_static: "'public' or 'private' modifier must precede 'static'.", + Unexpected_token: "Unexpected token.", + Catch_clause_parameter_cannot_have_a_type_annotation: "Catch clause parameter cannot have a type annotation.", + A_rest_parameter_must_be_last_in_a_parameter_list: "A rest parameter must be last in a parameter list.", + Parameter_cannot_have_question_mark_and_initializer: "Parameter cannot have question mark and initializer.", + A_required_parameter_cannot_follow_an_optional_parameter: "A required parameter cannot follow an optional parameter.", + Index_signatures_cannot_have_rest_parameters: "Index signatures cannot have rest parameters.", + Index_signature_parameter_cannot_have_accessibility_modifiers: "Index signature parameter cannot have accessibility modifiers.", + Index_signature_parameter_cannot_have_a_question_mark: "Index signature parameter cannot have a question mark.", + Index_signature_parameter_cannot_have_an_initializer: "Index signature parameter cannot have an initializer.", + Index_signature_must_have_a_type_annotation: "Index signature must have a type annotation.", + Index_signature_parameter_must_have_a_type_annotation: "Index signature parameter must have a type annotation.", + Index_signature_parameter_type_must_be_string_or_number: "Index signature parameter type must be 'string' or 'number'.", + extends_clause_already_seen: "'extends' clause already seen.", + extends_clause_must_precede_implements_clause: "'extends' clause must precede 'implements' clause.", + Classes_can_only_extend_a_single_class: "Classes can only extend a single class.", + implements_clause_already_seen: "'implements' clause already seen.", + Accessibility_modifier_already_seen: "Accessibility modifier already seen.", + _0_modifier_must_precede_1_modifier: "'{0}' modifier must precede '{1}' modifier.", + _0_modifier_already_seen: "'{0}' modifier already seen.", + _0_modifier_cannot_appear_on_a_class_element: "'{0}' modifier cannot appear on a class element.", + Interface_declaration_cannot_have_implements_clause: "Interface declaration cannot have 'implements' clause.", + super_invocation_cannot_have_type_arguments: "'super' invocation cannot have type arguments.", + Only_ambient_modules_can_use_quoted_names: "Only ambient modules can use quoted names.", + Statements_are_not_allowed_in_ambient_contexts: "Statements are not allowed in ambient contexts.", + A_function_implementation_cannot_be_declared_in_an_ambient_context: "A function implementation cannot be declared in an ambient context.", + A_declare_modifier_cannot_be_used_in_an_already_ambient_context: "A 'declare' modifier cannot be used in an already ambient context.", + Initializers_are_not_allowed_in_ambient_contexts: "Initializers are not allowed in ambient contexts.", + _0_modifier_cannot_appear_on_a_module_element: "'{0}' modifier cannot appear on a module element.", + A_declare_modifier_cannot_be_used_with_an_interface_declaration: "A 'declare' modifier cannot be used with an interface declaration.", + A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file: "A 'declare' modifier is required for a top level declaration in a .d.ts file.", + A_rest_parameter_cannot_be_optional: "A rest parameter cannot be optional.", + A_rest_parameter_cannot_have_an_initializer: "A rest parameter cannot have an initializer.", + set_accessor_must_have_exactly_one_parameter: "'set' accessor must have exactly one parameter.", + set_accessor_parameter_cannot_be_optional: "'set' accessor parameter cannot be optional.", + set_accessor_parameter_cannot_have_an_initializer: "'set' accessor parameter cannot have an initializer.", + set_accessor_cannot_have_rest_parameter: "'set' accessor cannot have rest parameter.", + get_accessor_cannot_have_parameters: "'get' accessor cannot have parameters.", + Modifiers_cannot_appear_here: "Modifiers cannot appear here.", + Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher: "Accessors are only available when targeting ECMAScript 5 and higher.", + Enum_member_must_have_initializer: "Enum member must have initializer.", + Export_assignment_cannot_be_used_in_internal_modules: "Export assignment cannot be used in internal modules.", + Ambient_enum_elements_can_only_have_integer_literal_initializers: "Ambient enum elements can only have integer literal initializers.", + module_class_interface_enum_import_or_statement: "module, class, interface, enum, import or statement", + constructor_function_accessor_or_variable: "constructor, function, accessor or variable", + statement: "statement", + case_or_default_clause: "case or default clause", + identifier: "identifier", + call_construct_index_property_or_function_signature: "call, construct, index, property or function signature", + expression: "expression", + type_name: "type name", + property_or_accessor: "property or accessor", + parameter: "parameter", + type: "type", + type_parameter: "type parameter", + A_declare_modifier_cannot_be_used_with_an_import_declaration: "A 'declare' modifier cannot be used with an import declaration.", + Invalid_reference_directive_syntax: "Invalid 'reference' directive syntax.", + Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher: "Octal literals are not available when targeting ECMAScript 5 and higher.", + Accessors_are_not_allowed_in_ambient_contexts: "Accessors are not allowed in ambient contexts.", + _0_modifier_cannot_appear_on_a_constructor_declaration: "'{0}' modifier cannot appear on a constructor declaration.", + _0_modifier_cannot_appear_on_a_parameter: "'{0}' modifier cannot appear on a parameter.", + Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement: "Only a single variable declaration is allowed in a 'for...in' statement.", + Type_parameters_cannot_appear_on_a_constructor_declaration: "Type parameters cannot appear on a constructor declaration.", + Type_annotation_cannot_appear_on_a_constructor_declaration: "Type annotation cannot appear on a constructor declaration.", + Type_parameters_cannot_appear_on_an_accessor: "Type parameters cannot appear on an accessor.", + Type_annotation_cannot_appear_on_a_set_accessor: "Type annotation cannot appear on a 'set' accessor.", + Index_signature_must_have_exactly_one_parameter: "Index signature must have exactly one parameter.", + _0_list_cannot_be_empty: "'{0}' list cannot be empty.", + variable_declaration: "variable declaration", + type_argument: "type argument", + Invalid_use_of_0_in_strict_mode: "Invalid use of '{0}' in strict mode.", + with_statements_are_not_allowed_in_strict_mode: "'with' statements are not allowed in strict mode.", + delete_cannot_be_called_on_an_identifier_in_strict_mode: "'delete' cannot be called on an identifier in strict mode.", + Invalid_left_hand_side_in_for_in_statement: "Invalid left-hand side in 'for...in' statement.", + continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: "'continue' statement can only be used within an enclosing iteration statement.", + break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: "'break' statement can only be used within an enclosing iteration or switch statement.", + Jump_target_not_found: "Jump target not found.", + Jump_target_cannot_cross_function_boundary: "Jump target cannot cross function boundary.", + return_statement_must_be_contained_within_a_function_body: "'return' statement must be contained within a function body.", + Expression_expected: "Expression expected.", + Type_expected: "Type expected.", + Duplicate_identifier_0: "Duplicate identifier '{0}'.", + The_name_0_does_not_exist_in_the_current_scope: "The name '{0}' does not exist in the current scope.", + The_name_0_does_not_refer_to_a_value: "The name '{0}' does not refer to a value.", + super_can_only_be_used_inside_a_class_instance_method: "'super' can only be used inside a class instance method.", + The_left_hand_side_of_an_assignment_expression_must_be_a_variable_property_or_indexer: "The left-hand side of an assignment expression must be a variable, property or indexer.", + Value_of_type_0_is_not_callable_Did_you_mean_to_include_new: "Value of type '{0}' is not callable. Did you mean to include 'new'?", + Value_of_type_0_is_not_callable: "Value of type '{0}' is not callable.", + Value_of_type_0_is_not_newable: "Value of type '{0}' is not newable.", + An_index_expression_argument_must_be_string_number_or_any: "An index expression argument must be 'string', 'number', or 'any'.", + Operator_0_cannot_be_applied_to_types_1_and_2: "Operator '{0}' cannot be applied to types '{1}' and '{2}'.", + Type_0_is_not_assignable_to_type_1: "Type '{0}' is not assignable to type '{1}'.", + Type_0_is_not_assignable_to_type_1_NL_2: "Type '{0}' is not assignable to type '{1}':{NL}{2}", + Expected_var_class_interface_or_module: "Expected var, class, interface, or module.", + Getter_0_already_declared: "Getter '{0}' already declared.", + Setter_0_already_declared: "Setter '{0}' already declared.", + Exported_class_0_extends_private_class_1: "Exported class '{0}' extends private class '{1}'.", + Exported_class_0_implements_private_interface_1: "Exported class '{0}' implements private interface '{1}'.", + Exported_interface_0_extends_private_interface_1: "Exported interface '{0}' extends private interface '{1}'.", + Exported_class_0_extends_class_from_inaccessible_module_1: "Exported class '{0}' extends class from inaccessible module {1}.", + Exported_class_0_implements_interface_from_inaccessible_module_1: "Exported class '{0}' implements interface from inaccessible module {1}.", + Exported_interface_0_extends_interface_from_inaccessible_module_1: "Exported interface '{0}' extends interface from inaccessible module {1}.", + Public_static_property_0_of_exported_class_has_or_is_using_private_type_1: "Public static property '{0}' of exported class has or is using private type '{1}'.", + Public_property_0_of_exported_class_has_or_is_using_private_type_1: "Public property '{0}' of exported class has or is using private type '{1}'.", + Property_0_of_exported_interface_has_or_is_using_private_type_1: "Property '{0}' of exported interface has or is using private type '{1}'.", + Exported_variable_0_has_or_is_using_private_type_1: "Exported variable '{0}' has or is using private type '{1}'.", + Public_static_property_0_of_exported_class_is_using_inaccessible_module_1: "Public static property '{0}' of exported class is using inaccessible module {1}.", + Public_property_0_of_exported_class_is_using_inaccessible_module_1: "Public property '{0}' of exported class is using inaccessible module {1}.", + Property_0_of_exported_interface_is_using_inaccessible_module_1: "Property '{0}' of exported interface is using inaccessible module {1}.", + Exported_variable_0_is_using_inaccessible_module_1: "Exported variable '{0}' is using inaccessible module {1}.", + Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of constructor from exported class has or is using private type '{1}'.", + Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of public static property setter from exported class has or is using private type '{1}'.", + Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of public property setter from exported class has or is using private type '{1}'.", + Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_1: "Parameter '{0}' of constructor signature from exported interface has or is using private type '{1}'.", + Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_type_1: "Parameter '{0}' of call signature from exported interface has or is using private type '{1}'.", + Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of public static method from exported class has or is using private type '{1}'.", + Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_type_1: "Parameter '{0}' of public method from exported class has or is using private type '{1}'.", + Parameter_0_of_method_from_exported_interface_has_or_is_using_private_type_1: "Parameter '{0}' of method from exported interface has or is using private type '{1}'.", + Parameter_0_of_exported_function_has_or_is_using_private_type_1: "Parameter '{0}' of exported function has or is using private type '{1}'.", + Parameter_0_of_constructor_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of constructor from exported class is using inaccessible module {1}.", + Parameter_0_of_public_static_property_setter_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of public static property setter from exported class is using inaccessible module {1}.", + Parameter_0_of_public_property_setter_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of public property setter from exported class is using inaccessible module {1}.", + Parameter_0_of_constructor_signature_from_exported_interface_is_using_inaccessible_module_1: "Parameter '{0}' of constructor signature from exported interface is using inaccessible module {1}.", + Parameter_0_of_call_signature_from_exported_interface_is_using_inaccessible_module_1: "Parameter '{0}' of call signature from exported interface is using inaccessible module {1}", + Parameter_0_of_public_static_method_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of public static method from exported class is using inaccessible module {1}.", + Parameter_0_of_public_method_from_exported_class_is_using_inaccessible_module_1: "Parameter '{0}' of public method from exported class is using inaccessible module {1}.", + Parameter_0_of_method_from_exported_interface_is_using_inaccessible_module_1: "Parameter '{0}' of method from exported interface is using inaccessible module {1}.", + Parameter_0_of_exported_function_is_using_inaccessible_module_1: "Parameter '{0}' of exported function is using inaccessible module {1}.", + Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_type_0: "Return type of public static property getter from exported class has or is using private type '{0}'.", + Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_type_0: "Return type of public property getter from exported class has or is using private type '{0}'.", + Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_0: "Return type of constructor signature from exported interface has or is using private type '{0}'.", + Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_type_0: "Return type of call signature from exported interface has or is using private type '{0}'.", + Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_type_0: "Return type of index signature from exported interface has or is using private type '{0}'.", + Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_type_0: "Return type of public static method from exported class has or is using private type '{0}'.", + Return_type_of_public_method_from_exported_class_has_or_is_using_private_type_0: "Return type of public method from exported class has or is using private type '{0}'.", + Return_type_of_method_from_exported_interface_has_or_is_using_private_type_0: "Return type of method from exported interface has or is using private type '{0}'.", + Return_type_of_exported_function_has_or_is_using_private_type_0: "Return type of exported function has or is using private type '{0}'.", + Return_type_of_public_static_property_getter_from_exported_class_is_using_inaccessible_module_0: "Return type of public static property getter from exported class is using inaccessible module {0}.", + Return_type_of_public_property_getter_from_exported_class_is_using_inaccessible_module_0: "Return type of public property getter from exported class is using inaccessible module {0}.", + Return_type_of_constructor_signature_from_exported_interface_is_using_inaccessible_module_0: "Return type of constructor signature from exported interface is using inaccessible module {0}.", + Return_type_of_call_signature_from_exported_interface_is_using_inaccessible_module_0: "Return type of call signature from exported interface is using inaccessible module {0}.", + Return_type_of_index_signature_from_exported_interface_is_using_inaccessible_module_0: "Return type of index signature from exported interface is using inaccessible module {0}.", + Return_type_of_public_static_method_from_exported_class_is_using_inaccessible_module_0: "Return type of public static method from exported class is using inaccessible module {0}.", + Return_type_of_public_method_from_exported_class_is_using_inaccessible_module_0: "Return type of public method from exported class is using inaccessible module {0}.", + Return_type_of_method_from_exported_interface_is_using_inaccessible_module_0: "Return type of method from exported interface is using inaccessible module {0}.", + Return_type_of_exported_function_is_using_inaccessible_module_0: "Return type of exported function is using inaccessible module {0}.", + new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: "'new T[]' cannot be used to create an array. Use 'new Array()' instead.", + A_parameter_list_must_follow_a_generic_type_argument_list_expected: "A parameter list must follow a generic type argument list. '(' expected.", + Multiple_constructor_implementations_are_not_allowed: "Multiple constructor implementations are not allowed.", + Cannot_find_external_module_0: "Cannot find external module '{0}'.", + Module_cannot_be_aliased_to_a_non_module_type: "Module cannot be aliased to a non-module type.", + A_class_may_only_extend_another_class: "A class may only extend another class.", + A_class_may_only_implement_another_class_or_interface: "A class may only implement another class or interface.", + An_interface_may_only_extend_a_class_or_another_interface: "An interface may only extend a class or another interface.", + Unable_to_resolve_type: "Unable to resolve type.", + Unable_to_resolve_type_of_0: "Unable to resolve type of '{0}'.", + Unable_to_resolve_type_parameter_constraint: "Unable to resolve type parameter constraint.", + Type_parameter_constraint_cannot_be_a_primitive_type: "Type parameter constraint cannot be a primitive type.", + Supplied_parameters_do_not_match_any_signature_of_call_target: "Supplied parameters do not match any signature of call target.", + Supplied_parameters_do_not_match_any_signature_of_call_target_NL_0: "Supplied parameters do not match any signature of call target:{NL}{0}", + Cannot_use_new_with_an_expression_whose_type_lacks_a_signature: "Cannot use 'new' with an expression whose type lacks a signature.", + Only_a_void_function_can_be_called_with_the_new_keyword: "Only a void function can be called with the 'new' keyword.", + Could_not_select_overload_for_new_expression: "Could not select overload for 'new' expression.", + Type_0_does_not_satisfy_the_constraint_1: "Type '{0}' does not satisfy the constraint '{1}'.", + Could_not_select_overload_for_call_expression: "Could not select overload for 'call' expression.", + Cannot_invoke_an_expression_whose_type_lacks_a_call_signature: "Cannot invoke an expression whose type lacks a call signature.", + Calls_to_super_are_only_valid_inside_a_class: "Calls to 'super' are only valid inside a class.", + Generic_type_0_requires_1_type_argument_s: "Generic type '{0}' requires {1} type argument(s).", + Type_of_array_literal_cannot_be_determined_Best_common_type_could_not_be_found_for_array_elements: "Type of array literal cannot be determined. Best common type could not be found for array elements.", + Could_not_find_enclosing_symbol_for_dotted_name_0: "Could not find enclosing symbol for dotted name '{0}'.", + Property_0_does_not_exist_on_value_of_type_1: "Property '{0}' does not exist on value of type '{1}'.", + Cannot_find_name_0: "Cannot find name '{0}'.", + get_and_set_accessor_must_have_the_same_type: "'get' and 'set' accessor must have the same type.", + this_cannot_be_referenced_in_current_location: "'this' cannot be referenced in current location.", + Static_members_cannot_reference_class_type_parameters: "Static members cannot reference class type parameters.", + Type_0_recursively_references_itself_as_a_base_type: "Type '{0}' recursively references itself as a base type.", + super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class: "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class.", + super_can_only_be_referenced_in_a_derived_class: "'super' can only be referenced in a derived class.", + A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties: "A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties.", + Constructors_for_derived_classes_must_contain_a_super_call: "Constructors for derived classes must contain a 'super' call.", + Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors: "Super calls are not permitted outside constructors or in nested functions inside constructors.", + _0_1_is_inaccessible: "'{0}.{1}' is inaccessible.", + this_cannot_be_referenced_in_a_module_body: "'this' cannot be referenced in a module body.", + Invalid_expression_types_not_known_to_support_the_addition_operator: "Invalid '+' expression - types not known to support the addition operator.", + The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: "The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.", + The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: "The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.", + An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type: "An arithmetic operand must be of type 'any', 'number' or an enum type.", + Variable_declarations_of_a_for_statement_cannot_use_a_type_annotation: "Variable declarations of a 'for' statement cannot use a type annotation.", + Variable_declarations_of_a_for_statement_must_be_of_types_string_or_any: "Variable declarations of a 'for' statement must be of types 'string' or 'any'.", + The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter: "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter.", + The_left_hand_side_of_an_in_expression_must_be_of_types_any_string_or_number: "The left-hand side of an 'in' expression must be of types 'any', 'string' or 'number'.", + The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: "The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter.", + The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter.", + The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type: "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type.", + Setters_cannot_return_a_value: "Setters cannot return a value.", + Tried_to_query_type_of_uninitialized_module_0: "Tried to query type of uninitialized module '{0}'.", + Tried_to_set_variable_type_to_uninitialized_module_type_0: "Tried to set variable type to uninitialized module type '{0}'.", + Type_0_is_not_generic: "Type '{0}' is not generic.", + Getters_must_return_a_value: "Getters must return a value.", + Getter_and_setter_accessors_do_not_agree_in_visibility: "Getter and setter accessors do not agree in visibility.", + Invalid_left_hand_side_of_assignment_expression: "Invalid left-hand side of assignment expression.", + Function_declared_a_non_void_return_type_but_has_no_return_expression: "Function declared a non-void return type, but has no return expression.", + Cannot_resolve_return_type_reference: "Cannot resolve return type reference.", + Constructors_cannot_have_a_return_type_of_void: "Constructors cannot have a return type of 'void'.", + Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2: "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'.", + All_symbols_within_a_with_block_will_be_resolved_to_any: "All symbols within a with block will be resolved to 'any'.", + Import_declarations_in_an_internal_module_cannot_reference_an_external_module: "Import declarations in an internal module cannot reference an external module.", + Class_0_declares_interface_1_but_does_not_implement_it_NL_2: "Class {0} declares interface {1} but does not implement it:{NL}{2}", + Class_0_declares_class_1_as_an_interface_but_does_not_implement_it_NL_2: "Class {0} declares class {1} as an interface but does not implement it:{NL}{2}", + The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer: "The operand of an increment or decrement operator must be a variable, property or indexer.", + this_cannot_be_referenced_in_a_static_property_initializer: "'this' cannot be referenced in a static property initializer.", + Class_0_cannot_extend_class_1_NL_2: "Class '{0}' cannot extend class '{1}':{NL}{2}", + Interface_0_cannot_extend_class_1_NL_2: "Interface '{0}' cannot extend class '{1}':{NL}{2}", + Interface_0_cannot_extend_interface_1_NL_2: "Interface '{0}' cannot extend interface '{1}':{NL}{2}", + Overload_signature_is_not_compatible_with_function_definition: "Overload signature is not compatible with function definition.", + Overload_signature_is_not_compatible_with_function_definition_NL_0: "Overload signature is not compatible with function definition:{NL}{0}", + Overload_signatures_must_all_be_public_or_private: "Overload signatures must all be public or private.", + Overload_signatures_must_all_be_exported_or_not_exported: "Overload signatures must all be exported or not exported.", + Overload_signatures_must_all_be_ambient_or_non_ambient: "Overload signatures must all be ambient or non-ambient.", + Overload_signatures_must_all_be_optional_or_required: "Overload signatures must all be optional or required.", + Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature: "Specialized overload signature is not assignable to any non-specialized signature.", + this_cannot_be_referenced_in_constructor_arguments: "'this' cannot be referenced in constructor arguments.", + Instance_member_cannot_be_accessed_off_a_class: "Instance member cannot be accessed off a class.", + Untyped_function_calls_may_not_accept_type_arguments: "Untyped function calls may not accept type arguments.", + Non_generic_functions_may_not_accept_type_arguments: "Non-generic functions may not accept type arguments.", + A_generic_type_may_not_reference_itself_with_a_wrapped_form_of_its_own_type_parameters: "A generic type may not reference itself with a wrapped form of its own type parameters.", + A_rest_parameter_must_be_of_an_array_type: "A rest parameter must be of an array type.", + Overload_signature_implementation_cannot_use_specialized_type: "Overload signature implementation cannot use specialized type.", + Export_assignments_may_only_be_used_at_the_top_level_of_external_modules: "Export assignments may only be used at the top-level of external modules.", + Export_assignments_may_only_be_made_with_variables_functions_classes_interfaces_enums_and_internal_modules: "Export assignments may only be made with variables, functions, classes, interfaces, enums and internal modules.", + Only_public_methods_of_the_base_class_are_accessible_via_the_super_keyword: "Only public methods of the base class are accessible via the 'super' keyword.", + Numeric_indexer_type_0_must_be_assignable_to_string_indexer_type_1: "Numeric indexer type '{0}' must be assignable to string indexer type '{1}'.", + Numeric_indexer_type_0_must_be_assignable_to_string_indexer_type_1_NL_2: "Numeric indexer type '{0}' must be assignable to string indexer type '{1}':{NL}{2}", + All_numerically_named_properties_must_be_assignable_to_numeric_indexer_type_0: "All numerically named properties must be assignable to numeric indexer type '{0}'.", + All_numerically_named_properties_must_be_assignable_to_numeric_indexer_type_0_NL_1: "All numerically named properties must be assignable to numeric indexer type '{0}':{NL}{1}", + All_named_properties_must_be_assignable_to_string_indexer_type_0: "All named properties must be assignable to string indexer type '{0}'.", + All_named_properties_must_be_assignable_to_string_indexer_type_0_NL_1: "All named properties must be assignable to string indexer type '{0}':{NL}{1}", + A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation: "A parameter initializer is only allowed in a function or constructor implementation.", + Function_expression_declared_a_non_void_return_type_but_has_no_return_expression: "Function expression declared a non-void return type, but has no return expression.", + Import_declaration_referencing_identifier_from_internal_module_can_only_be_made_with_variables_functions_classes_interfaces_enums_and_internal_modules: "Import declaration referencing identifier from internal module can only be made with variables, functions, classes, interfaces, enums and internal modules.", + Module_0_has_no_exported_member_1: "Module '{0}' has no exported member '{1}'.", + Unable_to_resolve_module_reference_0: "Unable to resolve module reference '{0}'.", + Could_not_find_module_0_in_module_1: "Could not find module '{0}' in module '{1}'.", + Exported_import_declaration_0_is_assigned_value_with_type_that_has_or_is_using_private_type_1: "Exported import declaration '{0}' is assigned value with type that has or is using private type '{1}'.", + Exported_import_declaration_0_is_assigned_value_with_type_that_is_using_inaccessible_module_1: "Exported import declaration '{0}' is assigned value with type that is using inaccessible module '{1}'.", + Exported_import_declaration_0_is_assigned_type_that_has_or_is_using_private_type_1: "Exported import declaration '{0}' is assigned type that has or is using private type '{1}'.", + Exported_import_declaration_0_is_assigned_type_that_is_using_inaccessible_module_1: "Exported import declaration '{0}' is assigned type that is using inaccessible module '{1}'.", + Exported_import_declaration_0_is_assigned_container_that_is_or_is_using_inaccessible_module_1: "Exported import declaration '{0}' is assigned container that is or is using inaccessible module '{1}'.", + Type_name_0_in_extends_clause_does_not_reference_constructor_function_for_1: "Type name '{0}' in extends clause does not reference constructor function for '{1}'.", + Internal_module_reference_0_in_import_declaration_does_not_reference_module_instance_for_1: "Internal module reference '{0}' in import declaration does not reference module instance for '{1}'.", + Module_0_cannot_merge_with_previous_declaration_of_1_in_a_different_file_2: "Module '{0}' cannot merge with previous declaration of '{1}' in a different file '{2}'.", + Interface_0_cannot_simultaneously_extend_types_1_and_2_NL_3: "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}':{NL}{3}", + Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it: "Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it.", + Ambient_external_module_declaration_cannot_be_reopened: "Ambient external module declaration cannot be reopened.", + All_declarations_of_merged_declaration_0_must_be_exported_or_not_exported: "All declarations of merged declaration '{0}' must be exported or not exported.", + super_cannot_be_referenced_in_constructor_arguments: "'super' cannot be referenced in constructor arguments.", + Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: "Return type of constructor signature must be assignable to the instance type of the class.", + Ambient_external_module_declaration_must_be_defined_in_global_context: "Ambient external module declaration must be defined in global context.", + Ambient_external_module_declaration_cannot_specify_relative_module_name: "Ambient external module declaration cannot specify relative module name.", + Import_declaration_in_an_ambient_external_module_declaration_cannot_reference_external_module_through_relative_external_module_name: "Import declaration in an ambient external module declaration cannot reference external module through relative external module name.", + No_best_common_type_exists_among_return_expressions: "No best common type exists among return expressions.", + Import_declaration_cannot_refer_to_external_module_reference_when_noResolve_option_is_set: "Import declaration cannot refer to external module reference when --noResolve option is set.", + Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference: "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference.", + Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference: "Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference.", + Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference: "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference.", + Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference: "Expression resolves to '_super' that compiler uses to capture base class reference.", + TypeParameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_type_1: "TypeParameter '{0}' of constructor signature from exported interface has or is using private type '{1}'.", + TypeParameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_type_1: "TypeParameter '{0}' of call signature from exported interface has or is using private type '{1}'.", + TypeParameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_type_1: "TypeParameter '{0}' of public static method from exported class has or is using private type '{1}'.", + TypeParameter_0_of_public_method_from_exported_class_has_or_is_using_private_type_1: "TypeParameter '{0}' of public method from exported class has or is using private type '{1}'.", + TypeParameter_0_of_method_from_exported_interface_has_or_is_using_private_type_1: "TypeParameter '{0}' of method from exported interface has or is using private type '{1}'.", + TypeParameter_0_of_exported_function_has_or_is_using_private_type_1: "TypeParameter '{0}' of exported function has or is using private type '{1}'.", + TypeParameter_0_of_constructor_signature_from_exported_interface_is_using_inaccessible_module_1: "TypeParameter '{0}' of constructor signature from exported interface is using inaccessible module {1}.", + TypeParameter_0_of_call_signature_from_exported_interface_is_using_inaccessible_module_1: "TypeParameter '{0}' of call signature from exported interface is using inaccessible module {1}", + TypeParameter_0_of_public_static_method_from_exported_class_is_using_inaccessible_module_1: "TypeParameter '{0}' of public static method from exported class is using inaccessible module {1}.", + TypeParameter_0_of_public_method_from_exported_class_is_using_inaccessible_module_1: "TypeParameter '{0}' of public method from exported class is using inaccessible module {1}.", + TypeParameter_0_of_method_from_exported_interface_is_using_inaccessible_module_1: "TypeParameter '{0}' of method from exported interface is using inaccessible module {1}.", + TypeParameter_0_of_exported_function_is_using_inaccessible_module_1: "TypeParameter '{0}' of exported function is using inaccessible module {1}.", + TypeParameter_0_of_exported_class_has_or_is_using_private_type_1: "TypeParameter '{0}' of exported class has or is using private type '{1}'.", + TypeParameter_0_of_exported_interface_has_or_is_using_private_type_1: "TypeParameter '{0}' of exported interface has or is using private type '{1}'.", + TypeParameter_0_of_exported_class_is_using_inaccessible_module_1: "TypeParameter '{0}' of exported class is using inaccessible module {1}.", + TypeParameter_0_of_exported_interface_is_using_inaccessible_module_1: "TypeParameter '{0}' of exported interface is using inaccessible module {1}.", + Duplicate_identifier_i_Compiler_uses_i_to_initialize_rest_parameter: "Duplicate identifier '_i'. Compiler uses '_i' to initialize rest parameter.", + Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters: "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters.", + No_best_common_type_exists_between_0_and_1: "No best common type exists between '{0}' and '{1}'.", + No_best_common_type_exists_between_0_1_and_2: "No best common type exists between '{0}', '{1}', and '{2}'.", + Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_an_external_module: "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of an external module.", + Constraint_of_a_type_parameter_cannot_reference_any_type_parameter_from_the_same_type_parameter_list: "Constraint of a type parameter cannot reference any type parameter from the same type parameter list.", + Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor.", + Parameter_0_cannot_be_referenced_in_its_initializer: "Parameter '{0}' cannot be referenced in its initializer.", + Duplicate_string_index_signature: "Duplicate string index signature.", + Duplicate_number_index_signature: "Duplicate number index signature.", + All_declarations_of_an_interface_must_have_identical_type_parameters: "All declarations of an interface must have identical type parameters.", + Expression_resolves_to_variable_declaration_i_that_compiler_uses_to_initialize_rest_parameter: "Expression resolves to variable declaration '_i' that compiler uses to initialize rest parameter.", + Neither_type_0_nor_type_1_is_assignable_to_the_other: "Neither type '{0}' nor type '{1}' is assignable to the other.", + Neither_type_0_nor_type_1_is_assignable_to_the_other_NL_2: "Neither type '{0}' nor type '{1}' is assignable to the other:{NL}{2}", + Duplicate_function_implementation: "Duplicate function implementation.", + Function_implementation_expected: "Function implementation expected.", + Function_overload_name_must_be_0: "Function overload name must be '{0}'.", + Constructor_implementation_expected: "Constructor implementation expected.", + Class_name_cannot_be_0: "Class name cannot be '{0}'.", + Interface_name_cannot_be_0: "Interface name cannot be '{0}'.", + Enum_name_cannot_be_0: "Enum name cannot be '{0}'.", + A_module_cannot_have_multiple_export_assignments: "A module cannot have multiple export assignments.", + Export_assignment_not_allowed_in_module_with_exported_element: "Export assignment not allowed in module with exported element.", + A_parameter_property_is_only_allowed_in_a_constructor_implementation: "A parameter property is only allowed in a constructor implementation.", + Function_overload_must_be_static: "Function overload must be static.", + Function_overload_must_not_be_static: "Function overload must not be static.", + Type_0_is_missing_property_1_from_type_2: "Type '{0}' is missing property '{1}' from type '{2}'.", + Types_of_property_0_of_types_1_and_2_are_incompatible: "Types of property '{0}' of types '{1}' and '{2}' are incompatible.", + Types_of_property_0_of_types_1_and_2_are_incompatible_NL_3: "Types of property '{0}' of types '{1}' and '{2}' are incompatible:{NL}{3}", + Property_0_defined_as_private_in_type_1_is_defined_as_public_in_type_2: "Property '{0}' defined as private in type '{1}' is defined as public in type '{2}'.", + Property_0_defined_as_public_in_type_1_is_defined_as_private_in_type_2: "Property '{0}' defined as public in type '{1}' is defined as private in type '{2}'.", + Types_0_and_1_define_property_2_as_private: "Types '{0}' and '{1}' define property '{2}' as private.", + Call_signatures_of_types_0_and_1_are_incompatible: "Call signatures of types '{0}' and '{1}' are incompatible.", + Call_signatures_of_types_0_and_1_are_incompatible_NL_2: "Call signatures of types '{0}' and '{1}' are incompatible:{NL}{2}", + Type_0_requires_a_call_signature_but_type_1_lacks_one: "Type '{0}' requires a call signature, but type '{1}' lacks one.", + Construct_signatures_of_types_0_and_1_are_incompatible: "Construct signatures of types '{0}' and '{1}' are incompatible.", + Construct_signatures_of_types_0_and_1_are_incompatible_NL_2: "Construct signatures of types '{0}' and '{1}' are incompatible:{NL}{2}", + Type_0_requires_a_construct_signature_but_type_1_lacks_one: "Type '{0}' requires a construct signature, but type '{1}' lacks one.", + Index_signatures_of_types_0_and_1_are_incompatible: "Index signatures of types '{0}' and '{1}' are incompatible.", + Index_signatures_of_types_0_and_1_are_incompatible_NL_2: "Index signatures of types '{0}' and '{1}' are incompatible:{NL}{2}", + Call_signature_expects_0_or_fewer_parameters: "Call signature expects {0} or fewer parameters.", + Could_not_apply_type_0_to_argument_1_which_is_of_type_2: "Could not apply type '{0}' to argument {1} which is of type '{2}'.", + Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function: "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function.", + Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function: "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function.", + Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor.", + Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property.", + Types_of_static_property_0_of_class_1_and_class_2_are_incompatible: "Types of static property '{0}' of class '{1}' and class '{2}' are incompatible.", + Types_of_static_property_0_of_class_1_and_class_2_are_incompatible_NL_3: "Types of static property '{0}' of class '{1}' and class '{2}' are incompatible:{NL}{3}", + Type_reference_cannot_refer_to_container_0: "Type reference cannot refer to container '{0}'.", + Type_reference_must_refer_to_type: "Type reference must refer to type.", + In_enums_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_the_first_enum_element: "In enums with multiple declarations only one declaration can omit an initializer for the first enum element.", + _0_overload_s: " (+ {0} overload(s))", + Variable_declaration_cannot_have_the_same_name_as_an_import_declaration: "Variable declaration cannot have the same name as an import declaration.", + Signature_expected_0_type_arguments_got_1_instead: "Signature expected {0} type arguments, got {1} instead.", + Property_0_defined_as_optional_in_type_1_but_is_required_in_type_2: "Property '{0}' defined as optional in type '{1}', but is required in type '{2}'.", + Types_0_and_1_originating_in_infinitely_expanding_type_reference_do_not_refer_to_same_named_type: "Types '{0}' and '{1}' originating in infinitely expanding type reference do not refer to same named type.", + Types_0_and_1_originating_in_infinitely_expanding_type_reference_have_incompatible_type_arguments: "Types '{0}' and '{1}' originating in infinitely expanding type reference have incompatible type arguments.", + Types_0_and_1_originating_in_infinitely_expanding_type_reference_have_incompatible_type_arguments_NL_2: "Types '{0}' and '{1}' originating in infinitely expanding type reference have incompatible type arguments:{NL}{2}", + Named_properties_0_of_types_1_and_2_are_not_identical: "Named properties '{0}' of types '{1}' and '{2}' are not identical.", + Types_of_string_indexer_of_types_0_and_1_are_not_identical: "Types of string indexer of types '{0}' and '{1}' are not identical.", + Types_of_number_indexer_of_types_0_and_1_are_not_identical: "Types of number indexer of types '{0}' and '{1}' are not identical.", + Type_of_number_indexer_in_type_0_is_not_assignable_to_string_indexer_type_in_type_1_NL_2: "Type of number indexer in type '{0}' is not assignable to string indexer type in type '{1}'.{NL}{2}", + Type_of_property_0_in_type_1_is_not_assignable_to_string_indexer_type_in_type_2_NL_3: "Type of property '{0}' in type '{1}' is not assignable to string indexer type in type '{2}'.{NL}{3}", + Type_of_property_0_in_type_1_is_not_assignable_to_number_indexer_type_in_type_2_NL_3: "Type of property '{0}' in type '{1}' is not assignable to number indexer type in type '{2}'.{NL}{3}", + Static_property_0_defined_as_private_in_type_1_is_defined_as_public_in_type_2: "Static property '{0}' defined as private in type '{1}' is defined as public in type '{2}'.", + Static_property_0_defined_as_public_in_type_1_is_defined_as_private_in_type_2: "Static property '{0}' defined as public in type '{1}' is defined as private in type '{2}'.", + Types_0_and_1_define_static_property_2_as_private: "Types '{0}' and '{1}' define static property '{2}' as private.", + Current_host_does_not_support_0_option: "Current host does not support '{0}' option.", + ECMAScript_target_version_0_not_supported_Specify_a_valid_target_version_1_default_or_2: "ECMAScript target version '{0}' not supported. Specify a valid target version: '{1}' (default), or '{2}'", + Argument_for_0_option_must_be_1_or_2: "Argument for '{0}' option must be '{1}' or '{2}'", + Could_not_find_file_0: "Could not find file: '{0}'.", + A_file_cannot_have_a_reference_to_itself: "A file cannot have a reference to itself.", + Cannot_resolve_referenced_file_0: "Cannot resolve referenced file: '{0}'.", + Cannot_find_the_common_subdirectory_path_for_the_input_files: "Cannot find the common subdirectory path for the input files.", + Emit_Error_0: "Emit Error: {0}.", + Cannot_read_file_0_1: "Cannot read file '{0}': {1}", + Unsupported_file_encoding: "Unsupported file encoding.", + Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1: "Locale must be of the form or -. For example '{0}' or '{1}'.", + Unsupported_locale_0: "Unsupported locale: '{0}'.", + Execution_Failed_NL: "Execution Failed.{NL}", + Invalid_call_to_up: "Invalid call to 'up'", + Invalid_call_to_down: "Invalid call to 'down'", + Base64_value_0_finished_with_a_continuation_bit: "Base64 value '{0}' finished with a continuation bit.", + Unknown_compiler_option_0: "Unknown compiler option '{0}'", + Expected_0_arguments_to_message_got_1_instead: "Expected {0} arguments to message, got {1} instead.", + Expected_the_message_0_to_have_1_arguments_but_it_had_2: "Expected the message '{0}' to have {1} arguments, but it had {2}", + Could_not_delete_file_0: "Could not delete file '{0}'", + Could_not_create_directory_0: "Could not create directory '{0}'", + Error_while_executing_file_0: "Error while executing file '{0}': ", + Cannot_compile_external_modules_unless_the_module_flag_is_provided: "Cannot compile external modules unless the '--module' flag is provided.", + Option_mapRoot_cannot_be_specified_without_specifying_sourcemap_option: "Option mapRoot cannot be specified without specifying sourcemap option.", + Option_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option: "Option sourceRoot cannot be specified without specifying sourcemap option.", + Options_mapRoot_and_sourceRoot_cannot_be_specified_without_specifying_sourcemap_option: "Options mapRoot and sourceRoot cannot be specified without specifying sourcemap option.", + Option_0_specified_without_1: "Option '{0}' specified without '{1}'", + codepage_option_not_supported_on_current_platform: "'codepage' option not supported on current platform.", + Concatenate_and_emit_output_to_single_file: "Concatenate and emit output to single file.", + Generates_corresponding_0_file: "Generates corresponding {0} file.", + Specifies_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: "Specifies the location where debugger should locate map files instead of generated locations.", + Specifies_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations: "Specifies the location where debugger should locate TypeScript files instead of source locations.", + Watch_input_files: "Watch input files.", + Redirect_output_structure_to_the_directory: "Redirect output structure to the directory.", + Do_not_emit_comments_to_output: "Do not emit comments to output.", + Skip_resolution_and_preprocessing: "Skip resolution and preprocessing.", + Specify_ECMAScript_target_version_0_default_or_1: "Specify ECMAScript target version: '{0}' (default), or '{1}'", + Specify_module_code_generation_0_or_1: "Specify module code generation: '{0}' or '{1}'", + Print_this_message: "Print this message.", + Print_the_compiler_s_version_0: "Print the compiler's version: {0}", + Allow_use_of_deprecated_0_keyword_when_referencing_an_external_module: "Allow use of deprecated '{0}' keyword when referencing an external module.", + Specify_locale_for_errors_and_messages_For_example_0_or_1: "Specify locale for errors and messages. For example '{0}' or '{1}'", + Syntax_0: "Syntax: {0}", + options: "options", + file1: "file", + Examples: "Examples:", + Options: "Options:", + Insert_command_line_options_and_files_from_a_file: "Insert command line options and files from a file.", + Version_0: "Version {0}", + Use_the_0_flag_to_see_options: "Use the '{0}' flag to see options.", + NL_Recompiling_0: "{NL}Recompiling ({0}):", + STRING: "STRING", + KIND: "KIND", + file2: "FILE", + VERSION: "VERSION", + LOCATION: "LOCATION", + DIRECTORY: "DIRECTORY", + NUMBER: "NUMBER", + Specify_the_codepage_to_use_when_opening_source_files: "Specify the codepage to use when opening source files.", + Additional_locations: "Additional locations:", + This_version_of_the_Javascript_runtime_does_not_support_the_0_function: "This version of the Javascript runtime does not support the '{0}' function.", + Unknown_rule: "Unknown rule.", + Invalid_line_number_0: "Invalid line number ({0})", + Warn_on_expressions_and_declarations_with_an_implied_any_type: "Warn on expressions and declarations with an implied 'any' type.", + Variable_0_implicitly_has_an_any_type: "Variable '{0}' implicitly has an 'any' type.", + Parameter_0_of_1_implicitly_has_an_any_type: "Parameter '{0}' of '{1}' implicitly has an 'any' type.", + Parameter_0_of_function_type_implicitly_has_an_any_type: "Parameter '{0}' of function type implicitly has an 'any' type.", + Member_0_of_object_type_implicitly_has_an_any_type: "Member '{0}' of object type implicitly has an 'any' type.", + new_expression_which_lacks_a_constructor_signature_implicitly_has_an_any_type: "'new' expression, which lacks a constructor signature, implicitly has an 'any' type.", + _0_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: "'{0}', which lacks return-type annotation, implicitly has an 'any' return type.", + Function_expression_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: "Function expression, which lacks return-type annotation, implicitly has an 'any' return type.", + Parameter_0_of_lambda_function_implicitly_has_an_any_type: "Parameter '{0}' of lambda function implicitly has an 'any' type.", + Constructor_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: "Constructor signature, which lacks return-type annotation, implicitly has an 'any' return type.", + Lambda_Function_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: "Lambda Function, which lacks return-type annotation, implicitly has an 'any' return type.", + Array_Literal_implicitly_has_an_any_type_from_widening: "Array Literal implicitly has an 'any' type from widening.", + _0_which_lacks_get_accessor_and_parameter_type_annotation_on_set_accessor_implicitly_has_an_any_type: "'{0}', which lacks 'get' accessor and parameter type annotation on 'set' accessor, implicitly has an 'any' type.", + Index_signature_of_object_type_implicitly_has_an_any_type: "Index signature of object type implicitly has an 'any' type.", + Object_literal_s_property_0_implicitly_has_an_any_type_from_widening: "Object literal's property '{0}' implicitly has an 'any' type from widening." + }; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (DiagnosticCategory) { + DiagnosticCategory[DiagnosticCategory["Warning"] = 0] = "Warning"; + DiagnosticCategory[DiagnosticCategory["Error"] = 1] = "Error"; + DiagnosticCategory[DiagnosticCategory["Message"] = 2] = "Message"; + DiagnosticCategory[DiagnosticCategory["NoPrefix"] = 3] = "NoPrefix"; + })(TypeScript.DiagnosticCategory || (TypeScript.DiagnosticCategory = {})); + var DiagnosticCategory = TypeScript.DiagnosticCategory; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + TypeScript.diagnosticInformationMap = { + "error TS{0}: {1}": { "code": 0, "category": 3 /* NoPrefix */ }, + "warning TS{0}: {1}": { "code": 1, "category": 3 /* NoPrefix */ }, + "Unrecognized escape sequence.": { "code": 1000, "category": 1 /* Error */ }, + "Unexpected character {0}.": { "code": 1001, "category": 1 /* Error */ }, + "Missing close quote character.": { "code": 1002, "category": 1 /* Error */ }, + "Identifier expected.": { "code": 1003, "category": 1 /* Error */ }, + "'{0}' keyword expected.": { "code": 1004, "category": 1 /* Error */ }, + "'{0}' expected.": { "code": 1005, "category": 1 /* Error */ }, + "Identifier expected; '{0}' is a keyword.": { "code": 1006, "category": 1 /* Error */ }, + "Automatic semicolon insertion not allowed.": { "code": 1007, "category": 1 /* Error */ }, + "Unexpected token; '{0}' expected.": { "code": 1008, "category": 1 /* Error */ }, + "Trailing comma not allowed.": { "code": 1009, "category": 1 /* Error */ }, + "'*/' expected.": { "code": 1010, "category": 1 /* Error */ }, + "'public' or 'private' modifier must precede 'static'.": { "code": 1011, "category": 1 /* Error */ }, + "Unexpected token.": { "code": 1012, "category": 1 /* Error */ }, + "Catch clause parameter cannot have a type annotation.": { "code": 1013, "category": 1 /* Error */ }, + "A rest parameter must be last in a parameter list.": { "code": 1014, "category": 1 /* Error */ }, + "Parameter cannot have question mark and initializer.": { "code": 1015, "category": 1 /* Error */ }, + "A required parameter cannot follow an optional parameter.": { "code": 1016, "category": 1 /* Error */ }, + "Index signatures cannot have rest parameters.": { "code": 1017, "category": 1 /* Error */ }, + "Index signature parameter cannot have accessibility modifiers.": { "code": 1018, "category": 1 /* Error */ }, + "Index signature parameter cannot have a question mark.": { "code": 1019, "category": 1 /* Error */ }, + "Index signature parameter cannot have an initializer.": { "code": 1020, "category": 1 /* Error */ }, + "Index signature must have a type annotation.": { "code": 1021, "category": 1 /* Error */ }, + "Index signature parameter must have a type annotation.": { "code": 1022, "category": 1 /* Error */ }, + "Index signature parameter type must be 'string' or 'number'.": { "code": 1023, "category": 1 /* Error */ }, + "'extends' clause already seen.": { "code": 1024, "category": 1 /* Error */ }, + "'extends' clause must precede 'implements' clause.": { "code": 1025, "category": 1 /* Error */ }, + "Classes can only extend a single class.": { "code": 1026, "category": 1 /* Error */ }, + "'implements' clause already seen.": { "code": 1027, "category": 1 /* Error */ }, + "Accessibility modifier already seen.": { "code": 1028, "category": 1 /* Error */ }, + "'{0}' modifier must precede '{1}' modifier.": { "code": 1029, "category": 1 /* Error */ }, + "'{0}' modifier already seen.": { "code": 1030, "category": 1 /* Error */ }, + "'{0}' modifier cannot appear on a class element.": { "code": 1031, "category": 1 /* Error */ }, + "Interface declaration cannot have 'implements' clause.": { "code": 1032, "category": 1 /* Error */ }, + "'super' invocation cannot have type arguments.": { "code": 1034, "category": 1 /* Error */ }, + "Only ambient modules can use quoted names.": { "code": 1035, "category": 1 /* Error */ }, + "Statements are not allowed in ambient contexts.": { "code": 1036, "category": 1 /* Error */ }, + "A function implementation cannot be declared in an ambient context.": { "code": 1037, "category": 1 /* Error */ }, + "A 'declare' modifier cannot be used in an already ambient context.": { "code": 1038, "category": 1 /* Error */ }, + "Initializers are not allowed in ambient contexts.": { "code": 1039, "category": 1 /* Error */ }, + "'{0}' modifier cannot appear on a module element.": { "code": 1044, "category": 1 /* Error */ }, + "A 'declare' modifier cannot be used with an interface declaration.": { "code": 1045, "category": 1 /* Error */ }, + "A 'declare' modifier is required for a top level declaration in a .d.ts file.": { "code": 1046, "category": 1 /* Error */ }, + "A rest parameter cannot be optional.": { "code": 1047, "category": 1 /* Error */ }, + "A rest parameter cannot have an initializer.": { "code": 1048, "category": 1 /* Error */ }, + "'set' accessor must have exactly one parameter.": { "code": 1049, "category": 1 /* Error */ }, + "'set' accessor parameter cannot be optional.": { "code": 1051, "category": 1 /* Error */ }, + "'set' accessor parameter cannot have an initializer.": { "code": 1052, "category": 1 /* Error */ }, + "'set' accessor cannot have rest parameter.": { "code": 1053, "category": 1 /* Error */ }, + "'get' accessor cannot have parameters.": { "code": 1054, "category": 1 /* Error */ }, + "Modifiers cannot appear here.": { "code": 1055, "category": 1 /* Error */ }, + "Accessors are only available when targeting ECMAScript 5 and higher.": { "code": 1056, "category": 1 /* Error */ }, + "Enum member must have initializer.": { "code": 1061, "category": 1 /* Error */ }, + "Export assignment cannot be used in internal modules.": { "code": 1063, "category": 1 /* Error */ }, + "Ambient enum elements can only have integer literal initializers.": { "code": 1066, "category": 1 /* Error */ }, + "module, class, interface, enum, import or statement": { "code": 1067, "category": 3 /* NoPrefix */ }, + "constructor, function, accessor or variable": { "code": 1068, "category": 3 /* NoPrefix */ }, + "statement": { "code": 1069, "category": 3 /* NoPrefix */ }, + "case or default clause": { "code": 1070, "category": 3 /* NoPrefix */ }, + "identifier": { "code": 1071, "category": 3 /* NoPrefix */ }, + "call, construct, index, property or function signature": { "code": 1072, "category": 3 /* NoPrefix */ }, + "expression": { "code": 1073, "category": 3 /* NoPrefix */ }, + "type name": { "code": 1074, "category": 3 /* NoPrefix */ }, + "property or accessor": { "code": 1075, "category": 3 /* NoPrefix */ }, + "parameter": { "code": 1076, "category": 3 /* NoPrefix */ }, + "type": { "code": 1077, "category": 3 /* NoPrefix */ }, + "type parameter": { "code": 1078, "category": 3 /* NoPrefix */ }, + "A 'declare' modifier cannot be used with an import declaration.": { "code": 1079, "category": 1 /* Error */ }, + "Invalid 'reference' directive syntax.": { "code": 1084, "category": 1 /* Error */ }, + "Octal literals are not available when targeting ECMAScript 5 and higher.": { "code": 1085, "category": 1 /* Error */ }, + "Accessors are not allowed in ambient contexts.": { "code": 1086, "category": 1 /* Error */ }, + "'{0}' modifier cannot appear on a constructor declaration.": { "code": 1089, "category": 1 /* Error */ }, + "'{0}' modifier cannot appear on a parameter.": { "code": 1090, "category": 1 /* Error */ }, + "Only a single variable declaration is allowed in a 'for...in' statement.": { "code": 1091, "category": 1 /* Error */ }, + "Type parameters cannot appear on a constructor declaration.": { "code": 1092, "category": 1 /* Error */ }, + "Type annotation cannot appear on a constructor declaration.": { "code": 1093, "category": 1 /* Error */ }, + "Type parameters cannot appear on an accessor.": { "code": 1094, "category": 1 /* Error */ }, + "Type annotation cannot appear on a 'set' accessor.": { "code": 1095, "category": 1 /* Error */ }, + "Index signature must have exactly one parameter.": { "code": 1096, "category": 1 /* Error */ }, + "'{0}' list cannot be empty.": { "code": 1097, "category": 1 /* Error */ }, + "variable declaration": { "code": 1098, "category": 3 /* NoPrefix */ }, + "type argument": { "code": 1099, "category": 3 /* NoPrefix */ }, + "Invalid use of '{0}' in strict mode.": { "code": 1100, "category": 1 /* Error */ }, + "'with' statements are not allowed in strict mode.": { "code": 1101, "category": 1 /* Error */ }, + "'delete' cannot be called on an identifier in strict mode.": { "code": 1102, "category": 1 /* Error */ }, + "Invalid left-hand side in 'for...in' statement.": { "code": 1103, "category": 1 /* Error */ }, + "'continue' statement can only be used within an enclosing iteration statement.": { "code": 1104, "category": 1 /* Error */ }, + "'break' statement can only be used within an enclosing iteration or switch statement.": { "code": 1105, "category": 1 /* Error */ }, + "Jump target not found.": { "code": 1106, "category": 1 /* Error */ }, + "Jump target cannot cross function boundary.": { "code": 1107, "category": 1 /* Error */ }, + "'return' statement must be contained within a function body.": { "code": 1108, "category": 1 /* Error */ }, + "Expression expected.": { "code": 1109, "category": 1 /* Error */ }, + "Type expected.": { "code": 1110, "category": 1 /* Error */ }, + "Duplicate identifier '{0}'.": { "code": 2000, "category": 1 /* Error */ }, + "The name '{0}' does not exist in the current scope.": { "code": 2001, "category": 1 /* Error */ }, + "The name '{0}' does not refer to a value.": { "code": 2002, "category": 1 /* Error */ }, + "'super' can only be used inside a class instance method.": { "code": 2003, "category": 1 /* Error */ }, + "The left-hand side of an assignment expression must be a variable, property or indexer.": { "code": 2004, "category": 1 /* Error */ }, + "Value of type '{0}' is not callable. Did you mean to include 'new'?": { "code": 2161, "category": 1 /* Error */ }, + "Value of type '{0}' is not callable.": { "code": 2006, "category": 1 /* Error */ }, + "Value of type '{0}' is not newable.": { "code": 2007, "category": 1 /* Error */ }, + "An index expression argument must be 'string', 'number', or 'any'.": { "code": 2008, "category": 1 /* Error */ }, + "Operator '{0}' cannot be applied to types '{1}' and '{2}'.": { "code": 2009, "category": 1 /* Error */ }, + "Type '{0}' is not assignable to type '{1}'.": { "code": 2011, "category": 1 /* Error */ }, + "Type '{0}' is not assignable to type '{1}':{NL}{2}": { "code": 2012, "category": 1 /* Error */ }, + "Expected var, class, interface, or module.": { "code": 2013, "category": 1 /* Error */ }, + "Getter '{0}' already declared.": { "code": 2015, "category": 1 /* Error */ }, + "Setter '{0}' already declared.": { "code": 2016, "category": 1 /* Error */ }, + "Exported class '{0}' extends private class '{1}'.": { "code": 2018, "category": 1 /* Error */ }, + "Exported class '{0}' implements private interface '{1}'.": { "code": 2019, "category": 1 /* Error */ }, + "Exported interface '{0}' extends private interface '{1}'.": { "code": 2020, "category": 1 /* Error */ }, + "Exported class '{0}' extends class from inaccessible module {1}.": { "code": 2021, "category": 1 /* Error */ }, + "Exported class '{0}' implements interface from inaccessible module {1}.": { "code": 2022, "category": 1 /* Error */ }, + "Exported interface '{0}' extends interface from inaccessible module {1}.": { "code": 2023, "category": 1 /* Error */ }, + "Public static property '{0}' of exported class has or is using private type '{1}'.": { "code": 2024, "category": 1 /* Error */ }, + "Public property '{0}' of exported class has or is using private type '{1}'.": { "code": 2025, "category": 1 /* Error */ }, + "Property '{0}' of exported interface has or is using private type '{1}'.": { "code": 2026, "category": 1 /* Error */ }, + "Exported variable '{0}' has or is using private type '{1}'.": { "code": 2027, "category": 1 /* Error */ }, + "Public static property '{0}' of exported class is using inaccessible module {1}.": { "code": 2028, "category": 1 /* Error */ }, + "Public property '{0}' of exported class is using inaccessible module {1}.": { "code": 2029, "category": 1 /* Error */ }, + "Property '{0}' of exported interface is using inaccessible module {1}.": { "code": 2030, "category": 1 /* Error */ }, + "Exported variable '{0}' is using inaccessible module {1}.": { "code": 2031, "category": 1 /* Error */ }, + "Parameter '{0}' of constructor from exported class has or is using private type '{1}'.": { "code": 2032, "category": 1 /* Error */ }, + "Parameter '{0}' of public static property setter from exported class has or is using private type '{1}'.": { "code": 2033, "category": 1 /* Error */ }, + "Parameter '{0}' of public property setter from exported class has or is using private type '{1}'.": { "code": 2034, "category": 1 /* Error */ }, + "Parameter '{0}' of constructor signature from exported interface has or is using private type '{1}'.": { "code": 2035, "category": 1 /* Error */ }, + "Parameter '{0}' of call signature from exported interface has or is using private type '{1}'.": { "code": 2036, "category": 1 /* Error */ }, + "Parameter '{0}' of public static method from exported class has or is using private type '{1}'.": { "code": 2037, "category": 1 /* Error */ }, + "Parameter '{0}' of public method from exported class has or is using private type '{1}'.": { "code": 2038, "category": 1 /* Error */ }, + "Parameter '{0}' of method from exported interface has or is using private type '{1}'.": { "code": 2039, "category": 1 /* Error */ }, + "Parameter '{0}' of exported function has or is using private type '{1}'.": { "code": 2040, "category": 1 /* Error */ }, + "Parameter '{0}' of constructor from exported class is using inaccessible module {1}.": { "code": 2041, "category": 1 /* Error */ }, + "Parameter '{0}' of public static property setter from exported class is using inaccessible module {1}.": { "code": 2042, "category": 1 /* Error */ }, + "Parameter '{0}' of public property setter from exported class is using inaccessible module {1}.": { "code": 2043, "category": 1 /* Error */ }, + "Parameter '{0}' of constructor signature from exported interface is using inaccessible module {1}.": { "code": 2044, "category": 1 /* Error */ }, + "Parameter '{0}' of call signature from exported interface is using inaccessible module {1}": { "code": 2045, "category": 1 /* Error */ }, + "Parameter '{0}' of public static method from exported class is using inaccessible module {1}.": { "code": 2046, "category": 1 /* Error */ }, + "Parameter '{0}' of public method from exported class is using inaccessible module {1}.": { "code": 2047, "category": 1 /* Error */ }, + "Parameter '{0}' of method from exported interface is using inaccessible module {1}.": { "code": 2048, "category": 1 /* Error */ }, + "Parameter '{0}' of exported function is using inaccessible module {1}.": { "code": 2049, "category": 1 /* Error */ }, + "Return type of public static property getter from exported class has or is using private type '{0}'.": { "code": 2050, "category": 1 /* Error */ }, + "Return type of public property getter from exported class has or is using private type '{0}'.": { "code": 2051, "category": 1 /* Error */ }, + "Return type of constructor signature from exported interface has or is using private type '{0}'.": { "code": 2052, "category": 1 /* Error */ }, + "Return type of call signature from exported interface has or is using private type '{0}'.": { "code": 2053, "category": 1 /* Error */ }, + "Return type of index signature from exported interface has or is using private type '{0}'.": { "code": 2054, "category": 1 /* Error */ }, + "Return type of public static method from exported class has or is using private type '{0}'.": { "code": 2055, "category": 1 /* Error */ }, + "Return type of public method from exported class has or is using private type '{0}'.": { "code": 2056, "category": 1 /* Error */ }, + "Return type of method from exported interface has or is using private type '{0}'.": { "code": 2057, "category": 1 /* Error */ }, + "Return type of exported function has or is using private type '{0}'.": { "code": 2058, "category": 1 /* Error */ }, + "Return type of public static property getter from exported class is using inaccessible module {0}.": { "code": 2059, "category": 1 /* Error */ }, + "Return type of public property getter from exported class is using inaccessible module {0}.": { "code": 2060, "category": 1 /* Error */ }, + "Return type of constructor signature from exported interface is using inaccessible module {0}.": { "code": 2061, "category": 1 /* Error */ }, + "Return type of call signature from exported interface is using inaccessible module {0}.": { "code": 2062, "category": 1 /* Error */ }, + "Return type of index signature from exported interface is using inaccessible module {0}.": { "code": 2063, "category": 1 /* Error */ }, + "Return type of public static method from exported class is using inaccessible module {0}.": { "code": 2064, "category": 1 /* Error */ }, + "Return type of public method from exported class is using inaccessible module {0}.": { "code": 2065, "category": 1 /* Error */ }, + "Return type of method from exported interface is using inaccessible module {0}.": { "code": 2066, "category": 1 /* Error */ }, + "Return type of exported function is using inaccessible module {0}.": { "code": 2067, "category": 1 /* Error */ }, + "'new T[]' cannot be used to create an array. Use 'new Array()' instead.": { "code": 2068, "category": 1 /* Error */ }, + "A parameter list must follow a generic type argument list. '(' expected.": { "code": 2069, "category": 1 /* Error */ }, + "Multiple constructor implementations are not allowed.": { "code": 2070, "category": 1 /* Error */ }, + "Cannot find external module '{0}'.": { "code": 2071, "category": 1 /* Error */ }, + "Module cannot be aliased to a non-module type.": { "code": 2072, "category": 1 /* Error */ }, + "A class may only extend another class.": { "code": 2073, "category": 1 /* Error */ }, + "A class may only implement another class or interface.": { "code": 2074, "category": 1 /* Error */ }, + "An interface may only extend a class or another interface.": { "code": 2075, "category": 1 /* Error */ }, + "Unable to resolve type.": { "code": 2077, "category": 1 /* Error */ }, + "Unable to resolve type of '{0}'.": { "code": 2078, "category": 1 /* Error */ }, + "Unable to resolve type parameter constraint.": { "code": 2079, "category": 1 /* Error */ }, + "Type parameter constraint cannot be a primitive type.": { "code": 2080, "category": 1 /* Error */ }, + "Supplied parameters do not match any signature of call target.": { "code": 2081, "category": 1 /* Error */ }, + "Supplied parameters do not match any signature of call target:{NL}{0}": { "code": 2082, "category": 1 /* Error */ }, + "Cannot use 'new' with an expression whose type lacks a signature.": { "code": 2083, "category": 1 /* Error */ }, + "Only a void function can be called with the 'new' keyword.": { "code": 2084, "category": 1 /* Error */ }, + "Could not select overload for 'new' expression.": { "code": 2085, "category": 1 /* Error */ }, + "Type '{0}' does not satisfy the constraint '{1}'.": { "code": 2086, "category": 1 /* Error */ }, + "Could not select overload for 'call' expression.": { "code": 2087, "category": 1 /* Error */ }, + "Cannot invoke an expression whose type lacks a call signature.": { "code": 2088, "category": 1 /* Error */ }, + "Calls to 'super' are only valid inside a class.": { "code": 2089, "category": 1 /* Error */ }, + "Generic type '{0}' requires {1} type argument(s).": { "code": 2090, "category": 1 /* Error */ }, + "Type of array literal cannot be determined. Best common type could not be found for array elements.": { "code": 2092, "category": 1 /* Error */ }, + "Could not find enclosing symbol for dotted name '{0}'.": { "code": 2093, "category": 1 /* Error */ }, + "Property '{0}' does not exist on value of type '{1}'.": { "code": 2094, "category": 1 /* Error */ }, + "Cannot find name '{0}'.": { "code": 2095, "category": 1 /* Error */ }, + "'get' and 'set' accessor must have the same type.": { "code": 2096, "category": 1 /* Error */ }, + "'this' cannot be referenced in current location.": { "code": 2097, "category": 1 /* Error */ }, + "Static members cannot reference class type parameters.": { "code": 2099, "category": 1 /* Error */ }, + "Type '{0}' recursively references itself as a base type.": { "code": 2100, "category": 1 /* Error */ }, + "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class.": { "code": 2102, "category": 1 /* Error */ }, + "'super' can only be referenced in a derived class.": { "code": 2103, "category": 1 /* Error */ }, + "A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties.": { "code": 2104, "category": 1 /* Error */ }, + "Constructors for derived classes must contain a 'super' call.": { "code": 2105, "category": 1 /* Error */ }, + "Super calls are not permitted outside constructors or in nested functions inside constructors.": { "code": 2106, "category": 1 /* Error */ }, + "'{0}.{1}' is inaccessible.": { "code": 2107, "category": 1 /* Error */ }, + "'this' cannot be referenced in a module body.": { "code": 2108, "category": 1 /* Error */ }, + "Invalid '+' expression - types not known to support the addition operator.": { "code": 2111, "category": 1 /* Error */ }, + "The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.": { "code": 2112, "category": 1 /* Error */ }, + "The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.": { "code": 2113, "category": 1 /* Error */ }, + "An arithmetic operand must be of type 'any', 'number' or an enum type.": { "code": 2114, "category": 1 /* Error */ }, + "Variable declarations of a 'for' statement cannot use a type annotation.": { "code": 2115, "category": 1 /* Error */ }, + "Variable declarations of a 'for' statement must be of types 'string' or 'any'.": { "code": 2116, "category": 1 /* Error */ }, + "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter.": { "code": 2117, "category": 1 /* Error */ }, + "The left-hand side of an 'in' expression must be of types 'any', 'string' or 'number'.": { "code": 2118, "category": 1 /* Error */ }, + "The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter.": { "code": 2119, "category": 1 /* Error */ }, + "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter.": { "code": 2120, "category": 1 /* Error */ }, + "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type.": { "code": 2121, "category": 1 /* Error */ }, + "Setters cannot return a value.": { "code": 2122, "category": 1 /* Error */ }, + "Tried to query type of uninitialized module '{0}'.": { "code": 2123, "category": 1 /* Error */ }, + "Tried to set variable type to uninitialized module type '{0}'.": { "code": 2124, "category": 1 /* Error */ }, + "Type '{0}' is not generic.": { "code": 2125, "category": 1 /* Error */ }, + "Getters must return a value.": { "code": 2126, "category": 1 /* Error */ }, + "Getter and setter accessors do not agree in visibility.": { "code": 2127, "category": 1 /* Error */ }, + "Invalid left-hand side of assignment expression.": { "code": 2130, "category": 1 /* Error */ }, + "Function declared a non-void return type, but has no return expression.": { "code": 2131, "category": 1 /* Error */ }, + "Cannot resolve return type reference.": { "code": 2132, "category": 1 /* Error */ }, + "Constructors cannot have a return type of 'void'.": { "code": 2133, "category": 1 /* Error */ }, + "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'.": { "code": 2134, "category": 1 /* Error */ }, + "All symbols within a with block will be resolved to 'any'.": { "code": 2135, "category": 1 /* Error */ }, + "Import declarations in an internal module cannot reference an external module.": { "code": 2136, "category": 1 /* Error */ }, + "Class {0} declares interface {1} but does not implement it:{NL}{2}": { "code": 2137, "category": 1 /* Error */ }, + "Class {0} declares class {1} as an interface but does not implement it:{NL}{2}": { "code": 2138, "category": 1 /* Error */ }, + "The operand of an increment or decrement operator must be a variable, property or indexer.": { "code": 2139, "category": 1 /* Error */ }, + "'this' cannot be referenced in a static property initializer.": { "code": 2140, "category": 1 /* Error */ }, + "Class '{0}' cannot extend class '{1}':{NL}{2}": { "code": 2141, "category": 1 /* Error */ }, + "Interface '{0}' cannot extend class '{1}':{NL}{2}": { "code": 2142, "category": 1 /* Error */ }, + "Interface '{0}' cannot extend interface '{1}':{NL}{2}": { "code": 2143, "category": 1 /* Error */ }, + "Overload signature is not compatible with function definition.": { "code": 2148, "category": 1 /* Error */ }, + "Overload signature is not compatible with function definition:{NL}{0}": { "code": 2149, "category": 1 /* Error */ }, + "Overload signatures must all be public or private.": { "code": 2150, "category": 1 /* Error */ }, + "Overload signatures must all be exported or not exported.": { "code": 2151, "category": 1 /* Error */ }, + "Overload signatures must all be ambient or non-ambient.": { "code": 2152, "category": 1 /* Error */ }, + "Overload signatures must all be optional or required.": { "code": 2153, "category": 1 /* Error */ }, + "Specialized overload signature is not assignable to any non-specialized signature.": { "code": 2154, "category": 1 /* Error */ }, + "'this' cannot be referenced in constructor arguments.": { "code": 2155, "category": 1 /* Error */ }, + "Instance member cannot be accessed off a class.": { "code": 2157, "category": 1 /* Error */ }, + "Untyped function calls may not accept type arguments.": { "code": 2158, "category": 1 /* Error */ }, + "Non-generic functions may not accept type arguments.": { "code": 2159, "category": 1 /* Error */ }, + "A generic type may not reference itself with a wrapped form of its own type parameters.": { "code": 2160, "category": 1 /* Error */ }, + "A rest parameter must be of an array type.": { "code": 2162, "category": 1 /* Error */ }, + "Overload signature implementation cannot use specialized type.": { "code": 2163, "category": 1 /* Error */ }, + "Export assignments may only be used at the top-level of external modules.": { "code": 2164, "category": 1 /* Error */ }, + "Export assignments may only be made with variables, functions, classes, interfaces, enums and internal modules.": { "code": 2165, "category": 1 /* Error */ }, + "Only public methods of the base class are accessible via the 'super' keyword.": { "code": 2166, "category": 1 /* Error */ }, + "Numeric indexer type '{0}' must be assignable to string indexer type '{1}'.": { "code": 2167, "category": 1 /* Error */ }, + "Numeric indexer type '{0}' must be assignable to string indexer type '{1}':{NL}{2}": { "code": 2168, "category": 1 /* Error */ }, + "All numerically named properties must be assignable to numeric indexer type '{0}'.": { "code": 2169, "category": 1 /* Error */ }, + "All numerically named properties must be assignable to numeric indexer type '{0}':{NL}{1}": { "code": 2170, "category": 1 /* Error */ }, + "All named properties must be assignable to string indexer type '{0}'.": { "code": 2171, "category": 1 /* Error */ }, + "All named properties must be assignable to string indexer type '{0}':{NL}{1}": { "code": 2172, "category": 1 /* Error */ }, + "A parameter initializer is only allowed in a function or constructor implementation.": { "code": 2174, "category": 1 /* Error */ }, + "Function expression declared a non-void return type, but has no return expression.": { "code": 2176, "category": 1 /* Error */ }, + "Import declaration referencing identifier from internal module can only be made with variables, functions, classes, interfaces, enums and internal modules.": { "code": 2177, "category": 1 /* Error */ }, + "Module '{0}' has no exported member '{1}'.": { "code": 2178, "category": 1 /* Error */ }, + "Unable to resolve module reference '{0}'.": { "code": 2179, "category": 1 /* Error */ }, + "Could not find module '{0}' in module '{1}'.": { "code": 2180, "category": 1 /* Error */ }, + "Exported import declaration '{0}' is assigned value with type that has or is using private type '{1}'.": { "code": 2181, "category": 1 /* Error */ }, + "Exported import declaration '{0}' is assigned value with type that is using inaccessible module '{1}'.": { "code": 2182, "category": 1 /* Error */ }, + "Exported import declaration '{0}' is assigned type that has or is using private type '{1}'.": { "code": 2183, "category": 1 /* Error */ }, + "Exported import declaration '{0}' is assigned type that is using inaccessible module '{1}'.": { "code": 2184, "category": 1 /* Error */ }, + "Exported import declaration '{0}' is assigned container that is or is using inaccessible module '{1}'.": { "code": 2185, "category": 1 /* Error */ }, + "Type name '{0}' in extends clause does not reference constructor function for '{1}'.": { "code": 2186, "category": 1 /* Error */ }, + "Internal module reference '{0}' in import declaration does not reference module instance for '{1}'.": { "code": 2187, "category": 1 /* Error */ }, + "Module '{0}' cannot merge with previous declaration of '{1}' in a different file '{2}'.": { "code": 2188, "category": 1 /* Error */ }, + "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}':{NL}{3}": { "code": 2189, "category": 1 /* Error */ }, + "Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it.": { "code": 2190, "category": 1 /* Error */ }, + "Ambient external module declaration cannot be reopened.": { "code": 2191, "category": 1 /* Error */ }, + "All declarations of merged declaration '{0}' must be exported or not exported.": { "code": 2192, "category": 1 /* Error */ }, + "'super' cannot be referenced in constructor arguments.": { "code": 2193, "category": 1 /* Error */ }, + "Return type of constructor signature must be assignable to the instance type of the class.": { "code": 2194, "category": 1 /* Error */ }, + "Ambient external module declaration must be defined in global context.": { "code": 2195, "category": 1 /* Error */ }, + "Ambient external module declaration cannot specify relative module name.": { "code": 2196, "category": 1 /* Error */ }, + "Import declaration in an ambient external module declaration cannot reference external module through relative external module name.": { "code": 2197, "category": 1 /* Error */ }, + "No best common type exists among return expressions.": { "code": 2198, "category": 1 /* Error */ }, + "Import declaration cannot refer to external module reference when --noResolve option is set.": { "code": 2199, "category": 1 /* Error */ }, + "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference.": { "code": 2200, "category": 1 /* Error */ }, + "Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference.": { "code": 2205, "category": 1 /* Error */ }, + "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference.": { "code": 2206, "category": 1 /* Error */ }, + "Expression resolves to '_super' that compiler uses to capture base class reference.": { "code": 2207, "category": 1 /* Error */ }, + "TypeParameter '{0}' of constructor signature from exported interface has or is using private type '{1}'.": { "code": 2208, "category": 1 /* Error */ }, + "TypeParameter '{0}' of call signature from exported interface has or is using private type '{1}'.": { "code": 2209, "category": 1 /* Error */ }, + "TypeParameter '{0}' of public static method from exported class has or is using private type '{1}'.": { "code": 2210, "category": 1 /* Error */ }, + "TypeParameter '{0}' of public method from exported class has or is using private type '{1}'.": { "code": 2211, "category": 1 /* Error */ }, + "TypeParameter '{0}' of method from exported interface has or is using private type '{1}'.": { "code": 2212, "category": 1 /* Error */ }, + "TypeParameter '{0}' of exported function has or is using private type '{1}'.": { "code": 2213, "category": 1 /* Error */ }, + "TypeParameter '{0}' of constructor signature from exported interface is using inaccessible module {1}.": { "code": 2214, "category": 1 /* Error */ }, + "TypeParameter '{0}' of call signature from exported interface is using inaccessible module {1}": { "code": 2215, "category": 1 /* Error */ }, + "TypeParameter '{0}' of public static method from exported class is using inaccessible module {1}.": { "code": 2216, "category": 1 /* Error */ }, + "TypeParameter '{0}' of public method from exported class is using inaccessible module {1}.": { "code": 2217, "category": 1 /* Error */ }, + "TypeParameter '{0}' of method from exported interface is using inaccessible module {1}.": { "code": 2218, "category": 1 /* Error */ }, + "TypeParameter '{0}' of exported function is using inaccessible module {1}.": { "code": 2219, "category": 1 /* Error */ }, + "TypeParameter '{0}' of exported class has or is using private type '{1}'.": { "code": 2220, "category": 1 /* Error */ }, + "TypeParameter '{0}' of exported interface has or is using private type '{1}'.": { "code": 2221, "category": 1 /* Error */ }, + "TypeParameter '{0}' of exported class is using inaccessible module {1}.": { "code": 2222, "category": 1 /* Error */ }, + "TypeParameter '{0}' of exported interface is using inaccessible module {1}.": { "code": 2223, "category": 1 /* Error */ }, + "Duplicate identifier '_i'. Compiler uses '_i' to initialize rest parameter.": { "code": 2224, "category": 1 /* Error */ }, + "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters.": { "code": 2225, "category": 1 /* Error */ }, + "No best common type exists between '{0}' and '{1}'.": { "code": 2226, "category": 1 /* Error */ }, + "No best common type exists between '{0}', '{1}', and '{2}'.": { "code": 2227, "category": 1 /* Error */ }, + "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of an external module.": { "code": 2228, "category": 1 /* Error */ }, + "Constraint of a type parameter cannot reference any type parameter from the same type parameter list.": { "code": 2229, "category": 1 /* Error */ }, + "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor.": { "code": 2230, "category": 1 /* Error */ }, + "Parameter '{0}' cannot be referenced in its initializer.": { "code": 2231, "category": 1 /* Error */ }, + "Duplicate string index signature.": { "code": 2232, "category": 1 /* Error */ }, + "Duplicate number index signature.": { "code": 2233, "category": 1 /* Error */ }, + "All declarations of an interface must have identical type parameters.": { "code": 2234, "category": 1 /* Error */ }, + "Expression resolves to variable declaration '_i' that compiler uses to initialize rest parameter.": { "code": 2235, "category": 1 /* Error */ }, + "Neither type '{0}' nor type '{1}' is assignable to the other.": { "code": 2236, "category": 1 /* Error */ }, + "Neither type '{0}' nor type '{1}' is assignable to the other:{NL}{2}": { "code": 2237, "category": 1 /* Error */ }, + "Duplicate function implementation.": { "code": 2237, "category": 1 /* Error */ }, + "Function implementation expected.": { "code": 2238, "category": 1 /* Error */ }, + "Function overload name must be '{0}'.": { "code": 2239, "category": 1 /* Error */ }, + "Constructor implementation expected.": { "code": 2240, "category": 1 /* Error */ }, + "Class name cannot be '{0}'.": { "code": 2241, "category": 1 /* Error */ }, + "Interface name cannot be '{0}'.": { "code": 2242, "category": 1 /* Error */ }, + "Enum name cannot be '{0}'.": { "code": 2243, "category": 1 /* Error */ }, + "A module cannot have multiple export assignments.": { "code": 2244, "category": 1 /* Error */ }, + "Export assignment not allowed in module with exported element.": { "code": 2245, "category": 1 /* Error */ }, + "A parameter property is only allowed in a constructor implementation.": { "code": 2246, "category": 1 /* Error */ }, + "Function overload must be static.": { "code": 2247, "category": 1 /* Error */ }, + "Function overload must not be static.": { "code": 2248, "category": 1 /* Error */ }, + "Type '{0}' is missing property '{1}' from type '{2}'.": { "code": 4000, "category": 3 /* NoPrefix */ }, + "Types of property '{0}' of types '{1}' and '{2}' are incompatible.": { "code": 4001, "category": 3 /* NoPrefix */ }, + "Types of property '{0}' of types '{1}' and '{2}' are incompatible:{NL}{3}": { "code": 4002, "category": 3 /* NoPrefix */ }, + "Property '{0}' defined as private in type '{1}' is defined as public in type '{2}'.": { "code": 4003, "category": 3 /* NoPrefix */ }, + "Property '{0}' defined as public in type '{1}' is defined as private in type '{2}'.": { "code": 4004, "category": 3 /* NoPrefix */ }, + "Types '{0}' and '{1}' define property '{2}' as private.": { "code": 4005, "category": 3 /* NoPrefix */ }, + "Call signatures of types '{0}' and '{1}' are incompatible.": { "code": 4006, "category": 3 /* NoPrefix */ }, + "Call signatures of types '{0}' and '{1}' are incompatible:{NL}{2}": { "code": 4007, "category": 3 /* NoPrefix */ }, + "Type '{0}' requires a call signature, but type '{1}' lacks one.": { "code": 4008, "category": 3 /* NoPrefix */ }, + "Construct signatures of types '{0}' and '{1}' are incompatible.": { "code": 4009, "category": 3 /* NoPrefix */ }, + "Construct signatures of types '{0}' and '{1}' are incompatible:{NL}{2}": { "code": 4010, "category": 3 /* NoPrefix */ }, + "Type '{0}' requires a construct signature, but type '{1}' lacks one.": { "code": 4011, "category": 3 /* NoPrefix */ }, + "Index signatures of types '{0}' and '{1}' are incompatible.": { "code": 4012, "category": 3 /* NoPrefix */ }, + "Index signatures of types '{0}' and '{1}' are incompatible:{NL}{2}": { "code": 4013, "category": 3 /* NoPrefix */ }, + "Call signature expects {0} or fewer parameters.": { "code": 4014, "category": 3 /* NoPrefix */ }, + "Could not apply type '{0}' to argument {1} which is of type '{2}'.": { "code": 4015, "category": 3 /* NoPrefix */ }, + "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function.": { "code": 4016, "category": 3 /* NoPrefix */ }, + "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function.": { "code": 4017, "category": 3 /* NoPrefix */ }, + "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor.": { "code": 4018, "category": 3 /* NoPrefix */ }, + "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property.": { "code": 4019, "category": 3 /* NoPrefix */ }, + "Types of static property '{0}' of class '{1}' and class '{2}' are incompatible.": { "code": 4020, "category": 3 /* NoPrefix */ }, + "Types of static property '{0}' of class '{1}' and class '{2}' are incompatible:{NL}{3}": { "code": 4021, "category": 3 /* NoPrefix */ }, + "Type reference cannot refer to container '{0}'.": { "code": 4022, "category": 1 /* Error */ }, + "Type reference must refer to type.": { "code": 4023, "category": 1 /* Error */ }, + "In enums with multiple declarations only one declaration can omit an initializer for the first enum element.": { "code": 4024, "category": 1 /* Error */ }, + " (+ {0} overload(s))": { "code": 4025, "category": 2 /* Message */ }, + "Variable declaration cannot have the same name as an import declaration.": { "code": 4026, "category": 1 /* Error */ }, + "Signature expected {0} type arguments, got {1} instead.": { "code": 4027, "category": 1 /* Error */ }, + "Property '{0}' defined as optional in type '{1}', but is required in type '{2}'.": { "code": 4028, "category": 3 /* NoPrefix */ }, + "Types '{0}' and '{1}' originating in infinitely expanding type reference do not refer to same named type.": { "code": 4029, "category": 3 /* NoPrefix */ }, + "Types '{0}' and '{1}' originating in infinitely expanding type reference have incompatible type arguments.": { "code": 4030, "category": 3 /* NoPrefix */ }, + "Types '{0}' and '{1}' originating in infinitely expanding type reference have incompatible type arguments:{NL}{2}": { "code": 4031, "category": 3 /* NoPrefix */ }, + "Named properties '{0}' of types '{1}' and '{2}' are not identical.": { "code": 4032, "category": 3 /* NoPrefix */ }, + "Types of string indexer of types '{0}' and '{1}' are not identical.": { "code": 4033, "category": 3 /* NoPrefix */ }, + "Types of number indexer of types '{0}' and '{1}' are not identical.": { "code": 4034, "category": 3 /* NoPrefix */ }, + "Type of number indexer in type '{0}' is not assignable to string indexer type in type '{1}'.{NL}{2}": { "code": 4035, "category": 3 /* NoPrefix */ }, + "Type of property '{0}' in type '{1}' is not assignable to string indexer type in type '{2}'.{NL}{3}": { "code": 4036, "category": 3 /* NoPrefix */ }, + "Type of property '{0}' in type '{1}' is not assignable to number indexer type in type '{2}'.{NL}{3}": { "code": 4037, "category": 3 /* NoPrefix */ }, + "Static property '{0}' defined as private in type '{1}' is defined as public in type '{2}'.": { "code": 4038, "category": 3 /* NoPrefix */ }, + "Static property '{0}' defined as public in type '{1}' is defined as private in type '{2}'.": { "code": 4039, "category": 3 /* NoPrefix */ }, + "Types '{0}' and '{1}' define static property '{2}' as private.": { "code": 4040, "category": 3 /* NoPrefix */ }, + "Current host does not support '{0}' option.": { "code": 5001, "category": 1 /* Error */ }, + "ECMAScript target version '{0}' not supported. Specify a valid target version: '{1}' (default), or '{2}'": { "code": 5002, "category": 1 /* Error */ }, + "Argument for '{0}' option must be '{1}' or '{2}'": { "code": 5003, "category": 1 /* Error */ }, + "Could not find file: '{0}'.": { "code": 5004, "category": 1 /* Error */ }, + "A file cannot have a reference to itself.": { "code": 5006, "category": 1 /* Error */ }, + "Cannot resolve referenced file: '{0}'.": { "code": 5007, "category": 1 /* Error */ }, + "Cannot find the common subdirectory path for the input files.": { "code": 5009, "category": 1 /* Error */ }, + "Emit Error: {0}.": { "code": 5011, "category": 1 /* Error */ }, + "Cannot read file '{0}': {1}": { "code": 5012, "category": 1 /* Error */ }, + "Unsupported file encoding.": { "code": 5013, "category": 3 /* NoPrefix */ }, + "Locale must be of the form or -. For example '{0}' or '{1}'.": { "code": 5014, "category": 1 /* Error */ }, + "Unsupported locale: '{0}'.": { "code": 5015, "category": 1 /* Error */ }, + "Execution Failed.{NL}": { "code": 5016, "category": 1 /* Error */ }, + "Invalid call to 'up'": { "code": 5019, "category": 1 /* Error */ }, + "Invalid call to 'down'": { "code": 5020, "category": 1 /* Error */ }, + "Base64 value '{0}' finished with a continuation bit.": { "code": 5021, "category": 1 /* Error */ }, + "Unknown compiler option '{0}'": { "code": 5023, "category": 1 /* Error */ }, + "Expected {0} arguments to message, got {1} instead.": { "code": 5024, "category": 1 /* Error */ }, + "Expected the message '{0}' to have {1} arguments, but it had {2}": { "code": 5025, "category": 1 /* Error */ }, + "Could not delete file '{0}'": { "code": 5034, "category": 1 /* Error */ }, + "Could not create directory '{0}'": { "code": 5035, "category": 1 /* Error */ }, + "Error while executing file '{0}': ": { "code": 5036, "category": 1 /* Error */ }, + "Cannot compile external modules unless the '--module' flag is provided.": { "code": 5037, "category": 1 /* Error */ }, + "Option mapRoot cannot be specified without specifying sourcemap option.": { "code": 5038, "category": 1 /* Error */ }, + "Option sourceRoot cannot be specified without specifying sourcemap option.": { "code": 5039, "category": 1 /* Error */ }, + "Options mapRoot and sourceRoot cannot be specified without specifying sourcemap option.": { "code": 5040, "category": 1 /* Error */ }, + "Option '{0}' specified without '{1}'": { "code": 5041, "category": 1 /* Error */ }, + "'codepage' option not supported on current platform.": { "code": 5042, "category": 1 /* Error */ }, + "Concatenate and emit output to single file.": { "code": 6001, "category": 2 /* Message */ }, + "Generates corresponding {0} file.": { "code": 6002, "category": 2 /* Message */ }, + "Specifies the location where debugger should locate map files instead of generated locations.": { "code": 6003, "category": 2 /* Message */ }, + "Specifies the location where debugger should locate TypeScript files instead of source locations.": { "code": 6004, "category": 2 /* Message */ }, + "Watch input files.": { "code": 6005, "category": 2 /* Message */ }, + "Redirect output structure to the directory.": { "code": 6006, "category": 2 /* Message */ }, + "Do not emit comments to output.": { "code": 6009, "category": 2 /* Message */ }, + "Skip resolution and preprocessing.": { "code": 6010, "category": 2 /* Message */ }, + "Specify ECMAScript target version: '{0}' (default), or '{1}'": { "code": 6015, "category": 2 /* Message */ }, + "Specify module code generation: '{0}' or '{1}'": { "code": 6016, "category": 2 /* Message */ }, + "Print this message.": { "code": 6017, "category": 2 /* Message */ }, + "Print the compiler's version: {0}": { "code": 6019, "category": 2 /* Message */ }, + "Allow use of deprecated '{0}' keyword when referencing an external module.": { "code": 6021, "category": 2 /* Message */ }, + "Specify locale for errors and messages. For example '{0}' or '{1}'": { "code": 6022, "category": 2 /* Message */ }, + "Syntax: {0}": { "code": 6023, "category": 2 /* Message */ }, + "options": { "code": 6024, "category": 2 /* Message */ }, + "file1": { "code": 6025, "category": 2 /* Message */ }, + "Examples:": { "code": 6026, "category": 2 /* Message */ }, + "Options:": { "code": 6027, "category": 2 /* Message */ }, + "Insert command line options and files from a file.": { "code": 6030, "category": 2 /* Message */ }, + "Version {0}": { "code": 6029, "category": 2 /* Message */ }, + "Use the '{0}' flag to see options.": { "code": 6031, "category": 2 /* Message */ }, + "{NL}Recompiling ({0}):": { "code": 6032, "category": 2 /* Message */ }, + "STRING": { "code": 6033, "category": 2 /* Message */ }, + "KIND": { "code": 6034, "category": 2 /* Message */ }, + "file2": { "code": 6035, "category": 2 /* Message */ }, + "VERSION": { "code": 6036, "category": 2 /* Message */ }, + "LOCATION": { "code": 6037, "category": 2 /* Message */ }, + "DIRECTORY": { "code": 6038, "category": 2 /* Message */ }, + "NUMBER": { "code": 6039, "category": 2 /* Message */ }, + "Specify the codepage to use when opening source files.": { "code": 6040, "category": 2 /* Message */ }, + "Additional locations:": { "code": 6041, "category": 2 /* Message */ }, + "This version of the Javascript runtime does not support the '{0}' function.": { "code": 7000, "category": 1 /* Error */ }, + "Unknown rule.": { "code": 7002, "category": 1 /* Error */ }, + "Invalid line number ({0})": { "code": 7003, "category": 1 /* Error */ }, + "Warn on expressions and declarations with an implied 'any' type.": { "code": 7004, "category": 2 /* Message */ }, + "Variable '{0}' implicitly has an 'any' type.": { "code": 7005, "category": 1 /* Error */ }, + "Parameter '{0}' of '{1}' implicitly has an 'any' type.": { "code": 7006, "category": 1 /* Error */ }, + "Parameter '{0}' of function type implicitly has an 'any' type.": { "code": 7007, "category": 1 /* Error */ }, + "Member '{0}' of object type implicitly has an 'any' type.": { "code": 7008, "category": 1 /* Error */ }, + "'new' expression, which lacks a constructor signature, implicitly has an 'any' type.": { "code": 7009, "category": 1 /* Error */ }, + "'{0}', which lacks return-type annotation, implicitly has an 'any' return type.": { "code": 7010, "category": 1 /* Error */ }, + "Function expression, which lacks return-type annotation, implicitly has an 'any' return type.": { "code": 7011, "category": 1 /* Error */ }, + "Parameter '{0}' of lambda function implicitly has an 'any' type.": { "code": 7012, "category": 1 /* Error */ }, + "Constructor signature, which lacks return-type annotation, implicitly has an 'any' return type.": { "code": 7013, "category": 1 /* Error */ }, + "Lambda Function, which lacks return-type annotation, implicitly has an 'any' return type.": { "code": 7014, "category": 1 /* Error */ }, + "Array Literal implicitly has an 'any' type from widening.": { "code": 7015, "category": 1 /* Error */ }, + "'{0}', which lacks 'get' accessor and parameter type annotation on 'set' accessor, implicitly has an 'any' type.": { "code": 7016, "category": 1 /* Error */ }, + "Index signature of object type implicitly has an 'any' type.": { "code": 7017, "category": 1 /* Error */ }, + "Object literal's property '{0}' implicitly has an 'any' type from widening.": { "code": 7018, "category": 1 /* Error */ } + }; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var ArrayUtilities = (function () { + function ArrayUtilities() { + } + ArrayUtilities.sequenceEquals = function (array1, array2, equals) { + if (array1 === array2) { + return true; + } + if (array1 === null || array2 === null) { + return false; + } + if (array1.length !== array2.length) { + return false; + } + for (var i = 0, n = array1.length; i < n; i++) { + if (!equals(array1[i], array2[i])) { + return false; + } + } + return true; + }; + ArrayUtilities.contains = function (array, value) { + for (var i = 0; i < array.length; i++) { + if (array[i] === value) { + return true; + } + } + return false; + }; + ArrayUtilities.distinct = function (array, equalsFn) { + var result = []; + for (var i = 0, n = array.length; i < n; i++) { + var current = array[i]; + for (var j = 0; j < result.length; j++) { + if (equalsFn(result[j], current)) { + break; + } + } + if (j === result.length) { + result.push(current); + } + } + return result; + }; + ArrayUtilities.last = function (array) { + if (array.length === 0) { + throw TypeScript.Errors.argumentOutOfRange('array'); + } + return array[array.length - 1]; + }; + ArrayUtilities.lastOrDefault = function (array, predicate) { + for (var i = array.length - 1; i >= 0; i--) { + var v = array[i]; + if (predicate(v, i)) { + return v; + } + } + return null; + }; + ArrayUtilities.firstOrDefault = function (array, func) { + for (var i = 0, n = array.length; i < n; i++) { + var value = array[i]; + if (func(value, i)) { + return value; + } + } + return null; + }; + ArrayUtilities.first = function (array, func) { + for (var i = 0, n = array.length; i < n; i++) { + var value = array[i]; + if (!func || func(value, i)) { + return value; + } + } + throw TypeScript.Errors.invalidOperation(); + }; + ArrayUtilities.sum = function (array, func) { + var result = 0; + for (var i = 0, n = array.length; i < n; i++) { + result += func(array[i]); + } + return result; + }; + ArrayUtilities.select = function (values, func) { + var result = new Array(values.length); + for (var i = 0; i < values.length; i++) { + result[i] = func(values[i]); + } + return result; + }; + ArrayUtilities.where = function (values, func) { + var result = new Array(); + for (var i = 0; i < values.length; i++) { + if (func(values[i])) { + result.push(values[i]); + } + } + return result; + }; + ArrayUtilities.any = function (array, func) { + for (var i = 0, n = array.length; i < n; i++) { + if (func(array[i])) { + return true; + } + } + return false; + }; + ArrayUtilities.all = function (array, func) { + for (var i = 0, n = array.length; i < n; i++) { + if (!func(array[i])) { + return false; + } + } + return true; + }; + ArrayUtilities.binarySearch = function (array, value) { + var low = 0; + var high = array.length - 1; + while (low <= high) { + var middle = low + ((high - low) >> 1); + var midValue = array[middle]; + if (midValue === value) { + return middle; + } + else if (midValue > value) { + high = middle - 1; + } + else { + low = middle + 1; + } + } + return ~low; + }; + ArrayUtilities.createArray = function (length, defaultValue) { + var result = new Array(length); + for (var i = 0; i < length; i++) { + result[i] = defaultValue; + } + return result; + }; + ArrayUtilities.grow = function (array, length, defaultValue) { + var count = length - array.length; + for (var i = 0; i < count; i++) { + array.push(defaultValue); + } + }; + ArrayUtilities.copy = function (sourceArray, sourceIndex, destinationArray, destinationIndex, length) { + for (var i = 0; i < length; i++) { + destinationArray[destinationIndex + i] = sourceArray[sourceIndex + i]; + } + }; + ArrayUtilities.indexOf = function (array, predicate) { + for (var i = 0, n = array.length; i < n; i++) { + if (predicate(array[i])) { + return i; + } + } + return -1; + }; + return ArrayUtilities; + })(); + TypeScript.ArrayUtilities = ArrayUtilities; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (AssertionLevel) { + AssertionLevel[AssertionLevel["None"] = 0] = "None"; + AssertionLevel[AssertionLevel["Normal"] = 1] = "Normal"; + AssertionLevel[AssertionLevel["Aggressive"] = 2] = "Aggressive"; + AssertionLevel[AssertionLevel["VeryAggressive"] = 3] = "VeryAggressive"; + })(TypeScript.AssertionLevel || (TypeScript.AssertionLevel = {})); + var AssertionLevel = TypeScript.AssertionLevel; + var Debug = (function () { + function Debug() { + } + Debug.shouldAssert = function (level) { + return this.currentAssertionLevel >= level; + }; + Debug.assert = function (expression, message, verboseDebugInfo) { + if (message === void 0) { message = ""; } + if (verboseDebugInfo === void 0) { verboseDebugInfo = null; } + if (!expression) { + var verboseDebugString = ""; + if (verboseDebugInfo) { + verboseDebugString = "\r\nVerbose Debug Information:" + verboseDebugInfo(); + } + throw new Error("Debug Failure. False expression: " + message + verboseDebugString); + } + }; + Debug.fail = function (message) { + Debug.assert(false, message); + }; + Debug.currentAssertionLevel = 0 /* None */; + return Debug; + })(); + TypeScript.Debug = Debug; +})(TypeScript || (TypeScript = {})); +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var TypeScript; +(function (TypeScript) { + TypeScript.LocalizedDiagnosticMessages = null; + var Location = (function () { + function Location(fileName, lineMap, start, length) { + this._fileName = fileName; + this._lineMap = lineMap; + this._start = start; + this._length = length; + } + Location.prototype.fileName = function () { + return this._fileName; + }; + Location.prototype.lineMap = function () { + return this._lineMap; + }; + Location.prototype.line = function () { + return this._lineMap ? this._lineMap.getLineNumberFromPosition(this.start()) : 0; + }; + Location.prototype.character = function () { + return this._lineMap ? this._lineMap.getLineAndCharacterFromPosition(this.start()).character() : 0; + }; + Location.prototype.start = function () { + return this._start; + }; + Location.prototype.length = function () { + return this._length; + }; + Location.equals = function (location1, location2) { + return location1._fileName === location2._fileName && location1._start === location2._start && location1._length === location2._length; + }; + return Location; + })(); + TypeScript.Location = Location; + var Diagnostic = (function (_super) { + __extends(Diagnostic, _super); + function Diagnostic(fileName, lineMap, start, length, diagnosticKey, _arguments, additionalLocations) { + if (_arguments === void 0) { _arguments = null; } + if (additionalLocations === void 0) { additionalLocations = null; } + _super.call(this, fileName, lineMap, start, length); + this._diagnosticKey = diagnosticKey; + this._arguments = (_arguments && _arguments.length > 0) ? _arguments : null; + this._additionalLocations = (additionalLocations && additionalLocations.length > 0) ? additionalLocations : null; + } + Diagnostic.prototype.toJSON = function (key) { + var result = {}; + result.start = this.start(); + result.length = this.length(); + result.diagnosticCode = this._diagnosticKey; + var _arguments = this.arguments(); + if (_arguments && _arguments.length > 0) { + result.arguments = _arguments; + } + return result; + }; + Diagnostic.prototype.diagnosticKey = function () { + return this._diagnosticKey; + }; + Diagnostic.prototype.arguments = function () { + return this._arguments; + }; + Diagnostic.prototype.text = function () { + return TypeScript.getLocalizedText(this._diagnosticKey, this._arguments); + }; + Diagnostic.prototype.message = function () { + return TypeScript.getDiagnosticMessage(this._diagnosticKey, this._arguments); + }; + Diagnostic.prototype.additionalLocations = function () { + return this._additionalLocations || []; + }; + Diagnostic.equals = function (diagnostic1, diagnostic2) { + return Location.equals(diagnostic1, diagnostic2) && diagnostic1._diagnosticKey === diagnostic2._diagnosticKey && TypeScript.ArrayUtilities.sequenceEquals(diagnostic1._arguments, diagnostic2._arguments, function (v1, v2) { return v1 === v2; }); + }; + Diagnostic.prototype.info = function () { + return getDiagnosticInfoFromKey(this.diagnosticKey()); + }; + return Diagnostic; + })(Location); + TypeScript.Diagnostic = Diagnostic; + function newLine() { + return sys.newLine ? sys.newLine : "\r\n"; + } + TypeScript.newLine = newLine; + function getLargestIndex(diagnostic) { + var largest = -1; + var regex = /\{(\d+)\}/g; + var match; + while (match = regex.exec(diagnostic)) { + var val = parseInt(match[1]); + if (!isNaN(val) && val > largest) { + largest = val; + } + } + return largest; + } + function getDiagnosticInfoFromKey(diagnosticKey) { + var result = TypeScript.diagnosticInformationMap[diagnosticKey]; + TypeScript.Debug.assert(result); + return result; + } + function getLocalizedText(diagnosticKey, args) { + var diagnosticMessageText = diagnosticKey; + TypeScript.Debug.assert(diagnosticMessageText !== undefined && diagnosticMessageText !== null); + var actualCount = args ? args.length : 0; + var expectedCount = 1 + getLargestIndex(diagnosticKey); + if (expectedCount !== actualCount) { + throw new Error(getLocalizedText(TypeScript.DiagnosticCode.Expected_0_arguments_to_message_got_1_instead, [expectedCount, actualCount])); + } + var valueCount = 1 + getLargestIndex(diagnosticMessageText); + if (valueCount !== expectedCount) { + throw new Error(getLocalizedText(TypeScript.DiagnosticCode.Expected_the_message_0_to_have_1_arguments_but_it_had_2, [diagnosticMessageText, expectedCount, valueCount])); + } + diagnosticMessageText = diagnosticMessageText.replace(/{(\d+)}/g, function (match, num) { + return typeof args[num] !== 'undefined' ? args[num] : match; + }); + diagnosticMessageText = diagnosticMessageText.replace(/{(NL)}/g, function (match) { + return TypeScript.newLine(); + }); + return diagnosticMessageText; + } + TypeScript.getLocalizedText = getLocalizedText; + function getDiagnosticMessage(diagnosticKey, args) { + var diagnostic = getDiagnosticInfoFromKey(diagnosticKey); + var diagnosticMessageText = getLocalizedText(diagnosticKey, args); + var message; + if (diagnostic.category === 1 /* Error */) { + message = getLocalizedText(TypeScript.DiagnosticCode.error_TS_0_1, [diagnostic.code, diagnosticMessageText]); + } + else if (diagnostic.category === 0 /* Warning */) { + message = getLocalizedText(TypeScript.DiagnosticCode.warning_TS_0_1, [diagnostic.code, diagnosticMessageText]); + } + else { + message = diagnosticMessageText; + } + return message; + } + TypeScript.getDiagnosticMessage = getDiagnosticMessage; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var Errors = (function () { + function Errors() { + } + Errors.argument = function (argument, message) { + return new Error("Invalid argument: " + argument + ". " + message); + }; + Errors.argumentOutOfRange = function (argument) { + return new Error("Argument out of range: " + argument); + }; + Errors.argumentNull = function (argument) { + return new Error("Argument null: " + argument); + }; + Errors.abstract = function () { + return new Error("Operation not implemented properly by subclass."); + }; + Errors.notYetImplemented = function () { + return new Error("Not yet implemented."); + }; + Errors.invalidOperation = function (message) { + return new Error("Invalid operation: " + message); + }; + return Errors; + })(); + TypeScript.Errors = Errors; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var Hash = (function () { + function Hash() { + } + Hash.computeFnv1aCharArrayHashCode = function (text, start, len) { + var hashCode = Hash.FNV_BASE; + var end = start + len; + for (var i = start; i < end; i++) { + hashCode = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(hashCode ^ text[i], Hash.FNV_PRIME); + } + return hashCode; + }; + Hash.computeSimple31BitCharArrayHashCode = function (key, start, len) { + var hash = 0; + for (var i = 0; i < len; i++) { + var ch = key[start + i]; + hash = ((((hash << 5) - hash) | 0) + ch) | 0; + } + return hash & 0x7FFFFFFF; + }; + Hash.computeSimple31BitStringHashCode = function (key) { + var hash = 0; + var start = 0; + var len = key.length; + for (var i = 0; i < len; i++) { + var ch = key.charCodeAt(start + i); + hash = ((((hash << 5) - hash) | 0) + ch) | 0; + } + return hash & 0x7FFFFFFF; + }; + Hash.computeMurmur2StringHashCode = function (key, seed) { + var m = 0x5bd1e995; + var r = 24; + var numberOfCharsLeft = key.length; + var h = Math.abs(seed ^ numberOfCharsLeft); + var index = 0; + while (numberOfCharsLeft >= 2) { + var c1 = key.charCodeAt(index); + var c2 = key.charCodeAt(index + 1); + var k = Math.abs(c1 | (c2 << 16)); + k = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(k, m); + k ^= k >> r; + k = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(k, m); + h = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(h, m); + h ^= k; + index += 2; + numberOfCharsLeft -= 2; + } + if (numberOfCharsLeft === 1) { + h ^= key.charCodeAt(index); + h = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(h, m); + } + h ^= h >> 13; + h = TypeScript.IntegerUtilities.integerMultiplyLow32Bits(h, m); + h ^= h >> 15; + return h; + }; + Hash.combine = function (value, currentHash) { + return (((currentHash << 5) + currentHash) + value) & 0x7FFFFFFF; + }; + Hash.FNV_BASE = 2166136261; + Hash.FNV_PRIME = 16777619; + return Hash; + })(); + TypeScript.Hash = Hash; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (IntegerUtilities) { + function integerDivide(numerator, denominator) { + return (numerator / denominator) >> 0; + } + IntegerUtilities.integerDivide = integerDivide; + function integerMultiplyLow32Bits(n1, n2) { + var n1Low16 = n1 & 0x0000ffff; + var n1High16 = n1 >>> 16; + var n2Low16 = n2 & 0x0000ffff; + var n2High16 = n2 >>> 16; + var resultLow32 = (((n1 & 0xffff0000) * n2) >>> 0) + (((n1 & 0x0000ffff) * n2) >>> 0) >>> 0; + return resultLow32; + } + IntegerUtilities.integerMultiplyLow32Bits = integerMultiplyLow32Bits; + function isInteger(text) { + return /^[0-9]+$/.test(text); + } + IntegerUtilities.isInteger = isInteger; + function isHexInteger(text) { + return /^0(x|X)[0-9a-fA-F]+$/.test(text); + } + IntegerUtilities.isHexInteger = isHexInteger; + })(TypeScript.IntegerUtilities || (TypeScript.IntegerUtilities = {})); + var IntegerUtilities = TypeScript.IntegerUtilities; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var LineMap = (function () { + function LineMap(_computeLineStarts, length) { + this._computeLineStarts = _computeLineStarts; + this.length = length; + this._lineStarts = null; + } + LineMap.prototype.toJSON = function (key) { + return { lineStarts: this.lineStarts(), length: this.length }; + }; + LineMap.prototype.equals = function (other) { + return this.length === other.length && TypeScript.ArrayUtilities.sequenceEquals(this.lineStarts(), other.lineStarts(), function (v1, v2) { return v1 === v2; }); + }; + LineMap.prototype.lineStarts = function () { + if (this._lineStarts === null) { + this._lineStarts = this._computeLineStarts(); + } + return this._lineStarts; + }; + LineMap.prototype.lineCount = function () { + return this.lineStarts().length; + }; + LineMap.prototype.getPosition = function (line, character) { + return this.lineStarts()[line] + character; + }; + LineMap.prototype.getLineNumberFromPosition = function (position) { + if (position < 0 || position > this.length) { + throw TypeScript.Errors.argumentOutOfRange("position"); + } + if (position === this.length) { + return this.lineCount() - 1; + } + var lineNumber = TypeScript.ArrayUtilities.binarySearch(this.lineStarts(), position); + if (lineNumber < 0) { + lineNumber = (~lineNumber) - 1; + } + return lineNumber; + }; + LineMap.prototype.getLineStartPosition = function (lineNumber) { + return this.lineStarts()[lineNumber]; + }; + LineMap.prototype.fillLineAndCharacterFromPosition = function (position, lineAndCharacter) { + if (position < 0 || position > this.length) { + throw TypeScript.Errors.argumentOutOfRange("position"); + } + var lineNumber = this.getLineNumberFromPosition(position); + lineAndCharacter.line = lineNumber; + lineAndCharacter.character = position - this.lineStarts()[lineNumber]; + }; + LineMap.prototype.getLineAndCharacterFromPosition = function (position) { + if (position < 0 || position > this.length) { + throw TypeScript.Errors.argumentOutOfRange("position"); + } + var lineNumber = this.getLineNumberFromPosition(position); + return new TypeScript.LineAndCharacter(lineNumber, position - this.lineStarts()[lineNumber]); + }; + LineMap.empty = new LineMap(function () { return [0]; }, 0); + return LineMap; + })(); + TypeScript.LineMap = LineMap; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var LineAndCharacter = (function () { + function LineAndCharacter(line, character) { + this._line = 0; + this._character = 0; + if (line < 0) { + throw TypeScript.Errors.argumentOutOfRange("line"); + } + if (character < 0) { + throw TypeScript.Errors.argumentOutOfRange("character"); + } + this._line = line; + this._character = character; + } + LineAndCharacter.prototype.line = function () { + return this._line; + }; + LineAndCharacter.prototype.character = function () { + return this._character; + }; + return LineAndCharacter; + })(); + TypeScript.LineAndCharacter = LineAndCharacter; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var StringUtilities = (function () { + function StringUtilities() { + } + StringUtilities.isString = function (value) { + return Object.prototype.toString.apply(value, []) === '[object String]'; + }; + StringUtilities.endsWith = function (string, value) { + return string.substring(string.length - value.length, string.length) === value; + }; + StringUtilities.startsWith = function (string, value) { + return string.substr(0, value.length) === value; + }; + StringUtilities.repeat = function (value, count) { + return Array(count + 1).join(value); + }; + return StringUtilities; + })(); + TypeScript.StringUtilities = StringUtilities; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (CharacterCodes) { + CharacterCodes[CharacterCodes["nullCharacter"] = 0] = "nullCharacter"; + CharacterCodes[CharacterCodes["maxAsciiCharacter"] = 127] = "maxAsciiCharacter"; + CharacterCodes[CharacterCodes["lineFeed"] = 10] = "lineFeed"; + CharacterCodes[CharacterCodes["carriageReturn"] = 13] = "carriageReturn"; + CharacterCodes[CharacterCodes["lineSeparator"] = 0x2028] = "lineSeparator"; + CharacterCodes[CharacterCodes["paragraphSeparator"] = 0x2029] = "paragraphSeparator"; + CharacterCodes[CharacterCodes["nextLine"] = 0x0085] = "nextLine"; + CharacterCodes[CharacterCodes["space"] = 0x0020] = "space"; + CharacterCodes[CharacterCodes["nonBreakingSpace"] = 0x00A0] = "nonBreakingSpace"; + CharacterCodes[CharacterCodes["enQuad"] = 0x2000] = "enQuad"; + CharacterCodes[CharacterCodes["emQuad"] = 0x2001] = "emQuad"; + CharacterCodes[CharacterCodes["enSpace"] = 0x2002] = "enSpace"; + CharacterCodes[CharacterCodes["emSpace"] = 0x2003] = "emSpace"; + CharacterCodes[CharacterCodes["threePerEmSpace"] = 0x2004] = "threePerEmSpace"; + CharacterCodes[CharacterCodes["fourPerEmSpace"] = 0x2005] = "fourPerEmSpace"; + CharacterCodes[CharacterCodes["sixPerEmSpace"] = 0x2006] = "sixPerEmSpace"; + CharacterCodes[CharacterCodes["figureSpace"] = 0x2007] = "figureSpace"; + CharacterCodes[CharacterCodes["punctuationSpace"] = 0x2008] = "punctuationSpace"; + CharacterCodes[CharacterCodes["thinSpace"] = 0x2009] = "thinSpace"; + CharacterCodes[CharacterCodes["hairSpace"] = 0x200A] = "hairSpace"; + CharacterCodes[CharacterCodes["zeroWidthSpace"] = 0x200B] = "zeroWidthSpace"; + CharacterCodes[CharacterCodes["narrowNoBreakSpace"] = 0x202F] = "narrowNoBreakSpace"; + CharacterCodes[CharacterCodes["ideographicSpace"] = 0x3000] = "ideographicSpace"; + CharacterCodes[CharacterCodes["_"] = 95] = "_"; + CharacterCodes[CharacterCodes["$"] = 36] = "$"; + CharacterCodes[CharacterCodes["_0"] = 48] = "_0"; + CharacterCodes[CharacterCodes["_1"] = 49] = "_1"; + CharacterCodes[CharacterCodes["_2"] = 50] = "_2"; + CharacterCodes[CharacterCodes["_3"] = 51] = "_3"; + CharacterCodes[CharacterCodes["_4"] = 52] = "_4"; + CharacterCodes[CharacterCodes["_5"] = 53] = "_5"; + CharacterCodes[CharacterCodes["_6"] = 54] = "_6"; + CharacterCodes[CharacterCodes["_7"] = 55] = "_7"; + CharacterCodes[CharacterCodes["_8"] = 56] = "_8"; + CharacterCodes[CharacterCodes["_9"] = 57] = "_9"; + CharacterCodes[CharacterCodes["a"] = 97] = "a"; + CharacterCodes[CharacterCodes["b"] = 98] = "b"; + CharacterCodes[CharacterCodes["c"] = 99] = "c"; + CharacterCodes[CharacterCodes["d"] = 100] = "d"; + CharacterCodes[CharacterCodes["e"] = 101] = "e"; + CharacterCodes[CharacterCodes["f"] = 102] = "f"; + CharacterCodes[CharacterCodes["g"] = 103] = "g"; + CharacterCodes[CharacterCodes["h"] = 104] = "h"; + CharacterCodes[CharacterCodes["i"] = 105] = "i"; + CharacterCodes[CharacterCodes["j"] = 106] = "j"; + CharacterCodes[CharacterCodes["k"] = 107] = "k"; + CharacterCodes[CharacterCodes["l"] = 108] = "l"; + CharacterCodes[CharacterCodes["m"] = 109] = "m"; + CharacterCodes[CharacterCodes["n"] = 110] = "n"; + CharacterCodes[CharacterCodes["o"] = 111] = "o"; + CharacterCodes[CharacterCodes["p"] = 112] = "p"; + CharacterCodes[CharacterCodes["q"] = 113] = "q"; + CharacterCodes[CharacterCodes["r"] = 114] = "r"; + CharacterCodes[CharacterCodes["s"] = 115] = "s"; + CharacterCodes[CharacterCodes["t"] = 116] = "t"; + CharacterCodes[CharacterCodes["u"] = 117] = "u"; + CharacterCodes[CharacterCodes["v"] = 118] = "v"; + CharacterCodes[CharacterCodes["w"] = 119] = "w"; + CharacterCodes[CharacterCodes["x"] = 120] = "x"; + CharacterCodes[CharacterCodes["y"] = 121] = "y"; + CharacterCodes[CharacterCodes["z"] = 122] = "z"; + CharacterCodes[CharacterCodes["A"] = 65] = "A"; + CharacterCodes[CharacterCodes["B"] = 66] = "B"; + CharacterCodes[CharacterCodes["C"] = 67] = "C"; + CharacterCodes[CharacterCodes["D"] = 68] = "D"; + CharacterCodes[CharacterCodes["E"] = 69] = "E"; + CharacterCodes[CharacterCodes["F"] = 70] = "F"; + CharacterCodes[CharacterCodes["G"] = 71] = "G"; + CharacterCodes[CharacterCodes["H"] = 72] = "H"; + CharacterCodes[CharacterCodes["I"] = 73] = "I"; + CharacterCodes[CharacterCodes["J"] = 74] = "J"; + CharacterCodes[CharacterCodes["K"] = 75] = "K"; + CharacterCodes[CharacterCodes["L"] = 76] = "L"; + CharacterCodes[CharacterCodes["M"] = 77] = "M"; + CharacterCodes[CharacterCodes["N"] = 78] = "N"; + CharacterCodes[CharacterCodes["O"] = 79] = "O"; + CharacterCodes[CharacterCodes["P"] = 80] = "P"; + CharacterCodes[CharacterCodes["Q"] = 81] = "Q"; + CharacterCodes[CharacterCodes["R"] = 82] = "R"; + CharacterCodes[CharacterCodes["S"] = 83] = "S"; + CharacterCodes[CharacterCodes["T"] = 84] = "T"; + CharacterCodes[CharacterCodes["U"] = 85] = "U"; + CharacterCodes[CharacterCodes["V"] = 86] = "V"; + CharacterCodes[CharacterCodes["W"] = 87] = "W"; + CharacterCodes[CharacterCodes["X"] = 88] = "X"; + CharacterCodes[CharacterCodes["Y"] = 89] = "Y"; + CharacterCodes[CharacterCodes["Z"] = 90] = "Z"; + CharacterCodes[CharacterCodes["ampersand"] = 38] = "ampersand"; + CharacterCodes[CharacterCodes["asterisk"] = 42] = "asterisk"; + CharacterCodes[CharacterCodes["at"] = 64] = "at"; + CharacterCodes[CharacterCodes["backslash"] = 92] = "backslash"; + CharacterCodes[CharacterCodes["bar"] = 124] = "bar"; + CharacterCodes[CharacterCodes["caret"] = 94] = "caret"; + CharacterCodes[CharacterCodes["closeBrace"] = 125] = "closeBrace"; + CharacterCodes[CharacterCodes["closeBracket"] = 93] = "closeBracket"; + CharacterCodes[CharacterCodes["closeParen"] = 41] = "closeParen"; + CharacterCodes[CharacterCodes["colon"] = 58] = "colon"; + CharacterCodes[CharacterCodes["comma"] = 44] = "comma"; + CharacterCodes[CharacterCodes["dot"] = 46] = "dot"; + CharacterCodes[CharacterCodes["doubleQuote"] = 34] = "doubleQuote"; + CharacterCodes[CharacterCodes["equals"] = 61] = "equals"; + CharacterCodes[CharacterCodes["exclamation"] = 33] = "exclamation"; + CharacterCodes[CharacterCodes["greaterThan"] = 62] = "greaterThan"; + CharacterCodes[CharacterCodes["lessThan"] = 60] = "lessThan"; + CharacterCodes[CharacterCodes["minus"] = 45] = "minus"; + CharacterCodes[CharacterCodes["openBrace"] = 123] = "openBrace"; + CharacterCodes[CharacterCodes["openBracket"] = 91] = "openBracket"; + CharacterCodes[CharacterCodes["openParen"] = 40] = "openParen"; + CharacterCodes[CharacterCodes["percent"] = 37] = "percent"; + CharacterCodes[CharacterCodes["plus"] = 43] = "plus"; + CharacterCodes[CharacterCodes["question"] = 63] = "question"; + CharacterCodes[CharacterCodes["semicolon"] = 59] = "semicolon"; + CharacterCodes[CharacterCodes["singleQuote"] = 39] = "singleQuote"; + CharacterCodes[CharacterCodes["slash"] = 47] = "slash"; + CharacterCodes[CharacterCodes["tilde"] = 126] = "tilde"; + CharacterCodes[CharacterCodes["backspace"] = 8] = "backspace"; + CharacterCodes[CharacterCodes["formFeed"] = 12] = "formFeed"; + CharacterCodes[CharacterCodes["byteOrderMark"] = 0xFEFF] = "byteOrderMark"; + CharacterCodes[CharacterCodes["tab"] = 9] = "tab"; + CharacterCodes[CharacterCodes["verticalTab"] = 11] = "verticalTab"; + })(TypeScript.CharacterCodes || (TypeScript.CharacterCodes = {})); + var CharacterCodes = TypeScript.CharacterCodes; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (ScriptSnapshot) { + var StringScriptSnapshot = (function () { + function StringScriptSnapshot(text) { + this.text = text; + this._lineStartPositions = null; + } + StringScriptSnapshot.prototype.getText = function (start, end) { + return this.text.substring(start, end); + }; + StringScriptSnapshot.prototype.getLength = function () { + return this.text.length; + }; + StringScriptSnapshot.prototype.getLineStartPositions = function () { + if (!this._lineStartPositions) { + this._lineStartPositions = TypeScript.TextUtilities.parseLineStarts(this.text); + } + return this._lineStartPositions; + }; + StringScriptSnapshot.prototype.getTextChangeRangeSinceVersion = function (scriptVersion) { + throw TypeScript.Errors.notYetImplemented(); + }; + return StringScriptSnapshot; + })(); + function fromString(text) { + return new StringScriptSnapshot(text); + } + ScriptSnapshot.fromString = fromString; + })(TypeScript.ScriptSnapshot || (TypeScript.ScriptSnapshot = {})); + var ScriptSnapshot = TypeScript.ScriptSnapshot; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (LineMap1) { + function fromSimpleText(text) { + return new TypeScript.LineMap(function () { return TypeScript.TextUtilities.parseLineStarts({ charCodeAt: function (index) { return text.charCodeAt(index); }, length: text.length() }); }, text.length()); + } + LineMap1.fromSimpleText = fromSimpleText; + function fromScriptSnapshot(scriptSnapshot) { + return new TypeScript.LineMap(function () { return scriptSnapshot.getLineStartPositions(); }, scriptSnapshot.getLength()); + } + LineMap1.fromScriptSnapshot = fromScriptSnapshot; + function fromString(text) { + return new TypeScript.LineMap(function () { return TypeScript.TextUtilities.parseLineStarts(text); }, text.length); + } + LineMap1.fromString = fromString; + })(TypeScript.LineMap1 || (TypeScript.LineMap1 = {})); + var LineMap1 = TypeScript.LineMap1; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (SimpleText) { + var SimpleStringText = (function () { + function SimpleStringText(value) { + this.value = value; + this._lineMap = null; + } + SimpleStringText.prototype.length = function () { + return this.value.length; + }; + SimpleStringText.prototype.substr = function (start, length) { + return this.value.substr(start, length); + }; + SimpleStringText.prototype.charCodeAt = function (index) { + return this.value.charCodeAt(index); + }; + SimpleStringText.prototype.lineMap = function () { + if (!this._lineMap) { + this._lineMap = TypeScript.LineMap1.fromString(this.value); + } + return this._lineMap; + }; + return SimpleStringText; + })(); + var SimpleScriptSnapshotText = (function () { + function SimpleScriptSnapshotText(scriptSnapshot) { + this.scriptSnapshot = scriptSnapshot; + this._lineMap = null; + } + SimpleScriptSnapshotText.prototype.charCodeAt = function (index) { + return this.scriptSnapshot.getText(index, index + 1).charCodeAt(0); + }; + SimpleScriptSnapshotText.prototype.length = function () { + return this.scriptSnapshot.getLength(); + }; + SimpleScriptSnapshotText.prototype.substr = function (start, length) { + return this.scriptSnapshot.getText(start, start + length); + }; + SimpleScriptSnapshotText.prototype.lineMap = function () { + var _this = this; + if (this._lineMap === null) { + this._lineMap = new TypeScript.LineMap(function () { return _this.scriptSnapshot.getLineStartPositions(); }, this.length()); + } + return this._lineMap; + }; + return SimpleScriptSnapshotText; + })(); + function fromString(value) { + return new SimpleStringText(value); + } + SimpleText.fromString = fromString; + function fromScriptSnapshot(scriptSnapshot) { + return new SimpleScriptSnapshotText(scriptSnapshot); + } + SimpleText.fromScriptSnapshot = fromScriptSnapshot; + })(TypeScript.SimpleText || (TypeScript.SimpleText = {})); + var SimpleText = TypeScript.SimpleText; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (TextUtilities) { + function parseLineStarts(text) { + var length = text.length; + if (0 === length) { + var result = new Array(); + result.push(0); + return result; + } + var position = 0; + var index = 0; + var arrayBuilder = new Array(); + var lineNumber = 0; + while (index < length) { + var c = text.charCodeAt(index); + var lineBreakLength; + if (c > 13 /* carriageReturn */ && c <= 127) { + index++; + continue; + } + else if (c === 13 /* carriageReturn */ && index + 1 < length && text.charCodeAt(index + 1) === 10 /* lineFeed */) { + lineBreakLength = 2; + } + else if (c === 10 /* lineFeed */) { + lineBreakLength = 1; + } + else { + lineBreakLength = TextUtilities.getLengthOfLineBreak(text, index); + } + if (0 === lineBreakLength) { + index++; + } + else { + arrayBuilder.push(position); + index += lineBreakLength; + position = index; + lineNumber++; + } + } + arrayBuilder.push(position); + return arrayBuilder; + } + TextUtilities.parseLineStarts = parseLineStarts; + function getLengthOfLineBreakSlow(text, index, c) { + if (c === 13 /* carriageReturn */) { + var next = index + 1; + return (next < text.length) && 10 /* lineFeed */ === text.charCodeAt(next) ? 2 : 1; + } + else if (isAnyLineBreakCharacter(c)) { + return 1; + } + else { + return 0; + } + } + TextUtilities.getLengthOfLineBreakSlow = getLengthOfLineBreakSlow; + function getLengthOfLineBreak(text, index) { + var c = text.charCodeAt(index); + if (c > 13 /* carriageReturn */ && c <= 127) { + return 0; + } + return getLengthOfLineBreakSlow(text, index, c); + } + TextUtilities.getLengthOfLineBreak = getLengthOfLineBreak; + function isAnyLineBreakCharacter(c) { + return c === 10 /* lineFeed */ || c === 13 /* carriageReturn */ || c === 133 /* nextLine */ || c === 8232 /* lineSeparator */ || c === 8233 /* paragraphSeparator */; + } + TextUtilities.isAnyLineBreakCharacter = isAnyLineBreakCharacter; + })(TypeScript.TextUtilities || (TypeScript.TextUtilities = {})); + var TextUtilities = TypeScript.TextUtilities; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var TextSpan = (function () { + function TextSpan(start, length) { + if (start < 0) { + TypeScript.Errors.argument("start"); + } + if (length < 0) { + TypeScript.Errors.argument("length"); + } + this._start = start; + this._length = length; + } + TextSpan.prototype.start = function () { + return this._start; + }; + TextSpan.prototype.length = function () { + return this._length; + }; + TextSpan.prototype.end = function () { + return this._start + this._length; + }; + TextSpan.prototype.isEmpty = function () { + return this._length === 0; + }; + TextSpan.prototype.containsPosition = function (position) { + return position >= this._start && position < this.end(); + }; + TextSpan.prototype.containsTextSpan = function (span) { + return span._start >= this._start && span.end() <= this.end(); + }; + TextSpan.prototype.overlapsWith = function (span) { + var overlapStart = Math.max(this._start, span._start); + var overlapEnd = Math.min(this.end(), span.end()); + return overlapStart < overlapEnd; + }; + TextSpan.prototype.overlap = function (span) { + var overlapStart = Math.max(this._start, span._start); + var overlapEnd = Math.min(this.end(), span.end()); + if (overlapStart < overlapEnd) { + return TextSpan.fromBounds(overlapStart, overlapEnd); + } + return null; + }; + TextSpan.prototype.intersectsWithTextSpan = function (span) { + return span._start <= this.end() && span.end() >= this._start; + }; + TextSpan.prototype.intersectsWith = function (start, length) { + var end = start + length; + return start <= this.end() && end >= this._start; + }; + TextSpan.prototype.intersectsWithPosition = function (position) { + return position <= this.end() && position >= this._start; + }; + TextSpan.prototype.intersection = function (span) { + var intersectStart = Math.max(this._start, span._start); + var intersectEnd = Math.min(this.end(), span.end()); + if (intersectStart <= intersectEnd) { + return TextSpan.fromBounds(intersectStart, intersectEnd); + } + return null; + }; + TextSpan.fromBounds = function (start, end) { + TypeScript.Debug.assert(start >= 0); + TypeScript.Debug.assert(end - start >= 0); + return new TextSpan(start, end - start); + }; + return TextSpan; + })(); + TypeScript.TextSpan = TextSpan; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var TextChangeRange = (function () { + function TextChangeRange(span, newLength) { + if (newLength < 0) { + throw TypeScript.Errors.argumentOutOfRange("newLength"); + } + this._span = span; + this._newLength = newLength; + } + TextChangeRange.prototype.span = function () { + return this._span; + }; + TextChangeRange.prototype.newLength = function () { + return this._newLength; + }; + TextChangeRange.prototype.newSpan = function () { + return new TypeScript.TextSpan(this.span().start(), this.newLength()); + }; + TextChangeRange.prototype.isUnchanged = function () { + return this.span().isEmpty() && this.newLength() === 0; + }; + TextChangeRange.collapseChangesAcrossMultipleVersions = function (changes) { + if (changes.length === 0) { + return TextChangeRange.unchanged; + } + if (changes.length === 1) { + return changes[0]; + } + var change0 = changes[0]; + var oldStartN = change0.span().start(); + var oldEndN = change0.span().end(); + var newEndN = oldStartN + change0.newLength(); + for (var i = 1; i < changes.length; i++) { + var nextChange = changes[i]; + var oldStart1 = oldStartN; + var oldEnd1 = oldEndN; + var newEnd1 = newEndN; + var oldStart2 = nextChange.span().start(); + var oldEnd2 = nextChange.span().end(); + var newEnd2 = oldStart2 + nextChange.newLength(); + oldStartN = Math.min(oldStart1, oldStart2); + oldEndN = Math.max(oldEnd1, oldEnd1 + (oldEnd2 - newEnd1)); + newEndN = Math.max(newEnd2, newEnd2 + (newEnd1 - oldEnd2)); + } + return new TextChangeRange(TypeScript.TextSpan.fromBounds(oldStartN, oldEndN), newEndN - oldStartN); + }; + TextChangeRange.unchanged = new TextChangeRange(new TypeScript.TextSpan(0, 0), 0); + return TextChangeRange; + })(); + TypeScript.TextChangeRange = TextChangeRange; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (CharacterInfo) { + function isDecimalDigit(c) { + return c >= 48 /* _0 */ && c <= 57 /* _9 */; + } + CharacterInfo.isDecimalDigit = isDecimalDigit; + function isOctalDigit(c) { + return c >= 48 /* _0 */ && c <= 55 /* _7 */; + } + CharacterInfo.isOctalDigit = isOctalDigit; + function isHexDigit(c) { + return CharacterInfo.isDecimalDigit(c) || (c >= 65 /* A */ && c <= 70 /* F */) || (c >= 97 /* a */ && c <= 102 /* f */); + } + CharacterInfo.isHexDigit = isHexDigit; + function hexValue(c) { + return CharacterInfo.isDecimalDigit(c) ? (c - 48 /* _0 */) : (c >= 65 /* A */ && c <= 70 /* F */) ? c - 65 /* A */ + 10 : c - 97 /* a */ + 10; + } + CharacterInfo.hexValue = hexValue; + function isWhitespace(ch) { + switch (ch) { + case 32 /* space */: + case 160 /* nonBreakingSpace */: + case 8192 /* enQuad */: + case 8193 /* emQuad */: + case 8194 /* enSpace */: + case 8195 /* emSpace */: + case 8196 /* threePerEmSpace */: + case 8197 /* fourPerEmSpace */: + case 8198 /* sixPerEmSpace */: + case 8199 /* figureSpace */: + case 8200 /* punctuationSpace */: + case 8201 /* thinSpace */: + case 8202 /* hairSpace */: + case 8203 /* zeroWidthSpace */: + case 8239 /* narrowNoBreakSpace */: + case 12288 /* ideographicSpace */: + case 9 /* tab */: + case 11 /* verticalTab */: + case 12 /* formFeed */: + case 65279 /* byteOrderMark */: + return true; + } + return false; + } + CharacterInfo.isWhitespace = isWhitespace; + function isLineTerminator(ch) { + switch (ch) { + case 13 /* carriageReturn */: + case 10 /* lineFeed */: + case 8233 /* paragraphSeparator */: + case 8232 /* lineSeparator */: + return true; + } + return false; + } + CharacterInfo.isLineTerminator = isLineTerminator; + })(TypeScript.CharacterInfo || (TypeScript.CharacterInfo = {})); + var CharacterInfo = TypeScript.CharacterInfo; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (SyntaxConstants) { + SyntaxConstants[SyntaxConstants["None"] = 0] = "None"; + SyntaxConstants[SyntaxConstants["NodeDataComputed"] = 0x00000001] = "NodeDataComputed"; + SyntaxConstants[SyntaxConstants["NodeIncrementallyUnusableMask"] = 0x00000002] = "NodeIncrementallyUnusableMask"; + SyntaxConstants[SyntaxConstants["NodeParsedInStrictModeMask"] = 0x00000004] = "NodeParsedInStrictModeMask"; + SyntaxConstants[SyntaxConstants["NodeFullWidthShift"] = 3] = "NodeFullWidthShift"; + })(TypeScript.SyntaxConstants || (TypeScript.SyntaxConstants = {})); + var SyntaxConstants = TypeScript.SyntaxConstants; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var FormattingOptions = (function () { + function FormattingOptions(useTabs, spacesPerTab, indentSpaces, newLineCharacter) { + this.useTabs = useTabs; + this.spacesPerTab = spacesPerTab; + this.indentSpaces = indentSpaces; + this.newLineCharacter = newLineCharacter; + } + FormattingOptions.defaultOptions = new FormattingOptions(false, 4, 4, "\r\n"); + return FormattingOptions; + })(); + TypeScript.FormattingOptions = FormattingOptions; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (SyntaxKind) { + SyntaxKind[SyntaxKind["None"] = 0] = "None"; + SyntaxKind[SyntaxKind["List"] = 1] = "List"; + SyntaxKind[SyntaxKind["SeparatedList"] = 2] = "SeparatedList"; + SyntaxKind[SyntaxKind["TriviaList"] = 3] = "TriviaList"; + SyntaxKind[SyntaxKind["WhitespaceTrivia"] = 4] = "WhitespaceTrivia"; + SyntaxKind[SyntaxKind["NewLineTrivia"] = 5] = "NewLineTrivia"; + SyntaxKind[SyntaxKind["MultiLineCommentTrivia"] = 6] = "MultiLineCommentTrivia"; + SyntaxKind[SyntaxKind["SingleLineCommentTrivia"] = 7] = "SingleLineCommentTrivia"; + SyntaxKind[SyntaxKind["SkippedTokenTrivia"] = 8] = "SkippedTokenTrivia"; + SyntaxKind[SyntaxKind["ErrorToken"] = 9] = "ErrorToken"; + SyntaxKind[SyntaxKind["EndOfFileToken"] = 10] = "EndOfFileToken"; + SyntaxKind[SyntaxKind["IdentifierName"] = 11] = "IdentifierName"; + SyntaxKind[SyntaxKind["RegularExpressionLiteral"] = 12] = "RegularExpressionLiteral"; + SyntaxKind[SyntaxKind["NumericLiteral"] = 13] = "NumericLiteral"; + SyntaxKind[SyntaxKind["StringLiteral"] = 14] = "StringLiteral"; + SyntaxKind[SyntaxKind["BreakKeyword"] = 15] = "BreakKeyword"; + SyntaxKind[SyntaxKind["CaseKeyword"] = 16] = "CaseKeyword"; + SyntaxKind[SyntaxKind["CatchKeyword"] = 17] = "CatchKeyword"; + SyntaxKind[SyntaxKind["ContinueKeyword"] = 18] = "ContinueKeyword"; + SyntaxKind[SyntaxKind["DebuggerKeyword"] = 19] = "DebuggerKeyword"; + SyntaxKind[SyntaxKind["DefaultKeyword"] = 20] = "DefaultKeyword"; + SyntaxKind[SyntaxKind["DeleteKeyword"] = 21] = "DeleteKeyword"; + SyntaxKind[SyntaxKind["DoKeyword"] = 22] = "DoKeyword"; + SyntaxKind[SyntaxKind["ElseKeyword"] = 23] = "ElseKeyword"; + SyntaxKind[SyntaxKind["FalseKeyword"] = 24] = "FalseKeyword"; + SyntaxKind[SyntaxKind["FinallyKeyword"] = 25] = "FinallyKeyword"; + SyntaxKind[SyntaxKind["ForKeyword"] = 26] = "ForKeyword"; + SyntaxKind[SyntaxKind["FunctionKeyword"] = 27] = "FunctionKeyword"; + SyntaxKind[SyntaxKind["IfKeyword"] = 28] = "IfKeyword"; + SyntaxKind[SyntaxKind["InKeyword"] = 29] = "InKeyword"; + SyntaxKind[SyntaxKind["InstanceOfKeyword"] = 30] = "InstanceOfKeyword"; + SyntaxKind[SyntaxKind["NewKeyword"] = 31] = "NewKeyword"; + SyntaxKind[SyntaxKind["NullKeyword"] = 32] = "NullKeyword"; + SyntaxKind[SyntaxKind["ReturnKeyword"] = 33] = "ReturnKeyword"; + SyntaxKind[SyntaxKind["SwitchKeyword"] = 34] = "SwitchKeyword"; + SyntaxKind[SyntaxKind["ThisKeyword"] = 35] = "ThisKeyword"; + SyntaxKind[SyntaxKind["ThrowKeyword"] = 36] = "ThrowKeyword"; + SyntaxKind[SyntaxKind["TrueKeyword"] = 37] = "TrueKeyword"; + SyntaxKind[SyntaxKind["TryKeyword"] = 38] = "TryKeyword"; + SyntaxKind[SyntaxKind["TypeOfKeyword"] = 39] = "TypeOfKeyword"; + SyntaxKind[SyntaxKind["VarKeyword"] = 40] = "VarKeyword"; + SyntaxKind[SyntaxKind["VoidKeyword"] = 41] = "VoidKeyword"; + SyntaxKind[SyntaxKind["WhileKeyword"] = 42] = "WhileKeyword"; + SyntaxKind[SyntaxKind["WithKeyword"] = 43] = "WithKeyword"; + SyntaxKind[SyntaxKind["ClassKeyword"] = 44] = "ClassKeyword"; + SyntaxKind[SyntaxKind["ConstKeyword"] = 45] = "ConstKeyword"; + SyntaxKind[SyntaxKind["EnumKeyword"] = 46] = "EnumKeyword"; + SyntaxKind[SyntaxKind["ExportKeyword"] = 47] = "ExportKeyword"; + SyntaxKind[SyntaxKind["ExtendsKeyword"] = 48] = "ExtendsKeyword"; + SyntaxKind[SyntaxKind["ImportKeyword"] = 49] = "ImportKeyword"; + SyntaxKind[SyntaxKind["SuperKeyword"] = 50] = "SuperKeyword"; + SyntaxKind[SyntaxKind["ImplementsKeyword"] = 51] = "ImplementsKeyword"; + SyntaxKind[SyntaxKind["InterfaceKeyword"] = 52] = "InterfaceKeyword"; + SyntaxKind[SyntaxKind["LetKeyword"] = 53] = "LetKeyword"; + SyntaxKind[SyntaxKind["PackageKeyword"] = 54] = "PackageKeyword"; + SyntaxKind[SyntaxKind["PrivateKeyword"] = 55] = "PrivateKeyword"; + SyntaxKind[SyntaxKind["ProtectedKeyword"] = 56] = "ProtectedKeyword"; + SyntaxKind[SyntaxKind["PublicKeyword"] = 57] = "PublicKeyword"; + SyntaxKind[SyntaxKind["StaticKeyword"] = 58] = "StaticKeyword"; + SyntaxKind[SyntaxKind["YieldKeyword"] = 59] = "YieldKeyword"; + SyntaxKind[SyntaxKind["AnyKeyword"] = 60] = "AnyKeyword"; + SyntaxKind[SyntaxKind["BooleanKeyword"] = 61] = "BooleanKeyword"; + SyntaxKind[SyntaxKind["ConstructorKeyword"] = 62] = "ConstructorKeyword"; + SyntaxKind[SyntaxKind["DeclareKeyword"] = 63] = "DeclareKeyword"; + SyntaxKind[SyntaxKind["GetKeyword"] = 64] = "GetKeyword"; + SyntaxKind[SyntaxKind["ModuleKeyword"] = 65] = "ModuleKeyword"; + SyntaxKind[SyntaxKind["RequireKeyword"] = 66] = "RequireKeyword"; + SyntaxKind[SyntaxKind["NumberKeyword"] = 67] = "NumberKeyword"; + SyntaxKind[SyntaxKind["SetKeyword"] = 68] = "SetKeyword"; + SyntaxKind[SyntaxKind["StringKeyword"] = 69] = "StringKeyword"; + SyntaxKind[SyntaxKind["OpenBraceToken"] = 70] = "OpenBraceToken"; + SyntaxKind[SyntaxKind["CloseBraceToken"] = 71] = "CloseBraceToken"; + SyntaxKind[SyntaxKind["OpenParenToken"] = 72] = "OpenParenToken"; + SyntaxKind[SyntaxKind["CloseParenToken"] = 73] = "CloseParenToken"; + SyntaxKind[SyntaxKind["OpenBracketToken"] = 74] = "OpenBracketToken"; + SyntaxKind[SyntaxKind["CloseBracketToken"] = 75] = "CloseBracketToken"; + SyntaxKind[SyntaxKind["DotToken"] = 76] = "DotToken"; + SyntaxKind[SyntaxKind["DotDotDotToken"] = 77] = "DotDotDotToken"; + SyntaxKind[SyntaxKind["SemicolonToken"] = 78] = "SemicolonToken"; + SyntaxKind[SyntaxKind["CommaToken"] = 79] = "CommaToken"; + SyntaxKind[SyntaxKind["LessThanToken"] = 80] = "LessThanToken"; + SyntaxKind[SyntaxKind["GreaterThanToken"] = 81] = "GreaterThanToken"; + SyntaxKind[SyntaxKind["LessThanEqualsToken"] = 82] = "LessThanEqualsToken"; + SyntaxKind[SyntaxKind["GreaterThanEqualsToken"] = 83] = "GreaterThanEqualsToken"; + SyntaxKind[SyntaxKind["EqualsEqualsToken"] = 84] = "EqualsEqualsToken"; + SyntaxKind[SyntaxKind["EqualsGreaterThanToken"] = 85] = "EqualsGreaterThanToken"; + SyntaxKind[SyntaxKind["ExclamationEqualsToken"] = 86] = "ExclamationEqualsToken"; + SyntaxKind[SyntaxKind["EqualsEqualsEqualsToken"] = 87] = "EqualsEqualsEqualsToken"; + SyntaxKind[SyntaxKind["ExclamationEqualsEqualsToken"] = 88] = "ExclamationEqualsEqualsToken"; + SyntaxKind[SyntaxKind["PlusToken"] = 89] = "PlusToken"; + SyntaxKind[SyntaxKind["MinusToken"] = 90] = "MinusToken"; + SyntaxKind[SyntaxKind["AsteriskToken"] = 91] = "AsteriskToken"; + SyntaxKind[SyntaxKind["PercentToken"] = 92] = "PercentToken"; + SyntaxKind[SyntaxKind["PlusPlusToken"] = 93] = "PlusPlusToken"; + SyntaxKind[SyntaxKind["MinusMinusToken"] = 94] = "MinusMinusToken"; + SyntaxKind[SyntaxKind["LessThanLessThanToken"] = 95] = "LessThanLessThanToken"; + SyntaxKind[SyntaxKind["GreaterThanGreaterThanToken"] = 96] = "GreaterThanGreaterThanToken"; + SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanToken"] = 97] = "GreaterThanGreaterThanGreaterThanToken"; + SyntaxKind[SyntaxKind["AmpersandToken"] = 98] = "AmpersandToken"; + SyntaxKind[SyntaxKind["BarToken"] = 99] = "BarToken"; + SyntaxKind[SyntaxKind["CaretToken"] = 100] = "CaretToken"; + SyntaxKind[SyntaxKind["ExclamationToken"] = 101] = "ExclamationToken"; + SyntaxKind[SyntaxKind["TildeToken"] = 102] = "TildeToken"; + SyntaxKind[SyntaxKind["AmpersandAmpersandToken"] = 103] = "AmpersandAmpersandToken"; + SyntaxKind[SyntaxKind["BarBarToken"] = 104] = "BarBarToken"; + SyntaxKind[SyntaxKind["QuestionToken"] = 105] = "QuestionToken"; + SyntaxKind[SyntaxKind["ColonToken"] = 106] = "ColonToken"; + SyntaxKind[SyntaxKind["EqualsToken"] = 107] = "EqualsToken"; + SyntaxKind[SyntaxKind["PlusEqualsToken"] = 108] = "PlusEqualsToken"; + SyntaxKind[SyntaxKind["MinusEqualsToken"] = 109] = "MinusEqualsToken"; + SyntaxKind[SyntaxKind["AsteriskEqualsToken"] = 110] = "AsteriskEqualsToken"; + SyntaxKind[SyntaxKind["PercentEqualsToken"] = 111] = "PercentEqualsToken"; + SyntaxKind[SyntaxKind["LessThanLessThanEqualsToken"] = 112] = "LessThanLessThanEqualsToken"; + SyntaxKind[SyntaxKind["GreaterThanGreaterThanEqualsToken"] = 113] = "GreaterThanGreaterThanEqualsToken"; + SyntaxKind[SyntaxKind["GreaterThanGreaterThanGreaterThanEqualsToken"] = 114] = "GreaterThanGreaterThanGreaterThanEqualsToken"; + SyntaxKind[SyntaxKind["AmpersandEqualsToken"] = 115] = "AmpersandEqualsToken"; + SyntaxKind[SyntaxKind["BarEqualsToken"] = 116] = "BarEqualsToken"; + SyntaxKind[SyntaxKind["CaretEqualsToken"] = 117] = "CaretEqualsToken"; + SyntaxKind[SyntaxKind["SlashToken"] = 118] = "SlashToken"; + SyntaxKind[SyntaxKind["SlashEqualsToken"] = 119] = "SlashEqualsToken"; + SyntaxKind[SyntaxKind["SourceUnit"] = 120] = "SourceUnit"; + SyntaxKind[SyntaxKind["QualifiedName"] = 121] = "QualifiedName"; + SyntaxKind[SyntaxKind["ObjectType"] = 122] = "ObjectType"; + SyntaxKind[SyntaxKind["FunctionType"] = 123] = "FunctionType"; + SyntaxKind[SyntaxKind["ArrayType"] = 124] = "ArrayType"; + SyntaxKind[SyntaxKind["ConstructorType"] = 125] = "ConstructorType"; + SyntaxKind[SyntaxKind["GenericType"] = 126] = "GenericType"; + SyntaxKind[SyntaxKind["TypeQuery"] = 127] = "TypeQuery"; + SyntaxKind[SyntaxKind["InterfaceDeclaration"] = 128] = "InterfaceDeclaration"; + SyntaxKind[SyntaxKind["FunctionDeclaration"] = 129] = "FunctionDeclaration"; + SyntaxKind[SyntaxKind["ModuleDeclaration"] = 130] = "ModuleDeclaration"; + SyntaxKind[SyntaxKind["ClassDeclaration"] = 131] = "ClassDeclaration"; + SyntaxKind[SyntaxKind["EnumDeclaration"] = 132] = "EnumDeclaration"; + SyntaxKind[SyntaxKind["ImportDeclaration"] = 133] = "ImportDeclaration"; + SyntaxKind[SyntaxKind["ExportAssignment"] = 134] = "ExportAssignment"; + SyntaxKind[SyntaxKind["MemberFunctionDeclaration"] = 135] = "MemberFunctionDeclaration"; + SyntaxKind[SyntaxKind["MemberVariableDeclaration"] = 136] = "MemberVariableDeclaration"; + SyntaxKind[SyntaxKind["ConstructorDeclaration"] = 137] = "ConstructorDeclaration"; + SyntaxKind[SyntaxKind["IndexMemberDeclaration"] = 138] = "IndexMemberDeclaration"; + SyntaxKind[SyntaxKind["GetAccessor"] = 139] = "GetAccessor"; + SyntaxKind[SyntaxKind["SetAccessor"] = 140] = "SetAccessor"; + SyntaxKind[SyntaxKind["PropertySignature"] = 141] = "PropertySignature"; + SyntaxKind[SyntaxKind["CallSignature"] = 142] = "CallSignature"; + SyntaxKind[SyntaxKind["ConstructSignature"] = 143] = "ConstructSignature"; + SyntaxKind[SyntaxKind["IndexSignature"] = 144] = "IndexSignature"; + SyntaxKind[SyntaxKind["MethodSignature"] = 145] = "MethodSignature"; + SyntaxKind[SyntaxKind["Block"] = 146] = "Block"; + SyntaxKind[SyntaxKind["IfStatement"] = 147] = "IfStatement"; + SyntaxKind[SyntaxKind["VariableStatement"] = 148] = "VariableStatement"; + SyntaxKind[SyntaxKind["ExpressionStatement"] = 149] = "ExpressionStatement"; + SyntaxKind[SyntaxKind["ReturnStatement"] = 150] = "ReturnStatement"; + SyntaxKind[SyntaxKind["SwitchStatement"] = 151] = "SwitchStatement"; + SyntaxKind[SyntaxKind["BreakStatement"] = 152] = "BreakStatement"; + SyntaxKind[SyntaxKind["ContinueStatement"] = 153] = "ContinueStatement"; + SyntaxKind[SyntaxKind["ForStatement"] = 154] = "ForStatement"; + SyntaxKind[SyntaxKind["ForInStatement"] = 155] = "ForInStatement"; + SyntaxKind[SyntaxKind["EmptyStatement"] = 156] = "EmptyStatement"; + SyntaxKind[SyntaxKind["ThrowStatement"] = 157] = "ThrowStatement"; + SyntaxKind[SyntaxKind["WhileStatement"] = 158] = "WhileStatement"; + SyntaxKind[SyntaxKind["TryStatement"] = 159] = "TryStatement"; + SyntaxKind[SyntaxKind["LabeledStatement"] = 160] = "LabeledStatement"; + SyntaxKind[SyntaxKind["DoStatement"] = 161] = "DoStatement"; + SyntaxKind[SyntaxKind["DebuggerStatement"] = 162] = "DebuggerStatement"; + SyntaxKind[SyntaxKind["WithStatement"] = 163] = "WithStatement"; + SyntaxKind[SyntaxKind["PlusExpression"] = 164] = "PlusExpression"; + SyntaxKind[SyntaxKind["NegateExpression"] = 165] = "NegateExpression"; + SyntaxKind[SyntaxKind["BitwiseNotExpression"] = 166] = "BitwiseNotExpression"; + SyntaxKind[SyntaxKind["LogicalNotExpression"] = 167] = "LogicalNotExpression"; + SyntaxKind[SyntaxKind["PreIncrementExpression"] = 168] = "PreIncrementExpression"; + SyntaxKind[SyntaxKind["PreDecrementExpression"] = 169] = "PreDecrementExpression"; + SyntaxKind[SyntaxKind["DeleteExpression"] = 170] = "DeleteExpression"; + SyntaxKind[SyntaxKind["TypeOfExpression"] = 171] = "TypeOfExpression"; + SyntaxKind[SyntaxKind["VoidExpression"] = 172] = "VoidExpression"; + SyntaxKind[SyntaxKind["CommaExpression"] = 173] = "CommaExpression"; + SyntaxKind[SyntaxKind["AssignmentExpression"] = 174] = "AssignmentExpression"; + SyntaxKind[SyntaxKind["AddAssignmentExpression"] = 175] = "AddAssignmentExpression"; + SyntaxKind[SyntaxKind["SubtractAssignmentExpression"] = 176] = "SubtractAssignmentExpression"; + SyntaxKind[SyntaxKind["MultiplyAssignmentExpression"] = 177] = "MultiplyAssignmentExpression"; + SyntaxKind[SyntaxKind["DivideAssignmentExpression"] = 178] = "DivideAssignmentExpression"; + SyntaxKind[SyntaxKind["ModuloAssignmentExpression"] = 179] = "ModuloAssignmentExpression"; + SyntaxKind[SyntaxKind["AndAssignmentExpression"] = 180] = "AndAssignmentExpression"; + SyntaxKind[SyntaxKind["ExclusiveOrAssignmentExpression"] = 181] = "ExclusiveOrAssignmentExpression"; + SyntaxKind[SyntaxKind["OrAssignmentExpression"] = 182] = "OrAssignmentExpression"; + SyntaxKind[SyntaxKind["LeftShiftAssignmentExpression"] = 183] = "LeftShiftAssignmentExpression"; + SyntaxKind[SyntaxKind["SignedRightShiftAssignmentExpression"] = 184] = "SignedRightShiftAssignmentExpression"; + SyntaxKind[SyntaxKind["UnsignedRightShiftAssignmentExpression"] = 185] = "UnsignedRightShiftAssignmentExpression"; + SyntaxKind[SyntaxKind["ConditionalExpression"] = 186] = "ConditionalExpression"; + SyntaxKind[SyntaxKind["LogicalOrExpression"] = 187] = "LogicalOrExpression"; + SyntaxKind[SyntaxKind["LogicalAndExpression"] = 188] = "LogicalAndExpression"; + SyntaxKind[SyntaxKind["BitwiseOrExpression"] = 189] = "BitwiseOrExpression"; + SyntaxKind[SyntaxKind["BitwiseExclusiveOrExpression"] = 190] = "BitwiseExclusiveOrExpression"; + SyntaxKind[SyntaxKind["BitwiseAndExpression"] = 191] = "BitwiseAndExpression"; + SyntaxKind[SyntaxKind["EqualsWithTypeConversionExpression"] = 192] = "EqualsWithTypeConversionExpression"; + SyntaxKind[SyntaxKind["NotEqualsWithTypeConversionExpression"] = 193] = "NotEqualsWithTypeConversionExpression"; + SyntaxKind[SyntaxKind["EqualsExpression"] = 194] = "EqualsExpression"; + SyntaxKind[SyntaxKind["NotEqualsExpression"] = 195] = "NotEqualsExpression"; + SyntaxKind[SyntaxKind["LessThanExpression"] = 196] = "LessThanExpression"; + SyntaxKind[SyntaxKind["GreaterThanExpression"] = 197] = "GreaterThanExpression"; + SyntaxKind[SyntaxKind["LessThanOrEqualExpression"] = 198] = "LessThanOrEqualExpression"; + SyntaxKind[SyntaxKind["GreaterThanOrEqualExpression"] = 199] = "GreaterThanOrEqualExpression"; + SyntaxKind[SyntaxKind["InstanceOfExpression"] = 200] = "InstanceOfExpression"; + SyntaxKind[SyntaxKind["InExpression"] = 201] = "InExpression"; + SyntaxKind[SyntaxKind["LeftShiftExpression"] = 202] = "LeftShiftExpression"; + SyntaxKind[SyntaxKind["SignedRightShiftExpression"] = 203] = "SignedRightShiftExpression"; + SyntaxKind[SyntaxKind["UnsignedRightShiftExpression"] = 204] = "UnsignedRightShiftExpression"; + SyntaxKind[SyntaxKind["MultiplyExpression"] = 205] = "MultiplyExpression"; + SyntaxKind[SyntaxKind["DivideExpression"] = 206] = "DivideExpression"; + SyntaxKind[SyntaxKind["ModuloExpression"] = 207] = "ModuloExpression"; + SyntaxKind[SyntaxKind["AddExpression"] = 208] = "AddExpression"; + SyntaxKind[SyntaxKind["SubtractExpression"] = 209] = "SubtractExpression"; + SyntaxKind[SyntaxKind["PostIncrementExpression"] = 210] = "PostIncrementExpression"; + SyntaxKind[SyntaxKind["PostDecrementExpression"] = 211] = "PostDecrementExpression"; + SyntaxKind[SyntaxKind["MemberAccessExpression"] = 212] = "MemberAccessExpression"; + SyntaxKind[SyntaxKind["InvocationExpression"] = 213] = "InvocationExpression"; + SyntaxKind[SyntaxKind["ArrayLiteralExpression"] = 214] = "ArrayLiteralExpression"; + SyntaxKind[SyntaxKind["ObjectLiteralExpression"] = 215] = "ObjectLiteralExpression"; + SyntaxKind[SyntaxKind["ObjectCreationExpression"] = 216] = "ObjectCreationExpression"; + SyntaxKind[SyntaxKind["ParenthesizedExpression"] = 217] = "ParenthesizedExpression"; + SyntaxKind[SyntaxKind["ParenthesizedArrowFunctionExpression"] = 218] = "ParenthesizedArrowFunctionExpression"; + SyntaxKind[SyntaxKind["SimpleArrowFunctionExpression"] = 219] = "SimpleArrowFunctionExpression"; + SyntaxKind[SyntaxKind["CastExpression"] = 220] = "CastExpression"; + SyntaxKind[SyntaxKind["ElementAccessExpression"] = 221] = "ElementAccessExpression"; + SyntaxKind[SyntaxKind["FunctionExpression"] = 222] = "FunctionExpression"; + SyntaxKind[SyntaxKind["OmittedExpression"] = 223] = "OmittedExpression"; + SyntaxKind[SyntaxKind["VariableDeclaration"] = 224] = "VariableDeclaration"; + SyntaxKind[SyntaxKind["VariableDeclarator"] = 225] = "VariableDeclarator"; + SyntaxKind[SyntaxKind["ArgumentList"] = 226] = "ArgumentList"; + SyntaxKind[SyntaxKind["ParameterList"] = 227] = "ParameterList"; + SyntaxKind[SyntaxKind["TypeArgumentList"] = 228] = "TypeArgumentList"; + SyntaxKind[SyntaxKind["TypeParameterList"] = 229] = "TypeParameterList"; + SyntaxKind[SyntaxKind["ExtendsHeritageClause"] = 230] = "ExtendsHeritageClause"; + SyntaxKind[SyntaxKind["ImplementsHeritageClause"] = 231] = "ImplementsHeritageClause"; + SyntaxKind[SyntaxKind["EqualsValueClause"] = 232] = "EqualsValueClause"; + SyntaxKind[SyntaxKind["CaseSwitchClause"] = 233] = "CaseSwitchClause"; + SyntaxKind[SyntaxKind["DefaultSwitchClause"] = 234] = "DefaultSwitchClause"; + SyntaxKind[SyntaxKind["ElseClause"] = 235] = "ElseClause"; + SyntaxKind[SyntaxKind["CatchClause"] = 236] = "CatchClause"; + SyntaxKind[SyntaxKind["FinallyClause"] = 237] = "FinallyClause"; + SyntaxKind[SyntaxKind["TypeParameter"] = 238] = "TypeParameter"; + SyntaxKind[SyntaxKind["Constraint"] = 239] = "Constraint"; + SyntaxKind[SyntaxKind["SimplePropertyAssignment"] = 240] = "SimplePropertyAssignment"; + SyntaxKind[SyntaxKind["FunctionPropertyAssignment"] = 241] = "FunctionPropertyAssignment"; + SyntaxKind[SyntaxKind["Parameter"] = 242] = "Parameter"; + SyntaxKind[SyntaxKind["EnumElement"] = 243] = "EnumElement"; + SyntaxKind[SyntaxKind["TypeAnnotation"] = 244] = "TypeAnnotation"; + SyntaxKind[SyntaxKind["ExternalModuleReference"] = 245] = "ExternalModuleReference"; + SyntaxKind[SyntaxKind["ModuleNameModuleReference"] = 246] = "ModuleNameModuleReference"; + SyntaxKind[SyntaxKind["FirstStandardKeyword"] = SyntaxKind.BreakKeyword] = "FirstStandardKeyword"; + SyntaxKind[SyntaxKind["LastStandardKeyword"] = SyntaxKind.WithKeyword] = "LastStandardKeyword"; + SyntaxKind[SyntaxKind["FirstFutureReservedKeyword"] = SyntaxKind.ClassKeyword] = "FirstFutureReservedKeyword"; + SyntaxKind[SyntaxKind["LastFutureReservedKeyword"] = SyntaxKind.SuperKeyword] = "LastFutureReservedKeyword"; + SyntaxKind[SyntaxKind["FirstFutureReservedStrictKeyword"] = SyntaxKind.ImplementsKeyword] = "FirstFutureReservedStrictKeyword"; + SyntaxKind[SyntaxKind["LastFutureReservedStrictKeyword"] = SyntaxKind.YieldKeyword] = "LastFutureReservedStrictKeyword"; + SyntaxKind[SyntaxKind["FirstTypeScriptKeyword"] = SyntaxKind.AnyKeyword] = "FirstTypeScriptKeyword"; + SyntaxKind[SyntaxKind["LastTypeScriptKeyword"] = SyntaxKind.StringKeyword] = "LastTypeScriptKeyword"; + SyntaxKind[SyntaxKind["FirstKeyword"] = SyntaxKind.FirstStandardKeyword] = "FirstKeyword"; + SyntaxKind[SyntaxKind["LastKeyword"] = SyntaxKind.LastTypeScriptKeyword] = "LastKeyword"; + SyntaxKind[SyntaxKind["FirstToken"] = SyntaxKind.ErrorToken] = "FirstToken"; + SyntaxKind[SyntaxKind["LastToken"] = SyntaxKind.SlashEqualsToken] = "LastToken"; + SyntaxKind[SyntaxKind["FirstPunctuation"] = SyntaxKind.OpenBraceToken] = "FirstPunctuation"; + SyntaxKind[SyntaxKind["LastPunctuation"] = SyntaxKind.SlashEqualsToken] = "LastPunctuation"; + SyntaxKind[SyntaxKind["FirstFixedWidth"] = SyntaxKind.FirstKeyword] = "FirstFixedWidth"; + SyntaxKind[SyntaxKind["LastFixedWidth"] = SyntaxKind.LastPunctuation] = "LastFixedWidth"; + SyntaxKind[SyntaxKind["FirstTrivia"] = SyntaxKind.WhitespaceTrivia] = "FirstTrivia"; + SyntaxKind[SyntaxKind["LastTrivia"] = SyntaxKind.SkippedTokenTrivia] = "LastTrivia"; + SyntaxKind[SyntaxKind["FirstNode"] = SyntaxKind.SourceUnit] = "FirstNode"; + SyntaxKind[SyntaxKind["LastNode"] = SyntaxKind.ModuleNameModuleReference] = "LastNode"; + })(TypeScript.SyntaxKind || (TypeScript.SyntaxKind = {})); + var SyntaxKind = TypeScript.SyntaxKind; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (SyntaxFacts) { + var textToKeywordKind = { + "any": 60 /* AnyKeyword */, + "boolean": 61 /* BooleanKeyword */, + "break": 15 /* BreakKeyword */, + "case": 16 /* CaseKeyword */, + "catch": 17 /* CatchKeyword */, + "class": 44 /* ClassKeyword */, + "continue": 18 /* ContinueKeyword */, + "const": 45 /* ConstKeyword */, + "constructor": 62 /* ConstructorKeyword */, + "debugger": 19 /* DebuggerKeyword */, + "declare": 63 /* DeclareKeyword */, + "default": 20 /* DefaultKeyword */, + "delete": 21 /* DeleteKeyword */, + "do": 22 /* DoKeyword */, + "else": 23 /* ElseKeyword */, + "enum": 46 /* EnumKeyword */, + "export": 47 /* ExportKeyword */, + "extends": 48 /* ExtendsKeyword */, + "false": 24 /* FalseKeyword */, + "finally": 25 /* FinallyKeyword */, + "for": 26 /* ForKeyword */, + "function": 27 /* FunctionKeyword */, + "get": 64 /* GetKeyword */, + "if": 28 /* IfKeyword */, + "implements": 51 /* ImplementsKeyword */, + "import": 49 /* ImportKeyword */, + "in": 29 /* InKeyword */, + "instanceof": 30 /* InstanceOfKeyword */, + "interface": 52 /* InterfaceKeyword */, + "let": 53 /* LetKeyword */, + "module": 65 /* ModuleKeyword */, + "new": 31 /* NewKeyword */, + "null": 32 /* NullKeyword */, + "number": 67 /* NumberKeyword */, + "package": 54 /* PackageKeyword */, + "private": 55 /* PrivateKeyword */, + "protected": 56 /* ProtectedKeyword */, + "public": 57 /* PublicKeyword */, + "require": 66 /* RequireKeyword */, + "return": 33 /* ReturnKeyword */, + "set": 68 /* SetKeyword */, + "static": 58 /* StaticKeyword */, + "string": 69 /* StringKeyword */, + "super": 50 /* SuperKeyword */, + "switch": 34 /* SwitchKeyword */, + "this": 35 /* ThisKeyword */, + "throw": 36 /* ThrowKeyword */, + "true": 37 /* TrueKeyword */, + "try": 38 /* TryKeyword */, + "typeof": 39 /* TypeOfKeyword */, + "var": 40 /* VarKeyword */, + "void": 41 /* VoidKeyword */, + "while": 42 /* WhileKeyword */, + "with": 43 /* WithKeyword */, + "yield": 59 /* YieldKeyword */, + "{": 70 /* OpenBraceToken */, + "}": 71 /* CloseBraceToken */, + "(": 72 /* OpenParenToken */, + ")": 73 /* CloseParenToken */, + "[": 74 /* OpenBracketToken */, + "]": 75 /* CloseBracketToken */, + ".": 76 /* DotToken */, + "...": 77 /* DotDotDotToken */, + ";": 78 /* SemicolonToken */, + ",": 79 /* CommaToken */, + "<": 80 /* LessThanToken */, + ">": 81 /* GreaterThanToken */, + "<=": 82 /* LessThanEqualsToken */, + ">=": 83 /* GreaterThanEqualsToken */, + "==": 84 /* EqualsEqualsToken */, + "=>": 85 /* EqualsGreaterThanToken */, + "!=": 86 /* ExclamationEqualsToken */, + "===": 87 /* EqualsEqualsEqualsToken */, + "!==": 88 /* ExclamationEqualsEqualsToken */, + "+": 89 /* PlusToken */, + "-": 90 /* MinusToken */, + "*": 91 /* AsteriskToken */, + "%": 92 /* PercentToken */, + "++": 93 /* PlusPlusToken */, + "--": 94 /* MinusMinusToken */, + "<<": 95 /* LessThanLessThanToken */, + ">>": 96 /* GreaterThanGreaterThanToken */, + ">>>": 97 /* GreaterThanGreaterThanGreaterThanToken */, + "&": 98 /* AmpersandToken */, + "|": 99 /* BarToken */, + "^": 100 /* CaretToken */, + "!": 101 /* ExclamationToken */, + "~": 102 /* TildeToken */, + "&&": 103 /* AmpersandAmpersandToken */, + "||": 104 /* BarBarToken */, + "?": 105 /* QuestionToken */, + ":": 106 /* ColonToken */, + "=": 107 /* EqualsToken */, + "+=": 108 /* PlusEqualsToken */, + "-=": 109 /* MinusEqualsToken */, + "*=": 110 /* AsteriskEqualsToken */, + "%=": 111 /* PercentEqualsToken */, + "<<=": 112 /* LessThanLessThanEqualsToken */, + ">>=": 113 /* GreaterThanGreaterThanEqualsToken */, + ">>>=": 114 /* GreaterThanGreaterThanGreaterThanEqualsToken */, + "&=": 115 /* AmpersandEqualsToken */, + "|=": 116 /* BarEqualsToken */, + "^=": 117 /* CaretEqualsToken */, + "/": 118 /* SlashToken */, + "/=": 119 /* SlashEqualsToken */ + }; + var kindToText = new Array(); + for (var name in textToKeywordKind) { + if (textToKeywordKind.hasOwnProperty(name)) { + kindToText[textToKeywordKind[name]] = name; + } + } + kindToText[62 /* ConstructorKeyword */] = "constructor"; + function getTokenKind(text) { + if (textToKeywordKind.hasOwnProperty(text)) { + return textToKeywordKind[text]; + } + return 0 /* None */; + } + SyntaxFacts.getTokenKind = getTokenKind; + function getText(kind) { + var result = kindToText[kind]; + return result !== undefined ? result : null; + } + SyntaxFacts.getText = getText; + function isAnyKeyword(kind) { + return kind >= TypeScript.SyntaxKind.FirstKeyword && kind <= TypeScript.SyntaxKind.LastKeyword; + } + SyntaxFacts.isAnyKeyword = isAnyKeyword; + function isAnyPunctuation(kind) { + return kind >= TypeScript.SyntaxKind.FirstPunctuation && kind <= TypeScript.SyntaxKind.LastPunctuation; + } + SyntaxFacts.isAnyPunctuation = isAnyPunctuation; + function isPrefixUnaryExpressionOperatorToken(tokenKind) { + return getPrefixUnaryExpressionFromOperatorToken(tokenKind) !== 0 /* None */; + } + SyntaxFacts.isPrefixUnaryExpressionOperatorToken = isPrefixUnaryExpressionOperatorToken; + function isBinaryExpressionOperatorToken(tokenKind) { + return getBinaryExpressionFromOperatorToken(tokenKind) !== 0 /* None */; + } + SyntaxFacts.isBinaryExpressionOperatorToken = isBinaryExpressionOperatorToken; + function getPrefixUnaryExpressionFromOperatorToken(tokenKind) { + switch (tokenKind) { + case 89 /* PlusToken */: + return 164 /* PlusExpression */; + case 90 /* MinusToken */: + return 165 /* NegateExpression */; + case 102 /* TildeToken */: + return 166 /* BitwiseNotExpression */; + case 101 /* ExclamationToken */: + return 167 /* LogicalNotExpression */; + case 93 /* PlusPlusToken */: + return 168 /* PreIncrementExpression */; + case 94 /* MinusMinusToken */: + return 169 /* PreDecrementExpression */; + default: + return 0 /* None */; + } + } + SyntaxFacts.getPrefixUnaryExpressionFromOperatorToken = getPrefixUnaryExpressionFromOperatorToken; + function getPostfixUnaryExpressionFromOperatorToken(tokenKind) { + switch (tokenKind) { + case 93 /* PlusPlusToken */: + return 210 /* PostIncrementExpression */; + case 94 /* MinusMinusToken */: + return 211 /* PostDecrementExpression */; + default: + return 0 /* None */; + } + } + SyntaxFacts.getPostfixUnaryExpressionFromOperatorToken = getPostfixUnaryExpressionFromOperatorToken; + function getBinaryExpressionFromOperatorToken(tokenKind) { + switch (tokenKind) { + case 91 /* AsteriskToken */: + return 205 /* MultiplyExpression */; + case 118 /* SlashToken */: + return 206 /* DivideExpression */; + case 92 /* PercentToken */: + return 207 /* ModuloExpression */; + case 89 /* PlusToken */: + return 208 /* AddExpression */; + case 90 /* MinusToken */: + return 209 /* SubtractExpression */; + case 95 /* LessThanLessThanToken */: + return 202 /* LeftShiftExpression */; + case 96 /* GreaterThanGreaterThanToken */: + return 203 /* SignedRightShiftExpression */; + case 97 /* GreaterThanGreaterThanGreaterThanToken */: + return 204 /* UnsignedRightShiftExpression */; + case 80 /* LessThanToken */: + return 196 /* LessThanExpression */; + case 81 /* GreaterThanToken */: + return 197 /* GreaterThanExpression */; + case 82 /* LessThanEqualsToken */: + return 198 /* LessThanOrEqualExpression */; + case 83 /* GreaterThanEqualsToken */: + return 199 /* GreaterThanOrEqualExpression */; + case 30 /* InstanceOfKeyword */: + return 200 /* InstanceOfExpression */; + case 29 /* InKeyword */: + return 201 /* InExpression */; + case 84 /* EqualsEqualsToken */: + return 192 /* EqualsWithTypeConversionExpression */; + case 86 /* ExclamationEqualsToken */: + return 193 /* NotEqualsWithTypeConversionExpression */; + case 87 /* EqualsEqualsEqualsToken */: + return 194 /* EqualsExpression */; + case 88 /* ExclamationEqualsEqualsToken */: + return 195 /* NotEqualsExpression */; + case 98 /* AmpersandToken */: + return 191 /* BitwiseAndExpression */; + case 100 /* CaretToken */: + return 190 /* BitwiseExclusiveOrExpression */; + case 99 /* BarToken */: + return 189 /* BitwiseOrExpression */; + case 103 /* AmpersandAmpersandToken */: + return 188 /* LogicalAndExpression */; + case 104 /* BarBarToken */: + return 187 /* LogicalOrExpression */; + case 116 /* BarEqualsToken */: + return 182 /* OrAssignmentExpression */; + case 115 /* AmpersandEqualsToken */: + return 180 /* AndAssignmentExpression */; + case 117 /* CaretEqualsToken */: + return 181 /* ExclusiveOrAssignmentExpression */; + case 112 /* LessThanLessThanEqualsToken */: + return 183 /* LeftShiftAssignmentExpression */; + case 113 /* GreaterThanGreaterThanEqualsToken */: + return 184 /* SignedRightShiftAssignmentExpression */; + case 114 /* GreaterThanGreaterThanGreaterThanEqualsToken */: + return 185 /* UnsignedRightShiftAssignmentExpression */; + case 108 /* PlusEqualsToken */: + return 175 /* AddAssignmentExpression */; + case 109 /* MinusEqualsToken */: + return 176 /* SubtractAssignmentExpression */; + case 110 /* AsteriskEqualsToken */: + return 177 /* MultiplyAssignmentExpression */; + case 119 /* SlashEqualsToken */: + return 178 /* DivideAssignmentExpression */; + case 111 /* PercentEqualsToken */: + return 179 /* ModuloAssignmentExpression */; + case 107 /* EqualsToken */: + return 174 /* AssignmentExpression */; + case 79 /* CommaToken */: + return 173 /* CommaExpression */; + default: + return 0 /* None */; + } + } + SyntaxFacts.getBinaryExpressionFromOperatorToken = getBinaryExpressionFromOperatorToken; + function getOperatorTokenFromBinaryExpression(tokenKind) { + switch (tokenKind) { + case 205 /* MultiplyExpression */: + return 91 /* AsteriskToken */; + case 206 /* DivideExpression */: + return 118 /* SlashToken */; + case 207 /* ModuloExpression */: + return 92 /* PercentToken */; + case 208 /* AddExpression */: + return 89 /* PlusToken */; + case 209 /* SubtractExpression */: + return 90 /* MinusToken */; + case 202 /* LeftShiftExpression */: + return 95 /* LessThanLessThanToken */; + case 203 /* SignedRightShiftExpression */: + return 96 /* GreaterThanGreaterThanToken */; + case 204 /* UnsignedRightShiftExpression */: + return 97 /* GreaterThanGreaterThanGreaterThanToken */; + case 196 /* LessThanExpression */: + return 80 /* LessThanToken */; + case 197 /* GreaterThanExpression */: + return 81 /* GreaterThanToken */; + case 198 /* LessThanOrEqualExpression */: + return 82 /* LessThanEqualsToken */; + case 199 /* GreaterThanOrEqualExpression */: + return 83 /* GreaterThanEqualsToken */; + case 200 /* InstanceOfExpression */: + return 30 /* InstanceOfKeyword */; + case 201 /* InExpression */: + return 29 /* InKeyword */; + case 192 /* EqualsWithTypeConversionExpression */: + return 84 /* EqualsEqualsToken */; + case 193 /* NotEqualsWithTypeConversionExpression */: + return 86 /* ExclamationEqualsToken */; + case 194 /* EqualsExpression */: + return 87 /* EqualsEqualsEqualsToken */; + case 195 /* NotEqualsExpression */: + return 88 /* ExclamationEqualsEqualsToken */; + case 191 /* BitwiseAndExpression */: + return 98 /* AmpersandToken */; + case 190 /* BitwiseExclusiveOrExpression */: + return 100 /* CaretToken */; + case 189 /* BitwiseOrExpression */: + return 99 /* BarToken */; + case 188 /* LogicalAndExpression */: + return 103 /* AmpersandAmpersandToken */; + case 187 /* LogicalOrExpression */: + return 104 /* BarBarToken */; + case 182 /* OrAssignmentExpression */: + return 116 /* BarEqualsToken */; + case 180 /* AndAssignmentExpression */: + return 115 /* AmpersandEqualsToken */; + case 181 /* ExclusiveOrAssignmentExpression */: + return 117 /* CaretEqualsToken */; + case 183 /* LeftShiftAssignmentExpression */: + return 112 /* LessThanLessThanEqualsToken */; + case 184 /* SignedRightShiftAssignmentExpression */: + return 113 /* GreaterThanGreaterThanEqualsToken */; + case 185 /* UnsignedRightShiftAssignmentExpression */: + return 114 /* GreaterThanGreaterThanGreaterThanEqualsToken */; + case 175 /* AddAssignmentExpression */: + return 108 /* PlusEqualsToken */; + case 176 /* SubtractAssignmentExpression */: + return 109 /* MinusEqualsToken */; + case 177 /* MultiplyAssignmentExpression */: + return 110 /* AsteriskEqualsToken */; + case 178 /* DivideAssignmentExpression */: + return 119 /* SlashEqualsToken */; + case 179 /* ModuloAssignmentExpression */: + return 111 /* PercentEqualsToken */; + case 174 /* AssignmentExpression */: + return 107 /* EqualsToken */; + case 173 /* CommaExpression */: + return 79 /* CommaToken */; + default: + return 0 /* None */; + } + } + SyntaxFacts.getOperatorTokenFromBinaryExpression = getOperatorTokenFromBinaryExpression; + function isAssignmentOperatorToken(tokenKind) { + switch (tokenKind) { + case 116 /* BarEqualsToken */: + case 115 /* AmpersandEqualsToken */: + case 117 /* CaretEqualsToken */: + case 112 /* LessThanLessThanEqualsToken */: + case 113 /* GreaterThanGreaterThanEqualsToken */: + case 114 /* GreaterThanGreaterThanGreaterThanEqualsToken */: + case 108 /* PlusEqualsToken */: + case 109 /* MinusEqualsToken */: + case 110 /* AsteriskEqualsToken */: + case 119 /* SlashEqualsToken */: + case 111 /* PercentEqualsToken */: + case 107 /* EqualsToken */: + return true; + default: + return false; + } + } + SyntaxFacts.isAssignmentOperatorToken = isAssignmentOperatorToken; + function isType(kind) { + switch (kind) { + case 124 /* ArrayType */: + case 60 /* AnyKeyword */: + case 67 /* NumberKeyword */: + case 61 /* BooleanKeyword */: + case 69 /* StringKeyword */: + case 41 /* VoidKeyword */: + case 123 /* FunctionType */: + case 122 /* ObjectType */: + case 125 /* ConstructorType */: + case 127 /* TypeQuery */: + case 126 /* GenericType */: + case 121 /* QualifiedName */: + case 11 /* IdentifierName */: + return true; + } + return false; + } + SyntaxFacts.isType = isType; + })(TypeScript.SyntaxFacts || (TypeScript.SyntaxFacts = {})); + var SyntaxFacts = TypeScript.SyntaxFacts; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Scanner) { + TypeScript.Debug.assert(TypeScript.SyntaxKind.LastToken <= 127); + var ScannerConstants; + (function (ScannerConstants) { + ScannerConstants[ScannerConstants["LargeTokenFullStartShift"] = 2] = "LargeTokenFullStartShift"; + ScannerConstants[ScannerConstants["LargeTokenFullWidthShift"] = 7] = "LargeTokenFullWidthShift"; + ScannerConstants[ScannerConstants["FixedWidthTokenFullStartShift"] = 7] = "FixedWidthTokenFullStartShift"; + ScannerConstants[ScannerConstants["SmallTokenFullWidthShift"] = 7] = "SmallTokenFullWidthShift"; + ScannerConstants[ScannerConstants["SmallTokenFullStartShift"] = 12] = "SmallTokenFullStartShift"; + ScannerConstants[ScannerConstants["KindMask"] = 0x7F] = "KindMask"; + ScannerConstants[ScannerConstants["IsVariableWidthMask"] = 0x80] = "IsVariableWidthMask"; + ScannerConstants[ScannerConstants["LargeTokenLeadingTriviaBitMask"] = 0x01] = "LargeTokenLeadingTriviaBitMask"; + ScannerConstants[ScannerConstants["LargeTokenTrailingTriviaBitMask"] = 0x02] = "LargeTokenTrailingTriviaBitMask"; + ScannerConstants[ScannerConstants["SmallTokenFullWidthMask"] = 0x1F] = "SmallTokenFullWidthMask"; + ScannerConstants[ScannerConstants["FixedWidthTokenMaxFullStart"] = 0x7FFFFF] = "FixedWidthTokenMaxFullStart"; + ScannerConstants[ScannerConstants["SmallTokenMaxFullStart"] = 0x3FFFF] = "SmallTokenMaxFullStart"; + ScannerConstants[ScannerConstants["SmallTokenMaxFullWidth"] = 0x1F] = "SmallTokenMaxFullWidth"; + })(ScannerConstants || (ScannerConstants = {})); + TypeScript.Debug.assert(largeTokenUnpackFullStart(largeTokenPackFullStartAndInfo(1 << 28, 1, 1)) === (1 << 28)); + TypeScript.Debug.assert(largeTokenUnpackFullStart(largeTokenPackFullStartAndInfo(3 << 27, 0, 1)) === (3 << 27)); + TypeScript.Debug.assert(largeTokenUnpackFullStart(largeTokenPackFullStartAndInfo(10 << 25, 1, 0)) === (10 << 25)); + function fixedWidthTokenPackData(fullStart, kind) { + return (fullStart << 7 /* FixedWidthTokenFullStartShift */) | kind; + } + function fixedWidthTokenUnpackFullStart(packedData) { + return packedData >> 7 /* FixedWidthTokenFullStartShift */; + } + function smallTokenPackData(fullStart, fullWidth, kind) { + return (fullStart << 12 /* SmallTokenFullStartShift */) | (fullWidth << 7 /* SmallTokenFullWidthShift */) | kind; + } + function smallTokenUnpackFullWidth(packedData) { + return (packedData >> 7 /* SmallTokenFullWidthShift */) & 31 /* SmallTokenFullWidthMask */; + } + function smallTokenUnpackFullStart(packedData) { + return packedData >> 12 /* SmallTokenFullStartShift */; + } + function largeTokenPackFullStartAndInfo(fullStart, hasLeadingTriviaInfo, hasTrailingTriviaInfo) { + return (fullStart << 2 /* LargeTokenFullStartShift */) | hasLeadingTriviaInfo | hasTrailingTriviaInfo; + } + function largeTokenUnpackFullWidth(packedFullWidthAndKind) { + return packedFullWidthAndKind >> 7 /* LargeTokenFullWidthShift */; + } + function largeTokenUnpackFullStart(packedFullStartAndInfo) { + return packedFullStartAndInfo >> 2 /* LargeTokenFullStartShift */; + } + function largeTokenUnpackHasLeadingTriviaInfo(packed) { + return packed & 1 /* LargeTokenLeadingTriviaBitMask */; + } + function largeTokenUnpackHasTrailingTriviaInfo(packed) { + return packed & 2 /* LargeTokenTrailingTriviaBitMask */; + } + var isKeywordStartCharacter = TypeScript.ArrayUtilities.createArray(127 /* maxAsciiCharacter */, 0); + var isIdentifierStartCharacter = TypeScript.ArrayUtilities.createArray(127 /* maxAsciiCharacter */, false); + var isIdentifierPartCharacter = TypeScript.ArrayUtilities.createArray(127 /* maxAsciiCharacter */, false); + for (var character = 0; character < 127 /* maxAsciiCharacter */; character++) { + if ((character >= 97 /* a */ && character <= 122 /* z */) || (character >= 65 /* A */ && character <= 90 /* Z */) || character === 95 /* _ */ || character === 36 /* $ */) { + isIdentifierStartCharacter[character] = true; + isIdentifierPartCharacter[character] = true; + } + else if (character >= 48 /* _0 */ && character <= 57 /* _9 */) { + isIdentifierPartCharacter[character] = true; + } + } + for (var keywordKind = TypeScript.SyntaxKind.FirstKeyword; keywordKind <= TypeScript.SyntaxKind.LastKeyword; keywordKind++) { + var keyword = TypeScript.SyntaxFacts.getText(keywordKind); + isKeywordStartCharacter[keyword.charCodeAt(0)] = 1; + } + function isContextualToken(token) { + switch (token.kind()) { + case 12 /* RegularExpressionLiteral */: + case 96 /* GreaterThanGreaterThanToken */: + case 97 /* GreaterThanGreaterThanGreaterThanToken */: + case 83 /* GreaterThanEqualsToken */: + case 113 /* GreaterThanGreaterThanEqualsToken */: + case 114 /* GreaterThanGreaterThanGreaterThanEqualsToken */: + return true; + default: + return token.isKeywordConvertedToIdentifier(); + } + } + Scanner.isContextualToken = isContextualToken; + var lastTokenInfo = { leadingTriviaWidth: -1, width: -1 }; + var lastTokenInfoTokenID = -1; + var triviaScanner = createScannerInternal(1 /* ES5 */, TypeScript.SimpleText.fromString(""), function () { + }); + function fillSizeInfo(token, text) { + if (lastTokenInfoTokenID !== TypeScript.syntaxID(token)) { + triviaScanner.fillTokenInfo(token, text, lastTokenInfo); + lastTokenInfoTokenID = TypeScript.syntaxID(token); + } + } + function fullText(token, text) { + return text.substr(token.fullStart(), token.fullWidth()); + } + function leadingTrivia(token, text) { + if (!token.hasLeadingTrivia()) { + return TypeScript.Syntax.emptyTriviaList; + } + return triviaScanner.scanTrivia(token, text, false); + } + function trailingTrivia(token, text) { + if (!token.hasTrailingTrivia()) { + return TypeScript.Syntax.emptyTriviaList; + } + return triviaScanner.scanTrivia(token, text, true); + } + function leadingTriviaWidth(token, text) { + if (!token.hasLeadingTrivia()) { + return 0; + } + fillSizeInfo(token, text); + return lastTokenInfo.leadingTriviaWidth; + } + function trailingTriviaWidth(token, text) { + if (!token.hasTrailingTrivia()) { + return 0; + } + fillSizeInfo(token, text); + return token.fullWidth() - lastTokenInfo.leadingTriviaWidth - lastTokenInfo.width; + } + function tokenIsIncrementallyUnusable(token) { + return false; + } + var FixedWidthTokenWithNoTrivia = (function () { + function FixedWidthTokenWithNoTrivia(_packedData) { + this._packedData = _packedData; + } + FixedWidthTokenWithNoTrivia.prototype.setFullStart = function (fullStart) { + this._packedData = fixedWidthTokenPackData(fullStart, this.kind()); + }; + FixedWidthTokenWithNoTrivia.prototype.isIncrementallyUnusable = function () { + return false; + }; + FixedWidthTokenWithNoTrivia.prototype.isKeywordConvertedToIdentifier = function () { + return false; + }; + FixedWidthTokenWithNoTrivia.prototype.hasSkippedToken = function () { + return false; + }; + FixedWidthTokenWithNoTrivia.prototype.fullText = function () { + return TypeScript.SyntaxFacts.getText(this.kind()); + }; + FixedWidthTokenWithNoTrivia.prototype.text = function () { + return this.fullText(); + }; + FixedWidthTokenWithNoTrivia.prototype.leadingTrivia = function () { + return TypeScript.Syntax.emptyTriviaList; + }; + FixedWidthTokenWithNoTrivia.prototype.trailingTrivia = function () { + return TypeScript.Syntax.emptyTriviaList; + }; + FixedWidthTokenWithNoTrivia.prototype.leadingTriviaWidth = function () { + return 0; + }; + FixedWidthTokenWithNoTrivia.prototype.trailingTriviaWidth = function () { + return 0; + }; + FixedWidthTokenWithNoTrivia.prototype.kind = function () { + return this._packedData & 127 /* KindMask */; + }; + FixedWidthTokenWithNoTrivia.prototype.fullWidth = function () { + return this.fullText().length; + }; + FixedWidthTokenWithNoTrivia.prototype.fullStart = function () { + return fixedWidthTokenUnpackFullStart(this._packedData); + }; + FixedWidthTokenWithNoTrivia.prototype.hasLeadingTrivia = function () { + return false; + }; + FixedWidthTokenWithNoTrivia.prototype.hasTrailingTrivia = function () { + return false; + }; + FixedWidthTokenWithNoTrivia.prototype.clone = function () { + return new FixedWidthTokenWithNoTrivia(this._packedData); + }; + return FixedWidthTokenWithNoTrivia; + })(); + var LargeScannerToken = (function () { + function LargeScannerToken(_packedFullStartAndInfo, _packedFullWidthAndKind, cachedText) { + this._packedFullStartAndInfo = _packedFullStartAndInfo; + this._packedFullWidthAndKind = _packedFullWidthAndKind; + if (cachedText !== undefined) { + this.cachedText = cachedText; + } + } + LargeScannerToken.prototype.setFullStart = function (fullStart) { + this._packedFullStartAndInfo = largeTokenPackFullStartAndInfo(fullStart, largeTokenUnpackHasLeadingTriviaInfo(this._packedFullStartAndInfo), largeTokenUnpackHasTrailingTriviaInfo(this._packedFullStartAndInfo)); + }; + LargeScannerToken.prototype.syntaxTreeText = function (text) { + var result = text || TypeScript.syntaxTree(this).text; + TypeScript.Debug.assert(result); + return result; + }; + LargeScannerToken.prototype.isIncrementallyUnusable = function () { + return tokenIsIncrementallyUnusable(this); + }; + LargeScannerToken.prototype.isKeywordConvertedToIdentifier = function () { + return false; + }; + LargeScannerToken.prototype.hasSkippedToken = function () { + return false; + }; + LargeScannerToken.prototype.fullText = function (text) { + return fullText(this, this.syntaxTreeText(text)); + }; + LargeScannerToken.prototype.text = function () { + var cachedText = this.cachedText; + return cachedText !== undefined ? cachedText : TypeScript.SyntaxFacts.getText(this.kind()); + }; + LargeScannerToken.prototype.leadingTrivia = function (text) { + return leadingTrivia(this, this.syntaxTreeText(text)); + }; + LargeScannerToken.prototype.trailingTrivia = function (text) { + return trailingTrivia(this, this.syntaxTreeText(text)); + }; + LargeScannerToken.prototype.leadingTriviaWidth = function (text) { + return leadingTriviaWidth(this, this.syntaxTreeText(text)); + }; + LargeScannerToken.prototype.trailingTriviaWidth = function (text) { + return trailingTriviaWidth(this, this.syntaxTreeText(text)); + }; + LargeScannerToken.prototype.kind = function () { + return this._packedFullWidthAndKind & 127 /* KindMask */; + }; + LargeScannerToken.prototype.fullWidth = function () { + return largeTokenUnpackFullWidth(this._packedFullWidthAndKind); + }; + LargeScannerToken.prototype.fullStart = function () { + return largeTokenUnpackFullStart(this._packedFullStartAndInfo); + }; + LargeScannerToken.prototype.hasLeadingTrivia = function () { + return largeTokenUnpackHasLeadingTriviaInfo(this._packedFullStartAndInfo) !== 0; + }; + LargeScannerToken.prototype.hasTrailingTrivia = function () { + return largeTokenUnpackHasTrailingTriviaInfo(this._packedFullStartAndInfo) !== 0; + }; + LargeScannerToken.prototype.clone = function () { + return new LargeScannerToken(this._packedFullStartAndInfo, this._packedFullWidthAndKind, this.cachedText); + }; + return LargeScannerToken; + })(); + function createScanner(languageVersion, text, reportDiagnostic) { + var scanner = createScannerInternal(languageVersion, text, reportDiagnostic); + return { + setIndex: scanner.setIndex, + scan: scanner.scan + }; + } + Scanner.createScanner = createScanner; + function createScannerInternal(languageVersion, text, reportDiagnostic) { + var str; + var index; + var start; + var end; + function setIndex(_index) { + index = _index; + } + function reset(_text, _start, _end) { + TypeScript.Debug.assert(_start <= _text.length()); + TypeScript.Debug.assert(_end <= _text.length()); + if (!str || text !== _text) { + text = _text; + str = _text.substr(0, _text.length()); + } + start = _start; + end = _end; + index = _start; + } + function scan(allowContextualToken) { + var fullStart = index; + var leadingTriviaInfo = scanTriviaInfo(false); + var start = index; + var kindAndIsVariableWidth = scanSyntaxKind(allowContextualToken); + var end = index; + var trailingTriviaInfo = scanTriviaInfo(true); + var fullWidth = index - fullStart; + var kind = kindAndIsVariableWidth & 127 /* KindMask */; + var isFixedWidth = kind >= TypeScript.SyntaxKind.FirstFixedWidth && kind <= TypeScript.SyntaxKind.LastFixedWidth && ((kindAndIsVariableWidth & 128 /* IsVariableWidthMask */) === 0); + if (isFixedWidth && leadingTriviaInfo === 0 && trailingTriviaInfo === 0 && fullStart <= 8388607 /* FixedWidthTokenMaxFullStart */ && (kindAndIsVariableWidth & 128 /* IsVariableWidthMask */) === 0) { + return new FixedWidthTokenWithNoTrivia((fullStart << 7 /* FixedWidthTokenFullStartShift */) | kind); + } + else { + var packedFullStartAndTriviaInfo = (fullStart << 2 /* LargeTokenFullStartShift */) | leadingTriviaInfo | (trailingTriviaInfo << 1); + var packedFullWidthAndKind = (fullWidth << 7 /* LargeTokenFullWidthShift */) | kind; + var cachedText = isFixedWidth ? undefined : text.substr(start, end - start); + return new LargeScannerToken(packedFullStartAndTriviaInfo, packedFullWidthAndKind, cachedText); + } + } + function scanTrivia(parent, text, isTrailing) { + var tokenFullStart = parent.fullStart(); + var tokenStart = tokenFullStart + leadingTriviaWidth(parent, text); + if (isTrailing) { + reset(text, tokenStart + parent.text().length, tokenFullStart + parent.fullWidth()); + } + else { + reset(text, tokenFullStart, tokenStart); + } + var trivia = []; + while (true) { + if (index < end) { + var ch = str.charCodeAt(index); + switch (ch) { + case 32 /* space */: + case 160 /* nonBreakingSpace */: + case 8192 /* enQuad */: + case 8193 /* emQuad */: + case 8194 /* enSpace */: + case 8195 /* emSpace */: + case 8196 /* threePerEmSpace */: + case 8197 /* fourPerEmSpace */: + case 8198 /* sixPerEmSpace */: + case 8199 /* figureSpace */: + case 8200 /* punctuationSpace */: + case 8201 /* thinSpace */: + case 8202 /* hairSpace */: + case 8203 /* zeroWidthSpace */: + case 8239 /* narrowNoBreakSpace */: + case 12288 /* ideographicSpace */: + case 9 /* tab */: + case 11 /* verticalTab */: + case 12 /* formFeed */: + case 65279 /* byteOrderMark */: + trivia.push(scanWhitespaceTrivia()); + continue; + case 47 /* slash */: + var ch2 = str.charCodeAt(index + 1); + if (ch2 === 47 /* slash */) { + trivia.push(scanSingleLineCommentTrivia()); + continue; + } + if (ch2 === 42 /* asterisk */) { + trivia.push(scanMultiLineCommentTrivia()); + continue; + } + throw TypeScript.Errors.invalidOperation(); + case 13 /* carriageReturn */: + case 10 /* lineFeed */: + case 8233 /* paragraphSeparator */: + case 8232 /* lineSeparator */: + trivia.push(scanLineTerminatorSequenceTrivia(ch)); + if (!isTrailing) { + continue; + } + break; + default: + throw TypeScript.Errors.invalidOperation(); + } + } + var triviaList = TypeScript.Syntax.triviaList(trivia); + triviaList.parent = parent; + return triviaList; + } + } + function scanTriviaInfo(isTrailing) { + var result = 0; + var _end = end; + while (index < _end) { + var ch = str.charCodeAt(index); + switch (ch) { + case 9 /* tab */: + case 32 /* space */: + case 11 /* verticalTab */: + case 12 /* formFeed */: + index++; + result = 1; + continue; + case 13 /* carriageReturn */: + if ((index + 1) < end && str.charCodeAt(index + 1) === 10 /* lineFeed */) { + index++; + } + case 10 /* lineFeed */: + index++; + if (isTrailing) { + return 1; + } + result = 1; + continue; + case 47 /* slash */: + if ((index + 1) < _end) { + var ch2 = str.charCodeAt(index + 1); + if (ch2 === 47 /* slash */) { + result = 1; + skipSingleLineCommentTrivia(); + continue; + } + if (ch2 === 42 /* asterisk */) { + result = 1; + skipMultiLineCommentTrivia(); + continue; + } + } + return result; + default: + if (ch > 127 /* maxAsciiCharacter */ && slowScanTriviaInfo(ch)) { + result = 1; + continue; + } + return result; + } + } + return result; + } + function slowScanTriviaInfo(ch) { + switch (ch) { + case 160 /* nonBreakingSpace */: + case 8192 /* enQuad */: + case 8193 /* emQuad */: + case 8194 /* enSpace */: + case 8195 /* emSpace */: + case 8196 /* threePerEmSpace */: + case 8197 /* fourPerEmSpace */: + case 8198 /* sixPerEmSpace */: + case 8199 /* figureSpace */: + case 8200 /* punctuationSpace */: + case 8201 /* thinSpace */: + case 8202 /* hairSpace */: + case 8203 /* zeroWidthSpace */: + case 8239 /* narrowNoBreakSpace */: + case 12288 /* ideographicSpace */: + case 65279 /* byteOrderMark */: + case 8233 /* paragraphSeparator */: + case 8232 /* lineSeparator */: + index++; + return true; + default: + return false; + } + } + function isNewLineCharacter(ch) { + switch (ch) { + case 13 /* carriageReturn */: + case 10 /* lineFeed */: + case 8233 /* paragraphSeparator */: + case 8232 /* lineSeparator */: + return true; + default: + return false; + } + } + function scanWhitespaceTrivia() { + var absoluteStartIndex = index; + while (true) { + var ch = str.charCodeAt(index); + switch (ch) { + case 32 /* space */: + case 160 /* nonBreakingSpace */: + case 8192 /* enQuad */: + case 8193 /* emQuad */: + case 8194 /* enSpace */: + case 8195 /* emSpace */: + case 8196 /* threePerEmSpace */: + case 8197 /* fourPerEmSpace */: + case 8198 /* sixPerEmSpace */: + case 8199 /* figureSpace */: + case 8200 /* punctuationSpace */: + case 8201 /* thinSpace */: + case 8202 /* hairSpace */: + case 8203 /* zeroWidthSpace */: + case 8239 /* narrowNoBreakSpace */: + case 12288 /* ideographicSpace */: + case 9 /* tab */: + case 11 /* verticalTab */: + case 12 /* formFeed */: + case 65279 /* byteOrderMark */: + index++; + continue; + } + break; + } + return createTrivia(4 /* WhitespaceTrivia */, absoluteStartIndex); + } + function createTrivia(kind, absoluteStartIndex) { + var fullWidth = index - absoluteStartIndex; + return TypeScript.Syntax.deferredTrivia(kind, text, absoluteStartIndex, fullWidth); + } + function scanSingleLineCommentTrivia() { + var absoluteStartIndex = index; + skipSingleLineCommentTrivia(); + return createTrivia(7 /* SingleLineCommentTrivia */, absoluteStartIndex); + } + function skipSingleLineCommentTrivia() { + index += 2; + while (index < end) { + if (isNewLineCharacter(str.charCodeAt(index))) { + return; + } + index++; + } + } + function scanMultiLineCommentTrivia() { + var absoluteStartIndex = index; + skipMultiLineCommentTrivia(); + return createTrivia(6 /* MultiLineCommentTrivia */, absoluteStartIndex); + } + function skipMultiLineCommentTrivia() { + index += 2; + while (true) { + if (index === end) { + reportDiagnostic(end, 0, TypeScript.DiagnosticCode.AsteriskSlash_expected, null); + return; + } + if ((index + 1) < end && str.charCodeAt(index) === 42 /* asterisk */ && str.charCodeAt(index + 1) === 47 /* slash */) { + index += 2; + return; + } + index++; + } + } + function scanLineTerminatorSequenceTrivia(ch) { + var absoluteStartIndex = index; + skipLineTerminatorSequence(ch); + return createTrivia(5 /* NewLineTrivia */, absoluteStartIndex); + } + function skipLineTerminatorSequence(ch) { + index++; + if (ch === 13 /* carriageReturn */ && str.charCodeAt(index) === 10 /* lineFeed */) { + index++; + } + } + function scanSyntaxKind(allowContextualToken) { + if (index >= end) { + return 10 /* EndOfFileToken */; + } + var character = str.charCodeAt(index); + index++; + switch (character) { + case 33 /* exclamation */: + return scanExclamationToken(); + case 34 /* doubleQuote */: + return scanStringLiteral(character); + case 37 /* percent */: + return scanPercentToken(); + case 38 /* ampersand */: + return scanAmpersandToken(); + case 39 /* singleQuote */: + return scanStringLiteral(character); + case 40 /* openParen */: + return 72 /* OpenParenToken */; + case 41 /* closeParen */: + return 73 /* CloseParenToken */; + case 42 /* asterisk */: + return scanAsteriskToken(); + case 43 /* plus */: + return scanPlusToken(); + case 44 /* comma */: + return 79 /* CommaToken */; + case 45 /* minus */: + return scanMinusToken(); + case 46 /* dot */: + return scanDotToken(); + case 47 /* slash */: + return scanSlashToken(allowContextualToken); + case 48 /* _0 */: + case 49 /* _1 */: + case 50 /* _2 */: + case 51 /* _3 */: + case 52 /* _4 */: + case 53 /* _5 */: + case 54 /* _6 */: + case 55 /* _7 */: + case 56 /* _8 */: + case 57 /* _9 */: + return scanNumericLiteral(character); + case 58 /* colon */: + return 106 /* ColonToken */; + case 59 /* semicolon */: + return 78 /* SemicolonToken */; + case 60 /* lessThan */: + return scanLessThanToken(); + case 61 /* equals */: + return scanEqualsToken(); + case 62 /* greaterThan */: + return scanGreaterThanToken(allowContextualToken); + case 63 /* question */: + return 105 /* QuestionToken */; + case 91 /* openBracket */: + return 74 /* OpenBracketToken */; + case 93 /* closeBracket */: + return 75 /* CloseBracketToken */; + case 94 /* caret */: + return scanCaretToken(); + case 123 /* openBrace */: + return 70 /* OpenBraceToken */; + case 124 /* bar */: + return scanBarToken(); + case 125 /* closeBrace */: + return 71 /* CloseBraceToken */; + case 126 /* tilde */: + return 102 /* TildeToken */; + } + if (isIdentifierStartCharacter[character]) { + var result = tryFastScanIdentifierOrKeyword(character); + if (result !== 0 /* None */) { + return result; + } + } + index--; + if (isIdentifierStart(peekCharOrUnicodeEscape())) { + return slowScanIdentifierOrKeyword(); + } + var text = String.fromCharCode(character); + var messageText = getErrorMessageText(text); + reportDiagnostic(index, 1, TypeScript.DiagnosticCode.Unexpected_character_0, [messageText]); + index++; + return 9 /* ErrorToken */; + } + function isIdentifierStart(interpretedChar) { + if (isIdentifierStartCharacter[interpretedChar]) { + return true; + } + return interpretedChar > 127 /* maxAsciiCharacter */ && TypeScript.Unicode.isIdentifierStart(interpretedChar, languageVersion); + } + function isIdentifierPart(interpretedChar) { + if (isIdentifierPartCharacter[interpretedChar]) { + return true; + } + return interpretedChar > 127 /* maxAsciiCharacter */ && TypeScript.Unicode.isIdentifierPart(interpretedChar, languageVersion); + } + function tryFastScanIdentifierOrKeyword(firstCharacter) { + var startIndex = index; + var character = firstCharacter; + while (index < end) { + character = str.charCodeAt(index); + if (!isIdentifierPartCharacter[character]) { + break; + } + index++; + } + if (index < end && (character === 92 /* backslash */ || character > 127 /* maxAsciiCharacter */)) { + index = startIndex; + return 0 /* None */; + } + else { + if (isKeywordStartCharacter[firstCharacter]) { + return TypeScript.ScannerUtilities.identifierKind(str, startIndex - 1, index - startIndex + 1); + } + else { + return 11 /* IdentifierName */; + } + } + } + function slowScanIdentifierOrKeyword() { + var startIndex = index; + do { + scanCharOrUnicodeEscape(); + } while (isIdentifierPart(peekCharOrUnicodeEscape())); + var length = index - startIndex; + var text = str.substr(startIndex, length); + var valueText = TypeScript.massageEscapes(text); + var keywordKind = TypeScript.SyntaxFacts.getTokenKind(valueText); + if (keywordKind >= TypeScript.SyntaxKind.FirstKeyword && keywordKind <= TypeScript.SyntaxKind.LastKeyword) { + return keywordKind | 128 /* IsVariableWidthMask */; + } + return 11 /* IdentifierName */; + } + function scanNumericLiteral(ch) { + if (isHexNumericLiteral(ch)) { + scanHexNumericLiteral(); + } + else if (isOctalNumericLiteral(ch)) { + scanOctalNumericLiteral(); + } + else { + scanDecimalNumericLiteral(); + } + return 13 /* NumericLiteral */; + } + function isOctalNumericLiteral(ch) { + return ch === 48 /* _0 */ && TypeScript.CharacterInfo.isOctalDigit(str.charCodeAt(index)); + } + function scanOctalNumericLiteral() { + var start = index - 1; + while (TypeScript.CharacterInfo.isOctalDigit(str.charCodeAt(index))) { + index++; + } + if (languageVersion >= 1 /* ES5 */) { + reportDiagnostic(start, index - start, TypeScript.DiagnosticCode.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher, null); + } + } + function scanDecimalDigits() { + while (TypeScript.CharacterInfo.isDecimalDigit(str.charCodeAt(index))) { + index++; + } + } + function scanDecimalNumericLiteral() { + scanDecimalDigits(); + if (str.charCodeAt(index) === 46 /* dot */) { + index++; + } + scanDecimalNumericLiteralAfterDot(); + } + function scanDecimalNumericLiteralAfterDot() { + scanDecimalDigits(); + var ch = str.charCodeAt(index); + if (ch === 101 /* e */ || ch === 69 /* E */) { + var nextChar1 = str.charCodeAt(index + 1); + if (TypeScript.CharacterInfo.isDecimalDigit(nextChar1)) { + index++; + scanDecimalDigits(); + } + else if (nextChar1 === 45 /* minus */ || nextChar1 === 43 /* plus */) { + var nextChar2 = str.charCodeAt(index + 2); + if (TypeScript.CharacterInfo.isDecimalDigit(nextChar2)) { + index += 2; + scanDecimalDigits(); + } + } + } + } + function scanHexNumericLiteral() { + index++; + while (TypeScript.CharacterInfo.isHexDigit(str.charCodeAt(index))) { + index++; + } + } + function isHexNumericLiteral(ch) { + if (ch === 48 /* _0 */) { + var ch = str.charCodeAt(index); + if (ch === 120 /* x */ || ch === 88 /* X */) { + return TypeScript.CharacterInfo.isHexDigit(str.charCodeAt(index + 1)); + } + } + return false; + } + function scanLessThanToken() { + var ch0 = str.charCodeAt(index); + if (ch0 === 61 /* equals */) { + index++; + return 82 /* LessThanEqualsToken */; + } + else if (ch0 === 60 /* lessThan */) { + index++; + if (str.charCodeAt(index) === 61 /* equals */) { + index++; + return 112 /* LessThanLessThanEqualsToken */; + } + else { + return 95 /* LessThanLessThanToken */; + } + } + else { + return 80 /* LessThanToken */; + } + } + function scanGreaterThanToken(allowContextualToken) { + if (allowContextualToken) { + var ch0 = str.charCodeAt(index); + if (ch0 === 62 /* greaterThan */) { + index++; + var ch1 = str.charCodeAt(index); + if (ch1 === 62 /* greaterThan */) { + index++; + var ch2 = str.charCodeAt(index); + if (ch2 === 61 /* equals */) { + index++; + return 114 /* GreaterThanGreaterThanGreaterThanEqualsToken */; + } + else { + return 97 /* GreaterThanGreaterThanGreaterThanToken */; + } + } + else if (ch1 === 61 /* equals */) { + index++; + return 113 /* GreaterThanGreaterThanEqualsToken */; + } + else { + return 96 /* GreaterThanGreaterThanToken */; + } + } + else if (ch0 === 61 /* equals */) { + index++; + return 83 /* GreaterThanEqualsToken */; + } + } + return 81 /* GreaterThanToken */; + } + function scanBarToken() { + var ch = str.charCodeAt(index); + if (ch === 61 /* equals */) { + index++; + return 116 /* BarEqualsToken */; + } + else if (ch === 124 /* bar */) { + index++; + return 104 /* BarBarToken */; + } + else { + return 99 /* BarToken */; + } + } + function scanCaretToken() { + if (str.charCodeAt(index) === 61 /* equals */) { + index++; + return 117 /* CaretEqualsToken */; + } + else { + return 100 /* CaretToken */; + } + } + function scanAmpersandToken() { + var character = str.charCodeAt(index); + if (character === 61 /* equals */) { + index++; + return 115 /* AmpersandEqualsToken */; + } + else if (character === 38 /* ampersand */) { + index++; + return 103 /* AmpersandAmpersandToken */; + } + else { + return 98 /* AmpersandToken */; + } + } + function scanPercentToken() { + if (str.charCodeAt(index) === 61 /* equals */) { + index++; + return 111 /* PercentEqualsToken */; + } + else { + return 92 /* PercentToken */; + } + } + function scanMinusToken() { + var character = str.charCodeAt(index); + if (character === 61 /* equals */) { + index++; + return 109 /* MinusEqualsToken */; + } + else if (character === 45 /* minus */) { + index++; + return 94 /* MinusMinusToken */; + } + else { + return 90 /* MinusToken */; + } + } + function scanPlusToken() { + var character = str.charCodeAt(index); + if (character === 61 /* equals */) { + index++; + return 108 /* PlusEqualsToken */; + } + else if (character === 43 /* plus */) { + index++; + return 93 /* PlusPlusToken */; + } + else { + return 89 /* PlusToken */; + } + } + function scanAsteriskToken() { + if (str.charCodeAt(index) === 61 /* equals */) { + index++; + return 110 /* AsteriskEqualsToken */; + } + else { + return 91 /* AsteriskToken */; + } + } + function scanEqualsToken() { + var character = str.charCodeAt(index); + if (character === 61 /* equals */) { + index++; + if (str.charCodeAt(index) === 61 /* equals */) { + index++; + return 87 /* EqualsEqualsEqualsToken */; + } + else { + return 84 /* EqualsEqualsToken */; + } + } + else if (character === 62 /* greaterThan */) { + index++; + return 85 /* EqualsGreaterThanToken */; + } + else { + return 107 /* EqualsToken */; + } + } + function scanDotToken() { + var nextChar = str.charCodeAt(index); + if (TypeScript.CharacterInfo.isDecimalDigit(nextChar)) { + scanDecimalNumericLiteralAfterDot(); + return 13 /* NumericLiteral */; + } + if (nextChar === 46 /* dot */ && str.charCodeAt(index + 1) === 46 /* dot */) { + index += 2; + return 77 /* DotDotDotToken */; + } + else { + return 76 /* DotToken */; + } + } + function scanSlashToken(allowContextualToken) { + if (allowContextualToken) { + var result = tryScanRegularExpressionToken(); + if (result !== 0 /* None */) { + return result; + } + } + if (str.charCodeAt(index) === 61 /* equals */) { + index++; + return 119 /* SlashEqualsToken */; + } + else { + return 118 /* SlashToken */; + } + } + function tryScanRegularExpressionToken() { + var startIndex = index; + var inEscape = false; + var inCharacterClass = false; + while (true) { + var ch = str.charCodeAt(index); + if (isNaN(ch) || isNewLineCharacter(ch)) { + index = startIndex; + return 0 /* None */; + } + index++; + if (inEscape) { + inEscape = false; + continue; + } + switch (ch) { + case 92 /* backslash */: + inEscape = true; + continue; + case 91 /* openBracket */: + inCharacterClass = true; + continue; + case 93 /* closeBracket */: + inCharacterClass = false; + continue; + case 47 /* slash */: + if (inCharacterClass) { + continue; + } + break; + default: + continue; + } + break; + } + while (isIdentifierPartCharacter[str.charCodeAt(index)]) { + index++; + } + return 12 /* RegularExpressionLiteral */; + } + function scanExclamationToken() { + if (str.charCodeAt(index) === 61 /* equals */) { + index++; + if (str.charCodeAt(index) === 61 /* equals */) { + index++; + return 88 /* ExclamationEqualsEqualsToken */; + } + else { + return 86 /* ExclamationEqualsToken */; + } + } + else { + return 101 /* ExclamationToken */; + } + } + function getErrorMessageText(text) { + if (text === "\\") { + return '"\\"'; + } + return JSON.stringify(text); + } + function skipEscapeSequence() { + var rewindPoint = index; + index++; + var ch = str.charCodeAt(index); + if (isNaN(ch)) { + return; + } + index++; + switch (ch) { + case 120 /* x */: + case 117 /* u */: + index = rewindPoint; + var value = scanUnicodeOrHexEscape(true); + break; + case 13 /* carriageReturn */: + if (str.charCodeAt(index) === 10 /* lineFeed */) { + index++; + } + break; + default: + break; + } + } + function scanStringLiteral(quoteCharacter) { + while (true) { + var ch = str.charCodeAt(index); + if (ch === 92 /* backslash */) { + skipEscapeSequence(); + } + else if (ch === quoteCharacter) { + index++; + break; + } + else if (isNaN(ch) || isNewLineCharacter(ch)) { + reportDiagnostic(Math.min(index, end), 1, TypeScript.DiagnosticCode.Missing_close_quote_character, null); + break; + } + else { + index++; + } + } + return 14 /* StringLiteral */; + } + function isUnicodeEscape(character) { + return character === 92 /* backslash */ && str.charCodeAt(index + 1) === 117 /* u */; + } + function peekCharOrUnicodeEscape() { + var character = str.charCodeAt(index); + if (isUnicodeEscape(character)) { + return peekUnicodeOrHexEscape(); + } + else { + return character; + } + } + function peekUnicodeOrHexEscape() { + var startIndex = index; + var ch = scanUnicodeOrHexEscape(false); + index = startIndex; + return ch; + } + function scanCharOrUnicodeEscape() { + if (str.charCodeAt(index) === 92 /* backslash */ && str.charCodeAt(index + 1) === 117 /* u */) { + scanUnicodeOrHexEscape(true); + } + else { + index++; + } + } + function scanUnicodeOrHexEscape(report) { + var start = index; + var character = str.charCodeAt(index); + index++; + character = str.charCodeAt(index); + var intChar = 0; + index++; + var count = character === 117 /* u */ ? 4 : 2; + for (var i = 0; i < count; i++) { + var ch2 = str.charCodeAt(index); + if (!TypeScript.CharacterInfo.isHexDigit(ch2)) { + if (report) { + reportDiagnostic(start, index - start, TypeScript.DiagnosticCode.Unrecognized_escape_sequence, null); + } + break; + } + intChar = (intChar << 4) + TypeScript.CharacterInfo.hexValue(ch2); + index++; + } + return intChar; + } + function fillTokenInfo(token, text, tokenInfo) { + var fullStart = token.fullStart(); + var fullEnd = fullStart + token.fullWidth(); + reset(text, fullStart, fullEnd); + var leadingTriviaInfo = scanTriviaInfo(false); + var start = index; + scanSyntaxKind(isContextualToken(token)); + var end = index; + tokenInfo.leadingTriviaWidth = start - fullStart; + tokenInfo.width = end - start; + } + reset(text, 0, text.length()); + return { + setIndex: setIndex, + scan: scan, + fillTokenInfo: fillTokenInfo, + scanTrivia: scanTrivia + }; + } + function isValidIdentifier(text, languageVersion) { + var hadError = false; + var scanner = createScanner(languageVersion, text, function () { return hadError = true; }); + var token = scanner.scan(false); + return !hadError && TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(token) && TypeScript.width(token) === text.length(); + } + Scanner.isValidIdentifier = isValidIdentifier; + function createParserSource(fileName, text, languageVersion) { + var _absolutePosition = 0; + var _tokenDiagnostics = []; + var rewindPointPool = []; + var rewindPointPoolCount = 0; + var lastDiagnostic = null; + var reportDiagnostic = function (position, fullWidth, diagnosticKey, args) { + lastDiagnostic = new TypeScript.Diagnostic(fileName, text.lineMap(), position, fullWidth, diagnosticKey, args); + }; + var slidingWindow = new TypeScript.SlidingWindow(fetchNextItem, TypeScript.ArrayUtilities.createArray(1024, null), null); + var scanner = createScanner(languageVersion, text, reportDiagnostic); + function release() { + slidingWindow = null; + scanner = null; + _tokenDiagnostics = []; + rewindPointPool = []; + lastDiagnostic = null; + reportDiagnostic = null; + } + function currentNode() { + return null; + } + function consumeNode(node) { + throw TypeScript.Errors.invalidOperation(); + } + function absolutePosition() { + return _absolutePosition; + } + function tokenDiagnostics() { + return _tokenDiagnostics; + } + function getOrCreateRewindPoint() { + if (rewindPointPoolCount === 0) { + return {}; + } + rewindPointPoolCount--; + var result = rewindPointPool[rewindPointPoolCount]; + rewindPointPool[rewindPointPoolCount] = null; + return result; + } + function getRewindPoint() { + var slidingWindowIndex = slidingWindow.getAndPinAbsoluteIndex(); + var rewindPoint = getOrCreateRewindPoint(); + rewindPoint.slidingWindowIndex = slidingWindowIndex; + rewindPoint.absolutePosition = _absolutePosition; + return rewindPoint; + } + function rewind(rewindPoint) { + slidingWindow.rewindToPinnedIndex(rewindPoint.slidingWindowIndex); + _absolutePosition = rewindPoint.absolutePosition; + } + function releaseRewindPoint(rewindPoint) { + slidingWindow.releaseAndUnpinAbsoluteIndex(rewindPoint.absoluteIndex); + rewindPointPool[rewindPointPoolCount] = rewindPoint; + rewindPointPoolCount++; + } + function fetchNextItem(allowContextualToken) { + var token = scanner.scan(allowContextualToken); + if (lastDiagnostic === null) { + return token; + } + _tokenDiagnostics.push(lastDiagnostic); + lastDiagnostic = null; + return TypeScript.Syntax.realizeToken(token, text); + } + function peekToken(n) { + return slidingWindow.peekItemN(n); + } + function consumeToken(token) { + _absolutePosition += token.fullWidth(); + slidingWindow.moveToNextItem(); + } + function currentToken() { + return slidingWindow.currentItem(false); + } + function removeDiagnosticsOnOrAfterPosition(position) { + var tokenDiagnosticsLength = _tokenDiagnostics.length; + while (tokenDiagnosticsLength > 0) { + var diagnostic = _tokenDiagnostics[tokenDiagnosticsLength - 1]; + if (diagnostic.start() >= position) { + tokenDiagnosticsLength--; + } + else { + break; + } + } + _tokenDiagnostics.length = tokenDiagnosticsLength; + } + function resetToPosition(absolutePosition) { + _absolutePosition = absolutePosition; + removeDiagnosticsOnOrAfterPosition(absolutePosition); + slidingWindow.disgardAllItemsFromCurrentIndexOnwards(); + scanner.setIndex(absolutePosition); + } + function currentContextualToken() { + resetToPosition(_absolutePosition); + var token = slidingWindow.currentItem(true); + return token; + } + return { + text: text, + fileName: fileName, + languageVersion: languageVersion, + currentNode: currentNode, + currentToken: currentToken, + currentContextualToken: currentContextualToken, + peekToken: peekToken, + consumeNode: consumeNode, + consumeToken: consumeToken, + getRewindPoint: getRewindPoint, + rewind: rewind, + releaseRewindPoint: releaseRewindPoint, + tokenDiagnostics: tokenDiagnostics, + release: release, + absolutePosition: absolutePosition, + resetToPosition: resetToPosition + }; + } + Scanner.createParserSource = createParserSource; + })(TypeScript.Scanner || (TypeScript.Scanner = {})); + var Scanner = TypeScript.Scanner; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var ScannerUtilities = (function () { + function ScannerUtilities() { + } + ScannerUtilities.identifierKind = function (str, start, length) { + switch (length) { + case 2: + switch (str.charCodeAt(start)) { + case 100 /* d */: + return (str.charCodeAt(start + 1) === 111 /* o */) ? 22 /* DoKeyword */ : 11 /* IdentifierName */; + case 105 /* i */: + switch (str.charCodeAt(start + 1)) { + case 102 /* f */: + return 28 /* IfKeyword */; + case 110 /* n */: + return 29 /* InKeyword */; + default: + return 11 /* IdentifierName */; + } + default: + return 11 /* IdentifierName */; + } + case 3: + switch (str.charCodeAt(start)) { + case 97 /* a */: + return (str.charCodeAt(start + 1) === 110 /* n */ && str.charCodeAt(start + 2) === 121 /* y */) ? 60 /* AnyKeyword */ : 11 /* IdentifierName */; + case 102 /* f */: + return (str.charCodeAt(start + 1) === 111 /* o */ && str.charCodeAt(start + 2) === 114 /* r */) ? 26 /* ForKeyword */ : 11 /* IdentifierName */; + case 103 /* g */: + return (str.charCodeAt(start + 1) === 101 /* e */ && str.charCodeAt(start + 2) === 116 /* t */) ? 64 /* GetKeyword */ : 11 /* IdentifierName */; + case 108 /* l */: + return (str.charCodeAt(start + 1) === 101 /* e */ && str.charCodeAt(start + 2) === 116 /* t */) ? 53 /* LetKeyword */ : 11 /* IdentifierName */; + case 110 /* n */: + return (str.charCodeAt(start + 1) === 101 /* e */ && str.charCodeAt(start + 2) === 119 /* w */) ? 31 /* NewKeyword */ : 11 /* IdentifierName */; + case 115 /* s */: + return (str.charCodeAt(start + 1) === 101 /* e */ && str.charCodeAt(start + 2) === 116 /* t */) ? 68 /* SetKeyword */ : 11 /* IdentifierName */; + case 116 /* t */: + return (str.charCodeAt(start + 1) === 114 /* r */ && str.charCodeAt(start + 2) === 121 /* y */) ? 38 /* TryKeyword */ : 11 /* IdentifierName */; + case 118 /* v */: + return (str.charCodeAt(start + 1) === 97 /* a */ && str.charCodeAt(start + 2) === 114 /* r */) ? 40 /* VarKeyword */ : 11 /* IdentifierName */; + default: + return 11 /* IdentifierName */; + } + case 4: + switch (str.charCodeAt(start)) { + case 99 /* c */: + return (str.charCodeAt(start + 1) === 97 /* a */ && str.charCodeAt(start + 2) === 115 /* s */ && str.charCodeAt(start + 3) === 101 /* e */) ? 16 /* CaseKeyword */ : 11 /* IdentifierName */; + case 101 /* e */: + switch (str.charCodeAt(start + 1)) { + case 108 /* l */: + return (str.charCodeAt(start + 2) === 115 /* s */ && str.charCodeAt(start + 3) === 101 /* e */) ? 23 /* ElseKeyword */ : 11 /* IdentifierName */; + case 110 /* n */: + return (str.charCodeAt(start + 2) === 117 /* u */ && str.charCodeAt(start + 3) === 109 /* m */) ? 46 /* EnumKeyword */ : 11 /* IdentifierName */; + default: + return 11 /* IdentifierName */; + } + case 110 /* n */: + return (str.charCodeAt(start + 1) === 117 /* u */ && str.charCodeAt(start + 2) === 108 /* l */ && str.charCodeAt(start + 3) === 108 /* l */) ? 32 /* NullKeyword */ : 11 /* IdentifierName */; + case 116 /* t */: + switch (str.charCodeAt(start + 1)) { + case 104 /* h */: + return (str.charCodeAt(start + 2) === 105 /* i */ && str.charCodeAt(start + 3) === 115 /* s */) ? 35 /* ThisKeyword */ : 11 /* IdentifierName */; + case 114 /* r */: + return (str.charCodeAt(start + 2) === 117 /* u */ && str.charCodeAt(start + 3) === 101 /* e */) ? 37 /* TrueKeyword */ : 11 /* IdentifierName */; + default: + return 11 /* IdentifierName */; + } + case 118 /* v */: + return (str.charCodeAt(start + 1) === 111 /* o */ && str.charCodeAt(start + 2) === 105 /* i */ && str.charCodeAt(start + 3) === 100 /* d */) ? 41 /* VoidKeyword */ : 11 /* IdentifierName */; + case 119 /* w */: + return (str.charCodeAt(start + 1) === 105 /* i */ && str.charCodeAt(start + 2) === 116 /* t */ && str.charCodeAt(start + 3) === 104 /* h */) ? 43 /* WithKeyword */ : 11 /* IdentifierName */; + default: + return 11 /* IdentifierName */; + } + case 5: + switch (str.charCodeAt(start)) { + case 98 /* b */: + return (str.charCodeAt(start + 1) === 114 /* r */ && str.charCodeAt(start + 2) === 101 /* e */ && str.charCodeAt(start + 3) === 97 /* a */ && str.charCodeAt(start + 4) === 107 /* k */) ? 15 /* BreakKeyword */ : 11 /* IdentifierName */; + case 99 /* c */: + switch (str.charCodeAt(start + 1)) { + case 97 /* a */: + return (str.charCodeAt(start + 2) === 116 /* t */ && str.charCodeAt(start + 3) === 99 /* c */ && str.charCodeAt(start + 4) === 104 /* h */) ? 17 /* CatchKeyword */ : 11 /* IdentifierName */; + case 108 /* l */: + return (str.charCodeAt(start + 2) === 97 /* a */ && str.charCodeAt(start + 3) === 115 /* s */ && str.charCodeAt(start + 4) === 115 /* s */) ? 44 /* ClassKeyword */ : 11 /* IdentifierName */; + case 111 /* o */: + return (str.charCodeAt(start + 2) === 110 /* n */ && str.charCodeAt(start + 3) === 115 /* s */ && str.charCodeAt(start + 4) === 116 /* t */) ? 45 /* ConstKeyword */ : 11 /* IdentifierName */; + default: + return 11 /* IdentifierName */; + } + case 102 /* f */: + return (str.charCodeAt(start + 1) === 97 /* a */ && str.charCodeAt(start + 2) === 108 /* l */ && str.charCodeAt(start + 3) === 115 /* s */ && str.charCodeAt(start + 4) === 101 /* e */) ? 24 /* FalseKeyword */ : 11 /* IdentifierName */; + case 115 /* s */: + return (str.charCodeAt(start + 1) === 117 /* u */ && str.charCodeAt(start + 2) === 112 /* p */ && str.charCodeAt(start + 3) === 101 /* e */ && str.charCodeAt(start + 4) === 114 /* r */) ? 50 /* SuperKeyword */ : 11 /* IdentifierName */; + case 116 /* t */: + return (str.charCodeAt(start + 1) === 104 /* h */ && str.charCodeAt(start + 2) === 114 /* r */ && str.charCodeAt(start + 3) === 111 /* o */ && str.charCodeAt(start + 4) === 119 /* w */) ? 36 /* ThrowKeyword */ : 11 /* IdentifierName */; + case 119 /* w */: + return (str.charCodeAt(start + 1) === 104 /* h */ && str.charCodeAt(start + 2) === 105 /* i */ && str.charCodeAt(start + 3) === 108 /* l */ && str.charCodeAt(start + 4) === 101 /* e */) ? 42 /* WhileKeyword */ : 11 /* IdentifierName */; + case 121 /* y */: + return (str.charCodeAt(start + 1) === 105 /* i */ && str.charCodeAt(start + 2) === 101 /* e */ && str.charCodeAt(start + 3) === 108 /* l */ && str.charCodeAt(start + 4) === 100 /* d */) ? 59 /* YieldKeyword */ : 11 /* IdentifierName */; + default: + return 11 /* IdentifierName */; + } + case 6: + switch (str.charCodeAt(start)) { + case 100 /* d */: + return (str.charCodeAt(start + 1) === 101 /* e */ && str.charCodeAt(start + 2) === 108 /* l */ && str.charCodeAt(start + 3) === 101 /* e */ && str.charCodeAt(start + 4) === 116 /* t */ && str.charCodeAt(start + 5) === 101 /* e */) ? 21 /* DeleteKeyword */ : 11 /* IdentifierName */; + case 101 /* e */: + return (str.charCodeAt(start + 1) === 120 /* x */ && str.charCodeAt(start + 2) === 112 /* p */ && str.charCodeAt(start + 3) === 111 /* o */ && str.charCodeAt(start + 4) === 114 /* r */ && str.charCodeAt(start + 5) === 116 /* t */) ? 47 /* ExportKeyword */ : 11 /* IdentifierName */; + case 105 /* i */: + return (str.charCodeAt(start + 1) === 109 /* m */ && str.charCodeAt(start + 2) === 112 /* p */ && str.charCodeAt(start + 3) === 111 /* o */ && str.charCodeAt(start + 4) === 114 /* r */ && str.charCodeAt(start + 5) === 116 /* t */) ? 49 /* ImportKeyword */ : 11 /* IdentifierName */; + case 109 /* m */: + return (str.charCodeAt(start + 1) === 111 /* o */ && str.charCodeAt(start + 2) === 100 /* d */ && str.charCodeAt(start + 3) === 117 /* u */ && str.charCodeAt(start + 4) === 108 /* l */ && str.charCodeAt(start + 5) === 101 /* e */) ? 65 /* ModuleKeyword */ : 11 /* IdentifierName */; + case 110 /* n */: + return (str.charCodeAt(start + 1) === 117 /* u */ && str.charCodeAt(start + 2) === 109 /* m */ && str.charCodeAt(start + 3) === 98 /* b */ && str.charCodeAt(start + 4) === 101 /* e */ && str.charCodeAt(start + 5) === 114 /* r */) ? 67 /* NumberKeyword */ : 11 /* IdentifierName */; + case 112 /* p */: + return (str.charCodeAt(start + 1) === 117 /* u */ && str.charCodeAt(start + 2) === 98 /* b */ && str.charCodeAt(start + 3) === 108 /* l */ && str.charCodeAt(start + 4) === 105 /* i */ && str.charCodeAt(start + 5) === 99 /* c */) ? 57 /* PublicKeyword */ : 11 /* IdentifierName */; + case 114 /* r */: + return (str.charCodeAt(start + 1) === 101 /* e */ && str.charCodeAt(start + 2) === 116 /* t */ && str.charCodeAt(start + 3) === 117 /* u */ && str.charCodeAt(start + 4) === 114 /* r */ && str.charCodeAt(start + 5) === 110 /* n */) ? 33 /* ReturnKeyword */ : 11 /* IdentifierName */; + case 115 /* s */: + switch (str.charCodeAt(start + 1)) { + case 116 /* t */: + switch (str.charCodeAt(start + 2)) { + case 97 /* a */: + return (str.charCodeAt(start + 3) === 116 /* t */ && str.charCodeAt(start + 4) === 105 /* i */ && str.charCodeAt(start + 5) === 99 /* c */) ? 58 /* StaticKeyword */ : 11 /* IdentifierName */; + case 114 /* r */: + return (str.charCodeAt(start + 3) === 105 /* i */ && str.charCodeAt(start + 4) === 110 /* n */ && str.charCodeAt(start + 5) === 103 /* g */) ? 69 /* StringKeyword */ : 11 /* IdentifierName */; + default: + return 11 /* IdentifierName */; + } + case 119 /* w */: + return (str.charCodeAt(start + 2) === 105 /* i */ && str.charCodeAt(start + 3) === 116 /* t */ && str.charCodeAt(start + 4) === 99 /* c */ && str.charCodeAt(start + 5) === 104 /* h */) ? 34 /* SwitchKeyword */ : 11 /* IdentifierName */; + default: + return 11 /* IdentifierName */; + } + case 116 /* t */: + return (str.charCodeAt(start + 1) === 121 /* y */ && str.charCodeAt(start + 2) === 112 /* p */ && str.charCodeAt(start + 3) === 101 /* e */ && str.charCodeAt(start + 4) === 111 /* o */ && str.charCodeAt(start + 5) === 102 /* f */) ? 39 /* TypeOfKeyword */ : 11 /* IdentifierName */; + default: + return 11 /* IdentifierName */; + } + case 7: + switch (str.charCodeAt(start)) { + case 98 /* b */: + return (str.charCodeAt(start + 1) === 111 /* o */ && str.charCodeAt(start + 2) === 111 /* o */ && str.charCodeAt(start + 3) === 108 /* l */ && str.charCodeAt(start + 4) === 101 /* e */ && str.charCodeAt(start + 5) === 97 /* a */ && str.charCodeAt(start + 6) === 110 /* n */) ? 61 /* BooleanKeyword */ : 11 /* IdentifierName */; + case 100 /* d */: + switch (str.charCodeAt(start + 1)) { + case 101 /* e */: + switch (str.charCodeAt(start + 2)) { + case 99 /* c */: + return (str.charCodeAt(start + 3) === 108 /* l */ && str.charCodeAt(start + 4) === 97 /* a */ && str.charCodeAt(start + 5) === 114 /* r */ && str.charCodeAt(start + 6) === 101 /* e */) ? 63 /* DeclareKeyword */ : 11 /* IdentifierName */; + case 102 /* f */: + return (str.charCodeAt(start + 3) === 97 /* a */ && str.charCodeAt(start + 4) === 117 /* u */ && str.charCodeAt(start + 5) === 108 /* l */ && str.charCodeAt(start + 6) === 116 /* t */) ? 20 /* DefaultKeyword */ : 11 /* IdentifierName */; + default: + return 11 /* IdentifierName */; + } + default: + return 11 /* IdentifierName */; + } + case 101 /* e */: + return (str.charCodeAt(start + 1) === 120 /* x */ && str.charCodeAt(start + 2) === 116 /* t */ && str.charCodeAt(start + 3) === 101 /* e */ && str.charCodeAt(start + 4) === 110 /* n */ && str.charCodeAt(start + 5) === 100 /* d */ && str.charCodeAt(start + 6) === 115 /* s */) ? 48 /* ExtendsKeyword */ : 11 /* IdentifierName */; + case 102 /* f */: + return (str.charCodeAt(start + 1) === 105 /* i */ && str.charCodeAt(start + 2) === 110 /* n */ && str.charCodeAt(start + 3) === 97 /* a */ && str.charCodeAt(start + 4) === 108 /* l */ && str.charCodeAt(start + 5) === 108 /* l */ && str.charCodeAt(start + 6) === 121 /* y */) ? 25 /* FinallyKeyword */ : 11 /* IdentifierName */; + case 112 /* p */: + switch (str.charCodeAt(start + 1)) { + case 97 /* a */: + return (str.charCodeAt(start + 2) === 99 /* c */ && str.charCodeAt(start + 3) === 107 /* k */ && str.charCodeAt(start + 4) === 97 /* a */ && str.charCodeAt(start + 5) === 103 /* g */ && str.charCodeAt(start + 6) === 101 /* e */) ? 54 /* PackageKeyword */ : 11 /* IdentifierName */; + case 114 /* r */: + return (str.charCodeAt(start + 2) === 105 /* i */ && str.charCodeAt(start + 3) === 118 /* v */ && str.charCodeAt(start + 4) === 97 /* a */ && str.charCodeAt(start + 5) === 116 /* t */ && str.charCodeAt(start + 6) === 101 /* e */) ? 55 /* PrivateKeyword */ : 11 /* IdentifierName */; + default: + return 11 /* IdentifierName */; + } + case 114 /* r */: + return (str.charCodeAt(start + 1) === 101 /* e */ && str.charCodeAt(start + 2) === 113 /* q */ && str.charCodeAt(start + 3) === 117 /* u */ && str.charCodeAt(start + 4) === 105 /* i */ && str.charCodeAt(start + 5) === 114 /* r */ && str.charCodeAt(start + 6) === 101 /* e */) ? 66 /* RequireKeyword */ : 11 /* IdentifierName */; + default: + return 11 /* IdentifierName */; + } + case 8: + switch (str.charCodeAt(start)) { + case 99 /* c */: + return (str.charCodeAt(start + 1) === 111 /* o */ && str.charCodeAt(start + 2) === 110 /* n */ && str.charCodeAt(start + 3) === 116 /* t */ && str.charCodeAt(start + 4) === 105 /* i */ && str.charCodeAt(start + 5) === 110 /* n */ && str.charCodeAt(start + 6) === 117 /* u */ && str.charCodeAt(start + 7) === 101 /* e */) ? 18 /* ContinueKeyword */ : 11 /* IdentifierName */; + case 100 /* d */: + return (str.charCodeAt(start + 1) === 101 /* e */ && str.charCodeAt(start + 2) === 98 /* b */ && str.charCodeAt(start + 3) === 117 /* u */ && str.charCodeAt(start + 4) === 103 /* g */ && str.charCodeAt(start + 5) === 103 /* g */ && str.charCodeAt(start + 6) === 101 /* e */ && str.charCodeAt(start + 7) === 114 /* r */) ? 19 /* DebuggerKeyword */ : 11 /* IdentifierName */; + case 102 /* f */: + return (str.charCodeAt(start + 1) === 117 /* u */ && str.charCodeAt(start + 2) === 110 /* n */ && str.charCodeAt(start + 3) === 99 /* c */ && str.charCodeAt(start + 4) === 116 /* t */ && str.charCodeAt(start + 5) === 105 /* i */ && str.charCodeAt(start + 6) === 111 /* o */ && str.charCodeAt(start + 7) === 110 /* n */) ? 27 /* FunctionKeyword */ : 11 /* IdentifierName */; + default: + return 11 /* IdentifierName */; + } + case 9: + switch (str.charCodeAt(start)) { + case 105 /* i */: + return (str.charCodeAt(start + 1) === 110 /* n */ && str.charCodeAt(start + 2) === 116 /* t */ && str.charCodeAt(start + 3) === 101 /* e */ && str.charCodeAt(start + 4) === 114 /* r */ && str.charCodeAt(start + 5) === 102 /* f */ && str.charCodeAt(start + 6) === 97 /* a */ && str.charCodeAt(start + 7) === 99 /* c */ && str.charCodeAt(start + 8) === 101 /* e */) ? 52 /* InterfaceKeyword */ : 11 /* IdentifierName */; + case 112 /* p */: + return (str.charCodeAt(start + 1) === 114 /* r */ && str.charCodeAt(start + 2) === 111 /* o */ && str.charCodeAt(start + 3) === 116 /* t */ && str.charCodeAt(start + 4) === 101 /* e */ && str.charCodeAt(start + 5) === 99 /* c */ && str.charCodeAt(start + 6) === 116 /* t */ && str.charCodeAt(start + 7) === 101 /* e */ && str.charCodeAt(start + 8) === 100 /* d */) ? 56 /* ProtectedKeyword */ : 11 /* IdentifierName */; + default: + return 11 /* IdentifierName */; + } + case 10: + switch (str.charCodeAt(start)) { + case 105 /* i */: + switch (str.charCodeAt(start + 1)) { + case 109 /* m */: + return (str.charCodeAt(start + 2) === 112 /* p */ && str.charCodeAt(start + 3) === 108 /* l */ && str.charCodeAt(start + 4) === 101 /* e */ && str.charCodeAt(start + 5) === 109 /* m */ && str.charCodeAt(start + 6) === 101 /* e */ && str.charCodeAt(start + 7) === 110 /* n */ && str.charCodeAt(start + 8) === 116 /* t */ && str.charCodeAt(start + 9) === 115 /* s */) ? 51 /* ImplementsKeyword */ : 11 /* IdentifierName */; + case 110 /* n */: + return (str.charCodeAt(start + 2) === 115 /* s */ && str.charCodeAt(start + 3) === 116 /* t */ && str.charCodeAt(start + 4) === 97 /* a */ && str.charCodeAt(start + 5) === 110 /* n */ && str.charCodeAt(start + 6) === 99 /* c */ && str.charCodeAt(start + 7) === 101 /* e */ && str.charCodeAt(start + 8) === 111 /* o */ && str.charCodeAt(start + 9) === 102 /* f */) ? 30 /* InstanceOfKeyword */ : 11 /* IdentifierName */; + default: + return 11 /* IdentifierName */; + } + default: + return 11 /* IdentifierName */; + } + case 11: + return (str.charCodeAt(start) === 99 /* c */ && str.charCodeAt(start + 1) === 111 /* o */ && str.charCodeAt(start + 2) === 110 /* n */ && str.charCodeAt(start + 3) === 115 /* s */ && str.charCodeAt(start + 4) === 116 /* t */ && str.charCodeAt(start + 5) === 114 /* r */ && str.charCodeAt(start + 6) === 117 /* u */ && str.charCodeAt(start + 7) === 99 /* c */ && str.charCodeAt(start + 8) === 116 /* t */ && str.charCodeAt(start + 9) === 111 /* o */ && str.charCodeAt(start + 10) === 114 /* r */) ? 62 /* ConstructorKeyword */ : 11 /* IdentifierName */; + default: + return 11 /* IdentifierName */; + } + }; + return ScannerUtilities; + })(); + TypeScript.ScannerUtilities = ScannerUtilities; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var SlidingWindow = (function () { + function SlidingWindow(fetchNextItem, window, defaultValue, sourceLength) { + if (sourceLength === void 0) { sourceLength = -1; } + this.fetchNextItem = fetchNextItem; + this.window = window; + this.defaultValue = defaultValue; + this.sourceLength = sourceLength; + this.windowCount = 0; + this.windowAbsoluteStartIndex = 0; + this.currentRelativeItemIndex = 0; + this._pinCount = 0; + this.firstPinnedAbsoluteIndex = -1; + } + SlidingWindow.prototype.addMoreItemsToWindow = function (argument) { + var sourceLength = this.sourceLength; + if (sourceLength >= 0 && this.absoluteIndex() >= sourceLength) { + return false; + } + if (this.windowCount >= this.window.length) { + this.tryShiftOrGrowWindow(); + } + var item = this.fetchNextItem(argument); + this.window[this.windowCount] = item; + this.windowCount++; + return true; + }; + SlidingWindow.prototype.tryShiftOrGrowWindow = function () { + var currentIndexIsPastWindowHalfwayPoint = this.currentRelativeItemIndex > (this.window.length >>> 1); + var isAllowedToShift = this.firstPinnedAbsoluteIndex === -1 || this.firstPinnedAbsoluteIndex > this.windowAbsoluteStartIndex; + if (currentIndexIsPastWindowHalfwayPoint && isAllowedToShift) { + var shiftStartIndex = this.firstPinnedAbsoluteIndex === -1 ? this.currentRelativeItemIndex : this.firstPinnedAbsoluteIndex - this.windowAbsoluteStartIndex; + var shiftCount = this.windowCount - shiftStartIndex; + if (shiftCount > 0) { + TypeScript.ArrayUtilities.copy(this.window, shiftStartIndex, this.window, 0, shiftCount); + } + this.windowAbsoluteStartIndex += shiftStartIndex; + this.windowCount -= shiftStartIndex; + this.currentRelativeItemIndex -= shiftStartIndex; + } + else { + TypeScript.ArrayUtilities.grow(this.window, this.window.length * 2, this.defaultValue); + } + }; + SlidingWindow.prototype.absoluteIndex = function () { + return this.windowAbsoluteStartIndex + this.currentRelativeItemIndex; + }; + SlidingWindow.prototype.isAtEndOfSource = function () { + return this.absoluteIndex() >= this.sourceLength; + }; + SlidingWindow.prototype.getAndPinAbsoluteIndex = function () { + var absoluteIndex = this.absoluteIndex(); + var pinCount = this._pinCount++; + if (pinCount === 0) { + this.firstPinnedAbsoluteIndex = absoluteIndex; + } + return absoluteIndex; + }; + SlidingWindow.prototype.releaseAndUnpinAbsoluteIndex = function (absoluteIndex) { + this._pinCount--; + if (this._pinCount === 0) { + this.firstPinnedAbsoluteIndex = -1; + } + }; + SlidingWindow.prototype.rewindToPinnedIndex = function (absoluteIndex) { + var relativeIndex = absoluteIndex - this.windowAbsoluteStartIndex; + this.currentRelativeItemIndex = relativeIndex; + }; + SlidingWindow.prototype.currentItem = function (argument) { + if (this.currentRelativeItemIndex >= this.windowCount) { + if (!this.addMoreItemsToWindow(argument)) { + return this.defaultValue; + } + } + return this.window[this.currentRelativeItemIndex]; + }; + SlidingWindow.prototype.peekItemN = function (n) { + while (this.currentRelativeItemIndex + n >= this.windowCount) { + if (!this.addMoreItemsToWindow(null)) { + return this.defaultValue; + } + } + return this.window[this.currentRelativeItemIndex + n]; + }; + SlidingWindow.prototype.moveToNextItem = function () { + this.currentRelativeItemIndex++; + }; + SlidingWindow.prototype.disgardAllItemsFromCurrentIndexOnwards = function () { + this.windowCount = this.currentRelativeItemIndex; + }; + return SlidingWindow; + })(); + TypeScript.SlidingWindow = SlidingWindow; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Syntax) { + Syntax._nextSyntaxID = 1; + function childIndex(parent, child) { + for (var i = 0, n = TypeScript.childCount(parent); i < n; i++) { + var current = TypeScript.childAt(parent, i); + if (current === child) { + return i; + } + } + throw TypeScript.Errors.invalidOperation(); + } + Syntax.childIndex = childIndex; + function nodeHasSkippedOrMissingTokens(node) { + for (var i = 0; i < TypeScript.childCount(node); i++) { + var child = TypeScript.childAt(node, i); + if (TypeScript.isToken(child)) { + var token = child; + if (token.hasSkippedToken() || (TypeScript.width(token) === 0 && token.kind() !== 10 /* EndOfFileToken */)) { + return true; + } + } + } + return false; + } + Syntax.nodeHasSkippedOrMissingTokens = nodeHasSkippedOrMissingTokens; + function isUnterminatedStringLiteral(token) { + if (token && token.kind() === 14 /* StringLiteral */) { + var text = token.text(); + return text.length < 2 || text.charCodeAt(text.length - 1) !== text.charCodeAt(0); + } + return false; + } + Syntax.isUnterminatedStringLiteral = isUnterminatedStringLiteral; + function isUnterminatedMultilineCommentTrivia(trivia) { + if (trivia && trivia.kind() === 6 /* MultiLineCommentTrivia */) { + var text = trivia.fullText(); + return text.length < 4 || text.substring(text.length - 2) !== "*/"; + } + return false; + } + Syntax.isUnterminatedMultilineCommentTrivia = isUnterminatedMultilineCommentTrivia; + function isEntirelyInsideCommentTrivia(trivia, fullStart, position) { + if (trivia && trivia.isComment() && position > fullStart) { + var end = fullStart + trivia.fullWidth(); + if (position < end) { + return true; + } + else if (position === end) { + return trivia.kind() === 7 /* SingleLineCommentTrivia */ || isUnterminatedMultilineCommentTrivia(trivia); + } + } + return false; + } + Syntax.isEntirelyInsideCommentTrivia = isEntirelyInsideCommentTrivia; + function isEntirelyInsideComment(sourceUnit, position) { + var positionedToken = TypeScript.findToken(sourceUnit, position); + var fullStart = positionedToken.fullStart(); + var triviaList = null; + var lastTriviaBeforeToken = null; + if (positionedToken.kind() === 10 /* EndOfFileToken */) { + if (positionedToken.hasLeadingTrivia()) { + triviaList = positionedToken.leadingTrivia(); + } + else { + positionedToken = TypeScript.previousToken(positionedToken); + if (positionedToken) { + if (positionedToken && positionedToken.hasTrailingTrivia()) { + triviaList = positionedToken.trailingTrivia(); + fullStart = TypeScript.end(positionedToken); + } + } + } + } + else { + if (position <= (fullStart + positionedToken.leadingTriviaWidth())) { + triviaList = positionedToken.leadingTrivia(); + } + else if (position >= (fullStart + TypeScript.width(positionedToken))) { + triviaList = positionedToken.trailingTrivia(); + fullStart = TypeScript.end(positionedToken); + } + } + if (triviaList) { + for (var i = 0, n = triviaList.count(); i < n; i++) { + var trivia = triviaList.syntaxTriviaAt(i); + if (position <= fullStart) { + break; + } + else if (position <= fullStart + trivia.fullWidth() && trivia.isComment()) { + lastTriviaBeforeToken = trivia; + break; + } + fullStart += trivia.fullWidth(); + } + } + return lastTriviaBeforeToken && isEntirelyInsideCommentTrivia(lastTriviaBeforeToken, fullStart, position); + } + Syntax.isEntirelyInsideComment = isEntirelyInsideComment; + function isEntirelyInStringOrRegularExpressionLiteral(sourceUnit, position) { + var positionedToken = TypeScript.findToken(sourceUnit, position); + if (positionedToken) { + if (positionedToken.kind() === 10 /* EndOfFileToken */) { + positionedToken = TypeScript.previousToken(positionedToken); + return positionedToken && positionedToken.trailingTriviaWidth() === 0 && isUnterminatedStringLiteral(positionedToken); + } + else if (position > TypeScript.start(positionedToken)) { + return (position < TypeScript.end(positionedToken) && (positionedToken.kind() === 14 /* StringLiteral */ || positionedToken.kind() === 12 /* RegularExpressionLiteral */)) || (position <= TypeScript.end(positionedToken) && isUnterminatedStringLiteral(positionedToken)); + } + } + return false; + } + Syntax.isEntirelyInStringOrRegularExpressionLiteral = isEntirelyInStringOrRegularExpressionLiteral; + function findSkippedTokenOnLeftInTriviaList(positionedToken, position, lookInLeadingTriviaList) { + var triviaList = null; + var fullEnd; + if (lookInLeadingTriviaList) { + triviaList = positionedToken.leadingTrivia(); + fullEnd = positionedToken.fullStart() + triviaList.fullWidth(); + } + else { + triviaList = positionedToken.trailingTrivia(); + fullEnd = TypeScript.fullEnd(positionedToken); + } + if (triviaList && triviaList.hasSkippedToken()) { + for (var i = triviaList.count() - 1; i >= 0; i--) { + var trivia = triviaList.syntaxTriviaAt(i); + var triviaWidth = trivia.fullWidth(); + if (trivia.isSkippedToken() && position >= fullEnd) { + return trivia.skippedToken(); + } + fullEnd -= triviaWidth; + } + } + return null; + } + function findSkippedTokenOnLeft(positionedToken, position) { + var positionInLeadingTriviaList = (position < TypeScript.start(positionedToken)); + return findSkippedTokenOnLeftInTriviaList(positionedToken, position, positionInLeadingTriviaList); + } + Syntax.findSkippedTokenOnLeft = findSkippedTokenOnLeft; + function getAncestorOfKind(positionedToken, kind) { + while (positionedToken && positionedToken.parent) { + if (positionedToken.parent.kind() === kind) { + return positionedToken.parent; + } + positionedToken = positionedToken.parent; + } + return null; + } + Syntax.getAncestorOfKind = getAncestorOfKind; + function hasAncestorOfKind(positionedToken, kind) { + return getAncestorOfKind(positionedToken, kind) !== null; + } + Syntax.hasAncestorOfKind = hasAncestorOfKind; + function isIntegerLiteral(expression) { + if (expression) { + switch (expression.kind()) { + case 164 /* PlusExpression */: + case 165 /* NegateExpression */: + expression = expression.operand; + return TypeScript.isToken(expression) && TypeScript.IntegerUtilities.isInteger(expression.text()); + case 13 /* NumericLiteral */: + var text = expression.text(); + return TypeScript.IntegerUtilities.isInteger(text) || TypeScript.IntegerUtilities.isHexInteger(text); + } + } + return false; + } + Syntax.isIntegerLiteral = isIntegerLiteral; + function containingNode(element) { + var current = element.parent; + while (current !== null && !TypeScript.isNode(current)) { + current = current.parent; + } + return current; + } + Syntax.containingNode = containingNode; + function findTokenOnLeft(element, position, includeSkippedTokens) { + if (includeSkippedTokens === void 0) { includeSkippedTokens = false; } + var positionedToken = TypeScript.findToken(element, position, false); + var _start = TypeScript.start(positionedToken); + if (includeSkippedTokens) { + positionedToken = findSkippedTokenOnLeft(positionedToken, position) || positionedToken; + } + if (position > _start) { + return positionedToken; + } + if (positionedToken.fullStart() === 0) { + return null; + } + return TypeScript.previousToken(positionedToken, includeSkippedTokens); + } + Syntax.findTokenOnLeft = findTokenOnLeft; + function findCompleteTokenOnLeft(element, position, includeSkippedTokens) { + if (includeSkippedTokens === void 0) { includeSkippedTokens = false; } + var positionedToken = TypeScript.findToken(element, position, false); + if (includeSkippedTokens) { + positionedToken = findSkippedTokenOnLeft(positionedToken, position) || positionedToken; + } + if (TypeScript.width(positionedToken) > 0 && position >= TypeScript.end(positionedToken)) { + return positionedToken; + } + return TypeScript.previousToken(positionedToken, includeSkippedTokens); + } + Syntax.findCompleteTokenOnLeft = findCompleteTokenOnLeft; + function firstTokenInLineContainingPosition(syntaxTree, position) { + var current = TypeScript.findToken(syntaxTree.sourceUnit(), position); + while (true) { + if (isFirstTokenInLine(current, syntaxTree.lineMap())) { + break; + } + current = TypeScript.previousToken(current); + } + return current; + } + Syntax.firstTokenInLineContainingPosition = firstTokenInLineContainingPosition; + function isFirstTokenInLine(token, lineMap) { + var _previousToken = TypeScript.previousToken(token); + if (_previousToken === null) { + return true; + } + return lineMap.getLineNumberFromPosition(TypeScript.end(_previousToken)) !== lineMap.getLineNumberFromPosition(TypeScript.start(token)); + } + })(TypeScript.Syntax || (TypeScript.Syntax = {})); + var Syntax = TypeScript.Syntax; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + function isShared(element) { + var kind = element.kind(); + return (kind === 1 /* List */ || kind === 2 /* SeparatedList */) && element.length === 0; + } + TypeScript.isShared = isShared; + function childCount(element) { + var kind = element.kind(); + if (kind === 1 /* List */) { + return element.length; + } + else if (kind === 2 /* SeparatedList */) { + return element.length + element.separators.length; + } + else if (kind >= TypeScript.SyntaxKind.FirstToken && kind <= TypeScript.SyntaxKind.LastToken) { + return 0; + } + else { + return TypeScript.nodeMetadata[kind].length; + } + } + TypeScript.childCount = childCount; + function childAt(element, index) { + var kind = element.kind(); + if (kind === 1 /* List */) { + return element[index]; + } + else if (kind === 2 /* SeparatedList */) { + return (index % 2 === 0) ? element[index / 2] : element.separators[(index - 1) / 2]; + } + else { + return element[TypeScript.nodeMetadata[element.kind()][index]]; + } + } + TypeScript.childAt = childAt; + function syntaxTree(element) { + if (element) { + TypeScript.Debug.assert(!isShared(element)); + while (element) { + if (element.kind() === 120 /* SourceUnit */) { + return element.syntaxTree; + } + element = element.parent; + } + } + return null; + } + TypeScript.syntaxTree = syntaxTree; + function parsedInStrictMode(node) { + var info = node.data; + if (info === undefined) { + return false; + } + return (info & 4 /* NodeParsedInStrictModeMask */) !== 0; + } + TypeScript.parsedInStrictMode = parsedInStrictMode; + function previousToken(token, includeSkippedTokens) { + if (includeSkippedTokens === void 0) { includeSkippedTokens = false; } + if (includeSkippedTokens) { + var triviaList = token.leadingTrivia(); + if (triviaList && triviaList.hasSkippedToken()) { + var currentTriviaEndPosition = TypeScript.start(token); + for (var i = triviaList.count() - 1; i >= 0; i--) { + var trivia = triviaList.syntaxTriviaAt(i); + if (trivia.isSkippedToken()) { + return trivia.skippedToken(); + } + currentTriviaEndPosition -= trivia.fullWidth(); + } + } + } + var start = token.fullStart(); + if (start === 0) { + return null; + } + return findToken(syntaxTree(token).sourceUnit(), start - 1, includeSkippedTokens); + } + TypeScript.previousToken = previousToken; + function findToken(element, position, includeSkippedTokens) { + if (includeSkippedTokens === void 0) { includeSkippedTokens = false; } + var endOfFileToken = tryGetEndOfFileAt(element, position); + if (endOfFileToken !== null) { + return endOfFileToken; + } + if (position < 0 || position >= fullWidth(element)) { + throw TypeScript.Errors.argumentOutOfRange("position"); + } + var positionedToken = findTokenWorker(element, position); + if (includeSkippedTokens) { + return findSkippedTokenInPositionedToken(positionedToken, position) || positionedToken; + } + return positionedToken; + } + TypeScript.findToken = findToken; + function findSkippedTokenInPositionedToken(positionedToken, position) { + var positionInLeadingTriviaList = (position < start(positionedToken)); + return findSkippedTokenInTriviaList(positionedToken, position, positionInLeadingTriviaList); + } + TypeScript.findSkippedTokenInPositionedToken = findSkippedTokenInPositionedToken; + function findSkippedTokenInLeadingTriviaList(positionedToken, position) { + return findSkippedTokenInTriviaList(positionedToken, position, true); + } + TypeScript.findSkippedTokenInLeadingTriviaList = findSkippedTokenInLeadingTriviaList; + function findSkippedTokenInTrailingTriviaList(positionedToken, position) { + return findSkippedTokenInTriviaList(positionedToken, position, false); + } + TypeScript.findSkippedTokenInTrailingTriviaList = findSkippedTokenInTrailingTriviaList; + function findSkippedTokenInTriviaList(positionedToken, position, lookInLeadingTriviaList) { + var triviaList = null; + var fullStart; + if (lookInLeadingTriviaList) { + triviaList = positionedToken.leadingTrivia(); + fullStart = positionedToken.fullStart(); + } + else { + triviaList = positionedToken.trailingTrivia(); + fullStart = end(positionedToken); + } + if (triviaList && triviaList.hasSkippedToken()) { + for (var i = 0, n = triviaList.count(); i < n; i++) { + var trivia = triviaList.syntaxTriviaAt(i); + var triviaWidth = trivia.fullWidth(); + if (trivia.isSkippedToken() && position >= fullStart && position <= fullStart + triviaWidth) { + return trivia.skippedToken(); + } + fullStart += triviaWidth; + } + } + return null; + } + function findTokenWorker(element, position) { + if (isToken(element)) { + TypeScript.Debug.assert(fullWidth(element) > 0); + return element; + } + if (isShared(element)) { + throw TypeScript.Errors.invalidOperation(); + } + for (var i = 0, n = childCount(element); i < n; i++) { + var child = childAt(element, i); + if (child !== null) { + var childFullWidth = fullWidth(child); + if (childFullWidth > 0) { + var childFullStart = fullStart(child); + if (position >= childFullStart) { + var childFullEnd = childFullStart + childFullWidth; + if (position < childFullEnd) { + return findTokenWorker(child, position); + } + } + } + } + } + throw TypeScript.Errors.invalidOperation(); + } + function tryGetEndOfFileAt(element, position) { + if (element.kind() === 120 /* SourceUnit */ && position === fullWidth(element)) { + var sourceUnit = element; + return sourceUnit.endOfFileToken; + } + return null; + } + function nextToken(token, text, includeSkippedTokens) { + if (includeSkippedTokens === void 0) { includeSkippedTokens = false; } + if (token.kind() === 10 /* EndOfFileToken */) { + return null; + } + if (includeSkippedTokens) { + var triviaList = token.trailingTrivia(text); + if (triviaList && triviaList.hasSkippedToken()) { + for (var i = 0, n = triviaList.count(); i < n; i++) { + var trivia = triviaList.syntaxTriviaAt(i); + if (trivia.isSkippedToken()) { + return trivia.skippedToken(); + } + } + } + } + return findToken(syntaxTree(token).sourceUnit(), fullEnd(token), includeSkippedTokens); + } + TypeScript.nextToken = nextToken; + function isNode(element) { + if (element !== null) { + var kind = element.kind(); + return kind >= TypeScript.SyntaxKind.FirstNode && kind <= TypeScript.SyntaxKind.LastNode; + } + return false; + } + TypeScript.isNode = isNode; + function isTokenKind(kind) { + return kind >= TypeScript.SyntaxKind.FirstToken && kind <= TypeScript.SyntaxKind.LastToken; + } + function isToken(element) { + if (element !== null) { + return isTokenKind(element.kind()); + } + return false; + } + TypeScript.isToken = isToken; + function isList(element) { + return element !== null && element.kind() === 1 /* List */; + } + TypeScript.isList = isList; + function isSeparatedList(element) { + return element !== null && element.kind() === 2 /* SeparatedList */; + } + TypeScript.isSeparatedList = isSeparatedList; + function syntaxID(element) { + if (isShared(element)) { + throw TypeScript.Errors.invalidOperation("Should not use shared syntax element as a key."); + } + var obj = element; + if (obj._syntaxID === undefined) { + obj._syntaxID = TypeScript.Syntax._nextSyntaxID++; + } + return obj._syntaxID; + } + TypeScript.syntaxID = syntaxID; + function collectTextElements(element, elements, text) { + if (element) { + if (isToken(element)) { + elements.push(element.fullText(text)); + } + else { + for (var i = 0, n = childCount(element); i < n; i++) { + collectTextElements(childAt(element, i), elements, text); + } + } + } + } + function fullText(element, text) { + if (isToken(element)) { + return element.fullText(text); + } + var elements = []; + collectTextElements(element, elements, text); + return elements.join(""); + } + TypeScript.fullText = fullText; + function leadingTriviaWidth(element, text) { + var token = firstToken(element); + return token ? token.leadingTriviaWidth(text) : 0; + } + TypeScript.leadingTriviaWidth = leadingTriviaWidth; + function trailingTriviaWidth(element, text) { + var token = lastToken(element); + return token ? token.trailingTriviaWidth(text) : 0; + } + TypeScript.trailingTriviaWidth = trailingTriviaWidth; + function firstToken(element) { + if (element) { + var kind = element.kind(); + if (isTokenKind(kind)) { + return fullWidth(element) > 0 || element.kind() === 10 /* EndOfFileToken */ ? element : null; + } + if (kind === 1 /* List */) { + var array = element; + for (var i = 0, n = array.length; i < n; i++) { + var token = firstToken(array[i]); + if (token) { + return token; + } + } + } + else if (kind === 2 /* SeparatedList */) { + var array = element; + var separators = array.separators; + for (var i = 0, n = array.length + separators.length; i < n; i++) { + var token = firstToken(i % 2 === 0 ? array[i / 2] : separators[(i - 1) / 2]); + if (token) { + return token; + } + } + } + else { + var metadata = TypeScript.nodeMetadata[kind]; + for (var i = 0, n = metadata.length; i < n; i++) { + var child = element[metadata[i]]; + var token = firstToken(child); + if (token) { + return token; + } + } + if (element.kind() === 120 /* SourceUnit */) { + return element.endOfFileToken; + } + } + } + return null; + } + TypeScript.firstToken = firstToken; + function lastToken(element) { + if (isToken(element)) { + return fullWidth(element) > 0 || element.kind() === 10 /* EndOfFileToken */ ? element : null; + } + if (element.kind() === 120 /* SourceUnit */) { + return element.endOfFileToken; + } + for (var i = childCount(element) - 1; i >= 0; i--) { + var child = childAt(element, i); + if (child !== null) { + var token = lastToken(child); + if (token) { + return token; + } + } + } + return null; + } + TypeScript.lastToken = lastToken; + function fullStart(element) { + TypeScript.Debug.assert(!isShared(element)); + var token = isToken(element) ? element : firstToken(element); + return token ? token.fullStart() : -1; + } + TypeScript.fullStart = fullStart; + function fullWidth(element) { + if (isToken(element)) { + return element.fullWidth(); + } + if (isShared(element)) { + return 0; + } + var info = data(element); + return info >>> 3 /* NodeFullWidthShift */; + } + TypeScript.fullWidth = fullWidth; + function isIncrementallyUnusable(element) { + if (isToken(element)) { + return element.isIncrementallyUnusable(); + } + if (isShared(element)) { + return false; + } + return (data(element) & 2 /* NodeIncrementallyUnusableMask */) !== 0; + } + TypeScript.isIncrementallyUnusable = isIncrementallyUnusable; + function data(element) { + TypeScript.Debug.assert(isNode(element) || isList(element) || isSeparatedList(element)); + var dataElement = element; + var info = dataElement.data; + if (info === undefined) { + info = 0; + } + if ((info & 1 /* NodeDataComputed */) === 0) { + info |= computeData(element); + dataElement.data = info; + } + return info; + } + function computeData(element) { + var slotCount = childCount(element); + var fullWidth = 0; + var isIncrementallyUnusable = slotCount === 0; + for (var i = 0, n = slotCount; i < n; i++) { + var child = childAt(element, i); + if (child) { + fullWidth += TypeScript.fullWidth(child); + isIncrementallyUnusable = isIncrementallyUnusable || TypeScript.isIncrementallyUnusable(child); + } + } + return (fullWidth << 3 /* NodeFullWidthShift */) | (isIncrementallyUnusable ? 2 /* NodeIncrementallyUnusableMask */ : 0) | 1 /* NodeDataComputed */; + } + function start(element, text) { + var token = isToken(element) ? element : firstToken(element); + return token ? token.fullStart() + token.leadingTriviaWidth(text) : -1; + } + TypeScript.start = start; + function end(element, text) { + var token = isToken(element) ? element : lastToken(element); + return token ? fullEnd(token) - token.trailingTriviaWidth(text) : -1; + } + TypeScript.end = end; + function width(element, text) { + if (isToken(element)) { + return element.text().length; + } + return fullWidth(element) - leadingTriviaWidth(element, text) - trailingTriviaWidth(element, text); + } + TypeScript.width = width; + function fullEnd(element) { + return fullStart(element) + fullWidth(element); + } + TypeScript.fullEnd = fullEnd; + function existsNewLineBetweenTokens(token1, token2, text) { + if (token1 === token2) { + return false; + } + if (token1 === null || token2 === null) { + return true; + } + var lineMap = text.lineMap(); + return lineMap.getLineNumberFromPosition(end(token1, text)) !== lineMap.getLineNumberFromPosition(start(token2, text)); + } + TypeScript.existsNewLineBetweenTokens = existsNewLineBetweenTokens; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (SyntaxFacts) { + function isDirectivePrologueElement(node) { + if (node.kind() === 149 /* ExpressionStatement */) { + var expressionStatement = node; + var expression = expressionStatement.expression; + if (expression.kind() === 14 /* StringLiteral */) { + return true; + } + } + return false; + } + SyntaxFacts.isDirectivePrologueElement = isDirectivePrologueElement; + function isUseStrictDirective(node) { + var expressionStatement = node; + var stringLiteral = expressionStatement.expression; + var text = stringLiteral.text(); + return text === '"use strict"' || text === "'use strict'"; + } + SyntaxFacts.isUseStrictDirective = isUseStrictDirective; + function isIdentifierNameOrAnyKeyword(token) { + var tokenKind = token.kind(); + return tokenKind === 11 /* IdentifierName */ || SyntaxFacts.isAnyKeyword(tokenKind); + } + SyntaxFacts.isIdentifierNameOrAnyKeyword = isIdentifierNameOrAnyKeyword; + })(TypeScript.SyntaxFacts || (TypeScript.SyntaxFacts = {})); + var SyntaxFacts = TypeScript.SyntaxFacts; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Syntax) { + var _emptyList = []; + var _emptySeparatedList = []; + var _emptySeparators = []; + _emptySeparatedList.separators = _emptySeparators; + function assertEmptyLists() { + } + Array.prototype.kind = function () { + return this.separators === undefined ? 1 /* List */ : 2 /* SeparatedList */; + }; + Array.prototype.separatorCount = function () { + assertEmptyLists(); + return this.separators.length; + }; + Array.prototype.separatorAt = function (index) { + assertEmptyLists(); + return this.separators[index]; + }; + function emptyList() { + return _emptyList; + } + Syntax.emptyList = emptyList; + function emptySeparatedList() { + return _emptySeparatedList; + } + Syntax.emptySeparatedList = emptySeparatedList; + function list(nodes) { + if (nodes === undefined || nodes === null || nodes.length === 0) { + return emptyList(); + } + for (var i = 0, n = nodes.length; i < n; i++) { + nodes[i].parent = nodes; + } + return nodes; + } + Syntax.list = list; + function separatedList(nodes, separators) { + if (nodes === undefined || nodes === null || nodes.length === 0) { + return emptySeparatedList(); + } + for (var i = 0, n = nodes.length; i < n; i++) { + nodes[i].parent = nodes; + } + for (var i = 0, n = separators.length; i < n; i++) { + separators[i].parent = nodes; + } + nodes.separators = separators.length === 0 ? _emptySeparators : separators; + return nodes; + } + Syntax.separatedList = separatedList; + function nonSeparatorIndexOf(list, ast) { + for (var i = 0, n = list.length; i < n; i++) { + if (list[i] === ast) { + return i; + } + } + return -1; + } + Syntax.nonSeparatorIndexOf = nonSeparatorIndexOf; + })(TypeScript.Syntax || (TypeScript.Syntax = {})); + var Syntax = TypeScript.Syntax; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var SyntaxNode = (function () { + function SyntaxNode(data) { + if (data) { + this.data = data; + } + } + SyntaxNode.prototype.kind = function () { + return this.__kind; + }; + return SyntaxNode; + })(); + TypeScript.SyntaxNode = SyntaxNode; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + TypeScript.nodeMetadata = [[], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], ["moduleElements", "endOfFileToken"], ["left", "dotToken", "right"], ["openBraceToken", "typeMembers", "closeBraceToken"], ["typeParameterList", "parameterList", "equalsGreaterThanToken", "type"], ["type", "openBracketToken", "closeBracketToken"], ["newKeyword", "typeParameterList", "parameterList", "equalsGreaterThanToken", "type"], ["name", "typeArgumentList"], ["typeOfKeyword", "name"], ["modifiers", "interfaceKeyword", "identifier", "typeParameterList", "heritageClauses", "body"], ["modifiers", "functionKeyword", "identifier", "callSignature", "block", "semicolonToken"], ["modifiers", "moduleKeyword", "name", "stringLiteral", "openBraceToken", "moduleElements", "closeBraceToken"], ["modifiers", "classKeyword", "identifier", "typeParameterList", "heritageClauses", "openBraceToken", "classElements", "closeBraceToken"], ["modifiers", "enumKeyword", "identifier", "openBraceToken", "enumElements", "closeBraceToken"], ["modifiers", "importKeyword", "identifier", "equalsToken", "moduleReference", "semicolonToken"], ["exportKeyword", "equalsToken", "identifier", "semicolonToken"], ["modifiers", "propertyName", "callSignature", "block", "semicolonToken"], ["modifiers", "variableDeclarator", "semicolonToken"], ["modifiers", "constructorKeyword", "callSignature", "block", "semicolonToken"], ["modifiers", "indexSignature", "semicolonToken"], ["modifiers", "getKeyword", "propertyName", "callSignature", "block"], ["modifiers", "setKeyword", "propertyName", "callSignature", "block"], ["propertyName", "questionToken", "typeAnnotation"], ["typeParameterList", "parameterList", "typeAnnotation"], ["newKeyword", "callSignature"], ["openBracketToken", "parameters", "closeBracketToken", "typeAnnotation"], ["propertyName", "questionToken", "callSignature"], ["openBraceToken", "statements", "closeBraceToken"], ["ifKeyword", "openParenToken", "condition", "closeParenToken", "statement", "elseClause"], ["modifiers", "variableDeclaration", "semicolonToken"], ["expression", "semicolonToken"], ["returnKeyword", "expression", "semicolonToken"], ["switchKeyword", "openParenToken", "expression", "closeParenToken", "openBraceToken", "switchClauses", "closeBraceToken"], ["breakKeyword", "identifier", "semicolonToken"], ["continueKeyword", "identifier", "semicolonToken"], ["forKeyword", "openParenToken", "variableDeclaration", "initializer", "firstSemicolonToken", "condition", "secondSemicolonToken", "incrementor", "closeParenToken", "statement"], ["forKeyword", "openParenToken", "variableDeclaration", "left", "inKeyword", "expression", "closeParenToken", "statement"], ["semicolonToken"], ["throwKeyword", "expression", "semicolonToken"], ["whileKeyword", "openParenToken", "condition", "closeParenToken", "statement"], ["tryKeyword", "block", "catchClause", "finallyClause"], ["identifier", "colonToken", "statement"], ["doKeyword", "statement", "whileKeyword", "openParenToken", "condition", "closeParenToken", "semicolonToken"], ["debuggerKeyword", "semicolonToken"], ["withKeyword", "openParenToken", "condition", "closeParenToken", "statement"], ["operatorToken", "operand"], ["operatorToken", "operand"], ["operatorToken", "operand"], ["operatorToken", "operand"], ["operatorToken", "operand"], ["operatorToken", "operand"], ["deleteKeyword", "expression"], ["typeOfKeyword", "expression"], ["voidKeyword", "expression"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["condition", "questionToken", "whenTrue", "colonToken", "whenFalse"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["left", "operatorToken", "right"], ["operand", "operatorToken"], ["operand", "operatorToken"], ["expression", "dotToken", "name"], ["expression", "argumentList"], ["openBracketToken", "expressions", "closeBracketToken"], ["openBraceToken", "propertyAssignments", "closeBraceToken"], ["newKeyword", "expression", "argumentList"], ["openParenToken", "expression", "closeParenToken"], ["callSignature", "equalsGreaterThanToken", "block", "expression"], ["parameter", "equalsGreaterThanToken", "block", "expression"], ["lessThanToken", "type", "greaterThanToken", "expression"], ["expression", "openBracketToken", "argumentExpression", "closeBracketToken"], ["functionKeyword", "identifier", "callSignature", "block"], [], ["varKeyword", "variableDeclarators"], ["propertyName", "typeAnnotation", "equalsValueClause"], ["typeArgumentList", "openParenToken", "arguments", "closeParenToken"], ["openParenToken", "parameters", "closeParenToken"], ["lessThanToken", "typeArguments", "greaterThanToken"], ["lessThanToken", "typeParameters", "greaterThanToken"], ["extendsOrImplementsKeyword", "typeNames"], ["extendsOrImplementsKeyword", "typeNames"], ["equalsToken", "value"], ["caseKeyword", "expression", "colonToken", "statements"], ["defaultKeyword", "colonToken", "statements"], ["elseKeyword", "statement"], ["catchKeyword", "openParenToken", "identifier", "typeAnnotation", "closeParenToken", "block"], ["finallyKeyword", "block"], ["identifier", "constraint"], ["extendsKeyword", "typeOrExpression"], ["propertyName", "colonToken", "expression"], ["propertyName", "callSignature", "block"], ["dotDotDotToken", "modifiers", "identifier", "questionToken", "typeAnnotation", "equalsValueClause"], ["propertyName", "equalsValueClause"], ["colonToken", "type"], ["requireKeyword", "openParenToken", "stringLiteral", "closeParenToken"], ["moduleName"], ]; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + function tokenValue(token) { + if (token.fullWidth() === 0) { + return null; + } + var kind = token.kind(); + var text = token.text(); + if (kind === 11 /* IdentifierName */) { + return massageEscapes(text); + } + switch (kind) { + case 37 /* TrueKeyword */: + return true; + case 24 /* FalseKeyword */: + return false; + case 32 /* NullKeyword */: + return null; + } + if (TypeScript.SyntaxFacts.isAnyKeyword(kind) || TypeScript.SyntaxFacts.isAnyPunctuation(kind)) { + return TypeScript.SyntaxFacts.getText(kind); + } + if (kind === 13 /* NumericLiteral */) { + return TypeScript.IntegerUtilities.isHexInteger(text) ? parseInt(text, 16) : parseFloat(text); + } + else if (kind === 14 /* StringLiteral */) { + if (text.length > 1 && text.charCodeAt(text.length - 1) === text.charCodeAt(0)) { + return massageEscapes(text.substr(1, text.length - 2)); + } + else { + return massageEscapes(text.substr(1)); + } + } + else if (kind === 12 /* RegularExpressionLiteral */) { + return regularExpressionValue(text); + } + else if (kind === 10 /* EndOfFileToken */ || kind === 9 /* ErrorToken */) { + return null; + } + else { + throw TypeScript.Errors.invalidOperation(); + } + } + TypeScript.tokenValue = tokenValue; + function tokenValueText(token) { + var value = tokenValue(token); + return value === null ? "" : massageDisallowedIdentifiers(value.toString()); + } + TypeScript.tokenValueText = tokenValueText; + function massageEscapes(text) { + return text.indexOf("\\") >= 0 ? convertEscapes(text) : text; + } + TypeScript.massageEscapes = massageEscapes; + function regularExpressionValue(text) { + try { + var lastSlash = text.lastIndexOf("/"); + var body = text.substring(1, lastSlash); + var flags = text.substring(lastSlash + 1); + return new RegExp(body, flags); + } + catch (e) { + return null; + } + } + function massageDisallowedIdentifiers(text) { + if (text.charCodeAt(0) === 95 /* _ */ && text.charCodeAt(1) === 95 /* _ */) { + return "_" + text; + } + return text; + } + var characterArray = []; + function convertEscapes(text) { + characterArray.length = 0; + var result = ""; + for (var i = 0, n = text.length; i < n; i++) { + var ch = text.charCodeAt(i); + if (ch === 92 /* backslash */) { + i++; + if (i < n) { + ch = text.charCodeAt(i); + switch (ch) { + case 48 /* _0 */: + characterArray.push(0 /* nullCharacter */); + continue; + case 98 /* b */: + characterArray.push(8 /* backspace */); + continue; + case 102 /* f */: + characterArray.push(12 /* formFeed */); + continue; + case 110 /* n */: + characterArray.push(10 /* lineFeed */); + continue; + case 114 /* r */: + characterArray.push(13 /* carriageReturn */); + continue; + case 116 /* t */: + characterArray.push(9 /* tab */); + continue; + case 118 /* v */: + characterArray.push(11 /* verticalTab */); + continue; + case 120 /* x */: + characterArray.push(hexValue(text, i + 1, 2)); + i += 2; + continue; + case 117 /* u */: + characterArray.push(hexValue(text, i + 1, 4)); + i += 4; + continue; + case 13 /* carriageReturn */: + var nextIndex = i + 1; + if (nextIndex < text.length && text.charCodeAt(nextIndex) === 10 /* lineFeed */) { + i++; + } + continue; + case 10 /* lineFeed */: + case 8233 /* paragraphSeparator */: + case 8232 /* lineSeparator */: + continue; + default: + } + } + } + characterArray.push(ch); + if (i && !(i % 1024)) { + result = result.concat(String.fromCharCode.apply(null, characterArray)); + characterArray.length = 0; + } + } + if (characterArray.length) { + result = result.concat(String.fromCharCode.apply(null, characterArray)); + } + return result; + } + function hexValue(text, start, length) { + var intChar = 0; + for (var i = 0; i < length; i++) { + var ch2 = text.charCodeAt(start + i); + if (!TypeScript.CharacterInfo.isHexDigit(ch2)) { + break; + } + intChar = (intChar << 4) + TypeScript.CharacterInfo.hexValue(ch2); + } + return intChar; + } +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Syntax) { + function realizeToken(token, text) { + return new RealizedToken(token.fullStart(), token.kind(), token.isKeywordConvertedToIdentifier(), token.leadingTrivia(text), token.text(), token.trailingTrivia(text)); + } + Syntax.realizeToken = realizeToken; + function convertKeywordToIdentifier(token) { + return new ConvertedKeywordToken(token); + } + Syntax.convertKeywordToIdentifier = convertKeywordToIdentifier; + function withLeadingTrivia(token, leadingTrivia, text) { + return new RealizedToken(token.fullStart(), token.kind(), token.isKeywordConvertedToIdentifier(), leadingTrivia, token.text(), token.trailingTrivia(text)); + } + Syntax.withLeadingTrivia = withLeadingTrivia; + function withTrailingTrivia(token, trailingTrivia, text) { + return new RealizedToken(token.fullStart(), token.kind(), token.isKeywordConvertedToIdentifier(), token.leadingTrivia(text), token.text(), trailingTrivia); + } + Syntax.withTrailingTrivia = withTrailingTrivia; + function emptyToken(kind) { + return new EmptyToken(kind); + } + Syntax.emptyToken = emptyToken; + var EmptyToken = (function () { + function EmptyToken(_kind) { + this._kind = _kind; + } + EmptyToken.prototype.setFullStart = function (fullStart) { + }; + EmptyToken.prototype.kind = function () { + return this._kind; + }; + EmptyToken.prototype.clone = function () { + return new EmptyToken(this.kind()); + }; + EmptyToken.prototype.isIncrementallyUnusable = function () { + return true; + }; + EmptyToken.prototype.isKeywordConvertedToIdentifier = function () { + return false; + }; + EmptyToken.prototype.fullWidth = function () { + return 0; + }; + EmptyToken.prototype.position = function () { + var previousElement = this.previousNonZeroWidthElement(); + return previousElement === null ? 0 : TypeScript.fullStart(previousElement) + TypeScript.fullWidth(previousElement); + }; + EmptyToken.prototype.previousNonZeroWidthElement = function () { + var current = this; + while (true) { + var parent = current.parent; + if (parent === null) { + TypeScript.Debug.assert(current.kind() === 120 /* SourceUnit */, "We had a node without a parent that was not the root node!"); + return null; + } + for (var i = 0, n = TypeScript.childCount(parent); i < n; i++) { + if (TypeScript.childAt(parent, i) === current) { + break; + } + } + TypeScript.Debug.assert(i !== n, "Could not find current element in parent's child list!"); + for (var j = i - 1; j >= 0; j--) { + var sibling = TypeScript.childAt(parent, j); + if (sibling && TypeScript.fullWidth(sibling) > 0) { + return sibling; + } + } + current = current.parent; + } + }; + EmptyToken.prototype.fullStart = function () { + return this.position(); + }; + EmptyToken.prototype.text = function () { + return ""; + }; + EmptyToken.prototype.fullText = function () { + return ""; + }; + EmptyToken.prototype.hasLeadingTrivia = function () { + return false; + }; + EmptyToken.prototype.leadingTriviaWidth = function () { + return 0; + }; + EmptyToken.prototype.hasTrailingTrivia = function () { + return false; + }; + EmptyToken.prototype.hasSkippedToken = function () { + return false; + }; + EmptyToken.prototype.trailingTriviaWidth = function () { + return 0; + }; + EmptyToken.prototype.leadingTrivia = function () { + return Syntax.emptyTriviaList; + }; + EmptyToken.prototype.trailingTrivia = function () { + return Syntax.emptyTriviaList; + }; + return EmptyToken; + })(); + var RealizedToken = (function () { + function RealizedToken(fullStart, kind, isKeywordConvertedToIdentifier, leadingTrivia, text, trailingTrivia) { + this._fullStart = fullStart; + this._kind = kind; + this._isKeywordConvertedToIdentifier = isKeywordConvertedToIdentifier; + this._text = text; + this._leadingTrivia = leadingTrivia.clone(); + this._trailingTrivia = trailingTrivia.clone(); + if (!this._leadingTrivia.isShared()) { + this._leadingTrivia.parent = this; + } + if (!this._trailingTrivia.isShared()) { + this._trailingTrivia.parent = this; + } + } + RealizedToken.prototype.setFullStart = function (fullStart) { + this._fullStart = fullStart; + }; + RealizedToken.prototype.kind = function () { + return this._kind; + }; + RealizedToken.prototype.clone = function () { + return new RealizedToken(this._fullStart, this.kind(), this._isKeywordConvertedToIdentifier, this._leadingTrivia, this._text, this._trailingTrivia); + }; + RealizedToken.prototype.isIncrementallyUnusable = function () { + return true; + }; + RealizedToken.prototype.isKeywordConvertedToIdentifier = function () { + return this._isKeywordConvertedToIdentifier; + }; + RealizedToken.prototype.fullStart = function () { + return this._fullStart; + }; + RealizedToken.prototype.fullWidth = function () { + return this._leadingTrivia.fullWidth() + this._text.length + this._trailingTrivia.fullWidth(); + }; + RealizedToken.prototype.text = function () { + return this._text; + }; + RealizedToken.prototype.fullText = function () { + return this._leadingTrivia.fullText() + this.text() + this._trailingTrivia.fullText(); + }; + RealizedToken.prototype.hasLeadingTrivia = function () { + return this._leadingTrivia.count() > 0; + }; + RealizedToken.prototype.hasTrailingTrivia = function () { + return this._trailingTrivia.count() > 0; + }; + RealizedToken.prototype.leadingTriviaWidth = function () { + return this._leadingTrivia.fullWidth(); + }; + RealizedToken.prototype.trailingTriviaWidth = function () { + return this._trailingTrivia.fullWidth(); + }; + RealizedToken.prototype.hasSkippedToken = function () { + return this._leadingTrivia.hasSkippedToken() || this._trailingTrivia.hasSkippedToken(); + }; + RealizedToken.prototype.leadingTrivia = function () { + return this._leadingTrivia; + }; + RealizedToken.prototype.trailingTrivia = function () { + return this._trailingTrivia; + }; + return RealizedToken; + })(); + var ConvertedKeywordToken = (function () { + function ConvertedKeywordToken(underlyingToken) { + this.underlyingToken = underlyingToken; + } + ConvertedKeywordToken.prototype.kind = function () { + return 11 /* IdentifierName */; + }; + ConvertedKeywordToken.prototype.setFullStart = function (fullStart) { + this.underlyingToken.setFullStart(fullStart); + }; + ConvertedKeywordToken.prototype.fullStart = function () { + return this.underlyingToken.fullStart(); + }; + ConvertedKeywordToken.prototype.fullWidth = function () { + return this.underlyingToken.fullWidth(); + }; + ConvertedKeywordToken.prototype.text = function () { + return this.underlyingToken.text(); + }; + ConvertedKeywordToken.prototype.syntaxTreeText = function (text) { + var result = text || TypeScript.syntaxTree(this).text; + TypeScript.Debug.assert(result); + return result; + }; + ConvertedKeywordToken.prototype.fullText = function (text) { + return this.underlyingToken.fullText(this.syntaxTreeText(text)); + }; + ConvertedKeywordToken.prototype.hasLeadingTrivia = function () { + return this.underlyingToken.hasLeadingTrivia(); + }; + ConvertedKeywordToken.prototype.hasTrailingTrivia = function () { + return this.underlyingToken.hasTrailingTrivia(); + }; + ConvertedKeywordToken.prototype.hasSkippedToken = function () { + return this.underlyingToken.hasSkippedToken(); + }; + ConvertedKeywordToken.prototype.leadingTrivia = function (text) { + var result = this.underlyingToken.leadingTrivia(this.syntaxTreeText(text)); + result.parent = this; + return result; + }; + ConvertedKeywordToken.prototype.trailingTrivia = function (text) { + var result = this.underlyingToken.trailingTrivia(this.syntaxTreeText(text)); + result.parent = this; + return result; + }; + ConvertedKeywordToken.prototype.leadingTriviaWidth = function (text) { + return this.underlyingToken.leadingTriviaWidth(this.syntaxTreeText(text)); + }; + ConvertedKeywordToken.prototype.trailingTriviaWidth = function (text) { + return this.underlyingToken.trailingTriviaWidth(this.syntaxTreeText(text)); + }; + ConvertedKeywordToken.prototype.isKeywordConvertedToIdentifier = function () { + return true; + }; + ConvertedKeywordToken.prototype.isIncrementallyUnusable = function () { + return this.underlyingToken.isIncrementallyUnusable(); + }; + ConvertedKeywordToken.prototype.clone = function () { + return new ConvertedKeywordToken(this.underlyingToken); + }; + return ConvertedKeywordToken; + })(); + })(TypeScript.Syntax || (TypeScript.Syntax = {})); + var Syntax = TypeScript.Syntax; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Syntax) { + var AbstractTrivia = (function () { + function AbstractTrivia(_kind) { + this._kind = _kind; + } + AbstractTrivia.prototype.kind = function () { + return this._kind; + }; + AbstractTrivia.prototype.clone = function () { + throw TypeScript.Errors.abstract(); + }; + AbstractTrivia.prototype.fullStart = function () { + throw TypeScript.Errors.abstract(); + }; + AbstractTrivia.prototype.fullWidth = function () { + throw TypeScript.Errors.abstract(); + }; + AbstractTrivia.prototype.fullText = function () { + throw TypeScript.Errors.abstract(); + }; + AbstractTrivia.prototype.skippedToken = function () { + throw TypeScript.Errors.abstract(); + }; + AbstractTrivia.prototype.isWhitespace = function () { + return this.kind() === 4 /* WhitespaceTrivia */; + }; + AbstractTrivia.prototype.isComment = function () { + return this.kind() === 7 /* SingleLineCommentTrivia */ || this.kind() === 6 /* MultiLineCommentTrivia */; + }; + AbstractTrivia.prototype.isNewLine = function () { + return this.kind() === 5 /* NewLineTrivia */; + }; + AbstractTrivia.prototype.isSkippedToken = function () { + return this.kind() === 8 /* SkippedTokenTrivia */; + }; + return AbstractTrivia; + })(); + var SkippedTokenTrivia = (function (_super) { + __extends(SkippedTokenTrivia, _super); + function SkippedTokenTrivia(_skippedToken, _fullText) { + _super.call(this, 8 /* SkippedTokenTrivia */); + this._skippedToken = _skippedToken; + this._fullText = _fullText; + _skippedToken.parent = this; + } + SkippedTokenTrivia.prototype.clone = function () { + return new SkippedTokenTrivia(this._skippedToken.clone(), this._fullText); + }; + SkippedTokenTrivia.prototype.fullStart = function () { + return this._skippedToken.fullStart(); + }; + SkippedTokenTrivia.prototype.fullWidth = function () { + return this.fullText().length; + }; + SkippedTokenTrivia.prototype.fullText = function () { + return this._fullText; + }; + SkippedTokenTrivia.prototype.skippedToken = function () { + return this._skippedToken; + }; + return SkippedTokenTrivia; + })(AbstractTrivia); + var DeferredTrivia = (function (_super) { + __extends(DeferredTrivia, _super); + function DeferredTrivia(kind, _text, _fullStart, _fullWidth) { + _super.call(this, kind); + this._text = _text; + this._fullStart = _fullStart; + this._fullWidth = _fullWidth; + } + DeferredTrivia.prototype.clone = function () { + return new DeferredTrivia(this.kind(), this._text, this._fullStart, this._fullWidth); + }; + DeferredTrivia.prototype.fullStart = function () { + return this._fullStart; + }; + DeferredTrivia.prototype.fullWidth = function () { + return this._fullWidth; + }; + DeferredTrivia.prototype.fullText = function () { + return this._text.substr(this._fullStart, this._fullWidth); + }; + DeferredTrivia.prototype.skippedToken = function () { + throw TypeScript.Errors.invalidOperation(); + }; + return DeferredTrivia; + })(AbstractTrivia); + function deferredTrivia(kind, text, fullStart, fullWidth) { + return new DeferredTrivia(kind, text, fullStart, fullWidth); + } + Syntax.deferredTrivia = deferredTrivia; + function skippedTokenTrivia(token, text) { + TypeScript.Debug.assert(!token.hasLeadingTrivia()); + TypeScript.Debug.assert(!token.hasTrailingTrivia()); + TypeScript.Debug.assert(token.fullWidth() > 0); + return new SkippedTokenTrivia(token, token.fullText(text)); + } + Syntax.skippedTokenTrivia = skippedTokenTrivia; + function splitMultiLineCommentTriviaIntoMultipleLines(trivia) { + var result = []; + var triviaText = trivia.fullText(); + var currentIndex = 0; + for (var i = 0; i < triviaText.length; i++) { + var ch = triviaText.charCodeAt(i); + var isCarriageReturnLineFeed = false; + switch (ch) { + case 13 /* carriageReturn */: + if (i < triviaText.length - 1 && triviaText.charCodeAt(i + 1) === 10 /* lineFeed */) { + i++; + } + case 10 /* lineFeed */: + case 8233 /* paragraphSeparator */: + case 8232 /* lineSeparator */: + result.push(triviaText.substring(currentIndex, i + 1)); + currentIndex = i + 1; + continue; + } + } + result.push(triviaText.substring(currentIndex)); + return result; + } + Syntax.splitMultiLineCommentTriviaIntoMultipleLines = splitMultiLineCommentTriviaIntoMultipleLines; + })(TypeScript.Syntax || (TypeScript.Syntax = {})); + var Syntax = TypeScript.Syntax; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Syntax) { + var EmptyTriviaList = (function () { + function EmptyTriviaList() { + } + EmptyTriviaList.prototype.kind = function () { + return 3 /* TriviaList */; + }; + EmptyTriviaList.prototype.isShared = function () { + return true; + }; + EmptyTriviaList.prototype.count = function () { + return 0; + }; + EmptyTriviaList.prototype.syntaxTriviaAt = function (index) { + throw TypeScript.Errors.argumentOutOfRange("index"); + }; + EmptyTriviaList.prototype.last = function () { + throw TypeScript.Errors.argumentOutOfRange("index"); + }; + EmptyTriviaList.prototype.fullWidth = function () { + return 0; + }; + EmptyTriviaList.prototype.fullText = function () { + return ""; + }; + EmptyTriviaList.prototype.hasComment = function () { + return false; + }; + EmptyTriviaList.prototype.hasNewLine = function () { + return false; + }; + EmptyTriviaList.prototype.hasSkippedToken = function () { + return false; + }; + EmptyTriviaList.prototype.toArray = function () { + return []; + }; + EmptyTriviaList.prototype.clone = function () { + return this; + }; + return EmptyTriviaList; + })(); + ; + Syntax.emptyTriviaList = new EmptyTriviaList(); + function isComment(trivia) { + return trivia.kind() === 6 /* MultiLineCommentTrivia */ || trivia.kind() === 7 /* SingleLineCommentTrivia */; + } + var SingletonSyntaxTriviaList = (function () { + function SingletonSyntaxTriviaList(item) { + this.item = item.clone(); + this.item.parent = this; + } + SingletonSyntaxTriviaList.prototype.kind = function () { + return 3 /* TriviaList */; + }; + SingletonSyntaxTriviaList.prototype.isShared = function () { + return false; + }; + SingletonSyntaxTriviaList.prototype.count = function () { + return 1; + }; + SingletonSyntaxTriviaList.prototype.syntaxTriviaAt = function (index) { + if (index !== 0) { + throw TypeScript.Errors.argumentOutOfRange("index"); + } + return this.item; + }; + SingletonSyntaxTriviaList.prototype.last = function () { + return this.item; + }; + SingletonSyntaxTriviaList.prototype.fullWidth = function () { + return this.item.fullWidth(); + }; + SingletonSyntaxTriviaList.prototype.fullText = function () { + return this.item.fullText(); + }; + SingletonSyntaxTriviaList.prototype.hasComment = function () { + return isComment(this.item); + }; + SingletonSyntaxTriviaList.prototype.hasNewLine = function () { + return this.item.kind() === 5 /* NewLineTrivia */; + }; + SingletonSyntaxTriviaList.prototype.hasSkippedToken = function () { + return this.item.kind() === 8 /* SkippedTokenTrivia */; + }; + SingletonSyntaxTriviaList.prototype.toArray = function () { + return [this.item]; + }; + SingletonSyntaxTriviaList.prototype.clone = function () { + return new SingletonSyntaxTriviaList(this.item.clone()); + }; + return SingletonSyntaxTriviaList; + })(); + var NormalSyntaxTriviaList = (function () { + function NormalSyntaxTriviaList(trivia) { + var _this = this; + this.trivia = trivia.map(function (t) { + var cloned = t.clone(); + cloned.parent = _this; + return cloned; + }); + } + NormalSyntaxTriviaList.prototype.kind = function () { + return 3 /* TriviaList */; + }; + NormalSyntaxTriviaList.prototype.isShared = function () { + return false; + }; + NormalSyntaxTriviaList.prototype.count = function () { + return this.trivia.length; + }; + NormalSyntaxTriviaList.prototype.syntaxTriviaAt = function (index) { + if (index < 0 || index >= this.trivia.length) { + throw TypeScript.Errors.argumentOutOfRange("index"); + } + return this.trivia[index]; + }; + NormalSyntaxTriviaList.prototype.last = function () { + return this.trivia[this.trivia.length - 1]; + }; + NormalSyntaxTriviaList.prototype.fullWidth = function () { + return TypeScript.ArrayUtilities.sum(this.trivia, function (t) { return t.fullWidth(); }); + }; + NormalSyntaxTriviaList.prototype.fullText = function () { + var result = []; + for (var i = 0, n = this.trivia.length; i < n; i++) { + result.push(this.trivia[i].fullText()); + } + return result.join(""); + }; + NormalSyntaxTriviaList.prototype.hasComment = function () { + for (var i = 0; i < this.trivia.length; i++) { + if (isComment(this.trivia[i])) { + return true; + } + } + return false; + }; + NormalSyntaxTriviaList.prototype.hasNewLine = function () { + for (var i = 0; i < this.trivia.length; i++) { + if (this.trivia[i].kind() === 5 /* NewLineTrivia */) { + return true; + } + } + return false; + }; + NormalSyntaxTriviaList.prototype.hasSkippedToken = function () { + for (var i = 0; i < this.trivia.length; i++) { + if (this.trivia[i].kind() === 8 /* SkippedTokenTrivia */) { + return true; + } + } + return false; + }; + NormalSyntaxTriviaList.prototype.toArray = function () { + return this.trivia.slice(0); + }; + NormalSyntaxTriviaList.prototype.clone = function () { + return new NormalSyntaxTriviaList(this.trivia.map(function (t) { return t.clone(); })); + }; + return NormalSyntaxTriviaList; + })(); + function triviaList(trivia) { + if (trivia === undefined || trivia === null || trivia.length === 0) { + return Syntax.emptyTriviaList; + } + if (trivia.length === 1) { + return new SingletonSyntaxTriviaList(trivia[0]); + } + return new NormalSyntaxTriviaList(trivia); + } + Syntax.triviaList = triviaList; + })(TypeScript.Syntax || (TypeScript.Syntax = {})); + var Syntax = TypeScript.Syntax; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var SyntaxUtilities = (function () { + function SyntaxUtilities() { + } + SyntaxUtilities.isAnyFunctionExpressionOrDeclaration = function (ast) { + switch (ast.kind()) { + case 219 /* SimpleArrowFunctionExpression */: + case 218 /* ParenthesizedArrowFunctionExpression */: + case 222 /* FunctionExpression */: + case 129 /* FunctionDeclaration */: + case 135 /* MemberFunctionDeclaration */: + case 241 /* FunctionPropertyAssignment */: + case 137 /* ConstructorDeclaration */: + case 139 /* GetAccessor */: + case 140 /* SetAccessor */: + return true; + } + return false; + }; + SyntaxUtilities.isLastTokenOnLine = function (token, text) { + var _nextToken = TypeScript.nextToken(token, text); + if (_nextToken === null) { + return true; + } + var lineMap = text.lineMap(); + var tokenLine = lineMap.getLineNumberFromPosition(TypeScript.end(token, text)); + var nextTokenLine = lineMap.getLineNumberFromPosition(TypeScript.start(_nextToken, text)); + return tokenLine !== nextTokenLine; + }; + SyntaxUtilities.isLeftHandSizeExpression = function (element) { + if (element) { + switch (element.kind()) { + case 212 /* MemberAccessExpression */: + case 221 /* ElementAccessExpression */: + case 216 /* ObjectCreationExpression */: + case 213 /* InvocationExpression */: + case 214 /* ArrayLiteralExpression */: + case 217 /* ParenthesizedExpression */: + case 215 /* ObjectLiteralExpression */: + case 222 /* FunctionExpression */: + case 11 /* IdentifierName */: + case 12 /* RegularExpressionLiteral */: + case 13 /* NumericLiteral */: + case 14 /* StringLiteral */: + case 24 /* FalseKeyword */: + case 32 /* NullKeyword */: + case 35 /* ThisKeyword */: + case 37 /* TrueKeyword */: + case 50 /* SuperKeyword */: + return true; + } + } + return false; + }; + SyntaxUtilities.isExpression = function (element) { + if (element) { + switch (element.kind()) { + case 11 /* IdentifierName */: + case 12 /* RegularExpressionLiteral */: + case 13 /* NumericLiteral */: + case 14 /* StringLiteral */: + case 24 /* FalseKeyword */: + case 32 /* NullKeyword */: + case 35 /* ThisKeyword */: + case 37 /* TrueKeyword */: + case 50 /* SuperKeyword */: + case 164 /* PlusExpression */: + case 165 /* NegateExpression */: + case 166 /* BitwiseNotExpression */: + case 167 /* LogicalNotExpression */: + case 168 /* PreIncrementExpression */: + case 169 /* PreDecrementExpression */: + case 170 /* DeleteExpression */: + case 171 /* TypeOfExpression */: + case 172 /* VoidExpression */: + case 173 /* CommaExpression */: + case 174 /* AssignmentExpression */: + case 175 /* AddAssignmentExpression */: + case 176 /* SubtractAssignmentExpression */: + case 177 /* MultiplyAssignmentExpression */: + case 178 /* DivideAssignmentExpression */: + case 179 /* ModuloAssignmentExpression */: + case 180 /* AndAssignmentExpression */: + case 181 /* ExclusiveOrAssignmentExpression */: + case 182 /* OrAssignmentExpression */: + case 183 /* LeftShiftAssignmentExpression */: + case 184 /* SignedRightShiftAssignmentExpression */: + case 185 /* UnsignedRightShiftAssignmentExpression */: + case 186 /* ConditionalExpression */: + case 187 /* LogicalOrExpression */: + case 188 /* LogicalAndExpression */: + case 189 /* BitwiseOrExpression */: + case 190 /* BitwiseExclusiveOrExpression */: + case 191 /* BitwiseAndExpression */: + case 192 /* EqualsWithTypeConversionExpression */: + case 193 /* NotEqualsWithTypeConversionExpression */: + case 194 /* EqualsExpression */: + case 195 /* NotEqualsExpression */: + case 196 /* LessThanExpression */: + case 197 /* GreaterThanExpression */: + case 198 /* LessThanOrEqualExpression */: + case 199 /* GreaterThanOrEqualExpression */: + case 200 /* InstanceOfExpression */: + case 201 /* InExpression */: + case 202 /* LeftShiftExpression */: + case 203 /* SignedRightShiftExpression */: + case 204 /* UnsignedRightShiftExpression */: + case 205 /* MultiplyExpression */: + case 206 /* DivideExpression */: + case 207 /* ModuloExpression */: + case 208 /* AddExpression */: + case 209 /* SubtractExpression */: + case 210 /* PostIncrementExpression */: + case 211 /* PostDecrementExpression */: + case 212 /* MemberAccessExpression */: + case 213 /* InvocationExpression */: + case 214 /* ArrayLiteralExpression */: + case 215 /* ObjectLiteralExpression */: + case 216 /* ObjectCreationExpression */: + case 217 /* ParenthesizedExpression */: + case 218 /* ParenthesizedArrowFunctionExpression */: + case 219 /* SimpleArrowFunctionExpression */: + case 220 /* CastExpression */: + case 221 /* ElementAccessExpression */: + case 222 /* FunctionExpression */: + case 223 /* OmittedExpression */: + return true; + } + } + return false; + }; + SyntaxUtilities.isSwitchClause = function (element) { + if (element) { + switch (element.kind()) { + case 233 /* CaseSwitchClause */: + case 234 /* DefaultSwitchClause */: + return true; + } + } + return false; + }; + SyntaxUtilities.isTypeMember = function (element) { + if (element) { + switch (element.kind()) { + case 143 /* ConstructSignature */: + case 145 /* MethodSignature */: + case 144 /* IndexSignature */: + case 141 /* PropertySignature */: + case 142 /* CallSignature */: + return true; + } + } + return false; + }; + SyntaxUtilities.isClassElement = function (element) { + if (element) { + switch (element.kind()) { + case 137 /* ConstructorDeclaration */: + case 138 /* IndexMemberDeclaration */: + case 135 /* MemberFunctionDeclaration */: + case 139 /* GetAccessor */: + case 140 /* SetAccessor */: + case 135 /* MemberFunctionDeclaration */: + case 136 /* MemberVariableDeclaration */: + return true; + } + } + return false; + }; + SyntaxUtilities.isModuleElement = function (element) { + if (element) { + switch (element.kind()) { + case 133 /* ImportDeclaration */: + case 134 /* ExportAssignment */: + case 131 /* ClassDeclaration */: + case 128 /* InterfaceDeclaration */: + case 130 /* ModuleDeclaration */: + case 132 /* EnumDeclaration */: + case 129 /* FunctionDeclaration */: + case 148 /* VariableStatement */: + case 146 /* Block */: + case 147 /* IfStatement */: + case 149 /* ExpressionStatement */: + case 157 /* ThrowStatement */: + case 150 /* ReturnStatement */: + case 151 /* SwitchStatement */: + case 152 /* BreakStatement */: + case 153 /* ContinueStatement */: + case 155 /* ForInStatement */: + case 154 /* ForStatement */: + case 158 /* WhileStatement */: + case 163 /* WithStatement */: + case 156 /* EmptyStatement */: + case 159 /* TryStatement */: + case 160 /* LabeledStatement */: + case 161 /* DoStatement */: + case 162 /* DebuggerStatement */: + return true; + } + } + return false; + }; + SyntaxUtilities.isStatement = function (element) { + if (element) { + switch (element.kind()) { + case 129 /* FunctionDeclaration */: + case 148 /* VariableStatement */: + case 146 /* Block */: + case 147 /* IfStatement */: + case 149 /* ExpressionStatement */: + case 157 /* ThrowStatement */: + case 150 /* ReturnStatement */: + case 151 /* SwitchStatement */: + case 152 /* BreakStatement */: + case 153 /* ContinueStatement */: + case 155 /* ForInStatement */: + case 154 /* ForStatement */: + case 158 /* WhileStatement */: + case 163 /* WithStatement */: + case 156 /* EmptyStatement */: + case 159 /* TryStatement */: + case 160 /* LabeledStatement */: + case 161 /* DoStatement */: + case 162 /* DebuggerStatement */: + return true; + } + } + return false; + }; + SyntaxUtilities.isAngleBracket = function (positionedElement) { + var element = positionedElement; + var parent = positionedElement.parent; + if (parent !== null && (element.kind() === 80 /* LessThanToken */ || element.kind() === 81 /* GreaterThanToken */)) { + switch (parent.kind()) { + case 228 /* TypeArgumentList */: + case 229 /* TypeParameterList */: + case 220 /* CastExpression */: + return true; + } + } + return false; + }; + SyntaxUtilities.getToken = function (list, kind) { + for (var i = 0, n = list.length; i < n; i++) { + var token = list[i]; + if (token.kind() === kind) { + return token; + } + } + return null; + }; + SyntaxUtilities.containsToken = function (list, kind) { + return SyntaxUtilities.getToken(list, kind) !== null; + }; + SyntaxUtilities.hasExportKeyword = function (moduleElement) { + return SyntaxUtilities.getExportKeyword(moduleElement) !== null; + }; + SyntaxUtilities.getExportKeyword = function (moduleElement) { + switch (moduleElement.kind()) { + case 130 /* ModuleDeclaration */: + case 131 /* ClassDeclaration */: + case 129 /* FunctionDeclaration */: + case 148 /* VariableStatement */: + case 132 /* EnumDeclaration */: + case 128 /* InterfaceDeclaration */: + case 133 /* ImportDeclaration */: + return SyntaxUtilities.getToken(moduleElement.modifiers, 47 /* ExportKeyword */); + default: + return null; + } + }; + SyntaxUtilities.isAmbientDeclarationSyntax = function (positionNode) { + if (!positionNode) { + return false; + } + var node = positionNode; + switch (node.kind()) { + case 130 /* ModuleDeclaration */: + case 131 /* ClassDeclaration */: + case 129 /* FunctionDeclaration */: + case 148 /* VariableStatement */: + case 132 /* EnumDeclaration */: + if (SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */)) { + return true; + } + case 133 /* ImportDeclaration */: + case 137 /* ConstructorDeclaration */: + case 135 /* MemberFunctionDeclaration */: + case 139 /* GetAccessor */: + case 140 /* SetAccessor */: + case 136 /* MemberVariableDeclaration */: + if (SyntaxUtilities.isClassElement(node) || SyntaxUtilities.isModuleElement(node)) { + return SyntaxUtilities.isAmbientDeclarationSyntax(TypeScript.Syntax.containingNode(positionNode)); + } + case 243 /* EnumElement */: + return SyntaxUtilities.isAmbientDeclarationSyntax(TypeScript.Syntax.containingNode(TypeScript.Syntax.containingNode(positionNode))); + default: + return SyntaxUtilities.isAmbientDeclarationSyntax(TypeScript.Syntax.containingNode(positionNode)); + } + }; + return SyntaxUtilities; + })(); + TypeScript.SyntaxUtilities = SyntaxUtilities; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + function visitNodeOrToken(visitor, element) { + if (element === null) { + return null; + } + if (TypeScript.isToken(element)) { + return visitor.visitToken(element); + } + switch (element.kind()) { + case 120 /* SourceUnit */: + return visitor.visitSourceUnit(element); + case 121 /* QualifiedName */: + return visitor.visitQualifiedName(element); + case 122 /* ObjectType */: + return visitor.visitObjectType(element); + case 123 /* FunctionType */: + return visitor.visitFunctionType(element); + case 124 /* ArrayType */: + return visitor.visitArrayType(element); + case 125 /* ConstructorType */: + return visitor.visitConstructorType(element); + case 126 /* GenericType */: + return visitor.visitGenericType(element); + case 127 /* TypeQuery */: + return visitor.visitTypeQuery(element); + case 128 /* InterfaceDeclaration */: + return visitor.visitInterfaceDeclaration(element); + case 129 /* FunctionDeclaration */: + return visitor.visitFunctionDeclaration(element); + case 130 /* ModuleDeclaration */: + return visitor.visitModuleDeclaration(element); + case 131 /* ClassDeclaration */: + return visitor.visitClassDeclaration(element); + case 132 /* EnumDeclaration */: + return visitor.visitEnumDeclaration(element); + case 133 /* ImportDeclaration */: + return visitor.visitImportDeclaration(element); + case 134 /* ExportAssignment */: + return visitor.visitExportAssignment(element); + case 135 /* MemberFunctionDeclaration */: + return visitor.visitMemberFunctionDeclaration(element); + case 136 /* MemberVariableDeclaration */: + return visitor.visitMemberVariableDeclaration(element); + case 137 /* ConstructorDeclaration */: + return visitor.visitConstructorDeclaration(element); + case 138 /* IndexMemberDeclaration */: + return visitor.visitIndexMemberDeclaration(element); + case 139 /* GetAccessor */: + return visitor.visitGetAccessor(element); + case 140 /* SetAccessor */: + return visitor.visitSetAccessor(element); + case 141 /* PropertySignature */: + return visitor.visitPropertySignature(element); + case 142 /* CallSignature */: + return visitor.visitCallSignature(element); + case 143 /* ConstructSignature */: + return visitor.visitConstructSignature(element); + case 144 /* IndexSignature */: + return visitor.visitIndexSignature(element); + case 145 /* MethodSignature */: + return visitor.visitMethodSignature(element); + case 146 /* Block */: + return visitor.visitBlock(element); + case 147 /* IfStatement */: + return visitor.visitIfStatement(element); + case 148 /* VariableStatement */: + return visitor.visitVariableStatement(element); + case 149 /* ExpressionStatement */: + return visitor.visitExpressionStatement(element); + case 150 /* ReturnStatement */: + return visitor.visitReturnStatement(element); + case 151 /* SwitchStatement */: + return visitor.visitSwitchStatement(element); + case 152 /* BreakStatement */: + return visitor.visitBreakStatement(element); + case 153 /* ContinueStatement */: + return visitor.visitContinueStatement(element); + case 154 /* ForStatement */: + return visitor.visitForStatement(element); + case 155 /* ForInStatement */: + return visitor.visitForInStatement(element); + case 156 /* EmptyStatement */: + return visitor.visitEmptyStatement(element); + case 157 /* ThrowStatement */: + return visitor.visitThrowStatement(element); + case 158 /* WhileStatement */: + return visitor.visitWhileStatement(element); + case 159 /* TryStatement */: + return visitor.visitTryStatement(element); + case 160 /* LabeledStatement */: + return visitor.visitLabeledStatement(element); + case 161 /* DoStatement */: + return visitor.visitDoStatement(element); + case 162 /* DebuggerStatement */: + return visitor.visitDebuggerStatement(element); + case 163 /* WithStatement */: + return visitor.visitWithStatement(element); + case 168 /* PreIncrementExpression */: + case 169 /* PreDecrementExpression */: + case 164 /* PlusExpression */: + case 165 /* NegateExpression */: + case 166 /* BitwiseNotExpression */: + case 167 /* LogicalNotExpression */: + return visitor.visitPrefixUnaryExpression(element); + case 170 /* DeleteExpression */: + return visitor.visitDeleteExpression(element); + case 171 /* TypeOfExpression */: + return visitor.visitTypeOfExpression(element); + case 172 /* VoidExpression */: + return visitor.visitVoidExpression(element); + case 186 /* ConditionalExpression */: + return visitor.visitConditionalExpression(element); + case 205 /* MultiplyExpression */: + case 206 /* DivideExpression */: + case 207 /* ModuloExpression */: + case 208 /* AddExpression */: + case 209 /* SubtractExpression */: + case 202 /* LeftShiftExpression */: + case 203 /* SignedRightShiftExpression */: + case 204 /* UnsignedRightShiftExpression */: + case 196 /* LessThanExpression */: + case 197 /* GreaterThanExpression */: + case 198 /* LessThanOrEqualExpression */: + case 199 /* GreaterThanOrEqualExpression */: + case 200 /* InstanceOfExpression */: + case 201 /* InExpression */: + case 192 /* EqualsWithTypeConversionExpression */: + case 193 /* NotEqualsWithTypeConversionExpression */: + case 194 /* EqualsExpression */: + case 195 /* NotEqualsExpression */: + case 191 /* BitwiseAndExpression */: + case 190 /* BitwiseExclusiveOrExpression */: + case 189 /* BitwiseOrExpression */: + case 188 /* LogicalAndExpression */: + case 187 /* LogicalOrExpression */: + case 182 /* OrAssignmentExpression */: + case 180 /* AndAssignmentExpression */: + case 181 /* ExclusiveOrAssignmentExpression */: + case 183 /* LeftShiftAssignmentExpression */: + case 184 /* SignedRightShiftAssignmentExpression */: + case 185 /* UnsignedRightShiftAssignmentExpression */: + case 175 /* AddAssignmentExpression */: + case 176 /* SubtractAssignmentExpression */: + case 177 /* MultiplyAssignmentExpression */: + case 178 /* DivideAssignmentExpression */: + case 179 /* ModuloAssignmentExpression */: + case 174 /* AssignmentExpression */: + case 173 /* CommaExpression */: + return visitor.visitBinaryExpression(element); + case 210 /* PostIncrementExpression */: + case 211 /* PostDecrementExpression */: + return visitor.visitPostfixUnaryExpression(element); + case 212 /* MemberAccessExpression */: + return visitor.visitMemberAccessExpression(element); + case 213 /* InvocationExpression */: + return visitor.visitInvocationExpression(element); + case 214 /* ArrayLiteralExpression */: + return visitor.visitArrayLiteralExpression(element); + case 215 /* ObjectLiteralExpression */: + return visitor.visitObjectLiteralExpression(element); + case 216 /* ObjectCreationExpression */: + return visitor.visitObjectCreationExpression(element); + case 217 /* ParenthesizedExpression */: + return visitor.visitParenthesizedExpression(element); + case 218 /* ParenthesizedArrowFunctionExpression */: + return visitor.visitParenthesizedArrowFunctionExpression(element); + case 219 /* SimpleArrowFunctionExpression */: + return visitor.visitSimpleArrowFunctionExpression(element); + case 220 /* CastExpression */: + return visitor.visitCastExpression(element); + case 221 /* ElementAccessExpression */: + return visitor.visitElementAccessExpression(element); + case 222 /* FunctionExpression */: + return visitor.visitFunctionExpression(element); + case 223 /* OmittedExpression */: + return visitor.visitOmittedExpression(element); + case 224 /* VariableDeclaration */: + return visitor.visitVariableDeclaration(element); + case 225 /* VariableDeclarator */: + return visitor.visitVariableDeclarator(element); + case 226 /* ArgumentList */: + return visitor.visitArgumentList(element); + case 227 /* ParameterList */: + return visitor.visitParameterList(element); + case 228 /* TypeArgumentList */: + return visitor.visitTypeArgumentList(element); + case 229 /* TypeParameterList */: + return visitor.visitTypeParameterList(element); + case 230 /* ExtendsHeritageClause */: + case 231 /* ImplementsHeritageClause */: + return visitor.visitHeritageClause(element); + case 232 /* EqualsValueClause */: + return visitor.visitEqualsValueClause(element); + case 233 /* CaseSwitchClause */: + return visitor.visitCaseSwitchClause(element); + case 234 /* DefaultSwitchClause */: + return visitor.visitDefaultSwitchClause(element); + case 235 /* ElseClause */: + return visitor.visitElseClause(element); + case 236 /* CatchClause */: + return visitor.visitCatchClause(element); + case 237 /* FinallyClause */: + return visitor.visitFinallyClause(element); + case 238 /* TypeParameter */: + return visitor.visitTypeParameter(element); + case 239 /* Constraint */: + return visitor.visitConstraint(element); + case 240 /* SimplePropertyAssignment */: + return visitor.visitSimplePropertyAssignment(element); + case 241 /* FunctionPropertyAssignment */: + return visitor.visitFunctionPropertyAssignment(element); + case 242 /* Parameter */: + return visitor.visitParameter(element); + case 243 /* EnumElement */: + return visitor.visitEnumElement(element); + case 244 /* TypeAnnotation */: + return visitor.visitTypeAnnotation(element); + case 245 /* ExternalModuleReference */: + return visitor.visitExternalModuleReference(element); + case 246 /* ModuleNameModuleReference */: + return visitor.visitModuleNameModuleReference(element); + } + throw TypeScript.Errors.invalidOperation(); + } + TypeScript.visitNodeOrToken = visitNodeOrToken; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var SyntaxWalker = (function () { + function SyntaxWalker() { + } + SyntaxWalker.prototype.visitToken = function (token) { + }; + SyntaxWalker.prototype.visitNode = function (node) { + TypeScript.visitNodeOrToken(this, node); + }; + SyntaxWalker.prototype.visitNodeOrToken = function (nodeOrToken) { + if (TypeScript.isToken(nodeOrToken)) { + this.visitToken(nodeOrToken); + } + else { + this.visitNode(nodeOrToken); + } + }; + SyntaxWalker.prototype.visitOptionalToken = function (token) { + if (token === null) { + return; + } + this.visitToken(token); + }; + SyntaxWalker.prototype.visitOptionalNode = function (node) { + if (node === null) { + return; + } + this.visitNode(node); + }; + SyntaxWalker.prototype.visitOptionalNodeOrToken = function (nodeOrToken) { + if (nodeOrToken === null) { + return; + } + this.visitNodeOrToken(nodeOrToken); + }; + SyntaxWalker.prototype.visitList = function (list) { + for (var i = 0, n = list.length; i < n; i++) { + this.visitNodeOrToken(list[i]); + } + }; + SyntaxWalker.prototype.visitSeparatedList = function (list) { + for (var i = 0, n = TypeScript.childCount(list); i < n; i++) { + var item = TypeScript.childAt(list, i); + this.visitNodeOrToken(item); + } + }; + SyntaxWalker.prototype.visitSourceUnit = function (node) { + this.visitList(node.moduleElements); + this.visitToken(node.endOfFileToken); + }; + SyntaxWalker.prototype.visitQualifiedName = function (node) { + this.visitNodeOrToken(node.left); + this.visitToken(node.dotToken); + this.visitToken(node.right); + }; + SyntaxWalker.prototype.visitObjectType = function (node) { + this.visitToken(node.openBraceToken); + this.visitSeparatedList(node.typeMembers); + this.visitToken(node.closeBraceToken); + }; + SyntaxWalker.prototype.visitFunctionType = function (node) { + this.visitOptionalNode(node.typeParameterList); + this.visitNode(node.parameterList); + this.visitToken(node.equalsGreaterThanToken); + this.visitNodeOrToken(node.type); + }; + SyntaxWalker.prototype.visitArrayType = function (node) { + this.visitNodeOrToken(node.type); + this.visitToken(node.openBracketToken); + this.visitToken(node.closeBracketToken); + }; + SyntaxWalker.prototype.visitConstructorType = function (node) { + this.visitToken(node.newKeyword); + this.visitOptionalNode(node.typeParameterList); + this.visitNode(node.parameterList); + this.visitToken(node.equalsGreaterThanToken); + this.visitNodeOrToken(node.type); + }; + SyntaxWalker.prototype.visitGenericType = function (node) { + this.visitNodeOrToken(node.name); + this.visitNode(node.typeArgumentList); + }; + SyntaxWalker.prototype.visitTypeQuery = function (node) { + this.visitToken(node.typeOfKeyword); + this.visitNodeOrToken(node.name); + }; + SyntaxWalker.prototype.visitInterfaceDeclaration = function (node) { + this.visitList(node.modifiers); + this.visitToken(node.interfaceKeyword); + this.visitToken(node.identifier); + this.visitOptionalNode(node.typeParameterList); + this.visitList(node.heritageClauses); + this.visitNode(node.body); + }; + SyntaxWalker.prototype.visitFunctionDeclaration = function (node) { + this.visitList(node.modifiers); + this.visitToken(node.functionKeyword); + this.visitToken(node.identifier); + this.visitNode(node.callSignature); + this.visitOptionalNode(node.block); + this.visitOptionalToken(node.semicolonToken); + }; + SyntaxWalker.prototype.visitModuleDeclaration = function (node) { + this.visitList(node.modifiers); + this.visitToken(node.moduleKeyword); + this.visitOptionalNodeOrToken(node.name); + this.visitOptionalToken(node.stringLiteral); + this.visitToken(node.openBraceToken); + this.visitList(node.moduleElements); + this.visitToken(node.closeBraceToken); + }; + SyntaxWalker.prototype.visitClassDeclaration = function (node) { + this.visitList(node.modifiers); + this.visitToken(node.classKeyword); + this.visitToken(node.identifier); + this.visitOptionalNode(node.typeParameterList); + this.visitList(node.heritageClauses); + this.visitToken(node.openBraceToken); + this.visitList(node.classElements); + this.visitToken(node.closeBraceToken); + }; + SyntaxWalker.prototype.visitEnumDeclaration = function (node) { + this.visitList(node.modifiers); + this.visitToken(node.enumKeyword); + this.visitToken(node.identifier); + this.visitToken(node.openBraceToken); + this.visitSeparatedList(node.enumElements); + this.visitToken(node.closeBraceToken); + }; + SyntaxWalker.prototype.visitImportDeclaration = function (node) { + this.visitList(node.modifiers); + this.visitToken(node.importKeyword); + this.visitToken(node.identifier); + this.visitToken(node.equalsToken); + this.visitNodeOrToken(node.moduleReference); + this.visitOptionalToken(node.semicolonToken); + }; + SyntaxWalker.prototype.visitExportAssignment = function (node) { + this.visitToken(node.exportKeyword); + this.visitToken(node.equalsToken); + this.visitToken(node.identifier); + this.visitOptionalToken(node.semicolonToken); + }; + SyntaxWalker.prototype.visitMemberFunctionDeclaration = function (node) { + this.visitList(node.modifiers); + this.visitToken(node.propertyName); + this.visitNode(node.callSignature); + this.visitOptionalNode(node.block); + this.visitOptionalToken(node.semicolonToken); + }; + SyntaxWalker.prototype.visitMemberVariableDeclaration = function (node) { + this.visitList(node.modifiers); + this.visitNode(node.variableDeclarator); + this.visitOptionalToken(node.semicolonToken); + }; + SyntaxWalker.prototype.visitConstructorDeclaration = function (node) { + this.visitList(node.modifiers); + this.visitToken(node.constructorKeyword); + this.visitNode(node.callSignature); + this.visitOptionalNode(node.block); + this.visitOptionalToken(node.semicolonToken); + }; + SyntaxWalker.prototype.visitIndexMemberDeclaration = function (node) { + this.visitList(node.modifiers); + this.visitNode(node.indexSignature); + this.visitOptionalToken(node.semicolonToken); + }; + SyntaxWalker.prototype.visitGetAccessor = function (node) { + this.visitList(node.modifiers); + this.visitToken(node.getKeyword); + this.visitToken(node.propertyName); + this.visitNode(node.callSignature); + this.visitNode(node.block); + }; + SyntaxWalker.prototype.visitSetAccessor = function (node) { + this.visitList(node.modifiers); + this.visitToken(node.setKeyword); + this.visitToken(node.propertyName); + this.visitNode(node.callSignature); + this.visitNode(node.block); + }; + SyntaxWalker.prototype.visitPropertySignature = function (node) { + this.visitToken(node.propertyName); + this.visitOptionalToken(node.questionToken); + this.visitOptionalNode(node.typeAnnotation); + }; + SyntaxWalker.prototype.visitCallSignature = function (node) { + this.visitOptionalNode(node.typeParameterList); + this.visitNode(node.parameterList); + this.visitOptionalNode(node.typeAnnotation); + }; + SyntaxWalker.prototype.visitConstructSignature = function (node) { + this.visitToken(node.newKeyword); + this.visitNode(node.callSignature); + }; + SyntaxWalker.prototype.visitIndexSignature = function (node) { + this.visitToken(node.openBracketToken); + this.visitSeparatedList(node.parameters); + this.visitToken(node.closeBracketToken); + this.visitOptionalNode(node.typeAnnotation); + }; + SyntaxWalker.prototype.visitMethodSignature = function (node) { + this.visitToken(node.propertyName); + this.visitOptionalToken(node.questionToken); + this.visitNode(node.callSignature); + }; + SyntaxWalker.prototype.visitBlock = function (node) { + this.visitToken(node.openBraceToken); + this.visitList(node.statements); + this.visitToken(node.closeBraceToken); + }; + SyntaxWalker.prototype.visitIfStatement = function (node) { + this.visitToken(node.ifKeyword); + this.visitToken(node.openParenToken); + this.visitNodeOrToken(node.condition); + this.visitToken(node.closeParenToken); + this.visitNodeOrToken(node.statement); + this.visitOptionalNode(node.elseClause); + }; + SyntaxWalker.prototype.visitVariableStatement = function (node) { + this.visitList(node.modifiers); + this.visitNode(node.variableDeclaration); + this.visitOptionalToken(node.semicolonToken); + }; + SyntaxWalker.prototype.visitExpressionStatement = function (node) { + this.visitNodeOrToken(node.expression); + this.visitOptionalToken(node.semicolonToken); + }; + SyntaxWalker.prototype.visitReturnStatement = function (node) { + this.visitToken(node.returnKeyword); + this.visitOptionalNodeOrToken(node.expression); + this.visitOptionalToken(node.semicolonToken); + }; + SyntaxWalker.prototype.visitSwitchStatement = function (node) { + this.visitToken(node.switchKeyword); + this.visitToken(node.openParenToken); + this.visitNodeOrToken(node.expression); + this.visitToken(node.closeParenToken); + this.visitToken(node.openBraceToken); + this.visitList(node.switchClauses); + this.visitToken(node.closeBraceToken); + }; + SyntaxWalker.prototype.visitBreakStatement = function (node) { + this.visitToken(node.breakKeyword); + this.visitOptionalToken(node.identifier); + this.visitOptionalToken(node.semicolonToken); + }; + SyntaxWalker.prototype.visitContinueStatement = function (node) { + this.visitToken(node.continueKeyword); + this.visitOptionalToken(node.identifier); + this.visitOptionalToken(node.semicolonToken); + }; + SyntaxWalker.prototype.visitForStatement = function (node) { + this.visitToken(node.forKeyword); + this.visitToken(node.openParenToken); + this.visitOptionalNode(node.variableDeclaration); + this.visitOptionalNodeOrToken(node.initializer); + this.visitToken(node.firstSemicolonToken); + this.visitOptionalNodeOrToken(node.condition); + this.visitToken(node.secondSemicolonToken); + this.visitOptionalNodeOrToken(node.incrementor); + this.visitToken(node.closeParenToken); + this.visitNodeOrToken(node.statement); + }; + SyntaxWalker.prototype.visitForInStatement = function (node) { + this.visitToken(node.forKeyword); + this.visitToken(node.openParenToken); + this.visitOptionalNode(node.variableDeclaration); + this.visitOptionalNodeOrToken(node.left); + this.visitToken(node.inKeyword); + this.visitNodeOrToken(node.expression); + this.visitToken(node.closeParenToken); + this.visitNodeOrToken(node.statement); + }; + SyntaxWalker.prototype.visitEmptyStatement = function (node) { + this.visitToken(node.semicolonToken); + }; + SyntaxWalker.prototype.visitThrowStatement = function (node) { + this.visitToken(node.throwKeyword); + this.visitNodeOrToken(node.expression); + this.visitOptionalToken(node.semicolonToken); + }; + SyntaxWalker.prototype.visitWhileStatement = function (node) { + this.visitToken(node.whileKeyword); + this.visitToken(node.openParenToken); + this.visitNodeOrToken(node.condition); + this.visitToken(node.closeParenToken); + this.visitNodeOrToken(node.statement); + }; + SyntaxWalker.prototype.visitTryStatement = function (node) { + this.visitToken(node.tryKeyword); + this.visitNode(node.block); + this.visitOptionalNode(node.catchClause); + this.visitOptionalNode(node.finallyClause); + }; + SyntaxWalker.prototype.visitLabeledStatement = function (node) { + this.visitToken(node.identifier); + this.visitToken(node.colonToken); + this.visitNodeOrToken(node.statement); + }; + SyntaxWalker.prototype.visitDoStatement = function (node) { + this.visitToken(node.doKeyword); + this.visitNodeOrToken(node.statement); + this.visitToken(node.whileKeyword); + this.visitToken(node.openParenToken); + this.visitNodeOrToken(node.condition); + this.visitToken(node.closeParenToken); + this.visitOptionalToken(node.semicolonToken); + }; + SyntaxWalker.prototype.visitDebuggerStatement = function (node) { + this.visitToken(node.debuggerKeyword); + this.visitOptionalToken(node.semicolonToken); + }; + SyntaxWalker.prototype.visitWithStatement = function (node) { + this.visitToken(node.withKeyword); + this.visitToken(node.openParenToken); + this.visitNodeOrToken(node.condition); + this.visitToken(node.closeParenToken); + this.visitNodeOrToken(node.statement); + }; + SyntaxWalker.prototype.visitPrefixUnaryExpression = function (node) { + this.visitToken(node.operatorToken); + this.visitNodeOrToken(node.operand); + }; + SyntaxWalker.prototype.visitDeleteExpression = function (node) { + this.visitToken(node.deleteKeyword); + this.visitNodeOrToken(node.expression); + }; + SyntaxWalker.prototype.visitTypeOfExpression = function (node) { + this.visitToken(node.typeOfKeyword); + this.visitNodeOrToken(node.expression); + }; + SyntaxWalker.prototype.visitVoidExpression = function (node) { + this.visitToken(node.voidKeyword); + this.visitNodeOrToken(node.expression); + }; + SyntaxWalker.prototype.visitConditionalExpression = function (node) { + this.visitNodeOrToken(node.condition); + this.visitToken(node.questionToken); + this.visitNodeOrToken(node.whenTrue); + this.visitToken(node.colonToken); + this.visitNodeOrToken(node.whenFalse); + }; + SyntaxWalker.prototype.visitBinaryExpression = function (node) { + this.visitNodeOrToken(node.left); + this.visitToken(node.operatorToken); + this.visitNodeOrToken(node.right); + }; + SyntaxWalker.prototype.visitPostfixUnaryExpression = function (node) { + this.visitNodeOrToken(node.operand); + this.visitToken(node.operatorToken); + }; + SyntaxWalker.prototype.visitMemberAccessExpression = function (node) { + this.visitNodeOrToken(node.expression); + this.visitToken(node.dotToken); + this.visitToken(node.name); + }; + SyntaxWalker.prototype.visitInvocationExpression = function (node) { + this.visitNodeOrToken(node.expression); + this.visitNode(node.argumentList); + }; + SyntaxWalker.prototype.visitArrayLiteralExpression = function (node) { + this.visitToken(node.openBracketToken); + this.visitSeparatedList(node.expressions); + this.visitToken(node.closeBracketToken); + }; + SyntaxWalker.prototype.visitObjectLiteralExpression = function (node) { + this.visitToken(node.openBraceToken); + this.visitSeparatedList(node.propertyAssignments); + this.visitToken(node.closeBraceToken); + }; + SyntaxWalker.prototype.visitObjectCreationExpression = function (node) { + this.visitToken(node.newKeyword); + this.visitNodeOrToken(node.expression); + this.visitOptionalNode(node.argumentList); + }; + SyntaxWalker.prototype.visitParenthesizedExpression = function (node) { + this.visitToken(node.openParenToken); + this.visitNodeOrToken(node.expression); + this.visitToken(node.closeParenToken); + }; + SyntaxWalker.prototype.visitParenthesizedArrowFunctionExpression = function (node) { + this.visitNode(node.callSignature); + this.visitToken(node.equalsGreaterThanToken); + this.visitOptionalNode(node.block); + this.visitOptionalNodeOrToken(node.expression); + }; + SyntaxWalker.prototype.visitSimpleArrowFunctionExpression = function (node) { + this.visitNode(node.parameter); + this.visitToken(node.equalsGreaterThanToken); + this.visitOptionalNode(node.block); + this.visitOptionalNodeOrToken(node.expression); + }; + SyntaxWalker.prototype.visitCastExpression = function (node) { + this.visitToken(node.lessThanToken); + this.visitNodeOrToken(node.type); + this.visitToken(node.greaterThanToken); + this.visitNodeOrToken(node.expression); + }; + SyntaxWalker.prototype.visitElementAccessExpression = function (node) { + this.visitNodeOrToken(node.expression); + this.visitToken(node.openBracketToken); + this.visitNodeOrToken(node.argumentExpression); + this.visitToken(node.closeBracketToken); + }; + SyntaxWalker.prototype.visitFunctionExpression = function (node) { + this.visitToken(node.functionKeyword); + this.visitOptionalToken(node.identifier); + this.visitNode(node.callSignature); + this.visitNode(node.block); + }; + SyntaxWalker.prototype.visitOmittedExpression = function (node) { + }; + SyntaxWalker.prototype.visitVariableDeclaration = function (node) { + this.visitToken(node.varKeyword); + this.visitSeparatedList(node.variableDeclarators); + }; + SyntaxWalker.prototype.visitVariableDeclarator = function (node) { + this.visitToken(node.propertyName); + this.visitOptionalNode(node.typeAnnotation); + this.visitOptionalNode(node.equalsValueClause); + }; + SyntaxWalker.prototype.visitArgumentList = function (node) { + this.visitOptionalNode(node.typeArgumentList); + this.visitToken(node.openParenToken); + this.visitSeparatedList(node.arguments); + this.visitToken(node.closeParenToken); + }; + SyntaxWalker.prototype.visitParameterList = function (node) { + this.visitToken(node.openParenToken); + this.visitSeparatedList(node.parameters); + this.visitToken(node.closeParenToken); + }; + SyntaxWalker.prototype.visitTypeArgumentList = function (node) { + this.visitToken(node.lessThanToken); + this.visitSeparatedList(node.typeArguments); + this.visitToken(node.greaterThanToken); + }; + SyntaxWalker.prototype.visitTypeParameterList = function (node) { + this.visitToken(node.lessThanToken); + this.visitSeparatedList(node.typeParameters); + this.visitToken(node.greaterThanToken); + }; + SyntaxWalker.prototype.visitHeritageClause = function (node) { + this.visitToken(node.extendsOrImplementsKeyword); + this.visitSeparatedList(node.typeNames); + }; + SyntaxWalker.prototype.visitEqualsValueClause = function (node) { + this.visitToken(node.equalsToken); + this.visitNodeOrToken(node.value); + }; + SyntaxWalker.prototype.visitCaseSwitchClause = function (node) { + this.visitToken(node.caseKeyword); + this.visitNodeOrToken(node.expression); + this.visitToken(node.colonToken); + this.visitList(node.statements); + }; + SyntaxWalker.prototype.visitDefaultSwitchClause = function (node) { + this.visitToken(node.defaultKeyword); + this.visitToken(node.colonToken); + this.visitList(node.statements); + }; + SyntaxWalker.prototype.visitElseClause = function (node) { + this.visitToken(node.elseKeyword); + this.visitNodeOrToken(node.statement); + }; + SyntaxWalker.prototype.visitCatchClause = function (node) { + this.visitToken(node.catchKeyword); + this.visitToken(node.openParenToken); + this.visitToken(node.identifier); + this.visitOptionalNode(node.typeAnnotation); + this.visitToken(node.closeParenToken); + this.visitNode(node.block); + }; + SyntaxWalker.prototype.visitFinallyClause = function (node) { + this.visitToken(node.finallyKeyword); + this.visitNode(node.block); + }; + SyntaxWalker.prototype.visitTypeParameter = function (node) { + this.visitToken(node.identifier); + this.visitOptionalNode(node.constraint); + }; + SyntaxWalker.prototype.visitConstraint = function (node) { + this.visitToken(node.extendsKeyword); + this.visitNodeOrToken(node.typeOrExpression); + }; + SyntaxWalker.prototype.visitSimplePropertyAssignment = function (node) { + this.visitToken(node.propertyName); + this.visitToken(node.colonToken); + this.visitNodeOrToken(node.expression); + }; + SyntaxWalker.prototype.visitFunctionPropertyAssignment = function (node) { + this.visitToken(node.propertyName); + this.visitNode(node.callSignature); + this.visitNode(node.block); + }; + SyntaxWalker.prototype.visitParameter = function (node) { + this.visitOptionalToken(node.dotDotDotToken); + this.visitList(node.modifiers); + this.visitToken(node.identifier); + this.visitOptionalToken(node.questionToken); + this.visitOptionalNode(node.typeAnnotation); + this.visitOptionalNode(node.equalsValueClause); + }; + SyntaxWalker.prototype.visitEnumElement = function (node) { + this.visitToken(node.propertyName); + this.visitOptionalNode(node.equalsValueClause); + }; + SyntaxWalker.prototype.visitTypeAnnotation = function (node) { + this.visitToken(node.colonToken); + this.visitNodeOrToken(node.type); + }; + SyntaxWalker.prototype.visitExternalModuleReference = function (node) { + this.visitToken(node.requireKeyword); + this.visitToken(node.openParenToken); + this.visitToken(node.stringLiteral); + this.visitToken(node.closeParenToken); + }; + SyntaxWalker.prototype.visitModuleNameModuleReference = function (node) { + this.visitNodeOrToken(node.moduleName); + }; + return SyntaxWalker; + })(); + TypeScript.SyntaxWalker = SyntaxWalker; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var DepthLimitedWalker = (function (_super) { + __extends(DepthLimitedWalker, _super); + function DepthLimitedWalker(maximumDepth) { + _super.call(this); + this._depth = 0; + this._maximumDepth = 0; + this._maximumDepth = maximumDepth; + } + DepthLimitedWalker.prototype.visitNode = function (node) { + if (this._depth < this._maximumDepth) { + this._depth++; + _super.prototype.visitNode.call(this, node); + this._depth--; + } + }; + return DepthLimitedWalker; + })(TypeScript.SyntaxWalker); + TypeScript.DepthLimitedWalker = DepthLimitedWalker; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Parser) { + Parser.syntaxFactory; + var arrayPool = []; + var arrayPoolCount = 0; + function getArray() { + if (arrayPoolCount === 0) { + return []; + } + arrayPoolCount--; + var result = arrayPool[arrayPoolCount]; + arrayPool[arrayPoolCount] = null; + return result; + } + function returnZeroLengthArray(array) { + if (array.length === 0) { + returnArray(array); + } + } + function returnArray(array) { + array.length = 0; + arrayPool[arrayPoolCount] = array; + arrayPoolCount++; + } + function createParseSyntaxTree() { + var fileName; + var source; + var languageVersion; + var listParsingState = 0; + var isInStrictMode = false; + var diagnostics = []; + var parseNodeData = 0; + function parseSyntaxTree(_source, isDeclaration) { + fileName = _source.fileName; + source = _source; + languageVersion = source.languageVersion; + var result = parseSyntaxTreeWorker(isDeclaration); + diagnostics = []; + parseNodeData = 0 /* None */; + fileName = null; + source.release(); + source = null; + _source = null; + return result; + } + function parseSyntaxTreeWorker(isDeclaration) { + var sourceUnit = parseSourceUnit(); + var allDiagnostics = source.tokenDiagnostics().concat(diagnostics); + allDiagnostics.sort(function (a, b) { return a.start() - b.start(); }); + return new TypeScript.SyntaxTree(Parser.syntaxFactory.isConcrete, sourceUnit, isDeclaration, allDiagnostics, fileName, source.text, languageVersion); + } + function getRewindPoint() { + var rewindPoint = source.getRewindPoint(); + rewindPoint.diagnosticsCount = diagnostics.length; + rewindPoint.isInStrictMode = isInStrictMode; + rewindPoint.listParsingState = listParsingState; + return rewindPoint; + } + function rewind(rewindPoint) { + source.rewind(rewindPoint); + diagnostics.length = rewindPoint.diagnosticsCount; + } + function releaseRewindPoint(rewindPoint) { + source.releaseRewindPoint(rewindPoint); + } + function currentNode() { + var node = source.currentNode(); + if (node === null || TypeScript.parsedInStrictMode(node) !== isInStrictMode) { + return null; + } + return node; + } + function currentToken() { + return source.currentToken(); + } + function currentContextualToken() { + return source.currentContextualToken(); + } + function peekToken(n) { + return source.peekToken(n); + } + function consumeToken(token) { + source.consumeToken(token); + return token; + } + function consumeNode(node) { + source.consumeNode(node); + } + function eatToken(kind) { + var token = currentToken(); + if (token.kind() === kind) { + return consumeToken(token); + } + return createMissingToken(kind, token); + } + function tryEatToken(kind) { + var _currentToken = currentToken(); + if (_currentToken.kind() === kind) { + return consumeToken(_currentToken); + } + return null; + } + function isIdentifier(token) { + var tokenKind = token.kind(); + if (tokenKind === 11 /* IdentifierName */) { + return true; + } + if (tokenKind >= TypeScript.SyntaxKind.FirstFutureReservedStrictKeyword) { + if (tokenKind <= TypeScript.SyntaxKind.LastFutureReservedStrictKeyword) { + return !isInStrictMode; + } + return tokenKind <= TypeScript.SyntaxKind.LastTypeScriptKeyword; + } + return false; + } + function eatIdentifierNameToken() { + var token = currentToken(); + var tokenKind = token.kind(); + if (tokenKind === 11 /* IdentifierName */) { + return consumeToken(token); + } + if (TypeScript.SyntaxFacts.isAnyKeyword(tokenKind)) { + return TypeScript.Syntax.convertKeywordToIdentifier(consumeToken(token)); + } + return createMissingToken(11 /* IdentifierName */, token); + } + function eatOptionalIdentifierToken() { + return isIdentifier(currentToken()) ? eatIdentifierToken() : null; + } + function eatIdentifierToken(diagnosticCode) { + var token = currentToken(); + if (isIdentifier(token)) { + consumeToken(token); + if (token.kind() === 11 /* IdentifierName */) { + return token; + } + return TypeScript.Syntax.convertKeywordToIdentifier(token); + } + return createMissingToken(11 /* IdentifierName */, token, diagnosticCode); + } + function previousTokenHasTrailingNewLine(token) { + var tokenFullStart = token.fullStart(); + if (tokenFullStart === 0) { + return false; + } + var lineNumber = source.text.lineMap().getLineNumberFromPosition(tokenFullStart); + var lineStart = source.text.lineMap().getLineStartPosition(lineNumber); + return lineStart == tokenFullStart; + } + function canEatAutomaticSemicolon(allowWithoutNewLine) { + var token = currentToken(); + var tokenKind = token.kind(); + if (tokenKind === 10 /* EndOfFileToken */) { + return true; + } + if (tokenKind === 71 /* CloseBraceToken */) { + return true; + } + if (allowWithoutNewLine) { + return true; + } + if (previousTokenHasTrailingNewLine(token)) { + return true; + } + return false; + } + function canEatExplicitOrAutomaticSemicolon(allowWithoutNewline) { + var token = currentToken(); + if (token.kind() === 78 /* SemicolonToken */) { + return true; + } + return canEatAutomaticSemicolon(allowWithoutNewline); + } + function eatExplicitOrAutomaticSemicolon(allowWithoutNewline) { + var token = currentToken(); + if (token.kind() === 78 /* SemicolonToken */) { + return consumeToken(token); + } + if (canEatAutomaticSemicolon(allowWithoutNewline)) { + return null; + } + return eatToken(78 /* SemicolonToken */); + } + function createMissingToken(expectedKind, actual, diagnosticCode) { + var diagnostic = getExpectedTokenDiagnostic(expectedKind, actual, diagnosticCode); + addDiagnostic(diagnostic); + return TypeScript.Syntax.emptyToken(expectedKind); + } + function getExpectedTokenDiagnostic(expectedKind, actual, diagnosticCode) { + var token = currentToken(); + var args = null; + if (!diagnosticCode) { + if (TypeScript.SyntaxFacts.isAnyKeyword(expectedKind) || TypeScript.SyntaxFacts.isAnyPunctuation(expectedKind)) { + diagnosticCode = TypeScript.DiagnosticCode._0_expected; + args = [TypeScript.SyntaxFacts.getText(expectedKind)]; + } + else { + if (actual !== null && TypeScript.SyntaxFacts.isAnyKeyword(actual.kind())) { + diagnosticCode = TypeScript.DiagnosticCode.Identifier_expected_0_is_a_keyword; + args = [TypeScript.SyntaxFacts.getText(actual.kind())]; + } + else { + diagnosticCode = TypeScript.DiagnosticCode.Identifier_expected; + } + } + } + return new TypeScript.Diagnostic(fileName, source.text.lineMap(), TypeScript.start(token, source.text), TypeScript.width(token), diagnosticCode, args); + } + function getBinaryExpressionPrecedence(tokenKind) { + switch (tokenKind) { + case 104 /* BarBarToken */: + return 2 /* LogicalOrExpressionPrecedence */; + case 103 /* AmpersandAmpersandToken */: + return 3 /* LogicalAndExpressionPrecedence */; + case 99 /* BarToken */: + return 4 /* BitwiseOrExpressionPrecedence */; + case 100 /* CaretToken */: + return 5 /* BitwiseExclusiveOrExpressionPrecedence */; + case 98 /* AmpersandToken */: + return 6 /* BitwiseAndExpressionPrecedence */; + case 84 /* EqualsEqualsToken */: + case 86 /* ExclamationEqualsToken */: + case 87 /* EqualsEqualsEqualsToken */: + case 88 /* ExclamationEqualsEqualsToken */: + return 7 /* EqualityExpressionPrecedence */; + case 80 /* LessThanToken */: + case 81 /* GreaterThanToken */: + case 82 /* LessThanEqualsToken */: + case 83 /* GreaterThanEqualsToken */: + case 30 /* InstanceOfKeyword */: + case 29 /* InKeyword */: + return 8 /* RelationalExpressionPrecedence */; + case 95 /* LessThanLessThanToken */: + case 96 /* GreaterThanGreaterThanToken */: + case 97 /* GreaterThanGreaterThanGreaterThanToken */: + return 9 /* ShiftExpressionPrecdence */; + case 89 /* PlusToken */: + case 90 /* MinusToken */: + return 10 /* AdditiveExpressionPrecedence */; + case 91 /* AsteriskToken */: + case 118 /* SlashToken */: + case 92 /* PercentToken */: + return 11 /* MultiplicativeExpressionPrecedence */; + } + throw TypeScript.Errors.invalidOperation(); + } + function addSkippedTokenAfterNodeOrToken(nodeOrToken, skippedToken) { + if (TypeScript.isToken(nodeOrToken)) { + return addSkippedTokenAfterToken(nodeOrToken, skippedToken); + } + else if (TypeScript.isNode(nodeOrToken)) { + return addSkippedTokenAfterNode(nodeOrToken, skippedToken); + } + else { + throw TypeScript.Errors.invalidOperation(); + } + } + function replaceTokenInParent(oldToken, newToken) { + replaceTokenInParentWorker(oldToken, newToken); + var parent = oldToken.parent; + newToken.parent = parent; + TypeScript.Debug.assert(TypeScript.isNode(parent) || TypeScript.isList(parent) || TypeScript.isSeparatedList(parent)); + var dataElement = parent; + if (dataElement.data) { + dataElement.data &= 4 /* NodeParsedInStrictModeMask */; + } + } + function replaceTokenInParentWorker(oldToken, newToken) { + var parent = oldToken.parent; + if (TypeScript.isNode(parent)) { + var node = parent; + for (var key in node) { + if (node[key] === oldToken) { + node[key] = newToken; + return; + } + } + } + else if (TypeScript.isList(parent)) { + var list1 = parent; + for (var i = 0, n = list1.length; i < n; i++) { + if (list1[i] === oldToken) { + list1[i] = newToken; + return; + } + } + } + else if (TypeScript.isSeparatedList(parent)) { + var list2 = parent; + for (var i = 0, n = TypeScript.childCount(list2); i < n; i++) { + if (TypeScript.childAt(list2, i) === oldToken) { + if (i % 2 === 0) { + list2[i / 2] = newToken; + } + else { + list2.separators[(i - 1) / 2] = newToken; + } + return; + } + } + } + throw TypeScript.Errors.invalidOperation(); + } + function addSkippedTokenAfterNode(node, skippedToken) { + var oldToken = TypeScript.lastToken(node); + var newToken = addSkippedTokenAfterToken(oldToken, skippedToken); + replaceTokenInParent(oldToken, newToken); + return node; + } + function addSkippedTokensBeforeNode(node, skippedTokens) { + if (skippedTokens.length > 0) { + var oldToken = TypeScript.firstToken(node); + var newToken = addSkippedTokensBeforeToken(oldToken, skippedTokens); + replaceTokenInParent(oldToken, newToken); + } + return node; + } + function addSkippedTokensBeforeToken(token, skippedTokens) { + var leadingTrivia = []; + for (var i = 0, n = skippedTokens.length; i < n; i++) { + var skippedToken = skippedTokens[i]; + addSkippedTokenToTriviaArray(leadingTrivia, skippedToken); + } + addTriviaTo(token.leadingTrivia(source.text), leadingTrivia); + var updatedToken = TypeScript.Syntax.withLeadingTrivia(token, TypeScript.Syntax.triviaList(leadingTrivia), source.text); + updatedToken.setFullStart(skippedTokens[0].fullStart()); + returnArray(skippedTokens); + return updatedToken; + } + function addSkippedTokensAfterToken(token, skippedTokens) { + if (skippedTokens.length === 0) { + returnArray(skippedTokens); + return token; + } + var trailingTrivia = token.trailingTrivia(source.text).toArray(); + for (var i = 0, n = skippedTokens.length; i < n; i++) { + addSkippedTokenToTriviaArray(trailingTrivia, skippedTokens[i]); + } + returnArray(skippedTokens); + return TypeScript.Syntax.withTrailingTrivia(token, TypeScript.Syntax.triviaList(trailingTrivia), source.text); + } + function addSkippedTokenAfterToken(token, skippedToken) { + var trailingTrivia = token.trailingTrivia(source.text).toArray(); + addSkippedTokenToTriviaArray(trailingTrivia, skippedToken); + return TypeScript.Syntax.withTrailingTrivia(token, TypeScript.Syntax.triviaList(trailingTrivia), source.text); + } + function addSkippedTokenToTriviaArray(array, skippedToken) { + addTriviaTo(skippedToken.leadingTrivia(source.text), array); + var trimmedToken = TypeScript.Syntax.withTrailingTrivia(TypeScript.Syntax.withLeadingTrivia(skippedToken, TypeScript.Syntax.emptyTriviaList, source.text), TypeScript.Syntax.emptyTriviaList, source.text); + trimmedToken.setFullStart(TypeScript.start(skippedToken, source.text)); + array.push(TypeScript.Syntax.skippedTokenTrivia(trimmedToken, source.text)); + addTriviaTo(skippedToken.trailingTrivia(source.text), array); + } + function addTriviaTo(list, array) { + for (var i = 0, n = list.count(); i < n; i++) { + array.push(list.syntaxTriviaAt(i)); + } + } + function setStrictMode(_isInStrictMode) { + isInStrictMode = _isInStrictMode; + parseNodeData = _isInStrictMode ? 4 /* NodeParsedInStrictModeMask */ : 0; + } + function parseSourceUnit() { + var savedIsInStrictMode = isInStrictMode; + var skippedTokens = getArray(); + var moduleElements = parseSyntaxList(0 /* SourceUnit_ModuleElements */, skippedTokens, updateStrictModeState); + setStrictMode(savedIsInStrictMode); + var sourceUnit = new Parser.syntaxFactory.SourceUnitSyntax(parseNodeData, moduleElements, currentToken()); + sourceUnit = addSkippedTokensBeforeNode(sourceUnit, skippedTokens); + if (TypeScript.Debug.shouldAssert(2 /* Aggressive */)) { + TypeScript.Debug.assert(TypeScript.fullWidth(sourceUnit) === source.text.length()); + if (TypeScript.Debug.shouldAssert(3 /* VeryAggressive */)) { + TypeScript.Debug.assert(TypeScript.fullText(sourceUnit) === source.text.substr(0, source.text.length())); + } + } + return sourceUnit; + } + function updateStrictModeState(items) { + if (!isInStrictMode) { + for (var i = 0; i < items.length; i++) { + var item = items[i]; + if (!TypeScript.SyntaxFacts.isDirectivePrologueElement(item)) { + return; + } + } + setStrictMode(TypeScript.SyntaxFacts.isUseStrictDirective(items[items.length - 1])); + } + } + function isModuleElement(inErrorRecovery) { + if (TypeScript.SyntaxUtilities.isModuleElement(currentNode())) { + return true; + } + var _modifierCount = modifierCount(); + return isInterfaceEnumClassModuleImportOrExport(_modifierCount) || isStatement(_modifierCount, inErrorRecovery); + } + function tryParseModuleElement(inErrorRecovery) { + var node = currentNode(); + if (TypeScript.SyntaxUtilities.isModuleElement(node)) { + consumeNode(node); + return node; + } + var _currentToken = currentToken(); + var _modifierCount = modifierCount(); + if (_modifierCount) { + switch (peekToken(_modifierCount).kind()) { + case 49 /* ImportKeyword */: + return parseImportDeclaration(); + case 65 /* ModuleKeyword */: + return parseModuleDeclaration(); + case 52 /* InterfaceKeyword */: + return parseInterfaceDeclaration(); + case 44 /* ClassKeyword */: + return parseClassDeclaration(); + case 46 /* EnumKeyword */: + return parseEnumDeclaration(); + } + } + var nextToken = peekToken(1); + var currentTokenKind = _currentToken.kind(); + switch (currentTokenKind) { + case 65 /* ModuleKeyword */: + if (isIdentifier(nextToken) || nextToken.kind() === 14 /* StringLiteral */) { + return parseModuleDeclaration(); + } + break; + case 49 /* ImportKeyword */: + if (isIdentifier(nextToken)) { + return parseImportDeclaration(); + } + break; + case 44 /* ClassKeyword */: + if (isIdentifier(nextToken)) { + return parseClassDeclaration(); + } + break; + case 46 /* EnumKeyword */: + if (isIdentifier(nextToken)) { + return parseEnumDeclaration(); + } + break; + case 52 /* InterfaceKeyword */: + if (isIdentifier(nextToken)) { + return parseInterfaceDeclaration(); + } + break; + case 47 /* ExportKeyword */: + if (nextToken.kind() === 107 /* EqualsToken */) { + return parseExportAssignment(); + } + break; + } + return tryParseStatementWorker(_currentToken, currentTokenKind, _modifierCount, inErrorRecovery); + } + function parseImportDeclaration() { + return new Parser.syntaxFactory.ImportDeclarationSyntax(parseNodeData, parseModifiers(), eatToken(49 /* ImportKeyword */), eatIdentifierToken(), eatToken(107 /* EqualsToken */), parseModuleReference(), eatExplicitOrAutomaticSemicolon(false)); + } + function parseExportAssignment() { + return new Parser.syntaxFactory.ExportAssignmentSyntax(parseNodeData, eatToken(47 /* ExportKeyword */), eatToken(107 /* EqualsToken */), eatIdentifierToken(), eatExplicitOrAutomaticSemicolon(false)); + } + function parseModuleReference() { + return isExternalModuleReference() ? parseExternalModuleReference() : parseModuleNameModuleReference(); + } + function isExternalModuleReference() { + return currentToken().kind() === 66 /* RequireKeyword */ && peekToken(1).kind() === 72 /* OpenParenToken */; + } + function parseExternalModuleReference() { + return new Parser.syntaxFactory.ExternalModuleReferenceSyntax(parseNodeData, eatToken(66 /* RequireKeyword */), eatToken(72 /* OpenParenToken */), eatToken(14 /* StringLiteral */), eatToken(73 /* CloseParenToken */)); + } + function parseModuleNameModuleReference() { + return new Parser.syntaxFactory.ModuleNameModuleReferenceSyntax(parseNodeData, parseName(false)); + } + function tryParseTypeArgumentList(inExpression) { + var _currentToken = currentToken(); + if (_currentToken.kind() !== 80 /* LessThanToken */) { + return null; + } + if (!inExpression) { + var lessThanToken = consumeToken(_currentToken); + var skippedTokens = getArray(); + var typeArguments = parseSeparatedSyntaxList(19 /* TypeArgumentList_Types */, skippedTokens); + lessThanToken = addSkippedTokensAfterToken(lessThanToken, skippedTokens); + return new Parser.syntaxFactory.TypeArgumentListSyntax(parseNodeData, lessThanToken, typeArguments, eatToken(81 /* GreaterThanToken */)); + } + var rewindPoint = getRewindPoint(); + var lessThanToken = consumeToken(_currentToken); + var skippedTokens = getArray(); + var typeArguments = parseSeparatedSyntaxList(19 /* TypeArgumentList_Types */, skippedTokens); + var lessThanToken = addSkippedTokensAfterToken(lessThanToken, skippedTokens); + var greaterThanToken = eatToken(81 /* GreaterThanToken */); + if (greaterThanToken.fullWidth() === 0 || !canFollowTypeArgumentListInExpression(currentToken().kind())) { + rewind(rewindPoint); + releaseRewindPoint(rewindPoint); + return null; + } + else { + releaseRewindPoint(rewindPoint); + return new Parser.syntaxFactory.TypeArgumentListSyntax(parseNodeData, lessThanToken, typeArguments, greaterThanToken); + } + } + function canFollowTypeArgumentListInExpression(kind) { + switch (kind) { + case 72 /* OpenParenToken */: + case 76 /* DotToken */: + case 73 /* CloseParenToken */: + case 75 /* CloseBracketToken */: + case 106 /* ColonToken */: + case 78 /* SemicolonToken */: + case 79 /* CommaToken */: + case 105 /* QuestionToken */: + case 84 /* EqualsEqualsToken */: + case 87 /* EqualsEqualsEqualsToken */: + case 86 /* ExclamationEqualsToken */: + case 88 /* ExclamationEqualsEqualsToken */: + case 103 /* AmpersandAmpersandToken */: + case 104 /* BarBarToken */: + case 100 /* CaretToken */: + case 98 /* AmpersandToken */: + case 99 /* BarToken */: + case 71 /* CloseBraceToken */: + case 10 /* EndOfFileToken */: + return true; + default: + return false; + } + } + function parseName(allowIdentifierName) { + return tryParseName(allowIdentifierName) || eatIdentifierToken(); + } + function eatRightSideOfName(allowIdentifierNames) { + var _currentToken = currentToken(); + if (TypeScript.SyntaxFacts.isAnyKeyword(_currentToken.kind()) && previousTokenHasTrailingNewLine(_currentToken)) { + var token1 = peekToken(1); + if (!TypeScript.existsNewLineBetweenTokens(_currentToken, token1, source.text) && TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(token1)) { + return createMissingToken(11 /* IdentifierName */, _currentToken); + } + } + return allowIdentifierNames ? eatIdentifierNameToken() : eatIdentifierToken(); + } + function tryParseName(allowIdentifierNames) { + var token0 = currentToken(); + var shouldContinue = isIdentifier(token0); + if (!shouldContinue) { + return null; + } + var current = eatIdentifierToken(); + while (shouldContinue && currentToken().kind() === 76 /* DotToken */) { + var dotToken = consumeToken(currentToken()); + var identifierName = eatRightSideOfName(allowIdentifierNames); + current = new Parser.syntaxFactory.QualifiedNameSyntax(parseNodeData, current, dotToken, identifierName); + shouldContinue = identifierName.fullWidth() > 0; + } + return current; + } + function parseEnumDeclaration() { + var modifiers = parseModifiers(); + var enumKeyword = eatToken(46 /* EnumKeyword */); + var identifier = eatIdentifierToken(); + var openBraceToken = eatToken(70 /* OpenBraceToken */); + var enumElements = TypeScript.Syntax.emptySeparatedList(); + if (openBraceToken.fullWidth() > 0) { + var skippedTokens = getArray(); + enumElements = parseSeparatedSyntaxList(8 /* EnumDeclaration_EnumElements */, skippedTokens); + openBraceToken = addSkippedTokensAfterToken(openBraceToken, skippedTokens); + } + return new Parser.syntaxFactory.EnumDeclarationSyntax(parseNodeData, modifiers, enumKeyword, identifier, openBraceToken, enumElements, eatToken(71 /* CloseBraceToken */)); + } + function isEnumElement(inErrorRecovery) { + var node = currentNode(); + if (node !== null && node.kind() === 243 /* EnumElement */) { + return true; + } + return isPropertyName(currentToken(), inErrorRecovery); + } + function tryParseEnumElementEqualsValueClause() { + return isEqualsValueClause(false) ? parseEqualsValueClause(true) : null; + } + function tryParseEnumElement(inErrorRecovery) { + var node = currentNode(); + if (node !== null && node.kind() === 243 /* EnumElement */) { + consumeNode(node); + return node; + } + if (!isPropertyName(currentToken(), inErrorRecovery)) { + return null; + } + return new Parser.syntaxFactory.EnumElementSyntax(parseNodeData, eatPropertyName(), tryParseEnumElementEqualsValueClause()); + } + function isModifierKind(kind) { + switch (kind) { + case 47 /* ExportKeyword */: + case 57 /* PublicKeyword */: + case 55 /* PrivateKeyword */: + case 58 /* StaticKeyword */: + case 63 /* DeclareKeyword */: + return true; + } + return false; + } + function isModifier(token, index) { + if (isModifierKind(token.kind())) { + var nextToken = peekToken(index + 1); + var nextTokenKind = nextToken.kind(); + switch (nextTokenKind) { + case 11 /* IdentifierName */: + case 74 /* OpenBracketToken */: + case 13 /* NumericLiteral */: + case 14 /* StringLiteral */: + return true; + default: + return TypeScript.SyntaxFacts.isAnyKeyword(nextTokenKind); + } + } + return false; + } + function modifierCount() { + var modifierCount = 0; + while (isModifier(peekToken(modifierCount), modifierCount)) { + modifierCount++; + } + return modifierCount; + } + function parseModifiers() { + var tokens = getArray(); + while (true) { + var token = currentToken(); + if (isModifier(token, 0)) { + tokens.push(consumeToken(token)); + continue; + } + break; + } + var result = TypeScript.Syntax.list(tokens); + returnZeroLengthArray(tokens); + return result; + } + function parseHeritageClauses() { + var heritageClauses = TypeScript.Syntax.emptyList(); + if (isHeritageClause()) { + heritageClauses = parseSyntaxList(10 /* ClassOrInterfaceDeclaration_HeritageClauses */, null); + } + return heritageClauses; + } + function tryParseHeritageClauseTypeName() { + return isHeritageClauseTypeName() ? tryParseNameOrGenericType() : null; + } + function parseClassDeclaration() { + var modifiers = parseModifiers(); + var classKeyword = eatToken(44 /* ClassKeyword */); + var identifier = eatIdentifierToken(); + var typeParameterList = tryParseTypeParameterList(false); + var heritageClauses = parseHeritageClauses(); + var openBraceToken = eatToken(70 /* OpenBraceToken */); + var classElements = TypeScript.Syntax.emptyList(); + if (openBraceToken.fullWidth() > 0) { + var skippedTokens = getArray(); + classElements = parseSyntaxList(1 /* ClassDeclaration_ClassElements */, skippedTokens); + openBraceToken = addSkippedTokensAfterToken(openBraceToken, skippedTokens); + } + ; + return new Parser.syntaxFactory.ClassDeclarationSyntax(parseNodeData, modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, eatToken(71 /* CloseBraceToken */)); + } + function isAccessor(modifierCount, inErrorRecovery) { + var tokenKind = peekToken(modifierCount).kind(); + if (tokenKind !== 64 /* GetKeyword */ && tokenKind !== 68 /* SetKeyword */) { + return false; + } + return isPropertyName(peekToken(modifierCount + 1), inErrorRecovery); + } + function parseAccessor(checkForStrictMode) { + var modifiers = parseModifiers(); + var _currenToken = currentToken(); + var tokenKind = _currenToken.kind(); + if (tokenKind === 64 /* GetKeyword */) { + return parseGetMemberAccessorDeclaration(modifiers, _currenToken, checkForStrictMode); + } + else if (tokenKind === 68 /* SetKeyword */) { + return parseSetMemberAccessorDeclaration(modifiers, _currenToken, checkForStrictMode); + } + else { + throw TypeScript.Errors.invalidOperation(); + } + } + function parseGetMemberAccessorDeclaration(modifiers, getKeyword, checkForStrictMode) { + return new Parser.syntaxFactory.GetAccessorSyntax(parseNodeData, modifiers, consumeToken(getKeyword), eatPropertyName(), parseCallSignature(false), parseBlock(false, checkForStrictMode)); + } + function parseSetMemberAccessorDeclaration(modifiers, setKeyword, checkForStrictMode) { + return new Parser.syntaxFactory.SetAccessorSyntax(parseNodeData, modifiers, consumeToken(setKeyword), eatPropertyName(), parseCallSignature(false), parseBlock(false, checkForStrictMode)); + } + function isClassElement(inErrorRecovery) { + if (TypeScript.SyntaxUtilities.isClassElement(currentNode())) { + return true; + } + var _modifierCount = modifierCount(); + return isConstructorDeclaration(_modifierCount) || isMemberFunctionDeclaration(_modifierCount, inErrorRecovery) || isAccessor(_modifierCount, inErrorRecovery) || isMemberVariableDeclaration(_modifierCount, inErrorRecovery) || isIndexMemberDeclaration(_modifierCount); + } + function tryParseClassElement(inErrorRecovery) { + var node = currentNode(); + if (TypeScript.SyntaxUtilities.isClassElement(node)) { + consumeNode(node); + return node; + } + var _modifierCount = modifierCount(); + if (isConstructorDeclaration(_modifierCount)) { + return parseConstructorDeclaration(); + } + else if (isMemberFunctionDeclaration(_modifierCount, inErrorRecovery)) { + return parseMemberFunctionDeclaration(); + } + else if (isAccessor(_modifierCount, inErrorRecovery)) { + return parseAccessor(false); + } + else if (isMemberVariableDeclaration(_modifierCount, inErrorRecovery)) { + return parseMemberVariableDeclaration(); + } + else if (isIndexMemberDeclaration(_modifierCount)) { + return parseIndexMemberDeclaration(); + } + else { + return null; + } + } + function isConstructorDeclaration(modifierCount) { + return peekToken(modifierCount).kind() === 62 /* ConstructorKeyword */; + } + function parseConstructorDeclaration() { + var modifiers = parseModifiers(); + var constructorKeyword = eatToken(62 /* ConstructorKeyword */); + var callSignature = parseCallSignature(false); + var semicolonToken = null; + var block = null; + if (isBlock()) { + block = parseBlock(false, true); + } + else { + semicolonToken = eatExplicitOrAutomaticSemicolon(false); + } + return new Parser.syntaxFactory.ConstructorDeclarationSyntax(parseNodeData, modifiers, constructorKeyword, callSignature, block, semicolonToken); + } + function isMemberFunctionDeclaration(modifierCount, inErrorRecovery) { + return isPropertyName(peekToken(modifierCount), inErrorRecovery) && isCallSignature(modifierCount + 1); + } + function parseMemberFunctionDeclaration() { + var modifiers = parseModifiers(); + var propertyName = eatPropertyName(); + var callSignature = parseCallSignature(false); + var parseBlockEvenWithNoOpenBrace = tryAddUnexpectedEqualsGreaterThanToken(callSignature); + var block = null; + var semicolon = null; + if (parseBlockEvenWithNoOpenBrace || isBlock()) { + block = parseBlock(parseBlockEvenWithNoOpenBrace, true); + } + else { + semicolon = eatExplicitOrAutomaticSemicolon(false); + } + return new Parser.syntaxFactory.MemberFunctionDeclarationSyntax(parseNodeData, modifiers, propertyName, callSignature, block, semicolon); + } + function isDefinitelyMemberVariablePropertyName(index) { + if (TypeScript.SyntaxFacts.isAnyKeyword(peekToken(index).kind())) { + var nextToken = peekToken(index + 1); + switch (nextToken.kind()) { + case 78 /* SemicolonToken */: + case 107 /* EqualsToken */: + case 106 /* ColonToken */: + case 71 /* CloseBraceToken */: + case 10 /* EndOfFileToken */: + return true; + default: + return previousTokenHasTrailingNewLine(nextToken); + } + } + else { + return true; + } + } + function isMemberVariableDeclaration(modifierCount, inErrorRecover) { + return isPropertyName(peekToken(modifierCount), inErrorRecover) && isDefinitelyMemberVariablePropertyName(modifierCount); + } + function parseMemberVariableDeclaration() { + return new Parser.syntaxFactory.MemberVariableDeclarationSyntax(parseNodeData, parseModifiers(), tryParseVariableDeclarator(true, true), eatExplicitOrAutomaticSemicolon(false)); + } + function isIndexMemberDeclaration(modifierCount) { + return isIndexSignature(modifierCount); + } + function parseIndexMemberDeclaration() { + return new Parser.syntaxFactory.IndexMemberDeclarationSyntax(parseNodeData, parseModifiers(), parseIndexSignature(), eatExplicitOrAutomaticSemicolon(false)); + } + function tryAddUnexpectedEqualsGreaterThanToken(callSignature) { + var token0 = currentToken(); + var hasEqualsGreaterThanToken = token0.kind() === 85 /* EqualsGreaterThanToken */; + if (hasEqualsGreaterThanToken) { + var _lastToken = TypeScript.lastToken(callSignature); + if (_lastToken && _lastToken.fullWidth() > 0) { + var diagnostic = new TypeScript.Diagnostic(fileName, source.text.lineMap(), TypeScript.start(token0, source.text), TypeScript.width(token0), TypeScript.DiagnosticCode.Unexpected_token_0_expected, [TypeScript.SyntaxFacts.getText(70 /* OpenBraceToken */)]); + addDiagnostic(diagnostic); + consumeToken(token0); + if (Parser.syntaxFactory.isConcrete) { + addSkippedTokenAfterNode(callSignature, token0); + } + return true; + } + } + return false; + } + function isFunctionDeclaration(modifierCount) { + return peekToken(modifierCount).kind() === 27 /* FunctionKeyword */; + } + function parseFunctionDeclaration() { + var modifiers = parseModifiers(); + var functionKeyword = eatToken(27 /* FunctionKeyword */); + var identifier = eatIdentifierToken(); + var callSignature = parseCallSignature(false); + var parseBlockEvenWithNoOpenBrace = tryAddUnexpectedEqualsGreaterThanToken(callSignature); + var semicolonToken = null; + var block = null; + if (parseBlockEvenWithNoOpenBrace || isBlock()) { + block = parseBlock(parseBlockEvenWithNoOpenBrace, true); + } + else { + semicolonToken = eatExplicitOrAutomaticSemicolon(false); + } + return new Parser.syntaxFactory.FunctionDeclarationSyntax(parseNodeData, modifiers, functionKeyword, identifier, callSignature, block, semicolonToken); + } + function parseModuleDeclaration() { + var modifiers = parseModifiers(); + var moduleKeyword = eatToken(65 /* ModuleKeyword */); + var moduleName = null; + var stringLiteral = null; + if (currentToken().kind() === 14 /* StringLiteral */) { + stringLiteral = eatToken(14 /* StringLiteral */); + } + else { + moduleName = parseName(false); + } + var openBraceToken = eatToken(70 /* OpenBraceToken */); + var moduleElements = TypeScript.Syntax.emptyList(); + if (openBraceToken.fullWidth() > 0) { + var skippedTokens = getArray(); + moduleElements = parseSyntaxList(2 /* ModuleDeclaration_ModuleElements */, skippedTokens); + openBraceToken = addSkippedTokensAfterToken(openBraceToken, skippedTokens); + } + return new Parser.syntaxFactory.ModuleDeclarationSyntax(parseNodeData, modifiers, moduleKeyword, moduleName, stringLiteral, openBraceToken, moduleElements, eatToken(71 /* CloseBraceToken */)); + } + function parseInterfaceDeclaration() { + return new Parser.syntaxFactory.InterfaceDeclarationSyntax(parseNodeData, parseModifiers(), eatToken(52 /* InterfaceKeyword */), eatIdentifierToken(), tryParseTypeParameterList(false), parseHeritageClauses(), parseObjectType()); + } + function parseObjectType() { + var openBraceToken = eatToken(70 /* OpenBraceToken */); + var typeMembers = TypeScript.Syntax.emptySeparatedList(); + if (openBraceToken.fullWidth() > 0) { + var skippedTokens = getArray(); + typeMembers = parseSeparatedSyntaxList(9 /* ObjectType_TypeMembers */, skippedTokens); + openBraceToken = addSkippedTokensAfterToken(openBraceToken, skippedTokens); + } + return new Parser.syntaxFactory.ObjectTypeSyntax(parseNodeData, openBraceToken, typeMembers, eatToken(71 /* CloseBraceToken */)); + } + function isTypeMember(inErrorRecovery) { + if (TypeScript.SyntaxUtilities.isTypeMember(currentNode())) { + return true; + } + return isCallSignature(0) || isConstructSignature() || isIndexSignature(0) || isMethodSignature(inErrorRecovery) || isPropertySignature(inErrorRecovery); + } + function tryParseTypeMember(inErrorRecovery) { + var node = currentNode(); + if (TypeScript.SyntaxUtilities.isTypeMember(node)) { + consumeNode(node); + return node; + } + if (isCallSignature(0)) { + return parseCallSignature(false); + } + else if (isConstructSignature()) { + return parseConstructSignature(); + } + else if (isIndexSignature(0)) { + return parseIndexSignature(); + } + else if (isMethodSignature(inErrorRecovery)) { + return parseMethodSignature(); + } + else if (isPropertySignature(inErrorRecovery)) { + return parsePropertySignature(); + } + else { + return null; + } + } + function parseConstructSignature() { + return new Parser.syntaxFactory.ConstructSignatureSyntax(parseNodeData, eatToken(31 /* NewKeyword */), parseCallSignature(false)); + } + function parseIndexSignature() { + var openBracketToken = eatToken(74 /* OpenBracketToken */); + var skippedTokens = getArray(); + var parameters = parseSeparatedSyntaxList(18 /* IndexSignature_Parameters */, skippedTokens); + openBracketToken = addSkippedTokensAfterToken(openBracketToken, skippedTokens); + return new Parser.syntaxFactory.IndexSignatureSyntax(parseNodeData, openBracketToken, parameters, eatToken(75 /* CloseBracketToken */), parseOptionalTypeAnnotation(false)); + } + function parseMethodSignature() { + return new Parser.syntaxFactory.MethodSignatureSyntax(parseNodeData, eatPropertyName(), tryEatToken(105 /* QuestionToken */), parseCallSignature(false)); + } + function parsePropertySignature() { + return new Parser.syntaxFactory.PropertySignatureSyntax(parseNodeData, eatPropertyName(), tryEatToken(105 /* QuestionToken */), parseOptionalTypeAnnotation(false)); + } + function isCallSignature(peekIndex) { + var tokenKind = peekToken(peekIndex).kind(); + return tokenKind === 72 /* OpenParenToken */ || tokenKind === 80 /* LessThanToken */; + } + function isConstructSignature() { + if (currentToken().kind() !== 31 /* NewKeyword */) { + return false; + } + return isCallSignature(1); + } + function isIndexSignature(peekIndex) { + return peekToken(peekIndex).kind() === 74 /* OpenBracketToken */; + } + function isMethodSignature(inErrorRecovery) { + if (isPropertyName(currentToken(), inErrorRecovery)) { + if (isCallSignature(1)) { + return true; + } + if (peekToken(1).kind() === 105 /* QuestionToken */ && isCallSignature(2)) { + return true; + } + } + return false; + } + function isPropertySignature(inErrorRecovery) { + var _currentToken = currentToken(); + if (isModifier(_currentToken, 0)) { + if (!TypeScript.existsNewLineBetweenTokens(_currentToken, peekToken(1), source.text) && isPropertyName(peekToken(1), inErrorRecovery)) { + return false; + } + } + return isPropertyName(_currentToken, inErrorRecovery); + } + function isHeritageClause() { + var tokenKind = currentToken().kind(); + return tokenKind === 48 /* ExtendsKeyword */ || tokenKind === 51 /* ImplementsKeyword */; + } + function isNotHeritageClauseTypeName() { + var tokenKind = currentToken().kind(); + if (tokenKind === 51 /* ImplementsKeyword */ || tokenKind === 48 /* ExtendsKeyword */) { + return isIdentifier(peekToken(1)); + } + return false; + } + function isHeritageClauseTypeName() { + if (isIdentifier(currentToken())) { + return !isNotHeritageClauseTypeName(); + } + return false; + } + function tryParseHeritageClause() { + var extendsOrImplementsKeyword = currentToken(); + var tokenKind = extendsOrImplementsKeyword.kind(); + if (tokenKind !== 48 /* ExtendsKeyword */ && tokenKind !== 51 /* ImplementsKeyword */) { + return null; + } + consumeToken(extendsOrImplementsKeyword); + var skippedTokens = getArray(); + var typeNames = parseSeparatedSyntaxList(11 /* HeritageClause_TypeNameList */, skippedTokens); + extendsOrImplementsKeyword = addSkippedTokensAfterToken(extendsOrImplementsKeyword, skippedTokens); + return new Parser.syntaxFactory.HeritageClauseSyntax(parseNodeData, extendsOrImplementsKeyword, typeNames); + } + function isInterfaceEnumClassModuleImportOrExport(modifierCount) { + var _currentToken = currentToken(); + if (modifierCount) { + switch (peekToken(modifierCount).kind()) { + case 49 /* ImportKeyword */: + case 65 /* ModuleKeyword */: + case 52 /* InterfaceKeyword */: + case 44 /* ClassKeyword */: + case 46 /* EnumKeyword */: + return true; + } + } + var nextToken = peekToken(1); + switch (_currentToken.kind()) { + case 65 /* ModuleKeyword */: + if (isIdentifier(nextToken) || nextToken.kind() === 14 /* StringLiteral */) { + return true; + } + break; + case 49 /* ImportKeyword */: + case 44 /* ClassKeyword */: + case 46 /* EnumKeyword */: + case 52 /* InterfaceKeyword */: + if (isIdentifier(nextToken)) { + return true; + } + break; + case 47 /* ExportKeyword */: + if (nextToken.kind() === 107 /* EqualsToken */) { + return true; + } + break; + } + return false; + } + function isStatement(modifierCount, inErrorRecovery) { + if (TypeScript.SyntaxUtilities.isStatement(currentNode())) { + return true; + } + var _currentToken = currentToken(); + var currentTokenKind = _currentToken.kind(); + switch (currentTokenKind) { + case 57 /* PublicKeyword */: + case 55 /* PrivateKeyword */: + case 58 /* StaticKeyword */: + var token1 = peekToken(1); + if (TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(token1)) { + return false; + } + break; + case 28 /* IfKeyword */: + case 70 /* OpenBraceToken */: + case 33 /* ReturnKeyword */: + case 34 /* SwitchKeyword */: + case 36 /* ThrowKeyword */: + case 15 /* BreakKeyword */: + case 18 /* ContinueKeyword */: + case 26 /* ForKeyword */: + case 42 /* WhileKeyword */: + case 43 /* WithKeyword */: + case 22 /* DoKeyword */: + case 38 /* TryKeyword */: + case 19 /* DebuggerKeyword */: + return true; + } + if (isInterfaceEnumClassModuleImportOrExport(modifierCount)) { + return false; + } + return isLabeledStatement(_currentToken) || isVariableStatement(modifierCount) || isFunctionDeclaration(modifierCount) || isEmptyStatement(_currentToken, inErrorRecovery) || isExpressionStatement(_currentToken); + } + function parseStatement(inErrorRecovery) { + return tryParseStatement(inErrorRecovery) || parseExpressionStatement(); + } + function tryParseStatement(inErrorRecovery) { + var node = currentNode(); + if (TypeScript.SyntaxUtilities.isStatement(node)) { + consumeNode(node); + return node; + } + var _currentToken = currentToken(); + var currentTokenKind = _currentToken.kind(); + return tryParseStatementWorker(_currentToken, currentTokenKind, modifierCount(), inErrorRecovery); + } + function tryParseStatementWorker(_currentToken, currentTokenKind, modifierCount, inErrorRecovery) { + switch (currentTokenKind) { + case 57 /* PublicKeyword */: + case 55 /* PrivateKeyword */: + case 58 /* StaticKeyword */: + if (TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(peekToken(1))) { + return null; + } + else { + break; + } + case 28 /* IfKeyword */: + return parseIfStatement(_currentToken); + case 70 /* OpenBraceToken */: + return parseBlock(false, false); + case 33 /* ReturnKeyword */: + return parseReturnStatement(_currentToken); + case 34 /* SwitchKeyword */: + return parseSwitchStatement(_currentToken); + case 36 /* ThrowKeyword */: + return parseThrowStatement(_currentToken); + case 15 /* BreakKeyword */: + return parseBreakStatement(_currentToken); + case 18 /* ContinueKeyword */: + return parseContinueStatement(_currentToken); + case 26 /* ForKeyword */: + return parseForOrForInStatement(_currentToken); + case 42 /* WhileKeyword */: + return parseWhileStatement(_currentToken); + case 43 /* WithKeyword */: + return parseWithStatement(_currentToken); + case 22 /* DoKeyword */: + return parseDoStatement(_currentToken); + case 38 /* TryKeyword */: + return parseTryStatement(_currentToken); + case 19 /* DebuggerKeyword */: + return parseDebuggerStatement(_currentToken); + } + if (isInterfaceEnumClassModuleImportOrExport(modifierCount)) { + return null; + } + else if (isVariableStatement(modifierCount)) { + return parseVariableStatement(); + } + else if (isLabeledStatement(_currentToken)) { + return parseLabeledStatement(_currentToken); + } + else if (isFunctionDeclaration(modifierCount)) { + return parseFunctionDeclaration(); + } + else if (isEmptyStatement(_currentToken, inErrorRecovery)) { + return parseEmptyStatement(_currentToken); + } + else if (isExpressionStatement(_currentToken)) { + return parseExpressionStatement(); + } + else { + return null; + } + } + function parseDebuggerStatement(debuggerKeyword) { + return new Parser.syntaxFactory.DebuggerStatementSyntax(parseNodeData, consumeToken(debuggerKeyword), eatExplicitOrAutomaticSemicolon(false)); + } + function parseDoStatement(doKeyword) { + return new Parser.syntaxFactory.DoStatementSyntax(parseNodeData, consumeToken(doKeyword), parseStatement(false), eatToken(42 /* WhileKeyword */), eatToken(72 /* OpenParenToken */), parseExpression(true), eatToken(73 /* CloseParenToken */), eatExplicitOrAutomaticSemicolon(true)); + } + function isLabeledStatement(currentToken) { + return isIdentifier(currentToken) && peekToken(1).kind() === 106 /* ColonToken */; + } + function parseLabeledStatement(identifierToken) { + return new Parser.syntaxFactory.LabeledStatementSyntax(parseNodeData, consumeToken(identifierToken), eatToken(106 /* ColonToken */), parseStatement(false)); + } + function parseTryStatement(tryKeyword) { + var tryKeyword = consumeToken(tryKeyword); + var savedListParsingState = listParsingState; + listParsingState |= (1 << 6 /* TryBlock_Statements */); + var block = parseBlock(false, false); + listParsingState = savedListParsingState; + var catchClause = null; + if (currentToken().kind() === 17 /* CatchKeyword */) { + catchClause = parseCatchClause(); + } + var finallyClause = null; + if (catchClause === null || currentToken().kind() === 25 /* FinallyKeyword */) { + finallyClause = parseFinallyClause(); + } + return new Parser.syntaxFactory.TryStatementSyntax(parseNodeData, tryKeyword, block, catchClause, finallyClause); + } + function parseCatchClauseBlock() { + var savedListParsingState = listParsingState; + listParsingState |= (1 << 7 /* CatchBlock_Statements */); + var block = parseBlock(false, false); + listParsingState = savedListParsingState; + return block; + } + function parseCatchClause() { + return new Parser.syntaxFactory.CatchClauseSyntax(parseNodeData, eatToken(17 /* CatchKeyword */), eatToken(72 /* OpenParenToken */), eatIdentifierToken(), parseOptionalTypeAnnotation(false), eatToken(73 /* CloseParenToken */), parseCatchClauseBlock()); + } + function parseFinallyClause() { + return new Parser.syntaxFactory.FinallyClauseSyntax(parseNodeData, eatToken(25 /* FinallyKeyword */), parseBlock(false, false)); + } + function parseWithStatement(withKeyword) { + return new Parser.syntaxFactory.WithStatementSyntax(parseNodeData, consumeToken(withKeyword), eatToken(72 /* OpenParenToken */), parseExpression(true), eatToken(73 /* CloseParenToken */), parseStatement(false)); + } + function parseWhileStatement(whileKeyword) { + return new Parser.syntaxFactory.WhileStatementSyntax(parseNodeData, consumeToken(whileKeyword), eatToken(72 /* OpenParenToken */), parseExpression(true), eatToken(73 /* CloseParenToken */), parseStatement(false)); + } + function isEmptyStatement(currentToken, inErrorRecovery) { + if (inErrorRecovery) { + return false; + } + return currentToken.kind() === 78 /* SemicolonToken */; + } + function parseEmptyStatement(semicolonToken) { + return new Parser.syntaxFactory.EmptyStatementSyntax(parseNodeData, consumeToken(semicolonToken)); + } + function parseForOrForInStatement(forKeyword) { + consumeToken(forKeyword); + var openParenToken = eatToken(72 /* OpenParenToken */); + var _currentToken = currentToken(); + var tokenKind = _currentToken.kind(); + if (tokenKind === 40 /* VarKeyword */) { + return parseForOrForInStatementWithVariableDeclaration(forKeyword, openParenToken); + } + else if (tokenKind === 78 /* SemicolonToken */) { + return parseForStatementWithNoVariableDeclarationOrInitializer(forKeyword, openParenToken); + } + else { + return parseForOrForInStatementWithInitializer(forKeyword, openParenToken); + } + } + function parseForOrForInStatementWithVariableDeclaration(forKeyword, openParenToken) { + var variableDeclaration = parseVariableDeclaration(false); + return currentToken().kind() === 29 /* InKeyword */ ? parseForInStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, variableDeclaration, null) : parseForStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, variableDeclaration, null); + } + function parseForInStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, variableDeclaration, initializer) { + return new Parser.syntaxFactory.ForInStatementSyntax(parseNodeData, forKeyword, openParenToken, variableDeclaration, initializer, eatToken(29 /* InKeyword */), parseExpression(true), eatToken(73 /* CloseParenToken */), parseStatement(false)); + } + function parseForOrForInStatementWithInitializer(forKeyword, openParenToken) { + var initializer = parseExpression(false); + return currentToken().kind() === 29 /* InKeyword */ ? parseForInStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, null, initializer) : parseForStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, null, initializer); + } + function parseForStatementWithNoVariableDeclarationOrInitializer(forKeyword, openParenToken) { + return parseForStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, null, null); + } + function tryParseForStatementCondition() { + var tokenKind = currentToken().kind(); + if (tokenKind !== 78 /* SemicolonToken */ && tokenKind !== 73 /* CloseParenToken */ && tokenKind !== 10 /* EndOfFileToken */) { + return parseExpression(true); + } + return null; + } + function tryParseForStatementIncrementor() { + var tokenKind = currentToken().kind(); + if (tokenKind !== 73 /* CloseParenToken */ && tokenKind !== 10 /* EndOfFileToken */) { + return parseExpression(true); + } + return null; + } + function parseForStatementWithVariableDeclarationOrInitializer(forKeyword, openParenToken, variableDeclaration, initializer) { + return new Parser.syntaxFactory.ForStatementSyntax(parseNodeData, forKeyword, openParenToken, variableDeclaration, initializer, eatToken(78 /* SemicolonToken */), tryParseForStatementCondition(), eatToken(78 /* SemicolonToken */), tryParseForStatementIncrementor(), eatToken(73 /* CloseParenToken */), parseStatement(false)); + } + function tryEatBreakOrContinueLabel() { + var identifier = null; + if (!canEatExplicitOrAutomaticSemicolon(false)) { + if (isIdentifier(currentToken())) { + return eatIdentifierToken(); + } + } + return null; + } + function parseBreakStatement(breakKeyword) { + return new Parser.syntaxFactory.BreakStatementSyntax(parseNodeData, consumeToken(breakKeyword), tryEatBreakOrContinueLabel(), eatExplicitOrAutomaticSemicolon(false)); + } + function parseContinueStatement(continueKeyword) { + return new Parser.syntaxFactory.ContinueStatementSyntax(parseNodeData, consumeToken(continueKeyword), tryEatBreakOrContinueLabel(), eatExplicitOrAutomaticSemicolon(false)); + } + function parseSwitchStatement(switchKeyword) { + consumeToken(switchKeyword); + var openParenToken = eatToken(72 /* OpenParenToken */); + var expression = parseExpression(true); + var closeParenToken = eatToken(73 /* CloseParenToken */); + var openBraceToken = eatToken(70 /* OpenBraceToken */); + var switchClauses = TypeScript.Syntax.emptyList(); + if (openBraceToken.fullWidth() > 0) { + var skippedTokens = getArray(); + switchClauses = parseSyntaxList(3 /* SwitchStatement_SwitchClauses */, skippedTokens); + openBraceToken = addSkippedTokensAfterToken(openBraceToken, skippedTokens); + } + return new Parser.syntaxFactory.SwitchStatementSyntax(parseNodeData, switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, eatToken(71 /* CloseBraceToken */)); + } + function isSwitchClause() { + if (TypeScript.SyntaxUtilities.isSwitchClause(currentNode())) { + return true; + } + var currentTokenKind = currentToken().kind(); + return currentTokenKind === 16 /* CaseKeyword */ || currentTokenKind === 20 /* DefaultKeyword */; + } + function tryParseSwitchClause() { + var node = currentNode(); + if (TypeScript.SyntaxUtilities.isSwitchClause(node)) { + consumeNode(node); + return node; + } + var _currentToken = currentToken(); + var kind = _currentToken.kind(); + if (kind === 16 /* CaseKeyword */) { + return parseCaseSwitchClause(_currentToken); + } + else if (kind === 20 /* DefaultKeyword */) { + return parseDefaultSwitchClause(_currentToken); + } + else { + return null; + } + } + function parseCaseSwitchClause(caseKeyword) { + consumeToken(caseKeyword); + var expression = parseExpression(true); + var colonToken = eatToken(106 /* ColonToken */); + var statements = TypeScript.Syntax.emptyList(); + if (colonToken.fullWidth() > 0) { + var skippedTokens = getArray(); + statements = parseSyntaxList(4 /* SwitchClause_Statements */, skippedTokens); + colonToken = addSkippedTokensAfterToken(colonToken, skippedTokens); + } + return new Parser.syntaxFactory.CaseSwitchClauseSyntax(parseNodeData, caseKeyword, expression, colonToken, statements); + } + function parseDefaultSwitchClause(defaultKeyword) { + consumeToken(defaultKeyword); + var colonToken = eatToken(106 /* ColonToken */); + var statements = TypeScript.Syntax.emptyList(); + if (colonToken.fullWidth() > 0) { + var skippedTokens = getArray(); + statements = parseSyntaxList(4 /* SwitchClause_Statements */, skippedTokens); + colonToken = addSkippedTokensAfterToken(colonToken, skippedTokens); + } + return new Parser.syntaxFactory.DefaultSwitchClauseSyntax(parseNodeData, defaultKeyword, colonToken, statements); + } + function parseThrowStatementExpression() { + return canEatExplicitOrAutomaticSemicolon(false) ? createMissingToken(11 /* IdentifierName */, null) : parseExpression(true); + } + function parseThrowStatement(throwKeyword) { + return new Parser.syntaxFactory.ThrowStatementSyntax(parseNodeData, consumeToken(throwKeyword), parseThrowStatementExpression(), eatExplicitOrAutomaticSemicolon(false)); + } + function tryParseReturnStatementExpression() { + return !canEatExplicitOrAutomaticSemicolon(false) ? parseExpression(true) : null; + } + function parseReturnStatement(returnKeyword) { + return new Parser.syntaxFactory.ReturnStatementSyntax(parseNodeData, consumeToken(returnKeyword), tryParseReturnStatementExpression(), eatExplicitOrAutomaticSemicolon(false)); + } + function isExpressionStatement(currentToken) { + var tokenKind = currentToken.kind(); + return tokenKind !== 70 /* OpenBraceToken */ && tokenKind !== 27 /* FunctionKeyword */ && isExpression(currentToken); + } + function isAssignmentOrOmittedExpression() { + var _currentToken = currentToken(); + return _currentToken.kind() === 79 /* CommaToken */ || isExpression(_currentToken); + } + function tryParseAssignmentOrOmittedExpression() { + if (currentToken().kind() === 79 /* CommaToken */) { + return new Parser.syntaxFactory.OmittedExpressionSyntax(parseNodeData); + } + return tryParseAssignmentExpressionOrHigher(false, true); + } + function isExpression(currentToken) { + switch (currentToken.kind()) { + case 13 /* NumericLiteral */: + case 14 /* StringLiteral */: + case 12 /* RegularExpressionLiteral */: + case 74 /* OpenBracketToken */: + case 72 /* OpenParenToken */: + case 80 /* LessThanToken */: + case 93 /* PlusPlusToken */: + case 94 /* MinusMinusToken */: + case 89 /* PlusToken */: + case 90 /* MinusToken */: + case 102 /* TildeToken */: + case 101 /* ExclamationToken */: + case 70 /* OpenBraceToken */: + case 85 /* EqualsGreaterThanToken */: + case 118 /* SlashToken */: + case 119 /* SlashEqualsToken */: + case 50 /* SuperKeyword */: + case 35 /* ThisKeyword */: + case 37 /* TrueKeyword */: + case 24 /* FalseKeyword */: + case 32 /* NullKeyword */: + case 31 /* NewKeyword */: + case 21 /* DeleteKeyword */: + case 41 /* VoidKeyword */: + case 39 /* TypeOfKeyword */: + case 27 /* FunctionKeyword */: + return true; + } + return isIdentifier(currentToken); + } + function parseExpressionStatement() { + return new Parser.syntaxFactory.ExpressionStatementSyntax(parseNodeData, parseExpression(true), eatExplicitOrAutomaticSemicolon(false)); + } + function parseIfStatement(ifKeyword) { + return new Parser.syntaxFactory.IfStatementSyntax(parseNodeData, consumeToken(ifKeyword), eatToken(72 /* OpenParenToken */), parseExpression(true), eatToken(73 /* CloseParenToken */), parseStatement(false), parseOptionalElseClause()); + } + function parseOptionalElseClause() { + return currentToken().kind() === 23 /* ElseKeyword */ ? parseElseClause() : null; + } + function parseElseClause() { + return new Parser.syntaxFactory.ElseClauseSyntax(parseNodeData, eatToken(23 /* ElseKeyword */), parseStatement(false)); + } + function isVariableStatement(modifierCount) { + return peekToken(modifierCount).kind() === 40 /* VarKeyword */; + } + function parseVariableStatement() { + return new Parser.syntaxFactory.VariableStatementSyntax(parseNodeData, parseModifiers(), parseVariableDeclaration(true), eatExplicitOrAutomaticSemicolon(false)); + } + function parseVariableDeclaration(allowIn) { + var varKeyword = eatToken(40 /* VarKeyword */); + var listParsingState = allowIn ? 12 /* VariableDeclaration_VariableDeclarators_AllowIn */ : 13 /* VariableDeclaration_VariableDeclarators_DisallowIn */; + var skippedTokens = getArray(); + var variableDeclarators = parseSeparatedSyntaxList(listParsingState, skippedTokens); + varKeyword = addSkippedTokensAfterToken(varKeyword, skippedTokens); + return new Parser.syntaxFactory.VariableDeclarationSyntax(parseNodeData, varKeyword, variableDeclarators); + } + function isVariableDeclarator() { + var node = currentNode(); + if (node !== null && node.kind() === 225 /* VariableDeclarator */) { + return true; + } + return isIdentifier(currentToken()); + } + function canReuseVariableDeclaratorNode(node) { + if (node === null || node.kind() !== 225 /* VariableDeclarator */) { + return false; + } + var variableDeclarator = node; + return variableDeclarator.equalsValueClause === null; + } + function tryParseVariableDeclarator(allowIn, allowPropertyName) { + var node = currentNode(); + if (canReuseVariableDeclaratorNode(node)) { + consumeNode(node); + return node; + } + if (allowPropertyName) { + } + if (!allowPropertyName && !isIdentifier(currentToken())) { + return null; + } + var propertyName = allowPropertyName ? eatPropertyName() : eatIdentifierToken(); + var equalsValueClause = null; + var typeAnnotation = null; + if (propertyName.fullWidth() > 0) { + typeAnnotation = parseOptionalTypeAnnotation(false); + if (isEqualsValueClause(false)) { + equalsValueClause = parseEqualsValueClause(allowIn); + } + } + return new Parser.syntaxFactory.VariableDeclaratorSyntax(parseNodeData, propertyName, typeAnnotation, equalsValueClause); + } + function isEqualsValueClause(inParameter) { + var token0 = currentToken(); + if (token0.kind() === 107 /* EqualsToken */) { + return true; + } + if (!previousTokenHasTrailingNewLine(token0)) { + var tokenKind = token0.kind(); + if (tokenKind === 85 /* EqualsGreaterThanToken */) { + return false; + } + if (tokenKind === 70 /* OpenBraceToken */ && inParameter) { + return false; + } + return isExpression(token0); + } + return false; + } + function parseEqualsValueClause(allowIn) { + return new Parser.syntaxFactory.EqualsValueClauseSyntax(parseNodeData, eatToken(107 /* EqualsToken */), tryParseAssignmentExpressionOrHigher(true, allowIn)); + } + function parseExpression(allowIn) { + var leftOperand = tryParseAssignmentExpressionOrHigher(true, allowIn); + while (true) { + var _currentToken = currentToken(); + if (_currentToken.kind() !== 79 /* CommaToken */) { + break; + } + leftOperand = new Parser.syntaxFactory.BinaryExpressionSyntax(parseNodeData, leftOperand, consumeToken(_currentToken), tryParseAssignmentExpressionOrHigher(true, allowIn)); + } + return leftOperand; + } + function tryParseAssignmentExpressionOrHigher(force, allowIn) { + var _currentToken = currentToken(); + var arrowFunction = tryParseAnyArrowFunctionExpression(_currentToken); + if (arrowFunction !== null) { + return arrowFunction; + } + var leftOperand = tryParseBinaryExpressionOrHigher(_currentToken, force, 1 /* Lowest */, allowIn); + if (leftOperand === null) { + return null; + } + if (TypeScript.SyntaxUtilities.isLeftHandSizeExpression(leftOperand)) { + var operatorToken = currentOperatorToken(); + if (TypeScript.SyntaxFacts.isAssignmentOperatorToken(operatorToken.kind())) { + return new Parser.syntaxFactory.BinaryExpressionSyntax(parseNodeData, leftOperand, consumeToken(operatorToken), tryParseAssignmentExpressionOrHigher(true, allowIn)); + } + } + return parseConditionalExpressionRest(allowIn, leftOperand); + } + function tryParseAnyArrowFunctionExpression(_currentToken) { + return isSimpleArrowFunctionExpression(_currentToken) ? parseSimpleArrowFunctionExpression() : tryParseParenthesizedArrowFunctionExpression(); + } + function tryParseUnaryExpressionOrHigher(_currentToken, force) { + var currentTokenKind = _currentToken.kind(); + switch (currentTokenKind) { + case 89 /* PlusToken */: + case 90 /* MinusToken */: + case 102 /* TildeToken */: + case 101 /* ExclamationToken */: + case 93 /* PlusPlusToken */: + case 94 /* MinusMinusToken */: + return new Parser.syntaxFactory.PrefixUnaryExpressionSyntax(parseNodeData, consumeToken(_currentToken), tryParseUnaryExpressionOrHigher(currentToken(), true)); + case 39 /* TypeOfKeyword */: + return parseTypeOfExpression(_currentToken); + case 41 /* VoidKeyword */: + return parseVoidExpression(_currentToken); + case 21 /* DeleteKeyword */: + return parseDeleteExpression(_currentToken); + case 80 /* LessThanToken */: + return parseCastExpression(_currentToken); + default: + return tryParsePostfixExpressionOrHigher(_currentToken, force); + } + } + function tryParseBinaryExpressionOrHigher(_currentToken, force, precedence, allowIn) { + var leftOperand = tryParseUnaryExpressionOrHigher(_currentToken, force); + if (leftOperand === null) { + return null; + } + return parseBinaryExpressionRest(precedence, allowIn, leftOperand); + } + function parseConditionalExpressionRest(allowIn, leftOperand) { + var _currentToken = currentToken(); + if (_currentToken.kind() !== 105 /* QuestionToken */) { + return leftOperand; + } + return new Parser.syntaxFactory.ConditionalExpressionSyntax(parseNodeData, leftOperand, consumeToken(_currentToken), tryParseAssignmentExpressionOrHigher(true, true), eatToken(106 /* ColonToken */), tryParseAssignmentExpressionOrHigher(true, allowIn)); + } + function parseBinaryExpressionRest(precedence, allowIn, leftOperand) { + while (true) { + var operatorToken = currentOperatorToken(); + var tokenKind = operatorToken.kind(); + if (!TypeScript.SyntaxFacts.isBinaryExpressionOperatorToken(tokenKind) || tokenKind === 79 /* CommaToken */ || TypeScript.SyntaxFacts.isAssignmentOperatorToken(tokenKind)) { + break; + } + if (tokenKind === 29 /* InKeyword */ && !allowIn) { + break; + } + var newPrecedence = getBinaryExpressionPrecedence(tokenKind); + if (newPrecedence <= precedence) { + break; + } + leftOperand = new Parser.syntaxFactory.BinaryExpressionSyntax(parseNodeData, leftOperand, consumeToken(operatorToken), tryParseBinaryExpressionOrHigher(currentToken(), true, newPrecedence, allowIn)); + } + return leftOperand; + } + function currentOperatorToken() { + var token0 = currentToken(); + if (token0.kind() === 81 /* GreaterThanToken */) { + return currentContextualToken(); + } + return token0; + } + function tryParseMemberExpressionOrHigher(_currentToken, force, inObjectCreation) { + var expression = tryParsePrimaryExpression(_currentToken, force); + if (expression === null) { + return null; + } + return parseMemberExpressionRest(expression, inObjectCreation); + } + function parseCallExpressionRest(expression) { + while (true) { + var _currentToken = currentToken(); + var currentTokenKind = _currentToken.kind(); + switch (currentTokenKind) { + case 72 /* OpenParenToken */: + expression = new Parser.syntaxFactory.InvocationExpressionSyntax(parseNodeData, expression, parseArgumentList(null)); + continue; + case 80 /* LessThanToken */: + var argumentList = tryParseArgumentList(); + if (argumentList === null) { + break; + } + expression = new Parser.syntaxFactory.InvocationExpressionSyntax(parseNodeData, expression, argumentList); + continue; + case 74 /* OpenBracketToken */: + expression = parseElementAccessExpression(expression, _currentToken, false); + continue; + case 76 /* DotToken */: + expression = new Parser.syntaxFactory.MemberAccessExpressionSyntax(parseNodeData, expression, consumeToken(_currentToken), eatIdentifierNameToken()); + continue; + } + return expression; + } + } + function parseMemberExpressionRest(expression, inObjectCreation) { + while (true) { + var _currentToken = currentToken(); + var currentTokenKind = _currentToken.kind(); + switch (currentTokenKind) { + case 74 /* OpenBracketToken */: + expression = parseElementAccessExpression(expression, _currentToken, inObjectCreation); + continue; + case 76 /* DotToken */: + expression = new Parser.syntaxFactory.MemberAccessExpressionSyntax(parseNodeData, expression, consumeToken(_currentToken), eatIdentifierNameToken()); + continue; + } + return expression; + } + } + function tryParseLeftHandSideExpressionOrHigher(_currentToken, force) { + var expression = null; + if (_currentToken.kind() === 50 /* SuperKeyword */) { + expression = parseSuperExpression(_currentToken); + } + else { + expression = tryParseMemberExpressionOrHigher(_currentToken, force, false); + if (expression === null) { + return null; + } + } + return parseCallExpressionRest(expression); + } + function parseSuperExpression(superToken) { + var expression = consumeToken(superToken); + var currentTokenKind = currentToken().kind(); + return currentTokenKind === 72 /* OpenParenToken */ || currentTokenKind === 76 /* DotToken */ ? expression : new Parser.syntaxFactory.MemberAccessExpressionSyntax(parseNodeData, expression, eatToken(76 /* DotToken */), eatIdentifierNameToken()); + } + function tryParsePostfixExpressionOrHigher(_currentToken, force) { + var expression = tryParseLeftHandSideExpressionOrHigher(_currentToken, force); + if (expression === null) { + return null; + } + var _currentToken = currentToken(); + var currentTokenKind = _currentToken.kind(); + switch (currentTokenKind) { + case 93 /* PlusPlusToken */: + case 94 /* MinusMinusToken */: + if (previousTokenHasTrailingNewLine(_currentToken)) { + break; + } + return new Parser.syntaxFactory.PostfixUnaryExpressionSyntax(parseNodeData, expression, consumeToken(_currentToken)); + } + return expression; + } + function tryParseGenericArgumentList() { + var rewindPoint = getRewindPoint(); + var typeArgumentList = tryParseTypeArgumentList(true); + var token0 = currentToken(); + var tokenKind = token0.kind(); + var isOpenParen = tokenKind === 72 /* OpenParenToken */; + var isDot = tokenKind === 76 /* DotToken */; + var isOpenParenOrDot = isOpenParen || isDot; + var argumentList = null; + if (typeArgumentList === null || !isOpenParenOrDot) { + rewind(rewindPoint); + releaseRewindPoint(rewindPoint); + return null; + } + else { + releaseRewindPoint(rewindPoint); + if (isDot) { + var diagnostic = new TypeScript.Diagnostic(fileName, source.text.lineMap(), TypeScript.start(token0, source.text), TypeScript.width(token0), TypeScript.DiagnosticCode.A_parameter_list_must_follow_a_generic_type_argument_list_expected, null); + addDiagnostic(diagnostic); + return new Parser.syntaxFactory.ArgumentListSyntax(parseNodeData, typeArgumentList, TypeScript.Syntax.emptyToken(72 /* OpenParenToken */), TypeScript.Syntax.emptySeparatedList(), TypeScript.Syntax.emptyToken(73 /* CloseParenToken */)); + } + else { + return parseArgumentList(typeArgumentList); + } + } + } + function tryParseArgumentList() { + var tokenKind = currentToken().kind(); + if (tokenKind === 80 /* LessThanToken */) { + return tryParseGenericArgumentList(); + } + if (tokenKind === 72 /* OpenParenToken */) { + return parseArgumentList(null); + } + return null; + } + function parseArgumentList(typeArgumentList) { + var openParenToken = eatToken(72 /* OpenParenToken */); + var _arguments = TypeScript.Syntax.emptySeparatedList(); + if (openParenToken.fullWidth() > 0) { + var skippedTokens = getArray(); + _arguments = parseSeparatedSyntaxList(14 /* ArgumentList_AssignmentExpressions */, skippedTokens); + openParenToken = addSkippedTokensAfterToken(openParenToken, skippedTokens); + } + return new Parser.syntaxFactory.ArgumentListSyntax(parseNodeData, typeArgumentList, openParenToken, _arguments, eatToken(73 /* CloseParenToken */)); + } + function tryParseArgumentListExpression() { + var force = currentToken().kind() === 79 /* CommaToken */; + return tryParseAssignmentExpressionOrHigher(force, true); + } + function parseElementAccessArgumentExpression(openBracketToken, inObjectCreation) { + if (inObjectCreation && currentToken().kind() === 75 /* CloseBracketToken */) { + var errorStart = TypeScript.start(openBracketToken, source.text); + var errorEnd = TypeScript.end(currentToken(), source.text); + var diagnostic = new TypeScript.Diagnostic(fileName, source.text.lineMap(), errorStart, errorEnd - errorStart, TypeScript.DiagnosticCode.new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead, null); + addDiagnostic(diagnostic); + return TypeScript.Syntax.emptyToken(11 /* IdentifierName */); + } + else { + return parseExpression(true); + } + } + function parseElementAccessExpression(expression, openBracketToken, inObjectCreation) { + return new Parser.syntaxFactory.ElementAccessExpressionSyntax(parseNodeData, expression, consumeToken(openBracketToken), parseElementAccessArgumentExpression(openBracketToken, inObjectCreation), eatToken(75 /* CloseBracketToken */)); + } + function tryParsePrimaryExpression(_currentToken, force) { + if (isIdentifier(_currentToken)) { + return eatIdentifierToken(); + } + var currentTokenKind = _currentToken.kind(); + switch (currentTokenKind) { + case 35 /* ThisKeyword */: + case 37 /* TrueKeyword */: + case 24 /* FalseKeyword */: + case 32 /* NullKeyword */: + case 13 /* NumericLiteral */: + case 12 /* RegularExpressionLiteral */: + case 14 /* StringLiteral */: + return consumeToken(_currentToken); + case 27 /* FunctionKeyword */: + return parseFunctionExpression(_currentToken); + case 74 /* OpenBracketToken */: + return parseArrayLiteralExpression(_currentToken); + case 70 /* OpenBraceToken */: + return parseObjectLiteralExpression(_currentToken); + case 72 /* OpenParenToken */: + return parseParenthesizedExpression(_currentToken); + case 31 /* NewKeyword */: + return parseObjectCreationExpression(_currentToken); + case 118 /* SlashToken */: + case 119 /* SlashEqualsToken */: + var result = tryReparseDivideAsRegularExpression(); + return result || eatIdentifierToken(TypeScript.DiagnosticCode.Expression_expected); + } + if (!force) { + return null; + } + return eatIdentifierToken(TypeScript.DiagnosticCode.Expression_expected); + } + function tryReparseDivideAsRegularExpression() { + var currentToken = currentContextualToken(); + var tokenKind = currentToken.kind(); + if (tokenKind === 118 /* SlashToken */ || tokenKind === 119 /* SlashEqualsToken */) { + return null; + } + else if (tokenKind === 12 /* RegularExpressionLiteral */) { + return consumeToken(currentToken); + } + else { + throw TypeScript.Errors.invalidOperation(); + } + } + function parseTypeOfExpression(typeOfKeyword) { + return new Parser.syntaxFactory.TypeOfExpressionSyntax(parseNodeData, consumeToken(typeOfKeyword), tryParseUnaryExpressionOrHigher(currentToken(), true)); + } + function parseDeleteExpression(deleteKeyword) { + return new Parser.syntaxFactory.DeleteExpressionSyntax(parseNodeData, consumeToken(deleteKeyword), tryParseUnaryExpressionOrHigher(currentToken(), true)); + } + function parseVoidExpression(voidKeyword) { + return new Parser.syntaxFactory.VoidExpressionSyntax(parseNodeData, consumeToken(voidKeyword), tryParseUnaryExpressionOrHigher(currentToken(), true)); + } + function parseFunctionExpression(functionKeyword) { + return new Parser.syntaxFactory.FunctionExpressionSyntax(parseNodeData, consumeToken(functionKeyword), eatOptionalIdentifierToken(), parseCallSignature(false), parseBlock(false, true)); + } + function parseObjectCreationExpression(newKeyword) { + return new Parser.syntaxFactory.ObjectCreationExpressionSyntax(parseNodeData, consumeToken(newKeyword), tryParseMemberExpressionOrHigher(currentToken(), true, true), tryParseArgumentList()); + } + function parseCastExpression(lessThanToken) { + return new Parser.syntaxFactory.CastExpressionSyntax(parseNodeData, consumeToken(lessThanToken), parseType(), eatToken(81 /* GreaterThanToken */), tryParseUnaryExpressionOrHigher(currentToken(), true)); + } + function parseParenthesizedExpression(openParenToken) { + return new Parser.syntaxFactory.ParenthesizedExpressionSyntax(parseNodeData, consumeToken(openParenToken), parseExpression(true), eatToken(73 /* CloseParenToken */)); + } + function tryParseParenthesizedArrowFunctionExpression() { + var tokenKind = currentToken().kind(); + if (tokenKind !== 72 /* OpenParenToken */ && tokenKind !== 80 /* LessThanToken */) { + return null; + } + if (isDefinitelyArrowFunctionExpression()) { + return tryParseParenthesizedArrowFunctionExpressionWorker(false); + } + if (!isPossiblyArrowFunctionExpression()) { + return null; + } + var rewindPoint = getRewindPoint(); + var arrowFunction = tryParseParenthesizedArrowFunctionExpressionWorker(true); + if (arrowFunction === null) { + rewind(rewindPoint); + } + releaseRewindPoint(rewindPoint); + return arrowFunction; + } + function tryParseParenthesizedArrowFunctionExpressionWorker(requireArrow) { + var _currentToken = currentToken(); + var callSignature = parseCallSignature(true); + if (requireArrow && currentToken().kind() !== 85 /* EqualsGreaterThanToken */) { + return null; + } + var equalsGreaterThanToken = eatToken(85 /* EqualsGreaterThanToken */); + var block = tryParseArrowFunctionBlock(); + var expression = null; + if (block === null) { + expression = tryParseAssignmentExpressionOrHigher(true, true); + } + return new Parser.syntaxFactory.ParenthesizedArrowFunctionExpressionSyntax(parseNodeData, callSignature, equalsGreaterThanToken, block, expression); + } + function tryParseArrowFunctionBlock() { + if (isBlock()) { + return parseBlock(false, false); + } + else { + var _modifierCount = modifierCount(); + if (isStatement(_modifierCount, false) && !isExpressionStatement(currentToken()) && !isFunctionDeclaration(_modifierCount)) { + return parseBlock(true, false); + } + else { + return null; + } + } + } + function isSimpleArrowFunctionExpression(_currentToken) { + if (_currentToken.kind() === 85 /* EqualsGreaterThanToken */) { + return true; + } + return isIdentifier(_currentToken) && peekToken(1).kind() === 85 /* EqualsGreaterThanToken */; + } + function parseSimpleArrowFunctionExpression() { + var parameter = eatSimpleParameter(); + var equalsGreaterThanToken = eatToken(85 /* EqualsGreaterThanToken */); + var block = tryParseArrowFunctionBlock(); + var expression = null; + if (block === null) { + expression = tryParseAssignmentExpressionOrHigher(true, true); + } + return new Parser.syntaxFactory.SimpleArrowFunctionExpressionSyntax(parseNodeData, parameter, equalsGreaterThanToken, block, expression); + } + function isBlock() { + return currentToken().kind() === 70 /* OpenBraceToken */; + } + function isDefinitelyArrowFunctionExpression() { + var token0 = currentToken(); + if (token0.kind() !== 72 /* OpenParenToken */) { + return false; + } + var token1 = peekToken(1); + var token1Kind = token1.kind(); + var token2; + if (token1Kind === 73 /* CloseParenToken */) { + token2 = peekToken(2); + var token2Kind = token2.kind(); + return token2Kind === 106 /* ColonToken */ || token2Kind === 85 /* EqualsGreaterThanToken */ || token2Kind === 70 /* OpenBraceToken */; + } + if (token1Kind === 77 /* DotDotDotToken */) { + return true; + } + token2 = peekToken(2); + token2Kind = token2.kind(); + if (token1Kind === 57 /* PublicKeyword */ || token1Kind === 55 /* PrivateKeyword */) { + if (isIdentifier(token2)) { + return true; + } + } + if (!isIdentifier(token1)) { + return false; + } + if (token2Kind === 106 /* ColonToken */) { + return true; + } + var token3 = peekToken(3); + var token3Kind = token3.kind(); + if (token2Kind === 105 /* QuestionToken */) { + if (token3Kind === 106 /* ColonToken */ || token3Kind === 73 /* CloseParenToken */ || token3Kind === 79 /* CommaToken */) { + return true; + } + } + if (token2Kind === 73 /* CloseParenToken */) { + if (token3Kind === 85 /* EqualsGreaterThanToken */) { + return true; + } + } + return false; + } + function isPossiblyArrowFunctionExpression() { + var token0 = currentToken(); + if (token0.kind() !== 72 /* OpenParenToken */) { + return true; + } + var token1 = peekToken(1); + if (!isIdentifier(token1)) { + return false; + } + var token2 = peekToken(2); + var token2Kind = token2.kind(); + if (token2Kind === 107 /* EqualsToken */) { + return true; + } + if (token2Kind === 79 /* CommaToken */) { + return true; + } + if (token2Kind === 73 /* CloseParenToken */) { + var token3 = peekToken(3); + if (token3.kind() === 106 /* ColonToken */) { + return true; + } + } + return false; + } + function parseObjectLiteralExpression(openBraceToken) { + consumeToken(openBraceToken); + var skippedTokens = getArray(); + var propertyAssignments = parseSeparatedSyntaxList(15 /* ObjectLiteralExpression_PropertyAssignments */, skippedTokens); + openBraceToken = addSkippedTokensAfterToken(openBraceToken, skippedTokens); + return new Parser.syntaxFactory.ObjectLiteralExpressionSyntax(parseNodeData, openBraceToken, propertyAssignments, eatToken(71 /* CloseBraceToken */)); + } + function tryParsePropertyAssignment(inErrorRecovery) { + if (isAccessor(modifierCount(), inErrorRecovery)) { + return parseAccessor(true); + } + else if (isFunctionPropertyAssignment(inErrorRecovery)) { + return parseFunctionPropertyAssignment(); + } + else if (isSimplePropertyAssignment(inErrorRecovery)) { + return parseSimplePropertyAssignment(); + } + else { + return null; + } + } + function isPropertyAssignment(inErrorRecovery) { + return isAccessor(modifierCount(), inErrorRecovery) || isFunctionPropertyAssignment(inErrorRecovery) || isSimplePropertyAssignment(inErrorRecovery); + } + function eatPropertyName() { + var _currentToken = currentToken(); + return TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(_currentToken) ? eatIdentifierNameToken() : consumeToken(_currentToken); + } + function isFunctionPropertyAssignment(inErrorRecovery) { + return isPropertyName(currentToken(), inErrorRecovery) && isCallSignature(1); + } + function parseFunctionPropertyAssignment() { + return new Parser.syntaxFactory.FunctionPropertyAssignmentSyntax(parseNodeData, eatPropertyName(), parseCallSignature(false), parseBlock(false, true)); + } + function isSimplePropertyAssignment(inErrorRecovery) { + return isPropertyName(currentToken(), inErrorRecovery); + } + function parseSimplePropertyAssignment() { + return new Parser.syntaxFactory.SimplePropertyAssignmentSyntax(parseNodeData, eatPropertyName(), eatToken(106 /* ColonToken */), tryParseAssignmentExpressionOrHigher(true, true)); + } + function isPropertyName(token, inErrorRecovery) { + if (TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(token)) { + if (inErrorRecovery) { + return isIdentifier(token); + } + else { + return true; + } + } + var kind = token.kind(); + return kind === 14 /* StringLiteral */ || kind === 13 /* NumericLiteral */; + } + function parseArrayLiteralExpression(openBracketToken) { + consumeToken(openBracketToken); + var skippedTokens = getArray(); + var expressions = parseSeparatedSyntaxList(16 /* ArrayLiteralExpression_AssignmentExpressions */, skippedTokens); + openBracketToken = addSkippedTokensAfterToken(openBracketToken, skippedTokens); + return new Parser.syntaxFactory.ArrayLiteralExpressionSyntax(parseNodeData, openBracketToken, expressions, eatToken(75 /* CloseBracketToken */)); + } + function parseBlock(parseBlockEvenWithNoOpenBrace, checkForStrictMode) { + var openBraceToken = eatToken(70 /* OpenBraceToken */); + var statements = TypeScript.Syntax.emptyList(); + if (parseBlockEvenWithNoOpenBrace || openBraceToken.fullWidth() > 0) { + var savedIsInStrictMode = isInStrictMode; + var processItems = checkForStrictMode ? updateStrictModeState : null; + var skippedTokens = getArray(); + var statements = parseSyntaxList(5 /* Block_Statements */, skippedTokens, processItems); + openBraceToken = addSkippedTokensAfterToken(openBraceToken, skippedTokens); + setStrictMode(savedIsInStrictMode); + } + return new Parser.syntaxFactory.BlockSyntax(parseNodeData, openBraceToken, statements, eatToken(71 /* CloseBraceToken */)); + } + function parseCallSignature(requireCompleteTypeParameterList) { + return new Parser.syntaxFactory.CallSignatureSyntax(parseNodeData, tryParseTypeParameterList(requireCompleteTypeParameterList), parseParameterList(), parseOptionalTypeAnnotation(false)); + } + function tryParseTypeParameterList(requireCompleteTypeParameterList) { + var _currentToken = currentToken(); + if (_currentToken.kind() !== 80 /* LessThanToken */) { + return null; + } + var rewindPoint = getRewindPoint(); + var lessThanToken = consumeToken(_currentToken); + var skippedTokens = getArray(); + var typeParameters = parseSeparatedSyntaxList(20 /* TypeParameterList_TypeParameters */, skippedTokens); + lessThanToken = addSkippedTokensAfterToken(lessThanToken, skippedTokens); + var greaterThanToken = eatToken(81 /* GreaterThanToken */); + if (requireCompleteTypeParameterList && greaterThanToken.fullWidth() === 0) { + rewind(rewindPoint); + releaseRewindPoint(rewindPoint); + return null; + } + else { + releaseRewindPoint(rewindPoint); + return new Parser.syntaxFactory.TypeParameterListSyntax(parseNodeData, lessThanToken, typeParameters, greaterThanToken); + } + } + function isTypeParameter() { + return isIdentifier(currentToken()); + } + function tryParseTypeParameter() { + if (!isIdentifier(currentToken())) { + return null; + } + return new Parser.syntaxFactory.TypeParameterSyntax(parseNodeData, eatIdentifierToken(), tryParseConstraint()); + } + function tryParseConstraint() { + if (currentToken().kind() !== 48 /* ExtendsKeyword */) { + return null; + } + return new Parser.syntaxFactory.ConstraintSyntax(parseNodeData, eatToken(48 /* ExtendsKeyword */), parseTypeOrExpression()); + } + function tryParseParameterList() { + if (currentToken().kind() === 72 /* OpenParenToken */) { + var token1 = peekToken(1); + if (token1.kind() === 73 /* CloseParenToken */ || isParameterHelper(token1)) { + return parseParameterList(); + } + } + return null; + } + function parseParameterList() { + var openParenToken = eatToken(72 /* OpenParenToken */); + var parameters = TypeScript.Syntax.emptySeparatedList(); + if (openParenToken.fullWidth() > 0) { + var skippedTokens = getArray(); + parameters = parseSeparatedSyntaxList(17 /* ParameterList_Parameters */, skippedTokens); + openParenToken = addSkippedTokensAfterToken(openParenToken, skippedTokens); + } + return new Parser.syntaxFactory.ParameterListSyntax(parseNodeData, openParenToken, parameters, eatToken(73 /* CloseParenToken */)); + } + function parseOptionalTypeAnnotation(allowStringLiteral) { + return currentToken().kind() === 106 /* ColonToken */ ? parseTypeAnnotation(allowStringLiteral) : null; + } + function parseTypeAnnotationType(allowStringLiteral) { + if (allowStringLiteral) { + var _currentToken = currentToken(); + if (_currentToken.kind() === 14 /* StringLiteral */) { + return consumeToken(_currentToken); + } + } + return parseType(); + } + function parseTypeAnnotation(allowStringLiteral) { + return new Parser.syntaxFactory.TypeAnnotationSyntax(parseNodeData, consumeToken(currentToken()), parseTypeAnnotationType(allowStringLiteral)); + } + function isType() { + var _currentToken = currentToken(); + switch (_currentToken.kind()) { + case 39 /* TypeOfKeyword */: + case 60 /* AnyKeyword */: + case 67 /* NumberKeyword */: + case 61 /* BooleanKeyword */: + case 69 /* StringKeyword */: + case 41 /* VoidKeyword */: + case 70 /* OpenBraceToken */: + case 72 /* OpenParenToken */: + case 80 /* LessThanToken */: + case 31 /* NewKeyword */: + return true; + default: + return isIdentifier(_currentToken); + } + } + function parseTypeOrExpression() { + var result = tryParseType(); + if (result) { + return result; + } + var _currentToken = currentToken(); + if (isExpression(_currentToken)) { + return tryParseUnaryExpressionOrHigher(_currentToken, true); + } + return eatIdentifierToken(TypeScript.DiagnosticCode.Type_expected); + } + function parseType() { + return tryParseType() || eatIdentifierToken(TypeScript.DiagnosticCode.Type_expected); + } + function tryParseType() { + var type = tryParseNonArrayType(); + while (type) { + var _currentToken = currentToken(); + if (previousTokenHasTrailingNewLine(_currentToken) || _currentToken.kind() !== 74 /* OpenBracketToken */) { + break; + } + type = new Parser.syntaxFactory.ArrayTypeSyntax(parseNodeData, type, consumeToken(_currentToken), eatToken(75 /* CloseBracketToken */)); + } + return type; + } + function parseTypeQuery(typeOfKeyword) { + return new Parser.syntaxFactory.TypeQuerySyntax(parseNodeData, consumeToken(typeOfKeyword), parseName(true)); + } + function tryParseNonArrayType() { + var _currentToken = currentToken(); + switch (_currentToken.kind()) { + case 60 /* AnyKeyword */: + case 67 /* NumberKeyword */: + case 61 /* BooleanKeyword */: + case 69 /* StringKeyword */: + if (peekToken(1).kind() === 76 /* DotToken */) { + break; + } + return consumeToken(_currentToken); + case 72 /* OpenParenToken */: + case 80 /* LessThanToken */: + return tryParseFunctionType(); + case 41 /* VoidKeyword */: + return consumeToken(_currentToken); + case 70 /* OpenBraceToken */: + return parseObjectType(); + case 31 /* NewKeyword */: + return parseConstructorType(); + case 39 /* TypeOfKeyword */: + return parseTypeQuery(_currentToken); + } + return tryParseNameOrGenericType(); + } + function tryParseNameOrGenericType() { + var name = tryParseName(false); + if (name === null) { + return null; + } + if (previousTokenHasTrailingNewLine(currentToken())) { + return name; + } + var typeArgumentList = tryParseTypeArgumentList(false); + return typeArgumentList === null ? name : new Parser.syntaxFactory.GenericTypeSyntax(parseNodeData, name, typeArgumentList); + } + function tryParseFunctionType() { + var typeParameterList = tryParseTypeParameterList(false); + var parameterList = null; + if (typeParameterList === null) { + parameterList = tryParseParameterList(); + if (parameterList === null) { + return null; + } + } + else { + parameterList = parseParameterList(); + } + return new Parser.syntaxFactory.FunctionTypeSyntax(parseNodeData, typeParameterList, parameterList, eatToken(85 /* EqualsGreaterThanToken */), parseType()); + } + function parseConstructorType() { + return new Parser.syntaxFactory.ConstructorTypeSyntax(parseNodeData, eatToken(31 /* NewKeyword */), tryParseTypeParameterList(false), parseParameterList(), eatToken(85 /* EqualsGreaterThanToken */), parseType()); + } + function isParameter() { + if (currentNode() !== null && currentNode().kind() === 242 /* Parameter */) { + return true; + } + return isParameterHelper(currentToken()); + } + function isParameterHelper(token) { + var tokenKind = token.kind(); + return tokenKind === 77 /* DotDotDotToken */ || isModifierKind(tokenKind) || isIdentifier(token); + } + function eatSimpleParameter() { + return new Parser.syntaxFactory.ParameterSyntax(parseNodeData, null, TypeScript.Syntax.emptyList(), eatIdentifierToken(), null, null, null); + } + function tryParseParameter() { + var node = currentNode(); + if (node !== null && node.kind() === 242 /* Parameter */) { + consumeNode(node); + return node; + } + var dotDotDotToken = tryEatToken(77 /* DotDotDotToken */); + var modifiers = parseModifiers(); + var _currentToken = currentToken(); + if (!isIdentifier(_currentToken) && dotDotDotToken === null && modifiers.length === 0) { + if (isModifierKind(_currentToken.kind())) { + modifiers = TypeScript.Syntax.list([consumeToken(_currentToken)]); + } + else { + return null; + } + } + var identifier = eatIdentifierToken(); + var questionToken = tryEatToken(105 /* QuestionToken */); + var typeAnnotation = parseOptionalTypeAnnotation(true); + var equalsValueClause = null; + if (isEqualsValueClause(true)) { + equalsValueClause = parseEqualsValueClause(true); + } + return new Parser.syntaxFactory.ParameterSyntax(parseNodeData, dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause); + } + function parseSyntaxList(currentListType, skippedTokens, processItems) { + if (processItems === void 0) { processItems = null; } + var savedListParsingState = listParsingState; + listParsingState |= (1 << currentListType); + var result = parseSyntaxListWorker(currentListType, skippedTokens, processItems); + listParsingState = savedListParsingState; + return result; + } + function parseSeparatedSyntaxList(currentListType, skippedTokens) { + var savedListParsingState = listParsingState; + listParsingState |= (1 << currentListType); + var result = parseSeparatedSyntaxListWorker(currentListType, skippedTokens); + listParsingState = savedListParsingState; + return result; + } + function abortParsingListOrMoveToNextToken(currentListType, nodes, separators, skippedTokens) { + reportUnexpectedTokenDiagnostic(currentListType); + for (var state = ListParsingState.LastListParsingState; state >= ListParsingState.FirstListParsingState; state--) { + if ((listParsingState & (1 << state)) !== 0) { + if (isExpectedListTerminator(state) || isExpectedListItem(state, true)) { + return true; + } + } + } + addSkippedTokenToList(nodes, separators, skippedTokens, consumeToken(currentToken())); + return false; + } + function addSkippedTokenToList(nodes, separators, skippedTokens, skippedToken) { + if (Parser.syntaxFactory.isConcrete) { + var length = nodes.length + (separators ? separators.length : 0); + for (var i = length - 1; i >= 0; i--) { + var array = separators && (i % 2 === 1) ? separators : nodes; + var arrayIndex = separators ? TypeScript.IntegerUtilities.integerDivide(i, 2) : i; + var item = array[arrayIndex]; + var _lastToken = TypeScript.lastToken(item); + if (_lastToken && _lastToken.fullWidth() > 0) { + array[arrayIndex] = addSkippedTokenAfterNodeOrToken(item, skippedToken); + return; + } + } + skippedTokens.push(skippedToken); + } + } + function tryParseExpectedListItem(currentListType, inErrorRecovery, items, processItems) { + var item = tryParseExpectedListItemWorker(currentListType, inErrorRecovery); + if (item === null) { + return false; + } + items.push(item); + if (processItems !== null) { + processItems(items); + } + return true; + } + function listIsTerminated(currentListType) { + return isExpectedListTerminator(currentListType) || currentToken().kind() === 10 /* EndOfFileToken */; + } + function parseSyntaxListWorker(currentListType, skippedTokens, processItems) { + var items = getArray(); + while (true) { + var succeeded = tryParseExpectedListItem(currentListType, false, items, processItems); + if (!succeeded) { + if (listIsTerminated(currentListType)) { + break; + } + var abort = abortParsingListOrMoveToNextToken(currentListType, items, null, skippedTokens); + if (abort) { + break; + } + } + } + var result = TypeScript.Syntax.list(items); + returnZeroLengthArray(items); + return result; + } + function parseSeparatedSyntaxListWorker(currentListType, skippedTokens) { + var nodes = getArray(); + var separators = getArray(); + var _separatorKind = currentListType === 9 /* ObjectType_TypeMembers */ ? 78 /* SemicolonToken */ : 79 /* CommaToken */; + var allowAutomaticSemicolonInsertion = _separatorKind === 78 /* SemicolonToken */; + var inErrorRecovery = false; + while (true) { + var succeeded = tryParseExpectedListItem(currentListType, inErrorRecovery, nodes, null); + if (!succeeded) { + if (listIsTerminated(currentListType)) { + break; + } + var abort = abortParsingListOrMoveToNextToken(currentListType, nodes, separators, skippedTokens); + if (abort) { + break; + } + else { + inErrorRecovery = true; + continue; + } + } + inErrorRecovery = false; + var _currentToken = currentToken(); + var tokenKind = _currentToken.kind(); + if (tokenKind === _separatorKind || tokenKind === 79 /* CommaToken */) { + separators.push(consumeToken(_currentToken)); + continue; + } + if (listIsTerminated(currentListType)) { + break; + } + if (allowAutomaticSemicolonInsertion && canEatAutomaticSemicolon(false)) { + var semicolonToken = eatExplicitOrAutomaticSemicolon(false) || TypeScript.Syntax.emptyToken(78 /* SemicolonToken */); + separators.push(semicolonToken); + continue; + } + separators.push(eatToken(_separatorKind)); + inErrorRecovery = true; + } + var result = TypeScript.Syntax.separatedList(nodes, separators); + returnZeroLengthArray(nodes); + returnZeroLengthArray(separators); + return result; + } + function reportUnexpectedTokenDiagnostic(listType) { + var token = currentToken(); + var diagnostic = new TypeScript.Diagnostic(fileName, source.text.lineMap(), TypeScript.start(token, source.text), TypeScript.width(token), TypeScript.DiagnosticCode.Unexpected_token_0_expected, [getExpectedListElementType(listType)]); + addDiagnostic(diagnostic); + } + function addDiagnostic(diagnostic) { + if (diagnostics.length > 0 && diagnostics[diagnostics.length - 1].start() === diagnostic.start()) { + return; + } + diagnostics.push(diagnostic); + } + function isExpectedListTerminator(currentListType) { + switch (currentListType) { + case 0 /* SourceUnit_ModuleElements */: + return isExpectedSourceUnit_ModuleElementsTerminator(); + case 1 /* ClassDeclaration_ClassElements */: + return isExpectedClassDeclaration_ClassElementsTerminator(); + case 2 /* ModuleDeclaration_ModuleElements */: + return isExpectedModuleDeclaration_ModuleElementsTerminator(); + case 3 /* SwitchStatement_SwitchClauses */: + return isExpectedSwitchStatement_SwitchClausesTerminator(); + case 4 /* SwitchClause_Statements */: + return isExpectedSwitchClause_StatementsTerminator(); + case 5 /* Block_Statements */: + return isExpectedBlock_StatementsTerminator(); + case 6 /* TryBlock_Statements */: + return isExpectedTryBlock_StatementsTerminator(); + case 7 /* CatchBlock_Statements */: + return isExpectedCatchBlock_StatementsTerminator(); + case 8 /* EnumDeclaration_EnumElements */: + return isExpectedEnumDeclaration_EnumElementsTerminator(); + case 9 /* ObjectType_TypeMembers */: + return isExpectedObjectType_TypeMembersTerminator(); + case 10 /* ClassOrInterfaceDeclaration_HeritageClauses */: + return isExpectedClassOrInterfaceDeclaration_HeritageClausesTerminator(); + case 11 /* HeritageClause_TypeNameList */: + return isExpectedHeritageClause_TypeNameListTerminator(); + case 12 /* VariableDeclaration_VariableDeclarators_AllowIn */: + return isExpectedVariableDeclaration_VariableDeclarators_AllowInTerminator(); + case 13 /* VariableDeclaration_VariableDeclarators_DisallowIn */: + return isExpectedVariableDeclaration_VariableDeclarators_DisallowInTerminator(); + case 14 /* ArgumentList_AssignmentExpressions */: + return isExpectedArgumentList_AssignmentExpressionsTerminator(); + case 15 /* ObjectLiteralExpression_PropertyAssignments */: + return isExpectedObjectLiteralExpression_PropertyAssignmentsTerminator(); + case 16 /* ArrayLiteralExpression_AssignmentExpressions */: + return isExpectedLiteralExpression_AssignmentExpressionsTerminator(); + case 17 /* ParameterList_Parameters */: + return isExpectedParameterList_ParametersTerminator(); + case 18 /* IndexSignature_Parameters */: + return isExpectedIndexSignature_ParametersTerminator(); + case 19 /* TypeArgumentList_Types */: + return isExpectedTypeArgumentList_TypesTerminator(); + case 20 /* TypeParameterList_TypeParameters */: + return isExpectedTypeParameterList_TypeParametersTerminator(); + default: + throw TypeScript.Errors.invalidOperation(); + } + } + function isExpectedSourceUnit_ModuleElementsTerminator() { + return currentToken().kind() === 10 /* EndOfFileToken */; + } + function isExpectedEnumDeclaration_EnumElementsTerminator() { + return currentToken().kind() === 71 /* CloseBraceToken */; + } + function isExpectedModuleDeclaration_ModuleElementsTerminator() { + return currentToken().kind() === 71 /* CloseBraceToken */; + } + function isExpectedObjectType_TypeMembersTerminator() { + return currentToken().kind() === 71 /* CloseBraceToken */; + } + function isExpectedObjectLiteralExpression_PropertyAssignmentsTerminator() { + return currentToken().kind() === 71 /* CloseBraceToken */; + } + function isExpectedLiteralExpression_AssignmentExpressionsTerminator() { + return currentToken().kind() === 75 /* CloseBracketToken */; + } + function isExpectedTypeArgumentList_TypesTerminator() { + var token = currentToken(); + var tokenKind = token.kind(); + if (tokenKind === 81 /* GreaterThanToken */) { + return true; + } + if (canFollowTypeArgumentListInExpression(tokenKind)) { + return true; + } + return false; + } + function isExpectedTypeParameterList_TypeParametersTerminator() { + var tokenKind = currentToken().kind(); + if (tokenKind === 81 /* GreaterThanToken */) { + return true; + } + if (tokenKind === 72 /* OpenParenToken */ || tokenKind === 70 /* OpenBraceToken */ || tokenKind === 48 /* ExtendsKeyword */ || tokenKind === 51 /* ImplementsKeyword */) { + return true; + } + return false; + } + function isExpectedParameterList_ParametersTerminator() { + var tokenKind = currentToken().kind(); + if (tokenKind === 73 /* CloseParenToken */) { + return true; + } + if (tokenKind === 70 /* OpenBraceToken */) { + return true; + } + if (tokenKind === 85 /* EqualsGreaterThanToken */) { + return true; + } + return false; + } + function isExpectedIndexSignature_ParametersTerminator() { + var tokenKind = currentToken().kind(); + if (tokenKind === 75 /* CloseBracketToken */) { + return true; + } + if (tokenKind === 70 /* OpenBraceToken */) { + return true; + } + return false; + } + function isExpectedVariableDeclaration_VariableDeclarators_DisallowInTerminator() { + var tokenKind = currentToken().kind(); + if (tokenKind === 78 /* SemicolonToken */ || tokenKind === 73 /* CloseParenToken */) { + return true; + } + if (tokenKind === 29 /* InKeyword */) { + return true; + } + return false; + } + function isExpectedVariableDeclaration_VariableDeclarators_AllowInTerminator() { + if (currentToken().kind() === 85 /* EqualsGreaterThanToken */) { + return true; + } + return canEatExplicitOrAutomaticSemicolon(false); + } + function isExpectedClassOrInterfaceDeclaration_HeritageClausesTerminator() { + var tokenKind = currentToken().kind(); + if (tokenKind === 70 /* OpenBraceToken */ || tokenKind === 71 /* CloseBraceToken */) { + return true; + } + return false; + } + function isExpectedHeritageClause_TypeNameListTerminator() { + var tokenKind = currentToken().kind(); + if (tokenKind === 48 /* ExtendsKeyword */ || tokenKind === 51 /* ImplementsKeyword */) { + return true; + } + if (isExpectedClassOrInterfaceDeclaration_HeritageClausesTerminator()) { + return true; + } + return false; + } + function isExpectedArgumentList_AssignmentExpressionsTerminator() { + var token0 = currentToken(); + var tokenKind = token0.kind(); + return tokenKind === 73 /* CloseParenToken */ || tokenKind === 78 /* SemicolonToken */; + } + function isExpectedClassDeclaration_ClassElementsTerminator() { + return currentToken().kind() === 71 /* CloseBraceToken */; + } + function isExpectedSwitchStatement_SwitchClausesTerminator() { + return currentToken().kind() === 71 /* CloseBraceToken */; + } + function isExpectedSwitchClause_StatementsTerminator() { + return currentToken().kind() === 71 /* CloseBraceToken */ || isSwitchClause(); + } + function isExpectedBlock_StatementsTerminator() { + return currentToken().kind() === 71 /* CloseBraceToken */; + } + function isExpectedTryBlock_StatementsTerminator() { + var tokenKind = currentToken().kind(); + return tokenKind === 17 /* CatchKeyword */ || tokenKind === 25 /* FinallyKeyword */; + } + function isExpectedCatchBlock_StatementsTerminator() { + return currentToken().kind() === 25 /* FinallyKeyword */; + } + function isExpectedListItem(currentListType, inErrorRecovery) { + switch (currentListType) { + case 0 /* SourceUnit_ModuleElements */: + return isModuleElement(inErrorRecovery); + case 1 /* ClassDeclaration_ClassElements */: + return isClassElement(inErrorRecovery); + case 2 /* ModuleDeclaration_ModuleElements */: + return isModuleElement(inErrorRecovery); + case 3 /* SwitchStatement_SwitchClauses */: + return isSwitchClause(); + case 4 /* SwitchClause_Statements */: + return isStatement(modifierCount(), inErrorRecovery); + case 5 /* Block_Statements */: + return isStatement(modifierCount(), inErrorRecovery); + case 6 /* TryBlock_Statements */: + return false; + case 7 /* CatchBlock_Statements */: + return false; + case 8 /* EnumDeclaration_EnumElements */: + return isEnumElement(inErrorRecovery); + case 9 /* ObjectType_TypeMembers */: + return isTypeMember(inErrorRecovery); + case 10 /* ClassOrInterfaceDeclaration_HeritageClauses */: + return isHeritageClause(); + case 11 /* HeritageClause_TypeNameList */: + return isHeritageClauseTypeName(); + case 12 /* VariableDeclaration_VariableDeclarators_AllowIn */: + return isVariableDeclarator(); + case 13 /* VariableDeclaration_VariableDeclarators_DisallowIn */: + return isVariableDeclarator(); + case 14 /* ArgumentList_AssignmentExpressions */: + return isExpectedArgumentList_AssignmentExpression(); + case 15 /* ObjectLiteralExpression_PropertyAssignments */: + return isPropertyAssignment(inErrorRecovery); + case 16 /* ArrayLiteralExpression_AssignmentExpressions */: + return isAssignmentOrOmittedExpression(); + case 17 /* ParameterList_Parameters */: + return isParameter(); + case 18 /* IndexSignature_Parameters */: + return isParameter(); + case 19 /* TypeArgumentList_Types */: + return isType(); + case 20 /* TypeParameterList_TypeParameters */: + return isTypeParameter(); + default: + throw TypeScript.Errors.invalidOperation(); + } + } + function isExpectedArgumentList_AssignmentExpression() { + var _currentToken = currentToken(); + if (isExpression(_currentToken)) { + return true; + } + if (_currentToken.kind() === 79 /* CommaToken */) { + return true; + } + return false; + } + function tryParseExpectedListItemWorker(currentListType, inErrorRecovery) { + switch (currentListType) { + case 0 /* SourceUnit_ModuleElements */: + return tryParseModuleElement(inErrorRecovery); + case 1 /* ClassDeclaration_ClassElements */: + return tryParseClassElement(inErrorRecovery); + case 2 /* ModuleDeclaration_ModuleElements */: + return tryParseModuleElement(inErrorRecovery); + case 3 /* SwitchStatement_SwitchClauses */: + return tryParseSwitchClause(); + case 4 /* SwitchClause_Statements */: + return tryParseStatement(inErrorRecovery); + case 5 /* Block_Statements */: + return tryParseStatement(inErrorRecovery); + case 6 /* TryBlock_Statements */: + return tryParseStatement(inErrorRecovery); + case 7 /* CatchBlock_Statements */: + return tryParseStatement(inErrorRecovery); + case 8 /* EnumDeclaration_EnumElements */: + return tryParseEnumElement(inErrorRecovery); + case 9 /* ObjectType_TypeMembers */: + return tryParseTypeMember(inErrorRecovery); + case 10 /* ClassOrInterfaceDeclaration_HeritageClauses */: + return tryParseHeritageClause(); + case 11 /* HeritageClause_TypeNameList */: + return tryParseHeritageClauseTypeName(); + case 12 /* VariableDeclaration_VariableDeclarators_AllowIn */: + return tryParseVariableDeclarator(true, false); + case 13 /* VariableDeclaration_VariableDeclarators_DisallowIn */: + return tryParseVariableDeclarator(false, false); + case 14 /* ArgumentList_AssignmentExpressions */: + return tryParseArgumentListExpression(); + case 15 /* ObjectLiteralExpression_PropertyAssignments */: + return tryParsePropertyAssignment(inErrorRecovery); + case 16 /* ArrayLiteralExpression_AssignmentExpressions */: + return tryParseAssignmentOrOmittedExpression(); + case 17 /* ParameterList_Parameters */: + return tryParseParameter(); + case 18 /* IndexSignature_Parameters */: + return tryParseParameter(); + case 19 /* TypeArgumentList_Types */: + return tryParseType(); + case 20 /* TypeParameterList_TypeParameters */: + return tryParseTypeParameter(); + default: + throw TypeScript.Errors.invalidOperation(); + } + } + function getExpectedListElementType(currentListType) { + switch (currentListType) { + case 0 /* SourceUnit_ModuleElements */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.module_class_interface_enum_import_or_statement, null); + case 10 /* ClassOrInterfaceDeclaration_HeritageClauses */: + return '{'; + case 1 /* ClassDeclaration_ClassElements */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.constructor_function_accessor_or_variable, null); + case 2 /* ModuleDeclaration_ModuleElements */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.module_class_interface_enum_import_or_statement, null); + case 3 /* SwitchStatement_SwitchClauses */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.case_or_default_clause, null); + case 4 /* SwitchClause_Statements */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.statement, null); + case 5 /* Block_Statements */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.statement, null); + case 12 /* VariableDeclaration_VariableDeclarators_AllowIn */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.identifier, null); + case 13 /* VariableDeclaration_VariableDeclarators_DisallowIn */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.identifier, null); + case 8 /* EnumDeclaration_EnumElements */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.identifier, null); + case 9 /* ObjectType_TypeMembers */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.call_construct_index_property_or_function_signature, null); + case 14 /* ArgumentList_AssignmentExpressions */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.expression, null); + case 11 /* HeritageClause_TypeNameList */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.type_name, null); + case 15 /* ObjectLiteralExpression_PropertyAssignments */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.property_or_accessor, null); + case 17 /* ParameterList_Parameters */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.parameter, null); + case 18 /* IndexSignature_Parameters */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.parameter, null); + case 19 /* TypeArgumentList_Types */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.type, null); + case 20 /* TypeParameterList_TypeParameters */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.type_parameter, null); + case 16 /* ArrayLiteralExpression_AssignmentExpressions */: + return TypeScript.getLocalizedText(TypeScript.DiagnosticCode.expression, null); + default: + throw TypeScript.Errors.invalidOperation(); + } + } + return parseSyntaxTree; + } + var BinaryExpressionPrecedence; + (function (BinaryExpressionPrecedence) { + BinaryExpressionPrecedence[BinaryExpressionPrecedence["Lowest"] = 1] = "Lowest"; + BinaryExpressionPrecedence[BinaryExpressionPrecedence["LogicalOrExpressionPrecedence"] = 2] = "LogicalOrExpressionPrecedence"; + BinaryExpressionPrecedence[BinaryExpressionPrecedence["LogicalAndExpressionPrecedence"] = 3] = "LogicalAndExpressionPrecedence"; + BinaryExpressionPrecedence[BinaryExpressionPrecedence["BitwiseOrExpressionPrecedence"] = 4] = "BitwiseOrExpressionPrecedence"; + BinaryExpressionPrecedence[BinaryExpressionPrecedence["BitwiseExclusiveOrExpressionPrecedence"] = 5] = "BitwiseExclusiveOrExpressionPrecedence"; + BinaryExpressionPrecedence[BinaryExpressionPrecedence["BitwiseAndExpressionPrecedence"] = 6] = "BitwiseAndExpressionPrecedence"; + BinaryExpressionPrecedence[BinaryExpressionPrecedence["EqualityExpressionPrecedence"] = 7] = "EqualityExpressionPrecedence"; + BinaryExpressionPrecedence[BinaryExpressionPrecedence["RelationalExpressionPrecedence"] = 8] = "RelationalExpressionPrecedence"; + BinaryExpressionPrecedence[BinaryExpressionPrecedence["ShiftExpressionPrecdence"] = 9] = "ShiftExpressionPrecdence"; + BinaryExpressionPrecedence[BinaryExpressionPrecedence["AdditiveExpressionPrecedence"] = 10] = "AdditiveExpressionPrecedence"; + BinaryExpressionPrecedence[BinaryExpressionPrecedence["MultiplicativeExpressionPrecedence"] = 11] = "MultiplicativeExpressionPrecedence"; + })(BinaryExpressionPrecedence || (BinaryExpressionPrecedence = {})); + var ListParsingState; + (function (ListParsingState) { + ListParsingState[ListParsingState["SourceUnit_ModuleElements"] = 0] = "SourceUnit_ModuleElements"; + ListParsingState[ListParsingState["ClassDeclaration_ClassElements"] = 1] = "ClassDeclaration_ClassElements"; + ListParsingState[ListParsingState["ModuleDeclaration_ModuleElements"] = 2] = "ModuleDeclaration_ModuleElements"; + ListParsingState[ListParsingState["SwitchStatement_SwitchClauses"] = 3] = "SwitchStatement_SwitchClauses"; + ListParsingState[ListParsingState["SwitchClause_Statements"] = 4] = "SwitchClause_Statements"; + ListParsingState[ListParsingState["Block_Statements"] = 5] = "Block_Statements"; + ListParsingState[ListParsingState["TryBlock_Statements"] = 6] = "TryBlock_Statements"; + ListParsingState[ListParsingState["CatchBlock_Statements"] = 7] = "CatchBlock_Statements"; + ListParsingState[ListParsingState["EnumDeclaration_EnumElements"] = 8] = "EnumDeclaration_EnumElements"; + ListParsingState[ListParsingState["ObjectType_TypeMembers"] = 9] = "ObjectType_TypeMembers"; + ListParsingState[ListParsingState["ClassOrInterfaceDeclaration_HeritageClauses"] = 10] = "ClassOrInterfaceDeclaration_HeritageClauses"; + ListParsingState[ListParsingState["HeritageClause_TypeNameList"] = 11] = "HeritageClause_TypeNameList"; + ListParsingState[ListParsingState["VariableDeclaration_VariableDeclarators_AllowIn"] = 12] = "VariableDeclaration_VariableDeclarators_AllowIn"; + ListParsingState[ListParsingState["VariableDeclaration_VariableDeclarators_DisallowIn"] = 13] = "VariableDeclaration_VariableDeclarators_DisallowIn"; + ListParsingState[ListParsingState["ArgumentList_AssignmentExpressions"] = 14] = "ArgumentList_AssignmentExpressions"; + ListParsingState[ListParsingState["ObjectLiteralExpression_PropertyAssignments"] = 15] = "ObjectLiteralExpression_PropertyAssignments"; + ListParsingState[ListParsingState["ArrayLiteralExpression_AssignmentExpressions"] = 16] = "ArrayLiteralExpression_AssignmentExpressions"; + ListParsingState[ListParsingState["ParameterList_Parameters"] = 17] = "ParameterList_Parameters"; + ListParsingState[ListParsingState["IndexSignature_Parameters"] = 18] = "IndexSignature_Parameters"; + ListParsingState[ListParsingState["TypeArgumentList_Types"] = 19] = "TypeArgumentList_Types"; + ListParsingState[ListParsingState["TypeParameterList_TypeParameters"] = 20] = "TypeParameterList_TypeParameters"; + ListParsingState[ListParsingState["FirstListParsingState"] = ListParsingState.SourceUnit_ModuleElements] = "FirstListParsingState"; + ListParsingState[ListParsingState["LastListParsingState"] = ListParsingState.TypeParameterList_TypeParameters] = "LastListParsingState"; + })(ListParsingState || (ListParsingState = {})); + var parseSyntaxTree = createParseSyntaxTree(); + function parse(fileName, text, languageVersion, isDeclaration) { + return parseSource(TypeScript.Scanner.createParserSource(fileName, text, languageVersion), isDeclaration); + } + Parser.parse = parse; + function parseSource(source, isDeclaration) { + return parseSyntaxTree(source, isDeclaration); + } + Parser.parseSource = parseSource; + })(TypeScript.Parser || (TypeScript.Parser = {})); + var Parser = TypeScript.Parser; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Syntax) { + (function (Concrete) { + TypeScript.Parser.syntaxFactory = Concrete; + Concrete.isConcrete = true; + var SourceUnitSyntax = (function (_super) { + __extends(SourceUnitSyntax, _super); + function SourceUnitSyntax(data, moduleElements, endOfFileToken) { + _super.call(this, data); + this.syntaxTree = null; + this.parent = null, this.moduleElements = moduleElements, this.endOfFileToken = endOfFileToken, !TypeScript.isShared(moduleElements) && (moduleElements.parent = this), endOfFileToken.parent = this; + } + return SourceUnitSyntax; + })(TypeScript.SyntaxNode); + Concrete.SourceUnitSyntax = SourceUnitSyntax; + var QualifiedNameSyntax = (function (_super) { + __extends(QualifiedNameSyntax, _super); + function QualifiedNameSyntax(data, left, dotToken, right) { + _super.call(this, data); + this.left = left, this.dotToken = dotToken, this.right = right, left.parent = this, dotToken.parent = this, right.parent = this; + } + return QualifiedNameSyntax; + })(TypeScript.SyntaxNode); + Concrete.QualifiedNameSyntax = QualifiedNameSyntax; + var ObjectTypeSyntax = (function (_super) { + __extends(ObjectTypeSyntax, _super); + function ObjectTypeSyntax(data, openBraceToken, typeMembers, closeBraceToken) { + _super.call(this, data); + this.openBraceToken = openBraceToken, this.typeMembers = typeMembers, this.closeBraceToken = closeBraceToken, openBraceToken.parent = this, !TypeScript.isShared(typeMembers) && (typeMembers.parent = this), closeBraceToken.parent = this; + } + return ObjectTypeSyntax; + })(TypeScript.SyntaxNode); + Concrete.ObjectTypeSyntax = ObjectTypeSyntax; + var FunctionTypeSyntax = (function (_super) { + __extends(FunctionTypeSyntax, _super); + function FunctionTypeSyntax(data, typeParameterList, parameterList, equalsGreaterThanToken, type) { + _super.call(this, data); + this.typeParameterList = typeParameterList, this.parameterList = parameterList, this.equalsGreaterThanToken = equalsGreaterThanToken, this.type = type, typeParameterList && (typeParameterList.parent = this), parameterList.parent = this, equalsGreaterThanToken.parent = this, type.parent = this; + } + return FunctionTypeSyntax; + })(TypeScript.SyntaxNode); + Concrete.FunctionTypeSyntax = FunctionTypeSyntax; + var ArrayTypeSyntax = (function (_super) { + __extends(ArrayTypeSyntax, _super); + function ArrayTypeSyntax(data, type, openBracketToken, closeBracketToken) { + _super.call(this, data); + this.type = type, this.openBracketToken = openBracketToken, this.closeBracketToken = closeBracketToken, type.parent = this, openBracketToken.parent = this, closeBracketToken.parent = this; + } + return ArrayTypeSyntax; + })(TypeScript.SyntaxNode); + Concrete.ArrayTypeSyntax = ArrayTypeSyntax; + var ConstructorTypeSyntax = (function (_super) { + __extends(ConstructorTypeSyntax, _super); + function ConstructorTypeSyntax(data, newKeyword, typeParameterList, parameterList, equalsGreaterThanToken, type) { + _super.call(this, data); + this.newKeyword = newKeyword, this.typeParameterList = typeParameterList, this.parameterList = parameterList, this.equalsGreaterThanToken = equalsGreaterThanToken, this.type = type, newKeyword.parent = this, typeParameterList && (typeParameterList.parent = this), parameterList.parent = this, equalsGreaterThanToken.parent = this, type.parent = this; + } + return ConstructorTypeSyntax; + })(TypeScript.SyntaxNode); + Concrete.ConstructorTypeSyntax = ConstructorTypeSyntax; + var GenericTypeSyntax = (function (_super) { + __extends(GenericTypeSyntax, _super); + function GenericTypeSyntax(data, name, typeArgumentList) { + _super.call(this, data); + this.name = name, this.typeArgumentList = typeArgumentList, name.parent = this, typeArgumentList.parent = this; + } + return GenericTypeSyntax; + })(TypeScript.SyntaxNode); + Concrete.GenericTypeSyntax = GenericTypeSyntax; + var TypeQuerySyntax = (function (_super) { + __extends(TypeQuerySyntax, _super); + function TypeQuerySyntax(data, typeOfKeyword, name) { + _super.call(this, data); + this.typeOfKeyword = typeOfKeyword, this.name = name, typeOfKeyword.parent = this, name.parent = this; + } + return TypeQuerySyntax; + })(TypeScript.SyntaxNode); + Concrete.TypeQuerySyntax = TypeQuerySyntax; + var InterfaceDeclarationSyntax = (function (_super) { + __extends(InterfaceDeclarationSyntax, _super); + function InterfaceDeclarationSyntax(data, modifiers, interfaceKeyword, identifier, typeParameterList, heritageClauses, body) { + _super.call(this, data); + this.modifiers = modifiers, this.interfaceKeyword = interfaceKeyword, this.identifier = identifier, this.typeParameterList = typeParameterList, this.heritageClauses = heritageClauses, this.body = body, !TypeScript.isShared(modifiers) && (modifiers.parent = this), interfaceKeyword.parent = this, identifier.parent = this, typeParameterList && (typeParameterList.parent = this), !TypeScript.isShared(heritageClauses) && (heritageClauses.parent = this), body.parent = this; + } + return InterfaceDeclarationSyntax; + })(TypeScript.SyntaxNode); + Concrete.InterfaceDeclarationSyntax = InterfaceDeclarationSyntax; + var FunctionDeclarationSyntax = (function (_super) { + __extends(FunctionDeclarationSyntax, _super); + function FunctionDeclarationSyntax(data, modifiers, functionKeyword, identifier, callSignature, block, semicolonToken) { + _super.call(this, data); + this.modifiers = modifiers, this.functionKeyword = functionKeyword, this.identifier = identifier, this.callSignature = callSignature, this.block = block, this.semicolonToken = semicolonToken, !TypeScript.isShared(modifiers) && (modifiers.parent = this), functionKeyword.parent = this, identifier.parent = this, callSignature.parent = this, block && (block.parent = this), semicolonToken && (semicolonToken.parent = this); + } + return FunctionDeclarationSyntax; + })(TypeScript.SyntaxNode); + Concrete.FunctionDeclarationSyntax = FunctionDeclarationSyntax; + var ModuleDeclarationSyntax = (function (_super) { + __extends(ModuleDeclarationSyntax, _super); + function ModuleDeclarationSyntax(data, modifiers, moduleKeyword, name, stringLiteral, openBraceToken, moduleElements, closeBraceToken) { + _super.call(this, data); + this.modifiers = modifiers, this.moduleKeyword = moduleKeyword, this.name = name, this.stringLiteral = stringLiteral, this.openBraceToken = openBraceToken, this.moduleElements = moduleElements, this.closeBraceToken = closeBraceToken, !TypeScript.isShared(modifiers) && (modifiers.parent = this), moduleKeyword.parent = this, name && (name.parent = this), stringLiteral && (stringLiteral.parent = this), openBraceToken.parent = this, !TypeScript.isShared(moduleElements) && (moduleElements.parent = this), closeBraceToken.parent = this; + } + return ModuleDeclarationSyntax; + })(TypeScript.SyntaxNode); + Concrete.ModuleDeclarationSyntax = ModuleDeclarationSyntax; + var ClassDeclarationSyntax = (function (_super) { + __extends(ClassDeclarationSyntax, _super); + function ClassDeclarationSyntax(data, modifiers, classKeyword, identifier, typeParameterList, heritageClauses, openBraceToken, classElements, closeBraceToken) { + _super.call(this, data); + this.modifiers = modifiers, this.classKeyword = classKeyword, this.identifier = identifier, this.typeParameterList = typeParameterList, this.heritageClauses = heritageClauses, this.openBraceToken = openBraceToken, this.classElements = classElements, this.closeBraceToken = closeBraceToken, !TypeScript.isShared(modifiers) && (modifiers.parent = this), classKeyword.parent = this, identifier.parent = this, typeParameterList && (typeParameterList.parent = this), !TypeScript.isShared(heritageClauses) && (heritageClauses.parent = this), openBraceToken.parent = this, !TypeScript.isShared(classElements) && (classElements.parent = this), closeBraceToken.parent = this; + } + return ClassDeclarationSyntax; + })(TypeScript.SyntaxNode); + Concrete.ClassDeclarationSyntax = ClassDeclarationSyntax; + var EnumDeclarationSyntax = (function (_super) { + __extends(EnumDeclarationSyntax, _super); + function EnumDeclarationSyntax(data, modifiers, enumKeyword, identifier, openBraceToken, enumElements, closeBraceToken) { + _super.call(this, data); + this.modifiers = modifiers, this.enumKeyword = enumKeyword, this.identifier = identifier, this.openBraceToken = openBraceToken, this.enumElements = enumElements, this.closeBraceToken = closeBraceToken, !TypeScript.isShared(modifiers) && (modifiers.parent = this), enumKeyword.parent = this, identifier.parent = this, openBraceToken.parent = this, !TypeScript.isShared(enumElements) && (enumElements.parent = this), closeBraceToken.parent = this; + } + return EnumDeclarationSyntax; + })(TypeScript.SyntaxNode); + Concrete.EnumDeclarationSyntax = EnumDeclarationSyntax; + var ImportDeclarationSyntax = (function (_super) { + __extends(ImportDeclarationSyntax, _super); + function ImportDeclarationSyntax(data, modifiers, importKeyword, identifier, equalsToken, moduleReference, semicolonToken) { + _super.call(this, data); + this.modifiers = modifiers, this.importKeyword = importKeyword, this.identifier = identifier, this.equalsToken = equalsToken, this.moduleReference = moduleReference, this.semicolonToken = semicolonToken, !TypeScript.isShared(modifiers) && (modifiers.parent = this), importKeyword.parent = this, identifier.parent = this, equalsToken.parent = this, moduleReference.parent = this, semicolonToken && (semicolonToken.parent = this); + } + return ImportDeclarationSyntax; + })(TypeScript.SyntaxNode); + Concrete.ImportDeclarationSyntax = ImportDeclarationSyntax; + var ExportAssignmentSyntax = (function (_super) { + __extends(ExportAssignmentSyntax, _super); + function ExportAssignmentSyntax(data, exportKeyword, equalsToken, identifier, semicolonToken) { + _super.call(this, data); + this.exportKeyword = exportKeyword, this.equalsToken = equalsToken, this.identifier = identifier, this.semicolonToken = semicolonToken, exportKeyword.parent = this, equalsToken.parent = this, identifier.parent = this, semicolonToken && (semicolonToken.parent = this); + } + return ExportAssignmentSyntax; + })(TypeScript.SyntaxNode); + Concrete.ExportAssignmentSyntax = ExportAssignmentSyntax; + var MemberFunctionDeclarationSyntax = (function (_super) { + __extends(MemberFunctionDeclarationSyntax, _super); + function MemberFunctionDeclarationSyntax(data, modifiers, propertyName, callSignature, block, semicolonToken) { + _super.call(this, data); + this.modifiers = modifiers, this.propertyName = propertyName, this.callSignature = callSignature, this.block = block, this.semicolonToken = semicolonToken, !TypeScript.isShared(modifiers) && (modifiers.parent = this), propertyName.parent = this, callSignature.parent = this, block && (block.parent = this), semicolonToken && (semicolonToken.parent = this); + } + return MemberFunctionDeclarationSyntax; + })(TypeScript.SyntaxNode); + Concrete.MemberFunctionDeclarationSyntax = MemberFunctionDeclarationSyntax; + var MemberVariableDeclarationSyntax = (function (_super) { + __extends(MemberVariableDeclarationSyntax, _super); + function MemberVariableDeclarationSyntax(data, modifiers, variableDeclarator, semicolonToken) { + _super.call(this, data); + this.modifiers = modifiers, this.variableDeclarator = variableDeclarator, this.semicolonToken = semicolonToken, !TypeScript.isShared(modifiers) && (modifiers.parent = this), variableDeclarator.parent = this, semicolonToken && (semicolonToken.parent = this); + } + return MemberVariableDeclarationSyntax; + })(TypeScript.SyntaxNode); + Concrete.MemberVariableDeclarationSyntax = MemberVariableDeclarationSyntax; + var ConstructorDeclarationSyntax = (function (_super) { + __extends(ConstructorDeclarationSyntax, _super); + function ConstructorDeclarationSyntax(data, modifiers, constructorKeyword, callSignature, block, semicolonToken) { + _super.call(this, data); + this.modifiers = modifiers, this.constructorKeyword = constructorKeyword, this.callSignature = callSignature, this.block = block, this.semicolonToken = semicolonToken, !TypeScript.isShared(modifiers) && (modifiers.parent = this), constructorKeyword.parent = this, callSignature.parent = this, block && (block.parent = this), semicolonToken && (semicolonToken.parent = this); + } + return ConstructorDeclarationSyntax; + })(TypeScript.SyntaxNode); + Concrete.ConstructorDeclarationSyntax = ConstructorDeclarationSyntax; + var IndexMemberDeclarationSyntax = (function (_super) { + __extends(IndexMemberDeclarationSyntax, _super); + function IndexMemberDeclarationSyntax(data, modifiers, indexSignature, semicolonToken) { + _super.call(this, data); + this.modifiers = modifiers, this.indexSignature = indexSignature, this.semicolonToken = semicolonToken, !TypeScript.isShared(modifiers) && (modifiers.parent = this), indexSignature.parent = this, semicolonToken && (semicolonToken.parent = this); + } + return IndexMemberDeclarationSyntax; + })(TypeScript.SyntaxNode); + Concrete.IndexMemberDeclarationSyntax = IndexMemberDeclarationSyntax; + var GetAccessorSyntax = (function (_super) { + __extends(GetAccessorSyntax, _super); + function GetAccessorSyntax(data, modifiers, getKeyword, propertyName, callSignature, block) { + _super.call(this, data); + this.modifiers = modifiers, this.getKeyword = getKeyword, this.propertyName = propertyName, this.callSignature = callSignature, this.block = block, !TypeScript.isShared(modifiers) && (modifiers.parent = this), getKeyword.parent = this, propertyName.parent = this, callSignature.parent = this, block.parent = this; + } + return GetAccessorSyntax; + })(TypeScript.SyntaxNode); + Concrete.GetAccessorSyntax = GetAccessorSyntax; + var SetAccessorSyntax = (function (_super) { + __extends(SetAccessorSyntax, _super); + function SetAccessorSyntax(data, modifiers, setKeyword, propertyName, callSignature, block) { + _super.call(this, data); + this.modifiers = modifiers, this.setKeyword = setKeyword, this.propertyName = propertyName, this.callSignature = callSignature, this.block = block, !TypeScript.isShared(modifiers) && (modifiers.parent = this), setKeyword.parent = this, propertyName.parent = this, callSignature.parent = this, block.parent = this; + } + return SetAccessorSyntax; + })(TypeScript.SyntaxNode); + Concrete.SetAccessorSyntax = SetAccessorSyntax; + var PropertySignatureSyntax = (function (_super) { + __extends(PropertySignatureSyntax, _super); + function PropertySignatureSyntax(data, propertyName, questionToken, typeAnnotation) { + _super.call(this, data); + this.propertyName = propertyName, this.questionToken = questionToken, this.typeAnnotation = typeAnnotation, propertyName.parent = this, questionToken && (questionToken.parent = this), typeAnnotation && (typeAnnotation.parent = this); + } + return PropertySignatureSyntax; + })(TypeScript.SyntaxNode); + Concrete.PropertySignatureSyntax = PropertySignatureSyntax; + var CallSignatureSyntax = (function (_super) { + __extends(CallSignatureSyntax, _super); + function CallSignatureSyntax(data, typeParameterList, parameterList, typeAnnotation) { + _super.call(this, data); + this.typeParameterList = typeParameterList, this.parameterList = parameterList, this.typeAnnotation = typeAnnotation, typeParameterList && (typeParameterList.parent = this), parameterList.parent = this, typeAnnotation && (typeAnnotation.parent = this); + } + return CallSignatureSyntax; + })(TypeScript.SyntaxNode); + Concrete.CallSignatureSyntax = CallSignatureSyntax; + var ConstructSignatureSyntax = (function (_super) { + __extends(ConstructSignatureSyntax, _super); + function ConstructSignatureSyntax(data, newKeyword, callSignature) { + _super.call(this, data); + this.newKeyword = newKeyword, this.callSignature = callSignature, newKeyword.parent = this, callSignature.parent = this; + } + return ConstructSignatureSyntax; + })(TypeScript.SyntaxNode); + Concrete.ConstructSignatureSyntax = ConstructSignatureSyntax; + var IndexSignatureSyntax = (function (_super) { + __extends(IndexSignatureSyntax, _super); + function IndexSignatureSyntax(data, openBracketToken, parameters, closeBracketToken, typeAnnotation) { + _super.call(this, data); + this.openBracketToken = openBracketToken, this.parameters = parameters, this.closeBracketToken = closeBracketToken, this.typeAnnotation = typeAnnotation, openBracketToken.parent = this, !TypeScript.isShared(parameters) && (parameters.parent = this), closeBracketToken.parent = this, typeAnnotation && (typeAnnotation.parent = this); + } + return IndexSignatureSyntax; + })(TypeScript.SyntaxNode); + Concrete.IndexSignatureSyntax = IndexSignatureSyntax; + var MethodSignatureSyntax = (function (_super) { + __extends(MethodSignatureSyntax, _super); + function MethodSignatureSyntax(data, propertyName, questionToken, callSignature) { + _super.call(this, data); + this.propertyName = propertyName, this.questionToken = questionToken, this.callSignature = callSignature, propertyName.parent = this, questionToken && (questionToken.parent = this), callSignature.parent = this; + } + return MethodSignatureSyntax; + })(TypeScript.SyntaxNode); + Concrete.MethodSignatureSyntax = MethodSignatureSyntax; + var BlockSyntax = (function (_super) { + __extends(BlockSyntax, _super); + function BlockSyntax(data, openBraceToken, statements, closeBraceToken) { + _super.call(this, data); + this.openBraceToken = openBraceToken, this.statements = statements, this.closeBraceToken = closeBraceToken, openBraceToken.parent = this, !TypeScript.isShared(statements) && (statements.parent = this), closeBraceToken.parent = this; + } + return BlockSyntax; + })(TypeScript.SyntaxNode); + Concrete.BlockSyntax = BlockSyntax; + var IfStatementSyntax = (function (_super) { + __extends(IfStatementSyntax, _super); + function IfStatementSyntax(data, ifKeyword, openParenToken, condition, closeParenToken, statement, elseClause) { + _super.call(this, data); + this.ifKeyword = ifKeyword, this.openParenToken = openParenToken, this.condition = condition, this.closeParenToken = closeParenToken, this.statement = statement, this.elseClause = elseClause, ifKeyword.parent = this, openParenToken.parent = this, condition.parent = this, closeParenToken.parent = this, statement.parent = this, elseClause && (elseClause.parent = this); + } + return IfStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.IfStatementSyntax = IfStatementSyntax; + var VariableStatementSyntax = (function (_super) { + __extends(VariableStatementSyntax, _super); + function VariableStatementSyntax(data, modifiers, variableDeclaration, semicolonToken) { + _super.call(this, data); + this.modifiers = modifiers, this.variableDeclaration = variableDeclaration, this.semicolonToken = semicolonToken, !TypeScript.isShared(modifiers) && (modifiers.parent = this), variableDeclaration.parent = this, semicolonToken && (semicolonToken.parent = this); + } + return VariableStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.VariableStatementSyntax = VariableStatementSyntax; + var ExpressionStatementSyntax = (function (_super) { + __extends(ExpressionStatementSyntax, _super); + function ExpressionStatementSyntax(data, expression, semicolonToken) { + _super.call(this, data); + this.expression = expression, this.semicolonToken = semicolonToken, expression.parent = this, semicolonToken && (semicolonToken.parent = this); + } + return ExpressionStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.ExpressionStatementSyntax = ExpressionStatementSyntax; + var ReturnStatementSyntax = (function (_super) { + __extends(ReturnStatementSyntax, _super); + function ReturnStatementSyntax(data, returnKeyword, expression, semicolonToken) { + _super.call(this, data); + this.returnKeyword = returnKeyword, this.expression = expression, this.semicolonToken = semicolonToken, returnKeyword.parent = this, expression && (expression.parent = this), semicolonToken && (semicolonToken.parent = this); + } + return ReturnStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.ReturnStatementSyntax = ReturnStatementSyntax; + var SwitchStatementSyntax = (function (_super) { + __extends(SwitchStatementSyntax, _super); + function SwitchStatementSyntax(data, switchKeyword, openParenToken, expression, closeParenToken, openBraceToken, switchClauses, closeBraceToken) { + _super.call(this, data); + this.switchKeyword = switchKeyword, this.openParenToken = openParenToken, this.expression = expression, this.closeParenToken = closeParenToken, this.openBraceToken = openBraceToken, this.switchClauses = switchClauses, this.closeBraceToken = closeBraceToken, switchKeyword.parent = this, openParenToken.parent = this, expression.parent = this, closeParenToken.parent = this, openBraceToken.parent = this, !TypeScript.isShared(switchClauses) && (switchClauses.parent = this), closeBraceToken.parent = this; + } + return SwitchStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.SwitchStatementSyntax = SwitchStatementSyntax; + var BreakStatementSyntax = (function (_super) { + __extends(BreakStatementSyntax, _super); + function BreakStatementSyntax(data, breakKeyword, identifier, semicolonToken) { + _super.call(this, data); + this.breakKeyword = breakKeyword, this.identifier = identifier, this.semicolonToken = semicolonToken, breakKeyword.parent = this, identifier && (identifier.parent = this), semicolonToken && (semicolonToken.parent = this); + } + return BreakStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.BreakStatementSyntax = BreakStatementSyntax; + var ContinueStatementSyntax = (function (_super) { + __extends(ContinueStatementSyntax, _super); + function ContinueStatementSyntax(data, continueKeyword, identifier, semicolonToken) { + _super.call(this, data); + this.continueKeyword = continueKeyword, this.identifier = identifier, this.semicolonToken = semicolonToken, continueKeyword.parent = this, identifier && (identifier.parent = this), semicolonToken && (semicolonToken.parent = this); + } + return ContinueStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.ContinueStatementSyntax = ContinueStatementSyntax; + var ForStatementSyntax = (function (_super) { + __extends(ForStatementSyntax, _super); + function ForStatementSyntax(data, forKeyword, openParenToken, variableDeclaration, initializer, firstSemicolonToken, condition, secondSemicolonToken, incrementor, closeParenToken, statement) { + _super.call(this, data); + this.forKeyword = forKeyword, this.openParenToken = openParenToken, this.variableDeclaration = variableDeclaration, this.initializer = initializer, this.firstSemicolonToken = firstSemicolonToken, this.condition = condition, this.secondSemicolonToken = secondSemicolonToken, this.incrementor = incrementor, this.closeParenToken = closeParenToken, this.statement = statement, forKeyword.parent = this, openParenToken.parent = this, variableDeclaration && (variableDeclaration.parent = this), initializer && (initializer.parent = this), firstSemicolonToken.parent = this, condition && (condition.parent = this), secondSemicolonToken.parent = this, incrementor && (incrementor.parent = this), closeParenToken.parent = this, statement.parent = this; + } + return ForStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.ForStatementSyntax = ForStatementSyntax; + var ForInStatementSyntax = (function (_super) { + __extends(ForInStatementSyntax, _super); + function ForInStatementSyntax(data, forKeyword, openParenToken, variableDeclaration, left, inKeyword, expression, closeParenToken, statement) { + _super.call(this, data); + this.forKeyword = forKeyword, this.openParenToken = openParenToken, this.variableDeclaration = variableDeclaration, this.left = left, this.inKeyword = inKeyword, this.expression = expression, this.closeParenToken = closeParenToken, this.statement = statement, forKeyword.parent = this, openParenToken.parent = this, variableDeclaration && (variableDeclaration.parent = this), left && (left.parent = this), inKeyword.parent = this, expression.parent = this, closeParenToken.parent = this, statement.parent = this; + } + return ForInStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.ForInStatementSyntax = ForInStatementSyntax; + var EmptyStatementSyntax = (function (_super) { + __extends(EmptyStatementSyntax, _super); + function EmptyStatementSyntax(data, semicolonToken) { + _super.call(this, data); + this.semicolonToken = semicolonToken, semicolonToken.parent = this; + } + return EmptyStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.EmptyStatementSyntax = EmptyStatementSyntax; + var ThrowStatementSyntax = (function (_super) { + __extends(ThrowStatementSyntax, _super); + function ThrowStatementSyntax(data, throwKeyword, expression, semicolonToken) { + _super.call(this, data); + this.throwKeyword = throwKeyword, this.expression = expression, this.semicolonToken = semicolonToken, throwKeyword.parent = this, expression.parent = this, semicolonToken && (semicolonToken.parent = this); + } + return ThrowStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.ThrowStatementSyntax = ThrowStatementSyntax; + var WhileStatementSyntax = (function (_super) { + __extends(WhileStatementSyntax, _super); + function WhileStatementSyntax(data, whileKeyword, openParenToken, condition, closeParenToken, statement) { + _super.call(this, data); + this.whileKeyword = whileKeyword, this.openParenToken = openParenToken, this.condition = condition, this.closeParenToken = closeParenToken, this.statement = statement, whileKeyword.parent = this, openParenToken.parent = this, condition.parent = this, closeParenToken.parent = this, statement.parent = this; + } + return WhileStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.WhileStatementSyntax = WhileStatementSyntax; + var TryStatementSyntax = (function (_super) { + __extends(TryStatementSyntax, _super); + function TryStatementSyntax(data, tryKeyword, block, catchClause, finallyClause) { + _super.call(this, data); + this.tryKeyword = tryKeyword, this.block = block, this.catchClause = catchClause, this.finallyClause = finallyClause, tryKeyword.parent = this, block.parent = this, catchClause && (catchClause.parent = this), finallyClause && (finallyClause.parent = this); + } + return TryStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.TryStatementSyntax = TryStatementSyntax; + var LabeledStatementSyntax = (function (_super) { + __extends(LabeledStatementSyntax, _super); + function LabeledStatementSyntax(data, identifier, colonToken, statement) { + _super.call(this, data); + this.identifier = identifier, this.colonToken = colonToken, this.statement = statement, identifier.parent = this, colonToken.parent = this, statement.parent = this; + } + return LabeledStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.LabeledStatementSyntax = LabeledStatementSyntax; + var DoStatementSyntax = (function (_super) { + __extends(DoStatementSyntax, _super); + function DoStatementSyntax(data, doKeyword, statement, whileKeyword, openParenToken, condition, closeParenToken, semicolonToken) { + _super.call(this, data); + this.doKeyword = doKeyword, this.statement = statement, this.whileKeyword = whileKeyword, this.openParenToken = openParenToken, this.condition = condition, this.closeParenToken = closeParenToken, this.semicolonToken = semicolonToken, doKeyword.parent = this, statement.parent = this, whileKeyword.parent = this, openParenToken.parent = this, condition.parent = this, closeParenToken.parent = this, semicolonToken && (semicolonToken.parent = this); + } + return DoStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.DoStatementSyntax = DoStatementSyntax; + var DebuggerStatementSyntax = (function (_super) { + __extends(DebuggerStatementSyntax, _super); + function DebuggerStatementSyntax(data, debuggerKeyword, semicolonToken) { + _super.call(this, data); + this.debuggerKeyword = debuggerKeyword, this.semicolonToken = semicolonToken, debuggerKeyword.parent = this, semicolonToken && (semicolonToken.parent = this); + } + return DebuggerStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.DebuggerStatementSyntax = DebuggerStatementSyntax; + var WithStatementSyntax = (function (_super) { + __extends(WithStatementSyntax, _super); + function WithStatementSyntax(data, withKeyword, openParenToken, condition, closeParenToken, statement) { + _super.call(this, data); + this.withKeyword = withKeyword, this.openParenToken = openParenToken, this.condition = condition, this.closeParenToken = closeParenToken, this.statement = statement, withKeyword.parent = this, openParenToken.parent = this, condition.parent = this, closeParenToken.parent = this, statement.parent = this; + } + return WithStatementSyntax; + })(TypeScript.SyntaxNode); + Concrete.WithStatementSyntax = WithStatementSyntax; + var PrefixUnaryExpressionSyntax = (function (_super) { + __extends(PrefixUnaryExpressionSyntax, _super); + function PrefixUnaryExpressionSyntax(data, operatorToken, operand) { + _super.call(this, data); + this.operatorToken = operatorToken, this.operand = operand, operatorToken.parent = this, operand.parent = this; + } + PrefixUnaryExpressionSyntax.prototype.kind = function () { + return TypeScript.SyntaxFacts.getPrefixUnaryExpressionFromOperatorToken(this.operatorToken.kind()); + }; + return PrefixUnaryExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.PrefixUnaryExpressionSyntax = PrefixUnaryExpressionSyntax; + var DeleteExpressionSyntax = (function (_super) { + __extends(DeleteExpressionSyntax, _super); + function DeleteExpressionSyntax(data, deleteKeyword, expression) { + _super.call(this, data); + this.deleteKeyword = deleteKeyword, this.expression = expression, deleteKeyword.parent = this, expression.parent = this; + } + return DeleteExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.DeleteExpressionSyntax = DeleteExpressionSyntax; + var TypeOfExpressionSyntax = (function (_super) { + __extends(TypeOfExpressionSyntax, _super); + function TypeOfExpressionSyntax(data, typeOfKeyword, expression) { + _super.call(this, data); + this.typeOfKeyword = typeOfKeyword, this.expression = expression, typeOfKeyword.parent = this, expression.parent = this; + } + return TypeOfExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.TypeOfExpressionSyntax = TypeOfExpressionSyntax; + var VoidExpressionSyntax = (function (_super) { + __extends(VoidExpressionSyntax, _super); + function VoidExpressionSyntax(data, voidKeyword, expression) { + _super.call(this, data); + this.voidKeyword = voidKeyword, this.expression = expression, voidKeyword.parent = this, expression.parent = this; + } + return VoidExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.VoidExpressionSyntax = VoidExpressionSyntax; + var ConditionalExpressionSyntax = (function (_super) { + __extends(ConditionalExpressionSyntax, _super); + function ConditionalExpressionSyntax(data, condition, questionToken, whenTrue, colonToken, whenFalse) { + _super.call(this, data); + this.condition = condition, this.questionToken = questionToken, this.whenTrue = whenTrue, this.colonToken = colonToken, this.whenFalse = whenFalse, condition.parent = this, questionToken.parent = this, whenTrue.parent = this, colonToken.parent = this, whenFalse.parent = this; + } + return ConditionalExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.ConditionalExpressionSyntax = ConditionalExpressionSyntax; + var BinaryExpressionSyntax = (function (_super) { + __extends(BinaryExpressionSyntax, _super); + function BinaryExpressionSyntax(data, left, operatorToken, right) { + _super.call(this, data); + this.left = left, this.operatorToken = operatorToken, this.right = right, left.parent = this, operatorToken.parent = this, right.parent = this; + } + BinaryExpressionSyntax.prototype.kind = function () { + return TypeScript.SyntaxFacts.getBinaryExpressionFromOperatorToken(this.operatorToken.kind()); + }; + return BinaryExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.BinaryExpressionSyntax = BinaryExpressionSyntax; + var PostfixUnaryExpressionSyntax = (function (_super) { + __extends(PostfixUnaryExpressionSyntax, _super); + function PostfixUnaryExpressionSyntax(data, operand, operatorToken) { + _super.call(this, data); + this.operand = operand, this.operatorToken = operatorToken, operand.parent = this, operatorToken.parent = this; + } + PostfixUnaryExpressionSyntax.prototype.kind = function () { + return TypeScript.SyntaxFacts.getPostfixUnaryExpressionFromOperatorToken(this.operatorToken.kind()); + }; + return PostfixUnaryExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.PostfixUnaryExpressionSyntax = PostfixUnaryExpressionSyntax; + var MemberAccessExpressionSyntax = (function (_super) { + __extends(MemberAccessExpressionSyntax, _super); + function MemberAccessExpressionSyntax(data, expression, dotToken, name) { + _super.call(this, data); + this.expression = expression, this.dotToken = dotToken, this.name = name, expression.parent = this, dotToken.parent = this, name.parent = this; + } + return MemberAccessExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.MemberAccessExpressionSyntax = MemberAccessExpressionSyntax; + var InvocationExpressionSyntax = (function (_super) { + __extends(InvocationExpressionSyntax, _super); + function InvocationExpressionSyntax(data, expression, argumentList) { + _super.call(this, data); + this.expression = expression, this.argumentList = argumentList, expression.parent = this, argumentList.parent = this; + } + return InvocationExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.InvocationExpressionSyntax = InvocationExpressionSyntax; + var ArrayLiteralExpressionSyntax = (function (_super) { + __extends(ArrayLiteralExpressionSyntax, _super); + function ArrayLiteralExpressionSyntax(data, openBracketToken, expressions, closeBracketToken) { + _super.call(this, data); + this.openBracketToken = openBracketToken, this.expressions = expressions, this.closeBracketToken = closeBracketToken, openBracketToken.parent = this, !TypeScript.isShared(expressions) && (expressions.parent = this), closeBracketToken.parent = this; + } + return ArrayLiteralExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.ArrayLiteralExpressionSyntax = ArrayLiteralExpressionSyntax; + var ObjectLiteralExpressionSyntax = (function (_super) { + __extends(ObjectLiteralExpressionSyntax, _super); + function ObjectLiteralExpressionSyntax(data, openBraceToken, propertyAssignments, closeBraceToken) { + _super.call(this, data); + this.openBraceToken = openBraceToken, this.propertyAssignments = propertyAssignments, this.closeBraceToken = closeBraceToken, openBraceToken.parent = this, !TypeScript.isShared(propertyAssignments) && (propertyAssignments.parent = this), closeBraceToken.parent = this; + } + return ObjectLiteralExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.ObjectLiteralExpressionSyntax = ObjectLiteralExpressionSyntax; + var ObjectCreationExpressionSyntax = (function (_super) { + __extends(ObjectCreationExpressionSyntax, _super); + function ObjectCreationExpressionSyntax(data, newKeyword, expression, argumentList) { + _super.call(this, data); + this.newKeyword = newKeyword, this.expression = expression, this.argumentList = argumentList, newKeyword.parent = this, expression.parent = this, argumentList && (argumentList.parent = this); + } + return ObjectCreationExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.ObjectCreationExpressionSyntax = ObjectCreationExpressionSyntax; + var ParenthesizedExpressionSyntax = (function (_super) { + __extends(ParenthesizedExpressionSyntax, _super); + function ParenthesizedExpressionSyntax(data, openParenToken, expression, closeParenToken) { + _super.call(this, data); + this.openParenToken = openParenToken, this.expression = expression, this.closeParenToken = closeParenToken, openParenToken.parent = this, expression.parent = this, closeParenToken.parent = this; + } + return ParenthesizedExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.ParenthesizedExpressionSyntax = ParenthesizedExpressionSyntax; + var ParenthesizedArrowFunctionExpressionSyntax = (function (_super) { + __extends(ParenthesizedArrowFunctionExpressionSyntax, _super); + function ParenthesizedArrowFunctionExpressionSyntax(data, callSignature, equalsGreaterThanToken, block, expression) { + _super.call(this, data); + this.callSignature = callSignature, this.equalsGreaterThanToken = equalsGreaterThanToken, this.block = block, this.expression = expression, callSignature.parent = this, equalsGreaterThanToken.parent = this, block && (block.parent = this), expression && (expression.parent = this); + } + return ParenthesizedArrowFunctionExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.ParenthesizedArrowFunctionExpressionSyntax = ParenthesizedArrowFunctionExpressionSyntax; + var SimpleArrowFunctionExpressionSyntax = (function (_super) { + __extends(SimpleArrowFunctionExpressionSyntax, _super); + function SimpleArrowFunctionExpressionSyntax(data, parameter, equalsGreaterThanToken, block, expression) { + _super.call(this, data); + this.parameter = parameter, this.equalsGreaterThanToken = equalsGreaterThanToken, this.block = block, this.expression = expression, parameter.parent = this, equalsGreaterThanToken.parent = this, block && (block.parent = this), expression && (expression.parent = this); + } + return SimpleArrowFunctionExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.SimpleArrowFunctionExpressionSyntax = SimpleArrowFunctionExpressionSyntax; + var CastExpressionSyntax = (function (_super) { + __extends(CastExpressionSyntax, _super); + function CastExpressionSyntax(data, lessThanToken, type, greaterThanToken, expression) { + _super.call(this, data); + this.lessThanToken = lessThanToken, this.type = type, this.greaterThanToken = greaterThanToken, this.expression = expression, lessThanToken.parent = this, type.parent = this, greaterThanToken.parent = this, expression.parent = this; + } + return CastExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.CastExpressionSyntax = CastExpressionSyntax; + var ElementAccessExpressionSyntax = (function (_super) { + __extends(ElementAccessExpressionSyntax, _super); + function ElementAccessExpressionSyntax(data, expression, openBracketToken, argumentExpression, closeBracketToken) { + _super.call(this, data); + this.expression = expression, this.openBracketToken = openBracketToken, this.argumentExpression = argumentExpression, this.closeBracketToken = closeBracketToken, expression.parent = this, openBracketToken.parent = this, argumentExpression.parent = this, closeBracketToken.parent = this; + } + return ElementAccessExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.ElementAccessExpressionSyntax = ElementAccessExpressionSyntax; + var FunctionExpressionSyntax = (function (_super) { + __extends(FunctionExpressionSyntax, _super); + function FunctionExpressionSyntax(data, functionKeyword, identifier, callSignature, block) { + _super.call(this, data); + this.functionKeyword = functionKeyword, this.identifier = identifier, this.callSignature = callSignature, this.block = block, functionKeyword.parent = this, identifier && (identifier.parent = this), callSignature.parent = this, block.parent = this; + } + return FunctionExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.FunctionExpressionSyntax = FunctionExpressionSyntax; + var OmittedExpressionSyntax = (function (_super) { + __extends(OmittedExpressionSyntax, _super); + function OmittedExpressionSyntax(data) { + _super.call(this, data); + } + return OmittedExpressionSyntax; + })(TypeScript.SyntaxNode); + Concrete.OmittedExpressionSyntax = OmittedExpressionSyntax; + var VariableDeclarationSyntax = (function (_super) { + __extends(VariableDeclarationSyntax, _super); + function VariableDeclarationSyntax(data, varKeyword, variableDeclarators) { + _super.call(this, data); + this.varKeyword = varKeyword, this.variableDeclarators = variableDeclarators, varKeyword.parent = this, !TypeScript.isShared(variableDeclarators) && (variableDeclarators.parent = this); + } + return VariableDeclarationSyntax; + })(TypeScript.SyntaxNode); + Concrete.VariableDeclarationSyntax = VariableDeclarationSyntax; + var VariableDeclaratorSyntax = (function (_super) { + __extends(VariableDeclaratorSyntax, _super); + function VariableDeclaratorSyntax(data, propertyName, typeAnnotation, equalsValueClause) { + _super.call(this, data); + this.propertyName = propertyName, this.typeAnnotation = typeAnnotation, this.equalsValueClause = equalsValueClause, propertyName.parent = this, typeAnnotation && (typeAnnotation.parent = this), equalsValueClause && (equalsValueClause.parent = this); + } + return VariableDeclaratorSyntax; + })(TypeScript.SyntaxNode); + Concrete.VariableDeclaratorSyntax = VariableDeclaratorSyntax; + var ArgumentListSyntax = (function (_super) { + __extends(ArgumentListSyntax, _super); + function ArgumentListSyntax(data, typeArgumentList, openParenToken, _arguments, closeParenToken) { + _super.call(this, data); + this.typeArgumentList = typeArgumentList, this.openParenToken = openParenToken, this.arguments = _arguments, this.closeParenToken = closeParenToken, typeArgumentList && (typeArgumentList.parent = this), openParenToken.parent = this, !TypeScript.isShared(_arguments) && (_arguments.parent = this), closeParenToken.parent = this; + } + return ArgumentListSyntax; + })(TypeScript.SyntaxNode); + Concrete.ArgumentListSyntax = ArgumentListSyntax; + var ParameterListSyntax = (function (_super) { + __extends(ParameterListSyntax, _super); + function ParameterListSyntax(data, openParenToken, parameters, closeParenToken) { + _super.call(this, data); + this.openParenToken = openParenToken, this.parameters = parameters, this.closeParenToken = closeParenToken, openParenToken.parent = this, !TypeScript.isShared(parameters) && (parameters.parent = this), closeParenToken.parent = this; + } + return ParameterListSyntax; + })(TypeScript.SyntaxNode); + Concrete.ParameterListSyntax = ParameterListSyntax; + var TypeArgumentListSyntax = (function (_super) { + __extends(TypeArgumentListSyntax, _super); + function TypeArgumentListSyntax(data, lessThanToken, typeArguments, greaterThanToken) { + _super.call(this, data); + this.lessThanToken = lessThanToken, this.typeArguments = typeArguments, this.greaterThanToken = greaterThanToken, lessThanToken.parent = this, !TypeScript.isShared(typeArguments) && (typeArguments.parent = this), greaterThanToken.parent = this; + } + return TypeArgumentListSyntax; + })(TypeScript.SyntaxNode); + Concrete.TypeArgumentListSyntax = TypeArgumentListSyntax; + var TypeParameterListSyntax = (function (_super) { + __extends(TypeParameterListSyntax, _super); + function TypeParameterListSyntax(data, lessThanToken, typeParameters, greaterThanToken) { + _super.call(this, data); + this.lessThanToken = lessThanToken, this.typeParameters = typeParameters, this.greaterThanToken = greaterThanToken, lessThanToken.parent = this, !TypeScript.isShared(typeParameters) && (typeParameters.parent = this), greaterThanToken.parent = this; + } + return TypeParameterListSyntax; + })(TypeScript.SyntaxNode); + Concrete.TypeParameterListSyntax = TypeParameterListSyntax; + var HeritageClauseSyntax = (function (_super) { + __extends(HeritageClauseSyntax, _super); + function HeritageClauseSyntax(data, extendsOrImplementsKeyword, typeNames) { + _super.call(this, data); + this.extendsOrImplementsKeyword = extendsOrImplementsKeyword, this.typeNames = typeNames, extendsOrImplementsKeyword.parent = this, !TypeScript.isShared(typeNames) && (typeNames.parent = this); + } + HeritageClauseSyntax.prototype.kind = function () { + return this.extendsOrImplementsKeyword.kind() === 48 /* ExtendsKeyword */ ? 230 /* ExtendsHeritageClause */ : 231 /* ImplementsHeritageClause */; + }; + return HeritageClauseSyntax; + })(TypeScript.SyntaxNode); + Concrete.HeritageClauseSyntax = HeritageClauseSyntax; + var EqualsValueClauseSyntax = (function (_super) { + __extends(EqualsValueClauseSyntax, _super); + function EqualsValueClauseSyntax(data, equalsToken, value) { + _super.call(this, data); + this.equalsToken = equalsToken, this.value = value, equalsToken.parent = this, value.parent = this; + } + return EqualsValueClauseSyntax; + })(TypeScript.SyntaxNode); + Concrete.EqualsValueClauseSyntax = EqualsValueClauseSyntax; + var CaseSwitchClauseSyntax = (function (_super) { + __extends(CaseSwitchClauseSyntax, _super); + function CaseSwitchClauseSyntax(data, caseKeyword, expression, colonToken, statements) { + _super.call(this, data); + this.caseKeyword = caseKeyword, this.expression = expression, this.colonToken = colonToken, this.statements = statements, caseKeyword.parent = this, expression.parent = this, colonToken.parent = this, !TypeScript.isShared(statements) && (statements.parent = this); + } + return CaseSwitchClauseSyntax; + })(TypeScript.SyntaxNode); + Concrete.CaseSwitchClauseSyntax = CaseSwitchClauseSyntax; + var DefaultSwitchClauseSyntax = (function (_super) { + __extends(DefaultSwitchClauseSyntax, _super); + function DefaultSwitchClauseSyntax(data, defaultKeyword, colonToken, statements) { + _super.call(this, data); + this.defaultKeyword = defaultKeyword, this.colonToken = colonToken, this.statements = statements, defaultKeyword.parent = this, colonToken.parent = this, !TypeScript.isShared(statements) && (statements.parent = this); + } + return DefaultSwitchClauseSyntax; + })(TypeScript.SyntaxNode); + Concrete.DefaultSwitchClauseSyntax = DefaultSwitchClauseSyntax; + var ElseClauseSyntax = (function (_super) { + __extends(ElseClauseSyntax, _super); + function ElseClauseSyntax(data, elseKeyword, statement) { + _super.call(this, data); + this.elseKeyword = elseKeyword, this.statement = statement, elseKeyword.parent = this, statement.parent = this; + } + return ElseClauseSyntax; + })(TypeScript.SyntaxNode); + Concrete.ElseClauseSyntax = ElseClauseSyntax; + var CatchClauseSyntax = (function (_super) { + __extends(CatchClauseSyntax, _super); + function CatchClauseSyntax(data, catchKeyword, openParenToken, identifier, typeAnnotation, closeParenToken, block) { + _super.call(this, data); + this.catchKeyword = catchKeyword, this.openParenToken = openParenToken, this.identifier = identifier, this.typeAnnotation = typeAnnotation, this.closeParenToken = closeParenToken, this.block = block, catchKeyword.parent = this, openParenToken.parent = this, identifier.parent = this, typeAnnotation && (typeAnnotation.parent = this), closeParenToken.parent = this, block.parent = this; + } + return CatchClauseSyntax; + })(TypeScript.SyntaxNode); + Concrete.CatchClauseSyntax = CatchClauseSyntax; + var FinallyClauseSyntax = (function (_super) { + __extends(FinallyClauseSyntax, _super); + function FinallyClauseSyntax(data, finallyKeyword, block) { + _super.call(this, data); + this.finallyKeyword = finallyKeyword, this.block = block, finallyKeyword.parent = this, block.parent = this; + } + return FinallyClauseSyntax; + })(TypeScript.SyntaxNode); + Concrete.FinallyClauseSyntax = FinallyClauseSyntax; + var TypeParameterSyntax = (function (_super) { + __extends(TypeParameterSyntax, _super); + function TypeParameterSyntax(data, identifier, constraint) { + _super.call(this, data); + this.identifier = identifier, this.constraint = constraint, identifier.parent = this, constraint && (constraint.parent = this); + } + return TypeParameterSyntax; + })(TypeScript.SyntaxNode); + Concrete.TypeParameterSyntax = TypeParameterSyntax; + var ConstraintSyntax = (function (_super) { + __extends(ConstraintSyntax, _super); + function ConstraintSyntax(data, extendsKeyword, typeOrExpression) { + _super.call(this, data); + this.extendsKeyword = extendsKeyword, this.typeOrExpression = typeOrExpression, extendsKeyword.parent = this, typeOrExpression.parent = this; + } + return ConstraintSyntax; + })(TypeScript.SyntaxNode); + Concrete.ConstraintSyntax = ConstraintSyntax; + var SimplePropertyAssignmentSyntax = (function (_super) { + __extends(SimplePropertyAssignmentSyntax, _super); + function SimplePropertyAssignmentSyntax(data, propertyName, colonToken, expression) { + _super.call(this, data); + this.propertyName = propertyName, this.colonToken = colonToken, this.expression = expression, propertyName.parent = this, colonToken.parent = this, expression.parent = this; + } + return SimplePropertyAssignmentSyntax; + })(TypeScript.SyntaxNode); + Concrete.SimplePropertyAssignmentSyntax = SimplePropertyAssignmentSyntax; + var FunctionPropertyAssignmentSyntax = (function (_super) { + __extends(FunctionPropertyAssignmentSyntax, _super); + function FunctionPropertyAssignmentSyntax(data, propertyName, callSignature, block) { + _super.call(this, data); + this.propertyName = propertyName, this.callSignature = callSignature, this.block = block, propertyName.parent = this, callSignature.parent = this, block.parent = this; + } + return FunctionPropertyAssignmentSyntax; + })(TypeScript.SyntaxNode); + Concrete.FunctionPropertyAssignmentSyntax = FunctionPropertyAssignmentSyntax; + var ParameterSyntax = (function (_super) { + __extends(ParameterSyntax, _super); + function ParameterSyntax(data, dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause) { + _super.call(this, data); + this.dotDotDotToken = dotDotDotToken, this.modifiers = modifiers, this.identifier = identifier, this.questionToken = questionToken, this.typeAnnotation = typeAnnotation, this.equalsValueClause = equalsValueClause, dotDotDotToken && (dotDotDotToken.parent = this), !TypeScript.isShared(modifiers) && (modifiers.parent = this), identifier.parent = this, questionToken && (questionToken.parent = this), typeAnnotation && (typeAnnotation.parent = this), equalsValueClause && (equalsValueClause.parent = this); + } + return ParameterSyntax; + })(TypeScript.SyntaxNode); + Concrete.ParameterSyntax = ParameterSyntax; + var EnumElementSyntax = (function (_super) { + __extends(EnumElementSyntax, _super); + function EnumElementSyntax(data, propertyName, equalsValueClause) { + _super.call(this, data); + this.propertyName = propertyName, this.equalsValueClause = equalsValueClause, propertyName.parent = this, equalsValueClause && (equalsValueClause.parent = this); + } + return EnumElementSyntax; + })(TypeScript.SyntaxNode); + Concrete.EnumElementSyntax = EnumElementSyntax; + var TypeAnnotationSyntax = (function (_super) { + __extends(TypeAnnotationSyntax, _super); + function TypeAnnotationSyntax(data, colonToken, type) { + _super.call(this, data); + this.colonToken = colonToken, this.type = type, colonToken.parent = this, type.parent = this; + } + return TypeAnnotationSyntax; + })(TypeScript.SyntaxNode); + Concrete.TypeAnnotationSyntax = TypeAnnotationSyntax; + var ExternalModuleReferenceSyntax = (function (_super) { + __extends(ExternalModuleReferenceSyntax, _super); + function ExternalModuleReferenceSyntax(data, requireKeyword, openParenToken, stringLiteral, closeParenToken) { + _super.call(this, data); + this.requireKeyword = requireKeyword, this.openParenToken = openParenToken, this.stringLiteral = stringLiteral, this.closeParenToken = closeParenToken, requireKeyword.parent = this, openParenToken.parent = this, stringLiteral.parent = this, closeParenToken.parent = this; + } + return ExternalModuleReferenceSyntax; + })(TypeScript.SyntaxNode); + Concrete.ExternalModuleReferenceSyntax = ExternalModuleReferenceSyntax; + var ModuleNameModuleReferenceSyntax = (function (_super) { + __extends(ModuleNameModuleReferenceSyntax, _super); + function ModuleNameModuleReferenceSyntax(data, moduleName) { + _super.call(this, data); + this.moduleName = moduleName, moduleName.parent = this; + } + return ModuleNameModuleReferenceSyntax; + })(TypeScript.SyntaxNode); + Concrete.ModuleNameModuleReferenceSyntax = ModuleNameModuleReferenceSyntax; + SourceUnitSyntax.prototype.__kind = 120 /* SourceUnit */, QualifiedNameSyntax.prototype.__kind = 121 /* QualifiedName */, ObjectTypeSyntax.prototype.__kind = 122 /* ObjectType */, FunctionTypeSyntax.prototype.__kind = 123 /* FunctionType */, ArrayTypeSyntax.prototype.__kind = 124 /* ArrayType */, ConstructorTypeSyntax.prototype.__kind = 125 /* ConstructorType */, GenericTypeSyntax.prototype.__kind = 126 /* GenericType */, TypeQuerySyntax.prototype.__kind = 127 /* TypeQuery */, InterfaceDeclarationSyntax.prototype.__kind = 128 /* InterfaceDeclaration */, FunctionDeclarationSyntax.prototype.__kind = 129 /* FunctionDeclaration */, ModuleDeclarationSyntax.prototype.__kind = 130 /* ModuleDeclaration */, ClassDeclarationSyntax.prototype.__kind = 131 /* ClassDeclaration */, EnumDeclarationSyntax.prototype.__kind = 132 /* EnumDeclaration */, ImportDeclarationSyntax.prototype.__kind = 133 /* ImportDeclaration */, ExportAssignmentSyntax.prototype.__kind = 134 /* ExportAssignment */, MemberFunctionDeclarationSyntax.prototype.__kind = 135 /* MemberFunctionDeclaration */, MemberVariableDeclarationSyntax.prototype.__kind = 136 /* MemberVariableDeclaration */, ConstructorDeclarationSyntax.prototype.__kind = 137 /* ConstructorDeclaration */, IndexMemberDeclarationSyntax.prototype.__kind = 138 /* IndexMemberDeclaration */, GetAccessorSyntax.prototype.__kind = 139 /* GetAccessor */, SetAccessorSyntax.prototype.__kind = 140 /* SetAccessor */, PropertySignatureSyntax.prototype.__kind = 141 /* PropertySignature */, CallSignatureSyntax.prototype.__kind = 142 /* CallSignature */, ConstructSignatureSyntax.prototype.__kind = 143 /* ConstructSignature */, IndexSignatureSyntax.prototype.__kind = 144 /* IndexSignature */, MethodSignatureSyntax.prototype.__kind = 145 /* MethodSignature */, BlockSyntax.prototype.__kind = 146 /* Block */, IfStatementSyntax.prototype.__kind = 147 /* IfStatement */, VariableStatementSyntax.prototype.__kind = 148 /* VariableStatement */, ExpressionStatementSyntax.prototype.__kind = 149 /* ExpressionStatement */, ReturnStatementSyntax.prototype.__kind = 150 /* ReturnStatement */, SwitchStatementSyntax.prototype.__kind = 151 /* SwitchStatement */, BreakStatementSyntax.prototype.__kind = 152 /* BreakStatement */, ContinueStatementSyntax.prototype.__kind = 153 /* ContinueStatement */, ForStatementSyntax.prototype.__kind = 154 /* ForStatement */, ForInStatementSyntax.prototype.__kind = 155 /* ForInStatement */, EmptyStatementSyntax.prototype.__kind = 156 /* EmptyStatement */, ThrowStatementSyntax.prototype.__kind = 157 /* ThrowStatement */, WhileStatementSyntax.prototype.__kind = 158 /* WhileStatement */, TryStatementSyntax.prototype.__kind = 159 /* TryStatement */, LabeledStatementSyntax.prototype.__kind = 160 /* LabeledStatement */, DoStatementSyntax.prototype.__kind = 161 /* DoStatement */, DebuggerStatementSyntax.prototype.__kind = 162 /* DebuggerStatement */, WithStatementSyntax.prototype.__kind = 163 /* WithStatement */, DeleteExpressionSyntax.prototype.__kind = 170 /* DeleteExpression */, TypeOfExpressionSyntax.prototype.__kind = 171 /* TypeOfExpression */, VoidExpressionSyntax.prototype.__kind = 172 /* VoidExpression */, ConditionalExpressionSyntax.prototype.__kind = 186 /* ConditionalExpression */, MemberAccessExpressionSyntax.prototype.__kind = 212 /* MemberAccessExpression */, InvocationExpressionSyntax.prototype.__kind = 213 /* InvocationExpression */, ArrayLiteralExpressionSyntax.prototype.__kind = 214 /* ArrayLiteralExpression */, ObjectLiteralExpressionSyntax.prototype.__kind = 215 /* ObjectLiteralExpression */, ObjectCreationExpressionSyntax.prototype.__kind = 216 /* ObjectCreationExpression */, ParenthesizedExpressionSyntax.prototype.__kind = 217 /* ParenthesizedExpression */, ParenthesizedArrowFunctionExpressionSyntax.prototype.__kind = 218 /* ParenthesizedArrowFunctionExpression */, SimpleArrowFunctionExpressionSyntax.prototype.__kind = 219 /* SimpleArrowFunctionExpression */, CastExpressionSyntax.prototype.__kind = 220 /* CastExpression */, ElementAccessExpressionSyntax.prototype.__kind = 221 /* ElementAccessExpression */, FunctionExpressionSyntax.prototype.__kind = 222 /* FunctionExpression */, OmittedExpressionSyntax.prototype.__kind = 223 /* OmittedExpression */, VariableDeclarationSyntax.prototype.__kind = 224 /* VariableDeclaration */, VariableDeclaratorSyntax.prototype.__kind = 225 /* VariableDeclarator */, ArgumentListSyntax.prototype.__kind = 226 /* ArgumentList */, ParameterListSyntax.prototype.__kind = 227 /* ParameterList */, TypeArgumentListSyntax.prototype.__kind = 228 /* TypeArgumentList */, TypeParameterListSyntax.prototype.__kind = 229 /* TypeParameterList */, EqualsValueClauseSyntax.prototype.__kind = 232 /* EqualsValueClause */, CaseSwitchClauseSyntax.prototype.__kind = 233 /* CaseSwitchClause */, DefaultSwitchClauseSyntax.prototype.__kind = 234 /* DefaultSwitchClause */, ElseClauseSyntax.prototype.__kind = 235 /* ElseClause */, CatchClauseSyntax.prototype.__kind = 236 /* CatchClause */, FinallyClauseSyntax.prototype.__kind = 237 /* FinallyClause */, TypeParameterSyntax.prototype.__kind = 238 /* TypeParameter */, ConstraintSyntax.prototype.__kind = 239 /* Constraint */, SimplePropertyAssignmentSyntax.prototype.__kind = 240 /* SimplePropertyAssignment */, FunctionPropertyAssignmentSyntax.prototype.__kind = 241 /* FunctionPropertyAssignment */, ParameterSyntax.prototype.__kind = 242 /* Parameter */, EnumElementSyntax.prototype.__kind = 243 /* EnumElement */, TypeAnnotationSyntax.prototype.__kind = 244 /* TypeAnnotation */, ExternalModuleReferenceSyntax.prototype.__kind = 245 /* ExternalModuleReference */, ModuleNameModuleReferenceSyntax.prototype.__kind = 246 /* ModuleNameModuleReference */; + })(Syntax.Concrete || (Syntax.Concrete = {})); + var Concrete = Syntax.Concrete; + })(TypeScript.Syntax || (TypeScript.Syntax = {})); + var Syntax = TypeScript.Syntax; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + TypeScript.syntaxDiagnosticsTime = 0; + var SyntaxTree = (function () { + function SyntaxTree(isConcrete, sourceUnit, isDeclaration, diagnostics, fileName, text, languageVersion) { + this.text = text; + this._allDiagnostics = null; + this._isConcrete = isConcrete; + this._sourceUnit = sourceUnit; + this._isDeclaration = isDeclaration; + this._parserDiagnostics = diagnostics; + this._fileName = fileName; + this._lineMap = text.lineMap(); + this._languageVersion = languageVersion; + sourceUnit.syntaxTree = this; + } + SyntaxTree.prototype.isConcrete = function () { + return this._isConcrete; + }; + SyntaxTree.prototype.sourceUnit = function () { + return this._sourceUnit; + }; + SyntaxTree.prototype.isDeclaration = function () { + return this._isDeclaration; + }; + SyntaxTree.prototype.computeDiagnostics = function () { + if (this._parserDiagnostics.length > 0) { + return this._parserDiagnostics; + } + var diagnostics = []; + TypeScript.visitNodeOrToken(new GrammarCheckerWalker(this, diagnostics), this.sourceUnit()); + return diagnostics; + }; + SyntaxTree.prototype.diagnostics = function () { + if (this._allDiagnostics === null) { + var start = new Date().getTime(); + this._allDiagnostics = this.computeDiagnostics(); + TypeScript.syntaxDiagnosticsTime += new Date().getTime() - start; + } + return this._allDiagnostics; + }; + SyntaxTree.prototype.fileName = function () { + return this._fileName; + }; + SyntaxTree.prototype.lineMap = function () { + return this._lineMap; + }; + SyntaxTree.prototype.languageVersion = function () { + return this._languageVersion; + }; + SyntaxTree.prototype.cacheSyntaxTreeInfo = function () { + var sourceUnit = this.sourceUnit(); + var firstToken = firstSyntaxTreeToken(this); + var leadingTrivia = firstToken.leadingTrivia(this.text); + this._isExternalModule = externalModuleIndicatorSpanWorker(this, firstToken) !== null; + var amdDependencies = []; + for (var i = 0, n = leadingTrivia.count(); i < n; i++) { + var trivia = leadingTrivia.syntaxTriviaAt(i); + if (trivia.isComment()) { + var amdDependency = this.getAmdDependency(trivia.fullText()); + if (amdDependency) { + amdDependencies.push(amdDependency); + } + } + } + this._amdDependencies = amdDependencies; + }; + SyntaxTree.prototype.getAmdDependency = function (comment) { + var amdDependencyRegEx = /^\/\/\/\s* 0) { + var modifiers = parameter.modifiers; + for (var i = 0, n = modifiers.length; i < n; i++) { + var modifier = modifiers[i]; + if (this.checkParameterAccessibilityModifier(parameterList, modifier, i)) { + return true; + } + } + } + return false; + }; + GrammarCheckerWalker.prototype.checkParameterAccessibilityModifier = function (parameterList, modifier, modifierIndex) { + if (modifier.kind() !== 57 /* PublicKeyword */ && modifier.kind() !== 55 /* PrivateKeyword */) { + this.pushDiagnostic(modifier, TypeScript.DiagnosticCode._0_modifier_cannot_appear_on_a_parameter, [modifier.text()]); + return true; + } + else { + if (modifierIndex > 0) { + this.pushDiagnostic(modifier, TypeScript.DiagnosticCode.Accessibility_modifier_already_seen); + return true; + } + } + return false; + }; + GrammarCheckerWalker.prototype.checkForTrailingComma = function (list) { + if (TypeScript.childCount(list) === 0 || TypeScript.childCount(list) % 2 === 1) { + return false; + } + var child = TypeScript.childAt(list, TypeScript.childCount(list) - 1); + this.pushDiagnostic(child, TypeScript.DiagnosticCode.Trailing_comma_not_allowed); + return true; + }; + GrammarCheckerWalker.prototype.checkForAtLeastOneElement = function (parent, list, reportToken, listKind) { + if (TypeScript.childCount(list) > 0) { + return false; + } + this.pushDiagnostic(reportToken, TypeScript.DiagnosticCode._0_list_cannot_be_empty, [listKind]); + return true; + }; + GrammarCheckerWalker.prototype.visitParameterList = function (node) { + if (this.checkParameterListAcessibilityModifiers(node) || this.checkParameterListOrder(node) || this.checkForTrailingComma(node.parameters)) { + return; + } + _super.prototype.visitParameterList.call(this, node); + }; + GrammarCheckerWalker.prototype.visitHeritageClause = function (node) { + if (this.checkForTrailingComma(node.typeNames) || this.checkForAtLeastOneElement(node, node.typeNames, node.extendsOrImplementsKeyword, TypeScript.SyntaxFacts.getText(node.extendsOrImplementsKeyword.kind()))) { + return; + } + _super.prototype.visitHeritageClause.call(this, node); + }; + GrammarCheckerWalker.prototype.visitArgumentList = function (node) { + if (this.checkForTrailingComma(node.arguments)) { + return; + } + _super.prototype.visitArgumentList.call(this, node); + }; + GrammarCheckerWalker.prototype.visitVariableDeclaration = function (node) { + if (this.checkForAtLeastOneElement(node, node.variableDeclarators, node.varKeyword, TypeScript.getLocalizedText(TypeScript.DiagnosticCode.variable_declaration, null)) || this.checkForTrailingComma(node.variableDeclarators)) { + return; + } + _super.prototype.visitVariableDeclaration.call(this, node); + }; + GrammarCheckerWalker.prototype.visitTypeArgumentList = function (node) { + if (this.checkForTrailingComma(node.typeArguments) || this.checkForAtLeastOneElement(node, node.typeArguments, node.lessThanToken, TypeScript.getLocalizedText(TypeScript.DiagnosticCode.type_argument, null))) { + return; + } + _super.prototype.visitTypeArgumentList.call(this, node); + }; + GrammarCheckerWalker.prototype.visitTypeParameterList = function (node) { + if (this.checkForTrailingComma(node.typeParameters) || this.checkForAtLeastOneElement(node, node.typeParameters, node.lessThanToken, TypeScript.getLocalizedText(TypeScript.DiagnosticCode.type_parameter, null))) { + return; + } + _super.prototype.visitTypeParameterList.call(this, node); + }; + GrammarCheckerWalker.prototype.checkIndexSignatureParameter = function (node) { + if (node.parameters.length !== 1) { + this.pushDiagnostic(node.openBracketToken, TypeScript.DiagnosticCode.Index_signature_must_have_exactly_one_parameter); + return true; + } + var parameter = node.parameters[0]; + if (parameter.dotDotDotToken) { + this.pushDiagnostic(parameter, TypeScript.DiagnosticCode.Index_signatures_cannot_have_rest_parameters); + return true; + } + else if (parameter.modifiers.length > 0) { + this.pushDiagnostic(parameter, TypeScript.DiagnosticCode.Index_signature_parameter_cannot_have_accessibility_modifiers); + return true; + } + else if (parameter.questionToken) { + this.pushDiagnostic(parameter, TypeScript.DiagnosticCode.Index_signature_parameter_cannot_have_a_question_mark); + return true; + } + else if (parameter.equalsValueClause) { + this.pushDiagnostic(parameter, TypeScript.DiagnosticCode.Index_signature_parameter_cannot_have_an_initializer); + return true; + } + else if (!parameter.typeAnnotation) { + this.pushDiagnostic(parameter, TypeScript.DiagnosticCode.Index_signature_parameter_must_have_a_type_annotation); + return true; + } + else if (parameter.typeAnnotation.type.kind() !== 69 /* StringKeyword */ && parameter.typeAnnotation.type.kind() !== 67 /* NumberKeyword */) { + this.pushDiagnostic(parameter, TypeScript.DiagnosticCode.Index_signature_parameter_type_must_be_string_or_number); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.visitIndexSignature = function (node) { + if (this.checkIndexSignatureParameter(node)) { + return; + } + if (!node.typeAnnotation) { + this.pushDiagnostic(node, TypeScript.DiagnosticCode.Index_signature_must_have_a_type_annotation); + return; + } + _super.prototype.visitIndexSignature.call(this, node); + }; + GrammarCheckerWalker.prototype.checkClassDeclarationHeritageClauses = function (node) { + var seenExtendsClause = false; + var seenImplementsClause = false; + for (var i = 0, n = node.heritageClauses.length; i < n; i++) { + TypeScript.Debug.assert(i <= 2); + var heritageClause = node.heritageClauses[i]; + if (heritageClause.extendsOrImplementsKeyword.kind() === 48 /* ExtendsKeyword */) { + if (seenExtendsClause) { + this.pushDiagnostic(heritageClause, TypeScript.DiagnosticCode.extends_clause_already_seen); + return true; + } + if (seenImplementsClause) { + this.pushDiagnostic(heritageClause, TypeScript.DiagnosticCode.extends_clause_must_precede_implements_clause); + return true; + } + if (heritageClause.typeNames.length > 1) { + this.pushDiagnostic(heritageClause, TypeScript.DiagnosticCode.Classes_can_only_extend_a_single_class); + return true; + } + seenExtendsClause = true; + } + else { + TypeScript.Debug.assert(heritageClause.extendsOrImplementsKeyword.kind() === 51 /* ImplementsKeyword */); + if (seenImplementsClause) { + this.pushDiagnostic(heritageClause, TypeScript.DiagnosticCode.implements_clause_already_seen); + return true; + } + seenImplementsClause = true; + } + } + return false; + }; + GrammarCheckerWalker.prototype.checkForDisallowedDeclareModifier = function (modifiers) { + if (this.inAmbientDeclaration) { + var declareToken = TypeScript.SyntaxUtilities.getToken(modifiers, 63 /* DeclareKeyword */); + if (declareToken) { + this.pushDiagnostic(declareToken, TypeScript.DiagnosticCode.A_declare_modifier_cannot_be_used_in_an_already_ambient_context); + return true; + } + } + return false; + }; + GrammarCheckerWalker.prototype.checkForRequiredDeclareModifier = function (moduleElement, reportToken, modifiers) { + if (!this.inAmbientDeclaration && this.syntaxTree.isDeclaration()) { + if (!TypeScript.SyntaxUtilities.containsToken(modifiers, 63 /* DeclareKeyword */)) { + this.pushDiagnostic(reportToken, TypeScript.DiagnosticCode.A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file); + return true; + } + } + }; + GrammarCheckerWalker.prototype.visitClassDeclaration = function (node) { + if (this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForRequiredDeclareModifier(node, node.identifier, node.modifiers) || this.checkModuleElementModifiers(node.modifiers) || this.checkClassDeclarationHeritageClauses(node)) { + return; + } + var savedInAmbientDeclaration = this.inAmbientDeclaration; + this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */); + _super.prototype.visitClassDeclaration.call(this, node); + this.inAmbientDeclaration = savedInAmbientDeclaration; + }; + GrammarCheckerWalker.prototype.checkInterfaceDeclarationHeritageClauses = function (node) { + var seenExtendsClause = false; + for (var i = 0, n = node.heritageClauses.length; i < n; i++) { + TypeScript.Debug.assert(i <= 1); + var heritageClause = node.heritageClauses[i]; + if (heritageClause.extendsOrImplementsKeyword.kind() === 48 /* ExtendsKeyword */) { + if (seenExtendsClause) { + this.pushDiagnostic(heritageClause, TypeScript.DiagnosticCode.extends_clause_already_seen); + return true; + } + seenExtendsClause = true; + } + else { + TypeScript.Debug.assert(heritageClause.extendsOrImplementsKeyword.kind() === 51 /* ImplementsKeyword */); + this.pushDiagnostic(heritageClause, TypeScript.DiagnosticCode.Interface_declaration_cannot_have_implements_clause); + return true; + } + } + return false; + }; + GrammarCheckerWalker.prototype.checkInterfaceModifiers = function (modifiers) { + for (var i = 0, n = modifiers.length; i < n; i++) { + var modifier = modifiers[i]; + if (modifier.kind() === 63 /* DeclareKeyword */) { + this.pushDiagnostic(modifier, TypeScript.DiagnosticCode.A_declare_modifier_cannot_be_used_with_an_interface_declaration); + return true; + } + } + return false; + }; + GrammarCheckerWalker.prototype.visitInterfaceDeclaration = function (node) { + if (this.checkInterfaceModifiers(node.modifiers) || this.checkModuleElementModifiers(node.modifiers) || this.checkInterfaceDeclarationHeritageClauses(node)) { + return; + } + _super.prototype.visitInterfaceDeclaration.call(this, node); + }; + GrammarCheckerWalker.prototype.checkClassElementModifiers = function (list) { + var seenAccessibilityModifier = false; + var seenStaticModifier = false; + for (var i = 0, n = list.length; i < n; i++) { + var modifier = list[i]; + if (modifier.kind() === 57 /* PublicKeyword */ || modifier.kind() === 55 /* PrivateKeyword */) { + if (seenAccessibilityModifier) { + this.pushDiagnostic(modifier, TypeScript.DiagnosticCode.Accessibility_modifier_already_seen); + return true; + } + if (seenStaticModifier) { + var previousToken = list[i - 1]; + this.pushDiagnostic(modifier, TypeScript.DiagnosticCode._0_modifier_must_precede_1_modifier, [modifier.text(), previousToken.text()]); + return true; + } + seenAccessibilityModifier = true; + } + else if (modifier.kind() === 58 /* StaticKeyword */) { + if (seenStaticModifier) { + this.pushDiagnostic(modifier, TypeScript.DiagnosticCode._0_modifier_already_seen, [modifier.text()]); + return true; + } + seenStaticModifier = true; + } + else { + this.pushDiagnostic(modifier, TypeScript.DiagnosticCode._0_modifier_cannot_appear_on_a_class_element, [modifier.text()]); + return true; + } + } + return false; + }; + GrammarCheckerWalker.prototype.visitMemberVariableDeclaration = function (node) { + if (this.checkClassElementModifiers(node.modifiers)) { + return; + } + _super.prototype.visitMemberVariableDeclaration.call(this, node); + }; + GrammarCheckerWalker.prototype.visitMemberFunctionDeclaration = function (node) { + if (this.checkClassElementModifiers(node.modifiers)) { + return; + } + _super.prototype.visitMemberFunctionDeclaration.call(this, node); + }; + GrammarCheckerWalker.prototype.checkGetAccessorParameter = function (node) { + if (node.callSignature.parameterList.parameters.length !== 0) { + this.pushDiagnostic(node.propertyName, TypeScript.DiagnosticCode.get_accessor_cannot_have_parameters); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.visitIndexMemberDeclaration = function (node) { + if (this.checkIndexMemberModifiers(node)) { + return; + } + _super.prototype.visitIndexMemberDeclaration.call(this, node); + }; + GrammarCheckerWalker.prototype.checkIndexMemberModifiers = function (node) { + if (node.modifiers.length > 0) { + this.pushDiagnostic(TypeScript.childAt(node.modifiers, 0), TypeScript.DiagnosticCode.Modifiers_cannot_appear_here); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.checkEcmaScriptVersionIsAtLeast = function (parent, reportToken, languageVersion, diagnosticKey) { + if (this.syntaxTree.languageVersion() < languageVersion) { + this.pushDiagnostic(reportToken, diagnosticKey); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.visitObjectLiteralExpression = function (node) { + var savedInObjectLiteralExpression = this.inObjectLiteralExpression; + this.inObjectLiteralExpression = true; + _super.prototype.visitObjectLiteralExpression.call(this, node); + this.inObjectLiteralExpression = savedInObjectLiteralExpression; + }; + GrammarCheckerWalker.prototype.visitGetAccessor = function (node) { + if (this.checkForAccessorDeclarationInAmbientContext(node) || this.checkEcmaScriptVersionIsAtLeast(node, node.propertyName, 1 /* ES5 */, TypeScript.DiagnosticCode.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher) || this.checkForDisallowedModifiers(node, node.modifiers) || this.checkClassElementModifiers(node.modifiers) || this.checkForDisallowedAccessorTypeParameters(node.callSignature) || this.checkGetAccessorParameter(node)) { + return; + } + _super.prototype.visitGetAccessor.call(this, node); + }; + GrammarCheckerWalker.prototype.checkForDisallowedSetAccessorTypeAnnotation = function (accessor) { + if (accessor.callSignature.typeAnnotation) { + this.pushDiagnostic(accessor.callSignature.typeAnnotation, TypeScript.DiagnosticCode.Type_annotation_cannot_appear_on_a_set_accessor); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.checkForDisallowedAccessorTypeParameters = function (callSignature) { + if (callSignature.typeParameterList !== null) { + this.pushDiagnostic(callSignature.typeParameterList, TypeScript.DiagnosticCode.Type_parameters_cannot_appear_on_an_accessor); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.checkForAccessorDeclarationInAmbientContext = function (accessor) { + if (this.inAmbientDeclaration) { + this.pushDiagnostic(accessor, TypeScript.DiagnosticCode.Accessors_are_not_allowed_in_ambient_contexts); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.checkSetAccessorParameter = function (node) { + var parameters = node.callSignature.parameterList.parameters; + if (TypeScript.childCount(parameters) !== 1) { + this.pushDiagnostic(node.propertyName, TypeScript.DiagnosticCode.set_accessor_must_have_exactly_one_parameter); + return true; + } + var parameter = parameters[0]; + if (parameter.questionToken) { + this.pushDiagnostic(parameter, TypeScript.DiagnosticCode.set_accessor_parameter_cannot_be_optional); + return true; + } + if (parameter.equalsValueClause) { + this.pushDiagnostic(parameter, TypeScript.DiagnosticCode.set_accessor_parameter_cannot_have_an_initializer); + return true; + } + if (parameter.dotDotDotToken) { + this.pushDiagnostic(parameter, TypeScript.DiagnosticCode.set_accessor_cannot_have_rest_parameter); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.visitSetAccessor = function (node) { + if (this.checkForAccessorDeclarationInAmbientContext(node) || this.checkEcmaScriptVersionIsAtLeast(node, node.propertyName, 1 /* ES5 */, TypeScript.DiagnosticCode.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher) || this.checkForDisallowedModifiers(node, node.modifiers) || this.checkClassElementModifiers(node.modifiers) || this.checkForDisallowedAccessorTypeParameters(node.callSignature) || this.checkForDisallowedSetAccessorTypeAnnotation(node) || this.checkSetAccessorParameter(node)) { + return; + } + _super.prototype.visitSetAccessor.call(this, node); + }; + GrammarCheckerWalker.prototype.visitEnumDeclaration = function (node) { + if (this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForRequiredDeclareModifier(node, node.identifier, node.modifiers) || this.checkModuleElementModifiers(node.modifiers), this.checkEnumElements(node)) { + return; + } + var savedInAmbientDeclaration = this.inAmbientDeclaration; + this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */); + _super.prototype.visitEnumDeclaration.call(this, node); + this.inAmbientDeclaration = savedInAmbientDeclaration; + }; + GrammarCheckerWalker.prototype.checkEnumElements = function (node) { + var previousValueWasComputed = false; + for (var i = 0, n = TypeScript.childCount(node.enumElements); i < n; i++) { + var child = TypeScript.childAt(node.enumElements, i); + if (i % 2 === 0) { + var enumElement = child; + if (!enumElement.equalsValueClause && previousValueWasComputed) { + this.pushDiagnostic(enumElement, TypeScript.DiagnosticCode.Enum_member_must_have_initializer); + return true; + } + if (enumElement.equalsValueClause) { + var value = enumElement.equalsValueClause.value; + previousValueWasComputed = !TypeScript.Syntax.isIntegerLiteral(value); + } + } + } + return false; + }; + GrammarCheckerWalker.prototype.visitEnumElement = function (node) { + if (this.inAmbientDeclaration && node.equalsValueClause) { + var expression = node.equalsValueClause.value; + if (!TypeScript.Syntax.isIntegerLiteral(expression)) { + this.pushDiagnostic(node.equalsValueClause.value, TypeScript.DiagnosticCode.Ambient_enum_elements_can_only_have_integer_literal_initializers); + return; + } + } + _super.prototype.visitEnumElement.call(this, node); + }; + GrammarCheckerWalker.prototype.visitInvocationExpression = function (node) { + if (node.expression.kind() === 50 /* SuperKeyword */ && node.argumentList.typeArgumentList !== null) { + this.pushDiagnostic(node, TypeScript.DiagnosticCode.super_invocation_cannot_have_type_arguments); + } + _super.prototype.visitInvocationExpression.call(this, node); + }; + GrammarCheckerWalker.prototype.checkModuleElementModifiers = function (modifiers) { + var seenExportModifier = false; + var seenDeclareModifier = false; + for (var i = 0, n = modifiers.length; i < n; i++) { + var modifier = modifiers[i]; + if (modifier.kind() === 57 /* PublicKeyword */ || modifier.kind() === 55 /* PrivateKeyword */ || modifier.kind() === 58 /* StaticKeyword */) { + this.pushDiagnostic(modifier, TypeScript.DiagnosticCode._0_modifier_cannot_appear_on_a_module_element, [modifier.text()]); + return true; + } + if (modifier.kind() === 63 /* DeclareKeyword */) { + if (seenDeclareModifier) { + this.pushDiagnostic(modifier, TypeScript.DiagnosticCode.Accessibility_modifier_already_seen); + return; + } + seenDeclareModifier = true; + } + else if (modifier.kind() === 47 /* ExportKeyword */) { + if (seenExportModifier) { + this.pushDiagnostic(modifier, TypeScript.DiagnosticCode._0_modifier_already_seen, [modifier.text()]); + return; + } + if (seenDeclareModifier) { + this.pushDiagnostic(modifier, TypeScript.DiagnosticCode._0_modifier_must_precede_1_modifier, [TypeScript.SyntaxFacts.getText(47 /* ExportKeyword */), TypeScript.SyntaxFacts.getText(63 /* DeclareKeyword */)]); + return; + } + seenExportModifier = true; + } + } + return false; + }; + GrammarCheckerWalker.prototype.checkForDisallowedImportDeclaration = function (node) { + if (!node.stringLiteral) { + for (var i = 0, n = node.moduleElements.length; i < n; i++) { + var child = node.moduleElements[i]; + if (child.kind() === 133 /* ImportDeclaration */) { + var importDeclaration = child; + if (importDeclaration.moduleReference.kind() === 245 /* ExternalModuleReference */) { + this.pushDiagnostic(importDeclaration, TypeScript.DiagnosticCode.Import_declarations_in_an_internal_module_cannot_reference_an_external_module); + } + } + } + } + return false; + }; + GrammarCheckerWalker.prototype.checkForDisallowedDeclareModifierOnImportDeclaration = function (modifiers) { + var declareToken = TypeScript.SyntaxUtilities.getToken(modifiers, 63 /* DeclareKeyword */); + if (declareToken) { + this.pushDiagnostic(declareToken, TypeScript.DiagnosticCode.A_declare_modifier_cannot_be_used_with_an_import_declaration); + return true; + } + }; + GrammarCheckerWalker.prototype.visitImportDeclaration = function (node) { + if (this.checkForDisallowedDeclareModifierOnImportDeclaration(node.modifiers) || this.checkModuleElementModifiers(node.modifiers)) { + return; + } + _super.prototype.visitImportDeclaration.call(this, node); + }; + GrammarCheckerWalker.prototype.visitModuleDeclaration = function (node) { + if (this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForRequiredDeclareModifier(node, node.stringLiteral ? node.stringLiteral : TypeScript.firstToken(node.name), node.modifiers) || this.checkModuleElementModifiers(node.modifiers) || this.checkForDisallowedImportDeclaration(node)) { + return; + } + if (node.stringLiteral) { + if (!this.inAmbientDeclaration && !TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */)) { + this.pushDiagnostic(node.stringLiteral, TypeScript.DiagnosticCode.Only_ambient_modules_can_use_quoted_names); + return; + } + } + if (!node.stringLiteral && this.checkForDisallowedExportAssignment(node)) { + return; + } + var savedInAmbientDeclaration = this.inAmbientDeclaration; + this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */); + _super.prototype.visitModuleDeclaration.call(this, node); + this.inAmbientDeclaration = savedInAmbientDeclaration; + }; + GrammarCheckerWalker.prototype.checkForDisallowedExportAssignment = function (node) { + for (var i = 0, n = node.moduleElements.length; i < n; i++) { + var child = node.moduleElements[i]; + if (child.kind() === 134 /* ExportAssignment */) { + this.pushDiagnostic(child, TypeScript.DiagnosticCode.Export_assignment_cannot_be_used_in_internal_modules); + return true; + } + } + return false; + }; + GrammarCheckerWalker.prototype.visitBlock = function (node) { + if (this.checkForBlockInAmbientContext(node)) { + return; + } + var savedInBlock = this.inBlock; + this.inBlock = true; + _super.prototype.visitBlock.call(this, node); + this.inBlock = savedInBlock; + }; + GrammarCheckerWalker.prototype.checkForBlockInAmbientContext = function (node) { + if (this.inAmbientDeclaration || this.syntaxTree.isDeclaration()) { + if (node.parent.kind() === 1 /* List */) { + this.pushDiagnostic(TypeScript.firstToken(node), TypeScript.DiagnosticCode.Statements_are_not_allowed_in_ambient_contexts); + } + else { + this.pushDiagnostic(TypeScript.firstToken(node), TypeScript.DiagnosticCode.A_function_implementation_cannot_be_declared_in_an_ambient_context); + } + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.checkForStatementInAmbientContxt = function (node) { + if (this.inAmbientDeclaration || this.syntaxTree.isDeclaration()) { + this.pushDiagnostic(TypeScript.firstToken(node), TypeScript.DiagnosticCode.Statements_are_not_allowed_in_ambient_contexts); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.visitBreakStatement = function (node) { + if (this.checkForStatementInAmbientContxt(node) || this.checkBreakStatementTarget(node)) { + return; + } + _super.prototype.visitBreakStatement.call(this, node); + }; + GrammarCheckerWalker.prototype.visitContinueStatement = function (node) { + if (this.checkForStatementInAmbientContxt(node) || this.checkContinueStatementTarget(node)) { + return; + } + _super.prototype.visitContinueStatement.call(this, node); + }; + GrammarCheckerWalker.prototype.checkBreakStatementTarget = function (node) { + if (node.identifier) { + var breakableLabels = this.getEnclosingLabels(node, true, false); + if (!TypeScript.ArrayUtilities.any(breakableLabels, function (s) { return TypeScript.tokenValueText(s.identifier) === TypeScript.tokenValueText(node.identifier); })) { + var breakableLabels = this.getEnclosingLabels(node, true, true); + if (TypeScript.ArrayUtilities.any(breakableLabels, function (s) { return TypeScript.tokenValueText(s.identifier) === TypeScript.tokenValueText(node.identifier); })) { + this.pushDiagnostic(node, TypeScript.DiagnosticCode.Jump_target_cannot_cross_function_boundary); + } + else { + this.pushDiagnostic(node, TypeScript.DiagnosticCode.Jump_target_not_found); + } + return true; + } + } + else if (!this.inIterationStatement(node, false) && !this.inSwitchStatement(node)) { + if (this.inIterationStatement(node, true)) { + this.pushDiagnostic(node, TypeScript.DiagnosticCode.Jump_target_cannot_cross_function_boundary); + } + else { + this.pushDiagnostic(node, TypeScript.DiagnosticCode.break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement); + } + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.inSwitchStatement = function (ast) { + while (ast) { + if (ast.kind() === 151 /* SwitchStatement */) { + return true; + } + if (TypeScript.SyntaxUtilities.isAnyFunctionExpressionOrDeclaration(ast)) { + return false; + } + ast = ast.parent; + } + return false; + }; + GrammarCheckerWalker.prototype.isIterationStatement = function (ast) { + switch (ast.kind()) { + case 154 /* ForStatement */: + case 155 /* ForInStatement */: + case 158 /* WhileStatement */: + case 161 /* DoStatement */: + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.inIterationStatement = function (element, crossFunctions) { + while (element) { + if (this.isIterationStatement(element)) { + return true; + } + if (!crossFunctions && TypeScript.SyntaxUtilities.isAnyFunctionExpressionOrDeclaration(element)) { + return false; + } + element = element.parent; + } + return false; + }; + GrammarCheckerWalker.prototype.getEnclosingLabels = function (element, breakable, crossFunctions) { + var result = []; + element = element.parent; + while (element) { + if (element.kind() === 160 /* LabeledStatement */) { + var labeledStatement = element; + if (breakable) { + result.push(labeledStatement); + } + else { + if (this.labelIsOnContinuableConstruct(labeledStatement.statement)) { + result.push(labeledStatement); + } + } + } + if (!crossFunctions && TypeScript.SyntaxUtilities.isAnyFunctionExpressionOrDeclaration(element)) { + break; + } + element = element.parent; + } + return result; + }; + GrammarCheckerWalker.prototype.labelIsOnContinuableConstruct = function (statement) { + switch (statement.kind()) { + case 160 /* LabeledStatement */: + return this.labelIsOnContinuableConstruct(statement.statement); + case 158 /* WhileStatement */: + case 154 /* ForStatement */: + case 155 /* ForInStatement */: + case 161 /* DoStatement */: + return true; + default: + return false; + } + }; + GrammarCheckerWalker.prototype.checkContinueStatementTarget = function (node) { + if (!this.inIterationStatement(node, false)) { + if (this.inIterationStatement(node, true)) { + this.pushDiagnostic(node, TypeScript.DiagnosticCode.Jump_target_cannot_cross_function_boundary); + } + else { + this.pushDiagnostic(node, TypeScript.DiagnosticCode.continue_statement_can_only_be_used_within_an_enclosing_iteration_statement); + } + return true; + } + else if (node.identifier) { + var continuableLabels = this.getEnclosingLabels(node, false, false); + if (!TypeScript.ArrayUtilities.any(continuableLabels, function (s) { return TypeScript.tokenValueText(s.identifier) === TypeScript.tokenValueText(node.identifier); })) { + var continuableLabels = this.getEnclosingLabels(node, false, true); + if (TypeScript.ArrayUtilities.any(continuableLabels, function (s) { return TypeScript.tokenValueText(s.identifier) === TypeScript.tokenValueText(node.identifier); })) { + this.pushDiagnostic(node, TypeScript.DiagnosticCode.Jump_target_cannot_cross_function_boundary); + } + else { + this.pushDiagnostic(node, TypeScript.DiagnosticCode.Jump_target_not_found); + } + return true; + } + } + return false; + }; + GrammarCheckerWalker.prototype.visitDebuggerStatement = function (node) { + if (this.checkForStatementInAmbientContxt(node)) { + return; + } + _super.prototype.visitDebuggerStatement.call(this, node); + }; + GrammarCheckerWalker.prototype.visitDoStatement = function (node) { + if (this.checkForStatementInAmbientContxt(node)) { + return; + } + _super.prototype.visitDoStatement.call(this, node); + }; + GrammarCheckerWalker.prototype.visitEmptyStatement = function (node) { + if (this.checkForStatementInAmbientContxt(node)) { + return; + } + _super.prototype.visitEmptyStatement.call(this, node); + }; + GrammarCheckerWalker.prototype.visitExpressionStatement = function (node) { + if (this.checkForStatementInAmbientContxt(node)) { + return; + } + _super.prototype.visitExpressionStatement.call(this, node); + }; + GrammarCheckerWalker.prototype.visitForInStatement = function (node) { + if (this.checkForStatementInAmbientContxt(node) || this.checkForInStatementVariableDeclaration(node) || this.checkForInLeftHandSideExpression(node)) { + return; + } + _super.prototype.visitForInStatement.call(this, node); + }; + GrammarCheckerWalker.prototype.checkForInLeftHandSideExpression = function (node) { + if (node.left && !TypeScript.SyntaxUtilities.isLeftHandSizeExpression(node.left)) { + this.pushDiagnostic(node.left, TypeScript.DiagnosticCode.Invalid_left_hand_side_in_for_in_statement); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.checkForInStatementVariableDeclaration = function (node) { + if (node.variableDeclaration && node.variableDeclaration.variableDeclarators.length > 1) { + this.pushDiagnostic(node.variableDeclaration, TypeScript.DiagnosticCode.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.visitForStatement = function (node) { + if (this.checkForStatementInAmbientContxt(node)) { + return; + } + _super.prototype.visitForStatement.call(this, node); + }; + GrammarCheckerWalker.prototype.visitIfStatement = function (node) { + if (this.checkForStatementInAmbientContxt(node)) { + return; + } + _super.prototype.visitIfStatement.call(this, node); + }; + GrammarCheckerWalker.prototype.visitLabeledStatement = function (node) { + if (this.checkForStatementInAmbientContxt(node) || this.checkForInvalidLabelIdentifier(node)) { + return; + } + _super.prototype.visitLabeledStatement.call(this, node); + }; + GrammarCheckerWalker.prototype.checkForInvalidLabelIdentifier = function (node) { + var labelIdentifier = TypeScript.tokenValueText(node.identifier); + var breakableLabels = this.getEnclosingLabels(node, true, false); + var matchingLabel = TypeScript.ArrayUtilities.firstOrDefault(breakableLabels, function (s) { return TypeScript.tokenValueText(s.identifier) === labelIdentifier; }); + if (matchingLabel) { + this.pushDiagnostic(node.identifier, TypeScript.DiagnosticCode.Duplicate_identifier_0, [labelIdentifier]); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.visitReturnStatement = function (node) { + if (this.checkForStatementInAmbientContxt(node) || this.checkForReturnStatementNotInFunctionBody(node)) { + return; + } + _super.prototype.visitReturnStatement.call(this, node); + }; + GrammarCheckerWalker.prototype.checkForReturnStatementNotInFunctionBody = function (node) { + for (var element = node; element; element = element.parent) { + if (TypeScript.SyntaxUtilities.isAnyFunctionExpressionOrDeclaration(element)) { + return false; + } + } + this.pushDiagnostic(TypeScript.firstToken(node), TypeScript.DiagnosticCode.return_statement_must_be_contained_within_a_function_body); + return true; + }; + GrammarCheckerWalker.prototype.visitSwitchStatement = function (node) { + if (this.checkForStatementInAmbientContxt(node)) { + return; + } + _super.prototype.visitSwitchStatement.call(this, node); + }; + GrammarCheckerWalker.prototype.visitThrowStatement = function (node) { + if (this.checkForStatementInAmbientContxt(node)) { + return; + } + _super.prototype.visitThrowStatement.call(this, node); + }; + GrammarCheckerWalker.prototype.visitTryStatement = function (node) { + if (this.checkForStatementInAmbientContxt(node)) { + return; + } + _super.prototype.visitTryStatement.call(this, node); + }; + GrammarCheckerWalker.prototype.visitWhileStatement = function (node) { + if (this.checkForStatementInAmbientContxt(node)) { + return; + } + _super.prototype.visitWhileStatement.call(this, node); + }; + GrammarCheckerWalker.prototype.visitWithStatement = function (node) { + if (this.checkForStatementInAmbientContxt(node) || this.checkForWithInStrictMode(node)) { + return; + } + _super.prototype.visitWithStatement.call(this, node); + }; + GrammarCheckerWalker.prototype.checkForWithInStrictMode = function (node) { + if (TypeScript.parsedInStrictMode(node)) { + this.pushDiagnostic(TypeScript.firstToken(node), TypeScript.DiagnosticCode.with_statements_are_not_allowed_in_strict_mode); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.checkForDisallowedModifiers = function (parent, modifiers) { + if (this.inBlock || this.inObjectLiteralExpression) { + if (modifiers.length > 0) { + this.pushDiagnostic(TypeScript.childAt(modifiers, 0), TypeScript.DiagnosticCode.Modifiers_cannot_appear_here); + return true; + } + } + return false; + }; + GrammarCheckerWalker.prototype.visitFunctionDeclaration = function (node) { + if (this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForDisallowedModifiers(node, node.modifiers) || this.checkForRequiredDeclareModifier(node, node.identifier, node.modifiers) || this.checkModuleElementModifiers(node.modifiers) || this.checkForDisallowedEvalOrArguments(node, node.identifier)) { + return; + } + var savedInAmbientDeclaration = this.inAmbientDeclaration; + this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */); + _super.prototype.visitFunctionDeclaration.call(this, node); + this.inAmbientDeclaration = savedInAmbientDeclaration; + }; + GrammarCheckerWalker.prototype.visitFunctionExpression = function (node) { + if (this.checkForDisallowedEvalOrArguments(node, node.identifier)) { + return; + } + _super.prototype.visitFunctionExpression.call(this, node); + }; + GrammarCheckerWalker.prototype.visitVariableStatement = function (node) { + if (this.checkForDisallowedDeclareModifier(node.modifiers) || this.checkForDisallowedModifiers(node, node.modifiers) || this.checkForRequiredDeclareModifier(node, node.variableDeclaration.varKeyword, node.modifiers) || this.checkModuleElementModifiers(node.modifiers)) { + return; + } + var savedInAmbientDeclaration = this.inAmbientDeclaration; + this.inAmbientDeclaration = this.inAmbientDeclaration || this.syntaxTree.isDeclaration() || TypeScript.SyntaxUtilities.containsToken(node.modifiers, 63 /* DeclareKeyword */); + _super.prototype.visitVariableStatement.call(this, node); + this.inAmbientDeclaration = savedInAmbientDeclaration; + }; + GrammarCheckerWalker.prototype.checkListSeparators = function (parent, list, kind) { + for (var i = 0, n = TypeScript.childCount(list); i < n; i++) { + var child = TypeScript.childAt(list, i); + if (i % 2 === 1 && child.kind() !== kind) { + this.pushDiagnostic(child, TypeScript.DiagnosticCode._0_expected, [TypeScript.SyntaxFacts.getText(kind)]); + } + } + return false; + }; + GrammarCheckerWalker.prototype.visitObjectType = function (node) { + if (this.checkListSeparators(node, node.typeMembers, 78 /* SemicolonToken */)) { + return; + } + var savedInAmbientDeclaration = this.inAmbientDeclaration; + this.inAmbientDeclaration = true; + _super.prototype.visitObjectType.call(this, node); + this.inAmbientDeclaration = savedInAmbientDeclaration; + }; + GrammarCheckerWalker.prototype.visitArrayType = function (node) { + var savedInAmbientDeclaration = this.inAmbientDeclaration; + this.inAmbientDeclaration = true; + _super.prototype.visitArrayType.call(this, node); + this.inAmbientDeclaration = savedInAmbientDeclaration; + }; + GrammarCheckerWalker.prototype.visitFunctionType = function (node) { + var savedInAmbientDeclaration = this.inAmbientDeclaration; + this.inAmbientDeclaration = true; + _super.prototype.visitFunctionType.call(this, node); + this.inAmbientDeclaration = savedInAmbientDeclaration; + }; + GrammarCheckerWalker.prototype.visitConstructorType = function (node) { + var savedInAmbientDeclaration = this.inAmbientDeclaration; + this.inAmbientDeclaration = true; + _super.prototype.visitConstructorType.call(this, node); + this.inAmbientDeclaration = savedInAmbientDeclaration; + }; + GrammarCheckerWalker.prototype.visitVariableDeclarator = function (node) { + if (this.checkVariableDeclaratorInitializer(node) || this.checkVariableDeclaratorIdentifier(node)) { + return; + } + _super.prototype.visitVariableDeclarator.call(this, node); + }; + GrammarCheckerWalker.prototype.checkVariableDeclaratorIdentifier = function (node) { + if (node.parent.kind() !== 136 /* MemberVariableDeclaration */) { + if (this.checkForDisallowedEvalOrArguments(node, node.propertyName)) { + return true; + } + } + return false; + }; + GrammarCheckerWalker.prototype.checkVariableDeclaratorInitializer = function (node) { + if (this.inAmbientDeclaration && node.equalsValueClause) { + this.pushDiagnostic(TypeScript.firstToken(node.equalsValueClause.value), TypeScript.DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.visitConstructorDeclaration = function (node) { + if (this.checkClassElementModifiers(node.modifiers) || this.checkConstructorModifiers(node.modifiers) || this.checkConstructorTypeParameterList(node) || this.checkConstructorTypeAnnotation(node)) { + return; + } + _super.prototype.visitConstructorDeclaration.call(this, node); + }; + GrammarCheckerWalker.prototype.checkConstructorModifiers = function (modifiers) { + for (var i = 0, n = modifiers.length; i < n; i++) { + var child = modifiers[i]; + if (child.kind() !== 57 /* PublicKeyword */) { + this.pushDiagnostic(child, TypeScript.DiagnosticCode._0_modifier_cannot_appear_on_a_constructor_declaration, [TypeScript.SyntaxFacts.getText(child.kind())]); + return true; + } + } + return false; + }; + GrammarCheckerWalker.prototype.checkConstructorTypeParameterList = function (node) { + if (node.callSignature.typeParameterList) { + this.pushDiagnostic(node.callSignature.typeParameterList, TypeScript.DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.checkConstructorTypeAnnotation = function (node) { + if (node.callSignature.typeAnnotation) { + this.pushDiagnostic(node.callSignature.typeAnnotation, TypeScript.DiagnosticCode.Type_annotation_cannot_appear_on_a_constructor_declaration); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.visitBinaryExpression = function (node) { + if (this.checkIllegalAssignment(node)) { + return; + } + _super.prototype.visitBinaryExpression.call(this, node); + }; + GrammarCheckerWalker.prototype.visitPrefixUnaryExpression = function (node) { + if (TypeScript.parsedInStrictMode(node) && this.isPreIncrementOrDecrementExpression(node) && this.isEvalOrArguments(node.operand)) { + this.pushDiagnostic(node.operatorToken, TypeScript.DiagnosticCode.Invalid_use_of_0_in_strict_mode, [this.getEvalOrArguments(node.operand)]); + } + _super.prototype.visitPrefixUnaryExpression.call(this, node); + }; + GrammarCheckerWalker.prototype.visitPostfixUnaryExpression = function (node) { + if (TypeScript.parsedInStrictMode(node) && this.isEvalOrArguments(node.operand)) { + this.pushDiagnostic(node.operatorToken, TypeScript.DiagnosticCode.Invalid_use_of_0_in_strict_mode, [this.getEvalOrArguments(node.operand)]); + } + _super.prototype.visitPostfixUnaryExpression.call(this, node); + }; + GrammarCheckerWalker.prototype.visitParameter = function (node) { + if (this.checkForDisallowedEvalOrArguments(node, node.identifier)) { + return; + } + _super.prototype.visitParameter.call(this, node); + }; + GrammarCheckerWalker.prototype.checkForDisallowedEvalOrArguments = function (node, token) { + if (token) { + if (TypeScript.parsedInStrictMode(node) && this.isEvalOrArguments(token)) { + this.pushDiagnostic(token, TypeScript.DiagnosticCode.Invalid_use_of_0_in_strict_mode, [this.getEvalOrArguments(token)]); + return true; + } + } + return false; + }; + GrammarCheckerWalker.prototype.isPreIncrementOrDecrementExpression = function (node) { + switch (node.kind()) { + case 169 /* PreDecrementExpression */: + case 168 /* PreIncrementExpression */: + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.visitDeleteExpression = function (node) { + if (TypeScript.parsedInStrictMode(node) && node.expression.kind() === 11 /* IdentifierName */) { + this.pushDiagnostic(TypeScript.firstToken(node), TypeScript.DiagnosticCode.delete_cannot_be_called_on_an_identifier_in_strict_mode); + return; + } + _super.prototype.visitDeleteExpression.call(this, node); + }; + GrammarCheckerWalker.prototype.checkIllegalAssignment = function (node) { + if (TypeScript.parsedInStrictMode(node) && TypeScript.SyntaxFacts.isAssignmentOperatorToken(node.operatorToken.kind()) && this.isEvalOrArguments(node.left)) { + this.pushDiagnostic(node.operatorToken, TypeScript.DiagnosticCode.Invalid_use_of_0_in_strict_mode, [this.getEvalOrArguments(node.left)]); + return true; + } + return false; + }; + GrammarCheckerWalker.prototype.getEvalOrArguments = function (expr) { + if (expr.kind() === 11 /* IdentifierName */) { + var text = TypeScript.tokenValueText(expr); + if (text === "eval" || text === "arguments") { + return text; + } + } + return null; + }; + GrammarCheckerWalker.prototype.isEvalOrArguments = function (expr) { + return this.getEvalOrArguments(expr) !== null; + }; + GrammarCheckerWalker.prototype.visitConstraint = function (node) { + if (this.checkConstraintType(node)) { + return; + } + _super.prototype.visitConstraint.call(this, node); + }; + GrammarCheckerWalker.prototype.checkConstraintType = function (node) { + if (!TypeScript.SyntaxFacts.isType(node.typeOrExpression.kind())) { + this.pushDiagnostic(node.typeOrExpression, TypeScript.DiagnosticCode.Type_expected); + return true; + } + return false; + }; + return GrammarCheckerWalker; + })(TypeScript.SyntaxWalker); + function firstSyntaxTreeToken(syntaxTree) { + var scanner = TypeScript.Scanner.createScanner(syntaxTree.languageVersion(), syntaxTree.text, function () { + }); + return scanner.scan(false); + } + function externalModuleIndicatorSpan(syntaxTree) { + var firstToken = firstSyntaxTreeToken(syntaxTree); + return externalModuleIndicatorSpanWorker(syntaxTree, firstToken); + } + TypeScript.externalModuleIndicatorSpan = externalModuleIndicatorSpan; + function externalModuleIndicatorSpanWorker(syntaxTree, firstToken) { + var leadingTrivia = firstToken.leadingTrivia(syntaxTree.text); + return implicitImportSpan(leadingTrivia) || topLevelImportOrExportSpan(syntaxTree.sourceUnit()); + } + TypeScript.externalModuleIndicatorSpanWorker = externalModuleIndicatorSpanWorker; + function implicitImportSpan(sourceUnitLeadingTrivia) { + for (var i = 0, n = sourceUnitLeadingTrivia.count(); i < n; i++) { + var trivia = sourceUnitLeadingTrivia.syntaxTriviaAt(i); + if (trivia.isComment()) { + var span = implicitImportSpanWorker(trivia); + if (span) { + return span; + } + } + } + return null; + } + function implicitImportSpanWorker(trivia) { + var implicitImportRegEx = /^(\/\/\/\s*/gim; + var match = implicitImportRegEx.exec(trivia.fullText()); + if (match) { + return new TypeScript.TextSpan(trivia.fullStart(), trivia.fullWidth()); + } + return null; + } + function topLevelImportOrExportSpan(node) { + for (var i = 0, n = node.moduleElements.length; i < n; i++) { + var moduleElement = node.moduleElements[i]; + var _firstToken = TypeScript.firstToken(moduleElement); + if (_firstToken !== null && _firstToken.kind() === 47 /* ExportKeyword */) { + return new TypeScript.TextSpan(TypeScript.start(_firstToken), TypeScript.width(_firstToken)); + } + if (moduleElement.kind() === 133 /* ImportDeclaration */) { + var importDecl = moduleElement; + if (importDecl.moduleReference.kind() === 245 /* ExternalModuleReference */) { + var literal = importDecl.moduleReference.stringLiteral; + return new TypeScript.TextSpan(TypeScript.start(literal), TypeScript.width(literal)); + } + } + } + return null; + } +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var Unicode = (function () { + function Unicode() { + } + Unicode.lookupInUnicodeMap = function (code, map) { + if (code < map[0]) { + return false; + } + var lo = 0; + var hi = map.length; + var mid; + while (lo + 1 < hi) { + mid = lo + (hi - lo) / 2; + mid -= mid % 2; + if (map[mid] <= code && code <= map[mid + 1]) { + return true; + } + if (code < map[mid]) { + hi = mid; + } + else { + lo = mid + 2; + } + } + return false; + }; + Unicode.isIdentifierStart = function (code, languageVersion) { + if (languageVersion === 0 /* ES3 */) { + return Unicode.lookupInUnicodeMap(code, Unicode.unicodeES3IdentifierStart); + } + else if (languageVersion === 1 /* ES5 */) { + return Unicode.lookupInUnicodeMap(code, Unicode.unicodeES5IdentifierStart); + } + else { + throw TypeScript.Errors.argumentOutOfRange("languageVersion"); + } + }; + Unicode.isIdentifierPart = function (code, languageVersion) { + if (languageVersion === 0 /* ES3 */) { + return Unicode.lookupInUnicodeMap(code, Unicode.unicodeES3IdentifierPart); + } + else if (languageVersion === 1 /* ES5 */) { + return Unicode.lookupInUnicodeMap(code, Unicode.unicodeES5IdentifierPart); + } + else { + throw TypeScript.Errors.argumentOutOfRange("languageVersion"); + } + }; + Unicode.unicodeES3IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1610, 1649, 1747, 1749, 1749, 1765, 1766, 1786, 1788, 1808, 1808, 1810, 1836, 1920, 1957, 2309, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2784, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3294, 3294, 3296, 3297, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3424, 3425, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3805, 3840, 3840, 3904, 3911, 3913, 3946, 3976, 3979, 4096, 4129, 4131, 4135, 4137, 4138, 4176, 4181, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6067, 6176, 6263, 6272, 6312, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8319, 8319, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12346, 12353, 12436, 12445, 12446, 12449, 12538, 12540, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65138, 65140, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; + Unicode.unicodeES3IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 768, 846, 864, 866, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1155, 1158, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1441, 1443, 1465, 1467, 1469, 1471, 1471, 1473, 1474, 1476, 1476, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1621, 1632, 1641, 1648, 1747, 1749, 1756, 1759, 1768, 1770, 1773, 1776, 1788, 1808, 1836, 1840, 1866, 1920, 1968, 2305, 2307, 2309, 2361, 2364, 2381, 2384, 2388, 2392, 2403, 2406, 2415, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2492, 2494, 2500, 2503, 2504, 2507, 2509, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2562, 2562, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2649, 2652, 2654, 2654, 2662, 2676, 2689, 2691, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2784, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2876, 2883, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2913, 2918, 2927, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3031, 3031, 3047, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3134, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3168, 3169, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3262, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3297, 3302, 3311, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3390, 3395, 3398, 3400, 3402, 3405, 3415, 3415, 3424, 3425, 3430, 3439, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3805, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3946, 3953, 3972, 3974, 3979, 3984, 3991, 3993, 4028, 4038, 4038, 4096, 4129, 4131, 4135, 4137, 4138, 4140, 4146, 4150, 4153, 4160, 4169, 4176, 4185, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 4969, 4977, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6099, 6112, 6121, 6160, 6169, 6176, 6263, 6272, 6313, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8319, 8319, 8400, 8412, 8417, 8417, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12346, 12353, 12436, 12441, 12442, 12445, 12446, 12449, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65056, 65059, 65075, 65076, 65101, 65103, 65136, 65138, 65140, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65381, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; + Unicode.unicodeES5IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; + Unicode.unicodeES5IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112, 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423, 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272, 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072, 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, ]; + return Unicode; + })(); + TypeScript.Unicode = Unicode; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (IncrementalParser) { + function createParserSource(oldSyntaxTree, textChangeRange, text) { + var fileName = oldSyntaxTree.fileName(); + var languageVersion = oldSyntaxTree.languageVersion(); + var _scannerParserSource; + var _changeRange; + var _changeRangeNewSpan; + var _changeDelta = 0; + var _oldSourceUnitCursor = getSyntaxCursor(); + var oldSourceUnit = oldSyntaxTree.sourceUnit(); + var _outstandingRewindPointCount = 0; + if (oldSourceUnit.moduleElements.length > 0) { + _oldSourceUnitCursor.pushElement(TypeScript.childAt(oldSourceUnit.moduleElements, 0), 0); + } + _changeRange = extendToAffectedRange(textChangeRange, oldSourceUnit); + _changeRangeNewSpan = _changeRange.newSpan(); + if (TypeScript.Debug.shouldAssert(2 /* Aggressive */)) { + TypeScript.Debug.assert((TypeScript.fullWidth(oldSourceUnit) - _changeRange.span().length() + _changeRange.newLength()) === text.length()); + } + _scannerParserSource = TypeScript.Scanner.createParserSource(oldSyntaxTree.fileName(), text, oldSyntaxTree.languageVersion()); + function release() { + _scannerParserSource.release(); + _scannerParserSource = null; + _oldSourceUnitCursor = null; + _outstandingRewindPointCount = 0; + } + function extendToAffectedRange(changeRange, sourceUnit) { + var maxLookahead = 1; + var start = changeRange.span().start(); + for (var i = 0; start > 0 && i <= maxLookahead; i++) { + var token = TypeScript.findToken(sourceUnit, start); + var position = token.fullStart(); + start = Math.max(0, position - 1); + } + var finalSpan = TypeScript.TextSpan.fromBounds(start, changeRange.span().end()); + var finalLength = changeRange.newLength() + (changeRange.span().start() - start); + return new TypeScript.TextChangeRange(finalSpan, finalLength); + } + function absolutePosition() { + return _scannerParserSource.absolutePosition(); + } + function tokenDiagnostics() { + return _scannerParserSource.tokenDiagnostics(); + } + function getRewindPoint() { + var rewindPoint = _scannerParserSource.getRewindPoint(); + var oldSourceUnitCursorClone = cloneSyntaxCursor(_oldSourceUnitCursor); + rewindPoint.changeDelta = _changeDelta; + rewindPoint.changeRange = _changeRange; + rewindPoint.oldSourceUnitCursor = _oldSourceUnitCursor; + _oldSourceUnitCursor = oldSourceUnitCursorClone; + _outstandingRewindPointCount++; + return rewindPoint; + } + function rewind(rewindPoint) { + _changeRange = rewindPoint.changeRange; + _changeDelta = rewindPoint.changeDelta; + returnSyntaxCursor(_oldSourceUnitCursor); + _oldSourceUnitCursor = rewindPoint.oldSourceUnitCursor; + rewindPoint.oldSourceUnitCursor = null; + _scannerParserSource.rewind(rewindPoint); + } + function releaseRewindPoint(rewindPoint) { + if (rewindPoint.oldSourceUnitCursor !== null) { + returnSyntaxCursor(rewindPoint.oldSourceUnitCursor); + } + _scannerParserSource.releaseRewindPoint(rewindPoint); + _outstandingRewindPointCount--; + TypeScript.Debug.assert(_outstandingRewindPointCount >= 0); + } + function isPinned() { + return _outstandingRewindPointCount > 0; + } + function canReadFromOldSourceUnit() { + if (isPinned()) { + return false; + } + if (_changeRange !== null && _changeRangeNewSpan.intersectsWithPosition(absolutePosition())) { + return false; + } + syncCursorToNewTextIfBehind(); + return _changeDelta === 0 && !_oldSourceUnitCursor.isFinished(); + } + function updateTokens(nodeOrToken) { + var position = absolutePosition(); + var tokenWasMoved = isPastChangeRange() && TypeScript.fullStart(nodeOrToken) !== position; + if (tokenWasMoved) { + setTokenFullStartWalker.position = position; + TypeScript.visitNodeOrToken(setTokenFullStartWalker, nodeOrToken); + } + } + function currentNode() { + if (canReadFromOldSourceUnit()) { + var node = tryGetNodeFromOldSourceUnit(); + if (node !== null) { + updateTokens(node); + return node; + } + } + return null; + } + function currentToken() { + if (canReadFromOldSourceUnit()) { + var token = tryGetTokenFromOldSourceUnit(); + if (token !== null) { + updateTokens(token); + return token; + } + } + return _scannerParserSource.currentToken(); + } + function currentContextualToken() { + return _scannerParserSource.currentContextualToken(); + } + function syncCursorToNewTextIfBehind() { + while (true) { + if (_oldSourceUnitCursor.isFinished()) { + break; + } + if (_changeDelta >= 0) { + break; + } + var currentNodeOrToken = _oldSourceUnitCursor.currentNodeOrToken(); + if (TypeScript.isNode(currentNodeOrToken) && (TypeScript.fullWidth(currentNodeOrToken) > Math.abs(_changeDelta))) { + _oldSourceUnitCursor.moveToFirstChild(); + } + else { + _oldSourceUnitCursor.moveToNextSibling(); + _changeDelta += TypeScript.fullWidth(currentNodeOrToken); + } + } + } + function intersectsWithChangeRangeSpanInOriginalText(start, length) { + return !isPastChangeRange() && _changeRange.span().intersectsWith(start, length); + } + function tryGetNodeFromOldSourceUnit() { + while (true) { + var node = _oldSourceUnitCursor.currentNode(); + if (node === null) { + return null; + } + if (!intersectsWithChangeRangeSpanInOriginalText(absolutePosition(), TypeScript.fullWidth(node))) { + var isIncrementallyUnusuable = TypeScript.isIncrementallyUnusable(node); + if (!isIncrementallyUnusuable) { + return node; + } + } + _oldSourceUnitCursor.moveToFirstChild(); + } + } + function canReuseTokenFromOldSourceUnit(position, token) { + if (token !== null) { + if (!intersectsWithChangeRangeSpanInOriginalText(position, token.fullWidth())) { + if (!token.isIncrementallyUnusable() && !TypeScript.Scanner.isContextualToken(token)) { + return true; + } + } + } + return false; + } + function tryGetTokenFromOldSourceUnit() { + var token = _oldSourceUnitCursor.currentToken(); + return canReuseTokenFromOldSourceUnit(absolutePosition(), token) ? token : null; + } + function peekToken(n) { + if (canReadFromOldSourceUnit()) { + var token = tryPeekTokenFromOldSourceUnit(n); + if (token !== null) { + return token; + } + } + return _scannerParserSource.peekToken(n); + } + function tryPeekTokenFromOldSourceUnit(n) { + var cursorClone = cloneSyntaxCursor(_oldSourceUnitCursor); + var token = tryPeekTokenFromOldSourceUnitWorker(n); + returnSyntaxCursor(_oldSourceUnitCursor); + _oldSourceUnitCursor = cursorClone; + return token; + } + function tryPeekTokenFromOldSourceUnitWorker(n) { + var currentPosition = absolutePosition(); + _oldSourceUnitCursor.moveToFirstToken(); + for (var i = 0; i < n; i++) { + var interimToken = _oldSourceUnitCursor.currentToken(); + if (!canReuseTokenFromOldSourceUnit(currentPosition, interimToken)) { + return null; + } + currentPosition += interimToken.fullWidth(); + _oldSourceUnitCursor.moveToNextSibling(); + } + var token = _oldSourceUnitCursor.currentToken(); + return canReuseTokenFromOldSourceUnit(currentPosition, token) ? token : null; + } + function consumeNode(node) { + _oldSourceUnitCursor.moveToNextSibling(); + var _absolutePosition = absolutePosition() + TypeScript.fullWidth(node); + _scannerParserSource.resetToPosition(_absolutePosition); + } + function consumeToken(currentToken) { + if (_oldSourceUnitCursor.currentToken() === currentToken) { + _oldSourceUnitCursor.moveToNextSibling(); + var _absolutePosition = absolutePosition() + currentToken.fullWidth(); + _scannerParserSource.resetToPosition(_absolutePosition); + } + else { + _changeDelta -= currentToken.fullWidth(); + _scannerParserSource.consumeToken(currentToken); + if (!isPastChangeRange()) { + if (absolutePosition() >= _changeRangeNewSpan.end()) { + _changeDelta += _changeRange.newLength() - _changeRange.span().length(); + _changeRange = null; + } + } + } + } + function isPastChangeRange() { + return _changeRange === null; + } + return { + text: text, + fileName: fileName, + languageVersion: languageVersion, + currentNode: currentNode, + currentToken: currentToken, + currentContextualToken: currentContextualToken, + peekToken: peekToken, + consumeNode: consumeNode, + consumeToken: consumeToken, + getRewindPoint: getRewindPoint, + rewind: rewind, + releaseRewindPoint: releaseRewindPoint, + tokenDiagnostics: tokenDiagnostics, + release: release + }; + } + function createSyntaxCursorPiece(element, indexInParent) { + return { element: element, indexInParent: indexInParent }; + } + var syntaxCursorPool = []; + var syntaxCursorPoolCount = 0; + function returnSyntaxCursor(cursor) { + cursor.clean(); + syntaxCursorPool[syntaxCursorPoolCount] = cursor; + syntaxCursorPoolCount++; + } + function getSyntaxCursor() { + var cursor = syntaxCursorPoolCount > 0 ? syntaxCursorPool[syntaxCursorPoolCount - 1] : createSyntaxCursor(); + if (syntaxCursorPoolCount > 0) { + syntaxCursorPoolCount--; + syntaxCursorPool[syntaxCursorPoolCount] = null; + } + return cursor; + } + function cloneSyntaxCursor(cursor) { + var newCursor = getSyntaxCursor(); + newCursor.deepCopyFrom(cursor); + return newCursor; + } + function createSyntaxCursor() { + var pieces = []; + var currentPieceIndex = -1; + function clean() { + for (var i = 0, n = pieces.length; i < n; i++) { + var piece = pieces[i]; + if (piece.element === null) { + break; + } + piece.element = null; + piece.indexInParent = -1; + } + currentPieceIndex = -1; + } + function deepCopyFrom(other) { + for (var i = 0, n = other.pieces.length; i < n; i++) { + var piece = other.pieces[i]; + if (piece.element === null) { + break; + } + pushElement(piece.element, piece.indexInParent); + } + } + function isFinished() { + return currentPieceIndex < 0; + } + function currentNodeOrToken() { + if (isFinished()) { + return null; + } + var result = pieces[currentPieceIndex].element; + return result; + } + function currentNode() { + var element = currentNodeOrToken(); + return TypeScript.isNode(element) ? element : null; + } + function moveToFirstChild() { + var nodeOrToken = currentNodeOrToken(); + if (nodeOrToken === null) { + return; + } + if (TypeScript.isToken(nodeOrToken)) { + return; + } + for (var i = 0, n = TypeScript.childCount(nodeOrToken); i < n; i++) { + var child = TypeScript.childAt(nodeOrToken, i); + if (child !== null && !TypeScript.isShared(child)) { + pushElement(child, i); + moveToFirstChildIfList(); + return; + } + } + moveToNextSibling(); + } + function moveToNextSibling() { + while (!isFinished()) { + var currentPiece = pieces[currentPieceIndex]; + var parent = currentPiece.element.parent; + for (var i = currentPiece.indexInParent + 1, n = TypeScript.childCount(parent); i < n; i++) { + var sibling = TypeScript.childAt(parent, i); + if (sibling !== null && !TypeScript.isShared(sibling)) { + currentPiece.element = sibling; + currentPiece.indexInParent = i; + moveToFirstChildIfList(); + return; + } + } + currentPiece.element = null; + currentPiece.indexInParent = -1; + currentPieceIndex--; + } + } + function moveToFirstChildIfList() { + var element = pieces[currentPieceIndex].element; + if (TypeScript.isList(element) || TypeScript.isSeparatedList(element)) { + pushElement(TypeScript.childAt(element, 0), 0); + } + } + function pushElement(element, indexInParent) { + currentPieceIndex++; + if (currentPieceIndex === pieces.length) { + pieces.push(createSyntaxCursorPiece(element, indexInParent)); + } + else { + var piece = pieces[currentPieceIndex]; + piece.element = element; + piece.indexInParent = indexInParent; + } + } + function moveToFirstToken() { + while (!isFinished()) { + var element = pieces[currentPieceIndex].element; + if (TypeScript.isNode(element)) { + moveToFirstChild(); + continue; + } + return; + } + } + function currentToken() { + moveToFirstToken(); + var element = currentNodeOrToken(); + return element === null ? null : element; + } + return { + pieces: pieces, + clean: clean, + isFinished: isFinished, + moveToFirstChild: moveToFirstChild, + moveToFirstToken: moveToFirstToken, + moveToNextSibling: moveToNextSibling, + currentNodeOrToken: currentNodeOrToken, + currentNode: currentNode, + currentToken: currentToken, + pushElement: pushElement, + deepCopyFrom: deepCopyFrom + }; + } + var SetTokenFullStartWalker = (function (_super) { + __extends(SetTokenFullStartWalker, _super); + function SetTokenFullStartWalker() { + _super.apply(this, arguments); + } + SetTokenFullStartWalker.prototype.visitToken = function (token) { + var position = this.position; + token.setFullStart(position); + this.position = position + token.fullWidth(); + }; + return SetTokenFullStartWalker; + })(TypeScript.SyntaxWalker); + var setTokenFullStartWalker = new SetTokenFullStartWalker(); + function parse(oldSyntaxTree, textChangeRange, newText) { + TypeScript.Debug.assert(oldSyntaxTree.isConcrete(), "Can only incrementally parse a concrete syntax tree."); + if (textChangeRange.isUnchanged()) { + return oldSyntaxTree; + } + return TypeScript.Parser.parseSource(createParserSource(oldSyntaxTree, textChangeRange, newText), oldSyntaxTree.isDeclaration()); + } + IncrementalParser.parse = parse; + })(TypeScript.IncrementalParser || (TypeScript.IncrementalParser = {})); + var IncrementalParser = TypeScript.IncrementalParser; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + var OutliningElementsCollector = (function (_super) { + __extends(OutliningElementsCollector, _super); + function OutliningElementsCollector() { + _super.call(this, OutliningElementsCollector.MaximumDepth); + this.inObjectLiteralExpression = false; + this.elements = []; + } + OutliningElementsCollector.prototype.visitClassDeclaration = function (node) { + this.addOutlineRange(node, node.openBraceToken, node.closeBraceToken); + _super.prototype.visitClassDeclaration.call(this, node); + }; + OutliningElementsCollector.prototype.visitInterfaceDeclaration = function (node) { + this.addOutlineRange(node, node.body.openBraceToken, node.body.closeBraceToken); + _super.prototype.visitInterfaceDeclaration.call(this, node); + }; + OutliningElementsCollector.prototype.visitModuleDeclaration = function (node) { + this.addOutlineRange(node, node.openBraceToken, node.closeBraceToken); + _super.prototype.visitModuleDeclaration.call(this, node); + }; + OutliningElementsCollector.prototype.visitEnumDeclaration = function (node) { + this.addOutlineRange(node, node.openBraceToken, node.closeBraceToken); + _super.prototype.visitEnumDeclaration.call(this, node); + }; + OutliningElementsCollector.prototype.visitFunctionDeclaration = function (node) { + this.addOutlineRange(node, node.block, node.block); + _super.prototype.visitFunctionDeclaration.call(this, node); + }; + OutliningElementsCollector.prototype.visitFunctionExpression = function (node) { + this.addOutlineRange(node, node.block, node.block); + _super.prototype.visitFunctionExpression.call(this, node); + }; + OutliningElementsCollector.prototype.visitConstructorDeclaration = function (node) { + this.addOutlineRange(node, node.block, node.block); + _super.prototype.visitConstructorDeclaration.call(this, node); + }; + OutliningElementsCollector.prototype.visitMemberFunctionDeclaration = function (node) { + this.addOutlineRange(node, node.block, node.block); + _super.prototype.visitMemberFunctionDeclaration.call(this, node); + }; + OutliningElementsCollector.prototype.visitGetAccessor = function (node) { + if (!this.inObjectLiteralExpression) { + this.addOutlineRange(node, node.block, node.block); + } + _super.prototype.visitGetAccessor.call(this, node); + }; + OutliningElementsCollector.prototype.visitSetAccessor = function (node) { + if (!this.inObjectLiteralExpression) { + this.addOutlineRange(node, node.block, node.block); + } + _super.prototype.visitSetAccessor.call(this, node); + }; + OutliningElementsCollector.prototype.visitObjectLiteralExpression = function (node) { + var savedInObjectLiteralExpression = this.inObjectLiteralExpression; + this.inObjectLiteralExpression = true; + _super.prototype.visitObjectLiteralExpression.call(this, node); + this.inObjectLiteralExpression = savedInObjectLiteralExpression; + }; + OutliningElementsCollector.prototype.addOutlineRange = function (node, startElement, endElement) { + if (startElement && endElement && !TypeScript.isShared(startElement) && !TypeScript.isShared(endElement)) { + var start = TypeScript.start(startElement); + var end = TypeScript.end(endElement); + this.elements.push(TypeScript.TextSpan.fromBounds(start, end)); + } + }; + OutliningElementsCollector.collectElements = function (node) { + var collector = new OutliningElementsCollector(); + TypeScript.visitNodeOrToken(collector, node); + return collector.elements; + }; + OutliningElementsCollector.MaximumDepth = 10; + return OutliningElementsCollector; + })(TypeScript.DepthLimitedWalker); + Services.OutliningElementsCollector = OutliningElementsCollector; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + var GetScriptLexicalStructureWalker = (function (_super) { + __extends(GetScriptLexicalStructureWalker, _super); + function GetScriptLexicalStructureWalker(fileName) { + _super.call(this); + this.fileName = fileName; + this.nameStack = []; + this.kindStack = []; + this.parentScopes = []; + this.currentScope = this.createScope(); + } + GetScriptLexicalStructureWalker.prototype.createScope = function () { + return { + items: TypeScript.createIntrinsicsObject(), + childScopes: TypeScript.createIntrinsicsObject(), + childScopeNames: [], + itemNames: [] + }; + }; + GetScriptLexicalStructureWalker.prototype.pushNewContainerScope = function (containerName, kind) { + TypeScript.Debug.assert(containerName, "No scope name provided"); + var key = kind + "+" + containerName; + this.nameStack.push(containerName); + this.kindStack.push(kind); + var parentScope = this.currentScope; + this.parentScopes.push(parentScope); + var scope = ts.lookUp(parentScope.childScopes, key); + if (!scope) { + scope = this.createScope(); + parentScope.childScopes[key] = scope; + parentScope.childScopeNames.push(key); + } + this.currentScope = scope; + return parentScope; + }; + GetScriptLexicalStructureWalker.prototype.popScope = function () { + TypeScript.Debug.assert(this.parentScopes.length > 0, "No parent scopes to return to"); + this.currentScope = this.parentScopes.pop(); + this.kindStack.pop(); + this.nameStack.pop(); + }; + GetScriptLexicalStructureWalker.prototype.collectItems = function (items, scope) { + var _this = this; + if (scope === void 0) { scope = this.currentScope; } + scope.itemNames.forEach(function (item) { + items.push(scope.items[item]); + }); + scope.childScopeNames.forEach(function (childScope) { + _this.collectItems(items, scope.childScopes[childScope]); + }); + }; + GetScriptLexicalStructureWalker.getListsOfAllScriptLexicalStructure = function (items, fileName, unit) { + var visitor = new GetScriptLexicalStructureWalker(fileName); + TypeScript.visitNodeOrToken(visitor, unit); + visitor.collectItems(items); + }; + GetScriptLexicalStructureWalker.prototype.createItem = function (node, modifiers, kind, name) { + var key = kind + "+" + name; + if (ts.lookUp(this.currentScope.items, key) !== undefined) { + this.addAdditionalSpan(node, key); + return; + } + var item = { + name: name, + kind: kind, + matchKind: ts.MatchKind.exact, + fileName: this.fileName, + kindModifiers: this.getKindModifiers(modifiers), + minChar: TypeScript.start(node), + limChar: TypeScript.end(node), + containerName: this.nameStack.join("."), + containerKind: this.kindStack.length === 0 ? "" : TypeScript.ArrayUtilities.last(this.kindStack) + }; + this.currentScope.items[key] = item; + this.currentScope.itemNames.push(key); + }; + GetScriptLexicalStructureWalker.prototype.addAdditionalSpan = function (node, key) { + var item = ts.lookUp(this.currentScope.items, key); + TypeScript.Debug.assert(item !== undefined); + var start = TypeScript.start(node); + var span = { + minChar: start, + limChar: start + TypeScript.width(node) + }; + if (item.additionalSpans) { + item.additionalSpans.push(span); + } + else { + item.additionalSpans = [span]; + } + }; + GetScriptLexicalStructureWalker.prototype.getKindModifiers = function (modifiers) { + var result = []; + for (var i = 0, n = modifiers.length; i < n; i++) { + result.push(modifiers[i].text()); + } + return result.length > 0 ? result.join(',') : ts.ScriptElementKindModifier.none; + }; + GetScriptLexicalStructureWalker.prototype.visitModuleDeclaration = function (node) { + var names = this.getModuleNames(node); + this.visitModuleDeclarationWorker(node, names, 0); + }; + GetScriptLexicalStructureWalker.prototype.visitModuleDeclarationWorker = function (node, names, nameIndex) { + if (nameIndex === names.length) { + _super.prototype.visitModuleDeclaration.call(this, node); + } + else { + var name = names[nameIndex]; + var kind = ts.ScriptElementKind.moduleElement; + this.createItem(node, node.modifiers, kind, name); + this.pushNewContainerScope(name, kind); + this.visitModuleDeclarationWorker(node, names, nameIndex + 1); + this.popScope(); + } + }; + GetScriptLexicalStructureWalker.prototype.getModuleNames = function (node) { + var result = []; + if (node.stringLiteral) { + result.push(node.stringLiteral.text()); + } + else { + this.getModuleNamesHelper(node.name, result); + } + return result; + }; + GetScriptLexicalStructureWalker.prototype.getModuleNamesHelper = function (name, result) { + if (name.kind() === 121 /* QualifiedName */) { + var qualifiedName = name; + this.getModuleNamesHelper(qualifiedName.left, result); + result.push(qualifiedName.right.text()); + } + else { + result.push(name.text()); + } + }; + GetScriptLexicalStructureWalker.prototype.visitClassDeclaration = function (node) { + var name = node.identifier.text(); + var kind = ts.ScriptElementKind.classElement; + this.createItem(node, node.modifiers, kind, name); + this.pushNewContainerScope(name, kind); + _super.prototype.visitClassDeclaration.call(this, node); + this.popScope(); + }; + GetScriptLexicalStructureWalker.prototype.visitInterfaceDeclaration = function (node) { + var name = node.identifier.text(); + var kind = ts.ScriptElementKind.interfaceElement; + this.createItem(node, node.modifiers, kind, name); + this.pushNewContainerScope(name, kind); + _super.prototype.visitInterfaceDeclaration.call(this, node); + this.popScope(); + }; + GetScriptLexicalStructureWalker.prototype.visitObjectType = function (node) { + if (node.parent.kind() === 128 /* InterfaceDeclaration */) { + _super.prototype.visitObjectType.call(this, node); + } + }; + GetScriptLexicalStructureWalker.prototype.visitEnumDeclaration = function (node) { + var name = node.identifier.text(); + var kind = ts.ScriptElementKind.enumElement; + this.createItem(node, node.modifiers, kind, name); + this.pushNewContainerScope(name, kind); + _super.prototype.visitEnumDeclaration.call(this, node); + this.popScope(); + }; + GetScriptLexicalStructureWalker.prototype.visitConstructorDeclaration = function (node) { + this.createItem(node, TypeScript.Syntax.emptyList(), ts.ScriptElementKind.constructorImplementationElement, "constructor"); + var parameters = node.callSignature.parameterList.parameters; + if (parameters) { + for (var i = 0, n = parameters.length; i < n; i++) { + var parameter = parameters[i]; + TypeScript.Debug.assert(parameter.kind() === 242 /* Parameter */); + if (TypeScript.SyntaxUtilities.containsToken(parameter.modifiers, 57 /* PublicKeyword */) || TypeScript.SyntaxUtilities.containsToken(parameter.modifiers, 55 /* PrivateKeyword */)) { + this.createItem(node, parameter.modifiers, ts.ScriptElementKind.memberVariableElement, parameter.identifier.text()); + } + } + } + }; + GetScriptLexicalStructureWalker.prototype.visitMemberFunctionDeclaration = function (node) { + this.createItem(node, node.modifiers, ts.ScriptElementKind.memberFunctionElement, node.propertyName.text()); + }; + GetScriptLexicalStructureWalker.prototype.visitGetAccessor = function (node) { + this.createItem(node, node.modifiers, ts.ScriptElementKind.memberGetAccessorElement, node.propertyName.text()); + }; + GetScriptLexicalStructureWalker.prototype.visitSetAccessor = function (node) { + this.createItem(node, node.modifiers, ts.ScriptElementKind.memberSetAccessorElement, node.propertyName.text()); + }; + GetScriptLexicalStructureWalker.prototype.visitVariableDeclarator = function (node) { + var modifiers = node.parent.kind() === 136 /* MemberVariableDeclaration */ ? node.parent.modifiers : TypeScript.Syntax.emptyList(); + var kind = node.parent.kind() === 136 /* MemberVariableDeclaration */ ? ts.ScriptElementKind.memberVariableElement : ts.ScriptElementKind.variableElement; + this.createItem(node, modifiers, kind, node.propertyName.text()); + }; + GetScriptLexicalStructureWalker.prototype.visitIndexSignature = function (node) { + this.createItem(node, TypeScript.Syntax.emptyList(), ts.ScriptElementKind.indexSignatureElement, "[]"); + }; + GetScriptLexicalStructureWalker.prototype.visitEnumElement = function (node) { + this.createItem(node, TypeScript.Syntax.emptyList(), ts.ScriptElementKind.memberVariableElement, node.propertyName.text()); + }; + GetScriptLexicalStructureWalker.prototype.visitCallSignature = function (node) { + this.createItem(node, TypeScript.Syntax.emptyList(), ts.ScriptElementKind.callSignatureElement, "()"); + }; + GetScriptLexicalStructureWalker.prototype.visitConstructSignature = function (node) { + this.createItem(node, TypeScript.Syntax.emptyList(), ts.ScriptElementKind.constructSignatureElement, "new()"); + }; + GetScriptLexicalStructureWalker.prototype.visitMethodSignature = function (node) { + this.createItem(node, TypeScript.Syntax.emptyList(), ts.ScriptElementKind.memberFunctionElement, node.propertyName.text()); + }; + GetScriptLexicalStructureWalker.prototype.visitPropertySignature = function (node) { + this.createItem(node, TypeScript.Syntax.emptyList(), ts.ScriptElementKind.memberVariableElement, node.propertyName.text()); + }; + GetScriptLexicalStructureWalker.prototype.visitFunctionDeclaration = function (node) { + if (TypeScript.width(node.identifier) > 0) { + this.createItem(node, node.modifiers, ts.ScriptElementKind.functionElement, node.identifier.text()); + } + }; + GetScriptLexicalStructureWalker.prototype.visitBlock = function (node) { + }; + GetScriptLexicalStructureWalker.prototype.visitIfStatement = function (node) { + }; + GetScriptLexicalStructureWalker.prototype.visitExpressionStatement = function (node) { + }; + GetScriptLexicalStructureWalker.prototype.visitThrowStatement = function (node) { + }; + GetScriptLexicalStructureWalker.prototype.visitReturnStatement = function (node) { + }; + GetScriptLexicalStructureWalker.prototype.visitSwitchStatement = function (node) { + }; + GetScriptLexicalStructureWalker.prototype.visitWithStatement = function (node) { + }; + GetScriptLexicalStructureWalker.prototype.visitTryStatement = function (node) { + }; + GetScriptLexicalStructureWalker.prototype.visitLabeledStatement = function (node) { + }; + return GetScriptLexicalStructureWalker; + })(TypeScript.SyntaxWalker); + Services.GetScriptLexicalStructureWalker = GetScriptLexicalStructureWalker; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + var BraceMatcher = (function () { + function BraceMatcher() { + } + BraceMatcher.getMatchSpans = function (syntaxTree, position) { + var result = []; + var currentToken = TypeScript.findToken(syntaxTree.sourceUnit(), position); + BraceMatcher.getMatchingCloseBrace(currentToken, position, result); + BraceMatcher.getMatchingOpenBrace(currentToken, position, result); + return result; + }; + BraceMatcher.getMatchingCloseBrace = function (currentToken, position, result) { + if (TypeScript.start(currentToken) === position) { + var closingBraceKind = BraceMatcher.getMatchingCloseBraceTokenKind(currentToken); + if (closingBraceKind !== null) { + var parentElement = currentToken.parent; + var currentPosition = TypeScript.fullStart(currentToken.parent); + for (var i = 0, n = TypeScript.childCount(parentElement); i < n; i++) { + var element = TypeScript.childAt(parentElement, i); + if (element !== null && TypeScript.fullWidth(element) > 0) { + if (element.kind() === closingBraceKind) { + var range1 = new TypeScript.TextSpan(position, TypeScript.width(currentToken)); + var range2 = new TypeScript.TextSpan(currentPosition + TypeScript.leadingTriviaWidth(element), TypeScript.width(element)); + result.push(range1, range2); + break; + } + currentPosition += TypeScript.fullWidth(element); + } + } + } + } + }; + BraceMatcher.getMatchingOpenBrace = function (currentToken, position, result) { + if (currentToken.fullStart() === position) { + currentToken = TypeScript.previousToken(currentToken); + } + if (currentToken !== null && TypeScript.start(currentToken) === (position - 1)) { + var openBraceKind = BraceMatcher.getMatchingOpenBraceTokenKind(currentToken); + if (openBraceKind !== null) { + var parentElement = currentToken.parent; + var currentPosition = TypeScript.fullStart(currentToken.parent) + TypeScript.fullWidth(parentElement); + for (var i = TypeScript.childCount(parentElement) - 1; i >= 0; i--) { + var element = TypeScript.childAt(parentElement, i); + if (element !== null && TypeScript.fullWidth(element) > 0) { + if (element.kind() === openBraceKind) { + var range1 = new TypeScript.TextSpan(position - 1, TypeScript.width(currentToken)); + var range2 = new TypeScript.TextSpan(currentPosition - TypeScript.lastToken(element).trailingTriviaWidth() - TypeScript.width(element), TypeScript.width(element)); + result.push(range1, range2); + break; + } + currentPosition -= TypeScript.fullWidth(element); + } + } + } + } + }; + BraceMatcher.getMatchingCloseBraceTokenKind = function (positionedElement) { + var element = positionedElement !== null && positionedElement; + switch (element.kind()) { + case 70 /* OpenBraceToken */: + return 71 /* CloseBraceToken */; + case 72 /* OpenParenToken */: + return 73 /* CloseParenToken */; + case 74 /* OpenBracketToken */: + return 75 /* CloseBracketToken */; + case 80 /* LessThanToken */: + return TypeScript.SyntaxUtilities.isAngleBracket(positionedElement) ? 81 /* GreaterThanToken */ : null; + } + return null; + }; + BraceMatcher.getMatchingOpenBraceTokenKind = function (positionedElement) { + var element = positionedElement !== null && positionedElement; + switch (element.kind()) { + case 71 /* CloseBraceToken */: + return 70 /* OpenBraceToken */; + case 73 /* CloseParenToken */: + return 72 /* OpenParenToken */; + case 75 /* CloseBracketToken */: + return 74 /* OpenBracketToken */; + case 81 /* GreaterThanToken */: + return TypeScript.SyntaxUtilities.isAngleBracket(positionedElement) ? 80 /* LessThanToken */ : null; + } + return null; + }; + return BraceMatcher; + })(); + Services.BraceMatcher = BraceMatcher; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Breakpoints) { + function createBreakpointSpanInfo(parentElement) { + var childElements = []; + for (var _i = 1; _i < arguments.length; _i++) { + childElements[_i - 1] = arguments[_i]; + } + if (!parentElement) { + return null; + } + if (childElements.length == 0) { + return { + minChar: TypeScript.start(parentElement), + limChar: TypeScript.end(parentElement) + }; + } + var start; + var end; + for (var i = 0; i < childElements.length; i++) { + var element = childElements[i]; + if (element && !TypeScript.isShared(element)) { + if (start == undefined) { + start = TypeScript.start(element); + } + end = TypeScript.end(element); + } + } + return { + minChar: start, + limChar: end + }; + } + function createBreakpointSpanInfoWithLimChar(startElement, limChar) { + return { + minChar: TypeScript.start(startElement), + limChar: limChar + }; + } + var BreakpointResolver = (function () { + function BreakpointResolver(posLine, lineMap) { + this.posLine = posLine; + this.lineMap = lineMap; + } + BreakpointResolver.prototype.breakpointSpanOfToken = function (positionedToken) { + switch (positionedToken.kind()) { + case 70 /* OpenBraceToken */: + return this.breakpointSpanOfOpenBrace(positionedToken); + case 71 /* CloseBraceToken */: + return this.breakpointSpanOfCloseBrace(positionedToken); + case 79 /* CommaToken */: + return this.breakpointSpanOfComma(positionedToken); + case 78 /* SemicolonToken */: + case 10 /* EndOfFileToken */: + return this.breakpointSpanIfStartsOnSameLine(TypeScript.previousToken(positionedToken)); + case 73 /* CloseParenToken */: + return this.breakpointSpanOfCloseParen(positionedToken); + case 22 /* DoKeyword */: + var parentElement = positionedToken.parent; + if (parentElement && parentElement.kind() == 161 /* DoStatement */) { + return this.breakpointSpanIfStartsOnSameLine(TypeScript.nextToken(positionedToken)); + } + break; + } + return this.breakpointSpanOfContainingNode(positionedToken); + }; + BreakpointResolver.prototype.breakpointSpanOfOpenBrace = function (openBraceToken) { + var container = TypeScript.Syntax.containingNode(openBraceToken); + if (container) { + var originalContainer = container; + if (container && container.kind() == 146 /* Block */) { + container = TypeScript.Syntax.containingNode(container); + if (!container) { + container = originalContainer; + } + } + switch (container.kind()) { + case 146 /* Block */: + if (!this.canHaveBreakpointInBlock(container)) { + return null; + } + return this.breakpointSpanOfFirstStatementInBlock(container); + break; + case 130 /* ModuleDeclaration */: + case 131 /* ClassDeclaration */: + case 129 /* FunctionDeclaration */: + case 137 /* ConstructorDeclaration */: + case 135 /* MemberFunctionDeclaration */: + case 139 /* GetAccessor */: + case 140 /* SetAccessor */: + case 222 /* FunctionExpression */: + case 218 /* ParenthesizedArrowFunctionExpression */: + case 219 /* SimpleArrowFunctionExpression */: + if (!this.canHaveBreakpointInDeclaration(container)) { + return null; + } + if (this.posLine != this.lineMap.getLineNumberFromPosition(TypeScript.start(container))) { + return this.breakpointSpanOfFirstChildOfSyntaxList(this.getSyntaxListOfDeclarationWithElements(container)); + } + else { + return this.breakpointSpanOf(container); + } + case 132 /* EnumDeclaration */: + if (!this.canHaveBreakpointInDeclaration(container)) { + return null; + } + if (this.posLine != this.lineMap.getLineNumberFromPosition(TypeScript.start(container))) { + return this.breakpointSpanOfFirstEnumElement(container); + } + else { + return this.breakpointSpanOf(container); + } + case 147 /* IfStatement */: + case 155 /* ForInStatement */: + case 158 /* WhileStatement */: + case 236 /* CatchClause */: + if (this.posLine != this.lineMap.getLineNumberFromPosition(TypeScript.start(container))) { + return this.breakpointSpanOfFirstStatementInBlock(originalContainer); + } + else { + return this.breakpointSpanOf(container); + } + case 161 /* DoStatement */: + return this.breakpointSpanOfFirstStatementInBlock(originalContainer); + case 154 /* ForStatement */: + if (this.posLine != this.lineMap.getLineNumberFromPosition(TypeScript.start(container))) { + return this.breakpointSpanOfFirstStatementInBlock(originalContainer); + } + else { + return this.breakpointSpanOf(TypeScript.previousToken(openBraceToken)); + } + case 235 /* ElseClause */: + case 233 /* CaseSwitchClause */: + case 234 /* DefaultSwitchClause */: + case 163 /* WithStatement */: + case 159 /* TryStatement */: + case 237 /* FinallyClause */: + return this.breakpointSpanOfFirstStatementInBlock(originalContainer); + case 151 /* SwitchStatement */: + if (this.posLine != this.lineMap.getLineNumberFromPosition(TypeScript.start(container))) { + return this.breakpointSpanOfFirstStatementOfFirstCaseClause(container); + } + else { + return this.breakpointSpanOf(container); + } + } + } + return null; + }; + BreakpointResolver.prototype.breakpointSpanOfCloseBrace = function (closeBraceToken) { + var container = TypeScript.Syntax.containingNode(closeBraceToken); + if (container) { + var originalContainer = container; + if (container.kind() == 146 /* Block */) { + container = TypeScript.Syntax.containingNode(container); + if (!container) { + container = originalContainer; + } + } + switch (container.kind()) { + case 146 /* Block */: + if (!this.canHaveBreakpointInBlock(container)) { + return null; + } + return this.breakpointSpanOfLastStatementInBlock(container); + break; + case 130 /* ModuleDeclaration */: + if (!this.canHaveBreakpointInDeclaration(container)) { + return null; + } + var moduleSyntax = container; + if (moduleSyntax.moduleElements && moduleSyntax.moduleElements.length > 0) { + return createBreakpointSpanInfo(closeBraceToken); + } + else { + return null; + } + case 131 /* ClassDeclaration */: + case 129 /* FunctionDeclaration */: + case 137 /* ConstructorDeclaration */: + case 135 /* MemberFunctionDeclaration */: + case 139 /* GetAccessor */: + case 140 /* SetAccessor */: + case 222 /* FunctionExpression */: + if (!this.canHaveBreakpointInDeclaration(container)) { + return null; + } + return createBreakpointSpanInfo(closeBraceToken); + case 132 /* EnumDeclaration */: + if (!this.canHaveBreakpointInDeclaration(container)) { + return null; + } + return createBreakpointSpanInfo(closeBraceToken); + case 147 /* IfStatement */: + case 235 /* ElseClause */: + case 155 /* ForInStatement */: + case 154 /* ForStatement */: + case 158 /* WhileStatement */: + case 161 /* DoStatement */: + case 233 /* CaseSwitchClause */: + case 234 /* DefaultSwitchClause */: + case 163 /* WithStatement */: + case 159 /* TryStatement */: + case 236 /* CatchClause */: + case 237 /* FinallyClause */: + case 218 /* ParenthesizedArrowFunctionExpression */: + case 219 /* SimpleArrowFunctionExpression */: + return this.breakpointSpanOfLastStatementInBlock(originalContainer); + case 151 /* SwitchStatement */: + return this.breakpointSpanOfLastStatementOfLastCaseClause(container); + } + } + return null; + }; + BreakpointResolver.prototype.breakpointSpanOfComma = function (commaToken) { + var commaParent = commaToken.parent; + if (TypeScript.isSeparatedList(commaParent)) { + var grandParent = commaParent.parent; + if (grandParent) { + switch (grandParent.kind()) { + case 224 /* VariableDeclaration */: + case 132 /* EnumDeclaration */: + case 227 /* ParameterList */: + var index = TypeScript.Syntax.childIndex(commaParent, commaToken); + if (index > 0) { + var child = TypeScript.childAt(commaParent, index - 1); + return this.breakpointSpanOf(child); + } + if (grandParent.kind() == 132 /* EnumDeclaration */) { + return null; + } + break; + } + } + } + return this.breakpointSpanOfContainingNode(commaToken); + }; + BreakpointResolver.prototype.breakpointSpanOfCloseParen = function (closeParenToken) { + var closeParenParent = closeParenToken.parent; + if (closeParenParent) { + switch (closeParenParent.kind()) { + case 154 /* ForStatement */: + case 227 /* ParameterList */: + return this.breakpointSpanOf(TypeScript.previousToken(closeParenToken)); + } + } + return this.breakpointSpanOfContainingNode(closeParenToken); + }; + BreakpointResolver.prototype.canHaveBreakpointInBlock = function (blockNode) { + if (!blockNode || TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(blockNode)) { + return false; + } + var blockSyntax = blockNode; + return blockSyntax.statements && blockSyntax.statements.length != 0; + }; + BreakpointResolver.prototype.breakpointSpanOfFirstStatementInBlock = function (blockNode) { + if (!blockNode) { + return null; + } + var blockSyntax = blockNode; + var statementsNode = blockSyntax.statements; + if (!statementsNode || statementsNode.length == 0) { + return null; + } + var firstStatement = TypeScript.childAt(statementsNode, 0); + if (firstStatement && firstStatement.kind() == 146 /* Block */) { + if (this.canHaveBreakpointInBlock(firstStatement)) { + return this.breakpointSpanOfFirstStatementInBlock(firstStatement); + } + return null; + } + else { + return this.breakpointSpanOf(firstStatement); + } + }; + BreakpointResolver.prototype.breakpointSpanOfLastStatementInBlock = function (blockNode) { + if (!blockNode) { + return null; + } + var blockSyntax = blockNode; + var statementsNode = blockSyntax.statements; + if (!statementsNode || statementsNode.length == 0) { + return null; + } + var lastStatement = TypeScript.childAt(statementsNode, statementsNode.length - 1); + if (lastStatement && lastStatement.kind() == 146 /* Block */) { + if (this.canHaveBreakpointInBlock(lastStatement)) { + return this.breakpointSpanOfLastStatementInBlock(lastStatement); + } + return null; + } + else { + return this.breakpointSpanOf(lastStatement); + } + }; + BreakpointResolver.prototype.breakpointSpanOfFirstChildOfSyntaxList = function (positionedList) { + if (!positionedList) { + return null; + } + var listSyntax = positionedList; + if (listSyntax.length == 0) { + return null; + } + var firstStatement = TypeScript.childAt(positionedList, 0); + if (firstStatement && firstStatement.kind() == 146 /* Block */) { + if (this.canHaveBreakpointInBlock(firstStatement)) { + return this.breakpointSpanOfFirstStatementInBlock(firstStatement); + } + return null; + } + else { + return this.breakpointSpanOf(firstStatement); + } + }; + BreakpointResolver.prototype.breakpointSpanOfLastChildOfSyntaxList = function (positionedList) { + if (!positionedList) { + return null; + } + var listSyntax = positionedList; + if (listSyntax.length == 0) { + return null; + } + var lastStatement = TypeScript.childAt(positionedList, 0); + if (lastStatement && lastStatement.kind() == 146 /* Block */) { + if (this.canHaveBreakpointInBlock(lastStatement)) { + return this.breakpointSpanOfLastStatementInBlock(lastStatement); + } + return null; + } + else { + return this.breakpointSpanOf(lastStatement); + } + }; + BreakpointResolver.prototype.breakpointSpanOfNode = function (positionedNode) { + var node = positionedNode; + switch (node.kind()) { + case 130 /* ModuleDeclaration */: + case 131 /* ClassDeclaration */: + case 129 /* FunctionDeclaration */: + case 137 /* ConstructorDeclaration */: + case 135 /* MemberFunctionDeclaration */: + case 139 /* GetAccessor */: + case 140 /* SetAccessor */: + case 222 /* FunctionExpression */: + return this.breakpointSpanOfDeclarationWithElements(positionedNode); + case 225 /* VariableDeclarator */: + return this.breakpointSpanOfVariableDeclarator(positionedNode); + case 224 /* VariableDeclaration */: + return this.breakpointSpanOfVariableDeclaration(positionedNode); + case 148 /* VariableStatement */: + return this.breakpointSpanOfVariableStatement(positionedNode); + case 242 /* Parameter */: + return this.breakpointSpanOfParameter(positionedNode); + case 136 /* MemberVariableDeclaration */: + return this.breakpointSpanOfMemberVariableDeclaration(positionedNode); + case 133 /* ImportDeclaration */: + return this.breakpointSpanOfImportDeclaration(positionedNode); + case 132 /* EnumDeclaration */: + return this.breakpointSpanOfEnumDeclaration(positionedNode); + case 243 /* EnumElement */: + return this.breakpointSpanOfEnumElement(positionedNode); + case 147 /* IfStatement */: + return this.breakpointSpanOfIfStatement(positionedNode); + case 235 /* ElseClause */: + return this.breakpointSpanOfElseClause(positionedNode); + case 155 /* ForInStatement */: + return this.breakpointSpanOfForInStatement(positionedNode); + case 154 /* ForStatement */: + return this.breakpointSpanOfForStatement(positionedNode); + case 158 /* WhileStatement */: + return this.breakpointSpanOfWhileStatement(positionedNode); + case 161 /* DoStatement */: + return this.breakpointSpanOfDoStatement(positionedNode); + case 151 /* SwitchStatement */: + return this.breakpointSpanOfSwitchStatement(positionedNode); + case 233 /* CaseSwitchClause */: + return this.breakpointSpanOfCaseSwitchClause(positionedNode); + case 234 /* DefaultSwitchClause */: + return this.breakpointSpanOfDefaultSwitchClause(positionedNode); + case 163 /* WithStatement */: + return this.breakpointSpanOfWithStatement(positionedNode); + case 159 /* TryStatement */: + return this.breakpointSpanOfTryStatement(positionedNode); + case 236 /* CatchClause */: + return this.breakpointSpanOfCatchClause(positionedNode); + case 237 /* FinallyClause */: + return this.breakpointSpanOfFinallyClause(positionedNode); + case 218 /* ParenthesizedArrowFunctionExpression */: + return this.breakpointSpanOfParenthesizedArrowFunctionExpression(positionedNode); + case 219 /* SimpleArrowFunctionExpression */: + return this.breakpointSpanOfSimpleArrowFunctionExpression(positionedNode); + default: + if (TypeScript.SyntaxUtilities.isStatement(node)) { + return this.breakpointSpanOfStatement(positionedNode); + } + else { + return this.breakpointOfExpression(positionedNode); + } + } + }; + BreakpointResolver.prototype.isExpressionOfArrowExpressions = function (expression) { + if (!expression) { + return false; + } + var expressionParent = expression.parent; + if (expressionParent) { + if (expressionParent.kind() == 218 /* ParenthesizedArrowFunctionExpression */) { + var parenthesizedArrowExpression = expressionParent; + var expressionOfParenthesizedArrowExpression = parenthesizedArrowExpression.expression; + return expressionOfParenthesizedArrowExpression == expression; + } + else if (expressionParent.kind() == 219 /* SimpleArrowFunctionExpression */) { + var simpleArrowExpression = expressionParent; + var expressionOfSimpleArrowExpression = simpleArrowExpression.expression; + return expressionOfSimpleArrowExpression == expression; + } + else if (expressionParent.kind() == 173 /* CommaExpression */) { + return this.isExpressionOfArrowExpressions(expressionParent); + } + } + return false; + }; + BreakpointResolver.prototype.isInitializerOfForStatement = function (expressionNode) { + if (!expressionNode) { + return false; + } + var expressionParent = expressionNode.parent; + if (expressionParent && expressionParent.kind() == 154 /* ForStatement */) { + var expression = expressionNode; + var forStatement = expressionParent; + var initializer = forStatement.initializer; + return initializer === expression; + } + else if (expressionParent && expressionParent.kind() == 173 /* CommaExpression */) { + return this.isInitializerOfForStatement(expressionParent); + } + return false; + }; + BreakpointResolver.prototype.isConditionOfForStatement = function (expressionNode) { + if (!expressionNode) { + return false; + } + var expressionParent = expressionNode.parent; + if (expressionParent && expressionParent.kind() == 154 /* ForStatement */) { + var expression = expressionNode; + var forStatement = expressionParent; + var condition = forStatement.condition; + return condition === expression; + } + else if (expressionParent && expressionParent.kind() == 173 /* CommaExpression */) { + return this.isConditionOfForStatement(expressionParent); + } + return false; + }; + BreakpointResolver.prototype.isIncrememtorOfForStatement = function (expressionNode) { + if (!expressionNode) { + return false; + } + var expressionParent = expressionNode.parent; + if (expressionParent && expressionParent.kind() == 154 /* ForStatement */) { + var expression = expressionNode; + var forStatement = expressionParent; + var incrementor = forStatement.incrementor; + return incrementor === expression; + } + else if (expressionParent && expressionParent.kind() == 173 /* CommaExpression */) { + return this.isIncrememtorOfForStatement(expressionParent); + } + return false; + }; + BreakpointResolver.prototype.breakpointOfLeftOfCommaExpression = function (commaExpressionNode) { + var commaExpression = commaExpressionNode; + return this.breakpointSpanOf(commaExpression.left); + }; + BreakpointResolver.prototype.breakpointOfExpression = function (expressionNode) { + if (this.isInitializerOfForStatement(expressionNode) || this.isConditionOfForStatement(expressionNode) || this.isIncrememtorOfForStatement(expressionNode)) { + if (expressionNode.kind() == 173 /* CommaExpression */) { + return this.breakpointOfLeftOfCommaExpression(expressionNode); + } + return createBreakpointSpanInfo(expressionNode); + } + if (this.isExpressionOfArrowExpressions(expressionNode)) { + if (expressionNode.kind() == 173 /* CommaExpression */) { + return this.breakpointOfLeftOfCommaExpression(expressionNode); + } + return createBreakpointSpanInfo(expressionNode); + } + if (expressionNode.kind() == 134 /* ExportAssignment */) { + var exportAssignmentSyntax = expressionNode; + return createBreakpointSpanInfo(expressionNode, exportAssignmentSyntax.exportKeyword, exportAssignmentSyntax.equalsToken, exportAssignmentSyntax.identifier); + } + return this.breakpointSpanOfContainingNode(expressionNode); + }; + BreakpointResolver.prototype.breakpointSpanOfStatement = function (statementNode) { + var statement = statementNode; + if (statement.kind() == 156 /* EmptyStatement */) { + return null; + } + var containingNode = TypeScript.Syntax.containingNode(statementNode); + if (TypeScript.SyntaxUtilities.isStatement(containingNode)) { + var useNodeForBreakpoint = false; + switch (containingNode.kind()) { + case 130 /* ModuleDeclaration */: + case 131 /* ClassDeclaration */: + case 129 /* FunctionDeclaration */: + case 137 /* ConstructorDeclaration */: + case 135 /* MemberFunctionDeclaration */: + case 139 /* GetAccessor */: + case 140 /* SetAccessor */: + case 146 /* Block */: + case 147 /* IfStatement */: + case 235 /* ElseClause */: + case 155 /* ForInStatement */: + case 154 /* ForStatement */: + case 158 /* WhileStatement */: + case 161 /* DoStatement */: + case 151 /* SwitchStatement */: + case 233 /* CaseSwitchClause */: + case 234 /* DefaultSwitchClause */: + case 163 /* WithStatement */: + case 159 /* TryStatement */: + case 236 /* CatchClause */: + case 237 /* FinallyClause */: + case 146 /* Block */: + useNodeForBreakpoint = true; + } + if (!useNodeForBreakpoint) { + return this.breakpointSpanOfContainingNode(statementNode); + } + } + switch (statement.kind()) { + case 149 /* ExpressionStatement */: + var expressionSyntax = statement; + return createBreakpointSpanInfo(expressionSyntax.expression); + case 150 /* ReturnStatement */: + var returnStatementSyntax = statement; + return createBreakpointSpanInfo(statementNode, returnStatementSyntax.returnKeyword, returnStatementSyntax.expression); + case 157 /* ThrowStatement */: + var throwStatementSyntax = statement; + return createBreakpointSpanInfo(statementNode, throwStatementSyntax.throwKeyword, throwStatementSyntax.expression); + case 152 /* BreakStatement */: + var breakStatementSyntax = statement; + return createBreakpointSpanInfo(statementNode, breakStatementSyntax.breakKeyword, breakStatementSyntax.identifier); + case 153 /* ContinueStatement */: + var continueStatementSyntax = statement; + return createBreakpointSpanInfo(statementNode, continueStatementSyntax.continueKeyword, continueStatementSyntax.identifier); + case 162 /* DebuggerStatement */: + var debuggerStatementSyntax = statement; + return createBreakpointSpanInfo(debuggerStatementSyntax.debuggerKeyword); + case 160 /* LabeledStatement */: + var labeledStatementSyntax = statement; + return this.breakpointSpanOf(labeledStatementSyntax.statement); + } + return null; + }; + BreakpointResolver.prototype.getSyntaxListOfDeclarationWithElements = function (positionedNode) { + var node = positionedNode; + var elementsList; + var block; + switch (node.kind()) { + case 130 /* ModuleDeclaration */: + elementsList = node.moduleElements; + break; + case 131 /* ClassDeclaration */: + elementsList = node.classElements; + break; + case 129 /* FunctionDeclaration */: + block = node.block; + break; + case 137 /* ConstructorDeclaration */: + block = node.block; + break; + case 135 /* MemberFunctionDeclaration */: + block = node.block; + break; + case 139 /* GetAccessor */: + block = node.block; + break; + case 140 /* SetAccessor */: + block = node.block; + break; + case 222 /* FunctionExpression */: + block = node.block; + break; + case 218 /* ParenthesizedArrowFunctionExpression */: + block = node.block; + break; + case 219 /* SimpleArrowFunctionExpression */: + block = node.block; + break; + default: + throw TypeScript.Errors.argument('positionNode', 'unknown node kind in getSyntaxListOfDeclarationWithElements'); + } + var parentElement = positionedNode; + if (block) { + parentElement = block; + elementsList = block.statements; + } + return elementsList; + }; + BreakpointResolver.prototype.canHaveBreakpointInDeclaration = function (positionedNode) { + return positionedNode && !TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(positionedNode); + }; + BreakpointResolver.prototype.breakpointSpanOfDeclarationWithElements = function (positionedNode) { + if (!this.canHaveBreakpointInDeclaration(positionedNode)) { + return null; + } + var node = positionedNode; + var moduleSyntax = positionedNode; + if ((TypeScript.SyntaxUtilities.isModuleElement(node) && TypeScript.Syntax.containingNode(positionedNode).kind() != 120 /* SourceUnit */) || TypeScript.SyntaxUtilities.isClassElement(node) || (moduleSyntax.kind() == 130 /* ModuleDeclaration */ && moduleSyntax.name && moduleSyntax.name.kind() == 121 /* QualifiedName */)) { + return createBreakpointSpanInfo(positionedNode); + } + else { + return this.breakpointSpanOfFirstChildOfSyntaxList(this.getSyntaxListOfDeclarationWithElements(positionedNode)); + } + }; + BreakpointResolver.prototype.canHaveBreakpointInVariableDeclarator = function (varDeclaratorNode) { + if (!varDeclaratorNode || TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(varDeclaratorNode)) { + return false; + } + var varDeclaratorSyntax = varDeclaratorNode; + return !!varDeclaratorSyntax.equalsValueClause; + }; + BreakpointResolver.prototype.breakpointSpanOfVariableDeclarator = function (varDeclaratorNode) { + if (!this.canHaveBreakpointInVariableDeclarator(varDeclaratorNode)) { + return null; + } + var container = TypeScript.Syntax.containingNode(varDeclaratorNode); + if (container && container.kind() == 224 /* VariableDeclaration */) { + var parentDeclaratorsList = varDeclaratorNode.parent; + if (parentDeclaratorsList && TypeScript.childAt(parentDeclaratorsList, 0) == varDeclaratorNode) { + return this.breakpointSpanOfVariableDeclaration(container); + } + if (this.canHaveBreakpointInVariableDeclarator(varDeclaratorNode)) { + return createBreakpointSpanInfo(varDeclaratorNode); + } + else { + return null; + } + } + else if (container) { + return this.breakpointSpanOfMemberVariableDeclaration(container); + } + return null; + }; + BreakpointResolver.prototype.canHaveBreakpointInVariableDeclaration = function (varDeclarationNode) { + if (!varDeclarationNode || TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(varDeclarationNode)) { + return false; + } + var varDeclarationSyntax = varDeclarationNode; + var containerChildren = varDeclarationSyntax.variableDeclarators; + if (!containerChildren || TypeScript.childCount(containerChildren) == 0) { + return false; + } + var child = TypeScript.childAt(containerChildren, 0); + if (TypeScript.isNode(child)) { + return this.canHaveBreakpointInVariableDeclarator(child); + } + return false; + }; + BreakpointResolver.prototype.breakpointSpanOfVariableDeclaration = function (varDeclarationNode) { + if (!this.canHaveBreakpointInDeclaration(varDeclarationNode)) { + return null; + } + var container = TypeScript.Syntax.containingNode(varDeclarationNode); + var varDeclarationSyntax = varDeclarationNode; + var varDeclarators = varDeclarationSyntax.variableDeclarators; + var varDeclaratorsCount = TypeScript.childCount(varDeclarators); + if (container && container.kind() == 148 /* VariableStatement */) { + return this.breakpointSpanOfVariableStatement(container); + } + if (this.canHaveBreakpointInVariableDeclaration(varDeclarationNode)) { + return createBreakpointSpanInfoWithLimChar(varDeclarationNode, TypeScript.end(TypeScript.childAt(varDeclarators, 0))); + } + else { + return null; + } + }; + BreakpointResolver.prototype.canHaveBreakpointInVariableStatement = function (varStatementNode) { + if (!varStatementNode || TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(varStatementNode)) { + return false; + } + var variableStatement = varStatementNode; + return this.canHaveBreakpointInVariableDeclaration(variableStatement.variableDeclaration); + }; + BreakpointResolver.prototype.breakpointSpanOfVariableStatement = function (varStatementNode) { + if (!this.canHaveBreakpointInVariableStatement(varStatementNode)) { + return null; + } + var variableStatement = varStatementNode; + var variableDeclaration = variableStatement.variableDeclaration; + var varDeclarationSyntax = variableDeclaration; + var varDeclarators = varDeclarationSyntax.variableDeclarators; + return createBreakpointSpanInfoWithLimChar(varStatementNode, TypeScript.end(TypeScript.childAt(varDeclarators, 0))); + }; + BreakpointResolver.prototype.breakpointSpanOfParameter = function (parameterNode) { + if (parameterNode.parent.kind() === 219 /* SimpleArrowFunctionExpression */) { + return this.breakpointSpanOfNode(parameterNode.parent); + } + if (TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(parameterNode)) { + return null; + } + var parameterSyntax = parameterNode; + if (parameterSyntax.dotDotDotToken || parameterSyntax.equalsValueClause || parameterSyntax.modifiers.length > 0) { + return createBreakpointSpanInfo(parameterNode); + } + else { + return null; + } + }; + BreakpointResolver.prototype.breakpointSpanOfMemberVariableDeclaration = function (memberVarDeclarationNode) { + if (TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(memberVarDeclarationNode)) { + return null; + } + var memberVariableDeclaration = memberVarDeclarationNode; + if (this.canHaveBreakpointInVariableDeclarator(memberVariableDeclaration.variableDeclarator)) { + return createBreakpointSpanInfo(memberVarDeclarationNode, memberVariableDeclaration.modifiers, memberVariableDeclaration.variableDeclarator); + } + else { + return null; + } + }; + BreakpointResolver.prototype.breakpointSpanOfImportDeclaration = function (importDeclarationNode) { + if (TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(importDeclarationNode)) { + return null; + } + var importSyntax = importDeclarationNode; + return createBreakpointSpanInfo(importDeclarationNode, importSyntax.modifiers, importSyntax.importKeyword, importSyntax.identifier, importSyntax.equalsToken, importSyntax.moduleReference); + }; + BreakpointResolver.prototype.breakpointSpanOfEnumDeclaration = function (enumDeclarationNode) { + if (!this.canHaveBreakpointInDeclaration(enumDeclarationNode)) { + return null; + } + return createBreakpointSpanInfo(enumDeclarationNode); + }; + BreakpointResolver.prototype.breakpointSpanOfFirstEnumElement = function (enumDeclarationNode) { + var enumDeclarationSyntax = enumDeclarationNode; + var enumElements = enumDeclarationSyntax.enumElements; + if (enumElements && TypeScript.childCount(enumElements)) { + return this.breakpointSpanOf(TypeScript.childAt(enumElements, 0)); + } + return null; + }; + BreakpointResolver.prototype.breakpointSpanOfEnumElement = function (enumElementNode) { + if (TypeScript.SyntaxUtilities.isAmbientDeclarationSyntax(enumElementNode)) { + return null; + } + return createBreakpointSpanInfo(enumElementNode); + }; + BreakpointResolver.prototype.breakpointSpanOfIfStatement = function (ifStatementNode) { + var ifStatement = ifStatementNode; + return createBreakpointSpanInfo(ifStatementNode, ifStatement.ifKeyword, ifStatement.openParenToken, ifStatement.condition, ifStatement.closeParenToken); + }; + BreakpointResolver.prototype.breakpointSpanOfElseClause = function (elseClauseNode) { + var elseClause = elseClauseNode; + return this.breakpointSpanOf(elseClause.statement); + }; + BreakpointResolver.prototype.breakpointSpanOfForInStatement = function (forInStatementNode) { + var forInStatement = forInStatementNode; + return createBreakpointSpanInfo(forInStatementNode, forInStatement.forKeyword, forInStatement.openParenToken, forInStatement.variableDeclaration, forInStatement.left, forInStatement.inKeyword, forInStatement.expression, forInStatement.closeParenToken); + }; + BreakpointResolver.prototype.breakpointSpanOfForStatement = function (forStatementNode) { + var forStatement = forStatementNode; + return this.breakpointSpanOf(forStatement.variableDeclaration ? forStatement.variableDeclaration : forStatement.initializer); + }; + BreakpointResolver.prototype.breakpointSpanOfWhileStatement = function (whileStatementNode) { + var whileStatement = whileStatementNode; + return createBreakpointSpanInfo(whileStatementNode, whileStatement.whileKeyword, whileStatement.openParenToken, whileStatement.condition, whileStatement.closeParenToken); + }; + BreakpointResolver.prototype.breakpointSpanOfDoStatement = function (doStatementNode) { + var doStatement = doStatementNode; + return createBreakpointSpanInfo(doStatementNode, doStatement.whileKeyword, doStatement.openParenToken, doStatement.condition, doStatement.closeParenToken); + }; + BreakpointResolver.prototype.breakpointSpanOfSwitchStatement = function (switchStatementNode) { + var switchStatement = switchStatementNode; + return createBreakpointSpanInfo(switchStatementNode, switchStatement.switchKeyword, switchStatement.openParenToken, switchStatement.expression, switchStatement.closeParenToken); + }; + BreakpointResolver.prototype.breakpointSpanOfFirstStatementOfFirstCaseClause = function (switchStatementNode) { + var switchStatement = switchStatementNode; + if (switchStatement.switchClauses && switchStatement.switchClauses.length == 0) { + return null; + } + var switchClauses = switchStatement.switchClauses; + if (switchClauses.length == 0) { + return null; + } + var firstCaseClause = switchClauses[0]; + var statements = firstCaseClause.statements; + return this.breakpointSpanOfFirstChildOfSyntaxList(statements); + }; + BreakpointResolver.prototype.breakpointSpanOfLastStatementOfLastCaseClause = function (switchStatementNode) { + var switchStatement = switchStatementNode; + if (switchStatement.switchClauses && switchStatement.switchClauses.length == 0) { + return null; + } + var switchClauses = switchStatement.switchClauses; + if (switchClauses.length == 0) { + return null; + } + var lastClauseNode = switchClauses[switchClauses.length - 1]; + var statements = lastClauseNode.statements; + return this.breakpointSpanOfLastChildOfSyntaxList(statements); + }; + BreakpointResolver.prototype.breakpointSpanOfCaseSwitchClause = function (caseClauseNode) { + var caseSwitchClause = caseClauseNode; + return this.breakpointSpanOfFirstChildOfSyntaxList(caseSwitchClause.statements); + }; + BreakpointResolver.prototype.breakpointSpanOfDefaultSwitchClause = function (defaultSwithClauseNode) { + var defaultSwitchClause = defaultSwithClauseNode; + return this.breakpointSpanOfFirstChildOfSyntaxList(defaultSwitchClause.statements); + }; + BreakpointResolver.prototype.breakpointSpanOfWithStatement = function (withStatementNode) { + var withStatement = withStatementNode; + return this.breakpointSpanOf(withStatement.statement); + }; + BreakpointResolver.prototype.breakpointSpanOfTryStatement = function (tryStatementNode) { + var tryStatement = tryStatementNode; + return this.breakpointSpanOfFirstStatementInBlock(tryStatement.block); + }; + BreakpointResolver.prototype.breakpointSpanOfCatchClause = function (catchClauseNode) { + var catchClause = catchClauseNode; + return createBreakpointSpanInfo(catchClauseNode, catchClause.catchKeyword, catchClause.openParenToken, catchClause.identifier, catchClause.typeAnnotation, catchClause.closeParenToken); + }; + BreakpointResolver.prototype.breakpointSpanOfFinallyClause = function (finallyClauseNode) { + var finallyClause = finallyClauseNode; + return this.breakpointSpanOfFirstStatementInBlock(finallyClause.block); + }; + BreakpointResolver.prototype.breakpointSpanOfParenthesizedArrowFunctionExpression = function (arrowFunctionExpression) { + if (arrowFunctionExpression.block) { + return this.breakpointSpanOfFirstStatementInBlock(arrowFunctionExpression.block); + } + else { + return this.breakpointSpanOf(arrowFunctionExpression.expression); + } + }; + BreakpointResolver.prototype.breakpointSpanOfSimpleArrowFunctionExpression = function (arrowFunctionExpression) { + if (arrowFunctionExpression.block) { + return this.breakpointSpanOfFirstStatementInBlock(arrowFunctionExpression.block); + } + else { + return this.breakpointSpanOf(arrowFunctionExpression.expression); + } + }; + BreakpointResolver.prototype.breakpointSpanOfContainingNode = function (positionedElement) { + var current = positionedElement.parent; + while (!TypeScript.isNode(current)) { + current = current.parent; + } + return this.breakpointSpanOf(current); + }; + BreakpointResolver.prototype.breakpointSpanIfStartsOnSameLine = function (positionedElement) { + if (positionedElement && this.posLine == this.lineMap.getLineNumberFromPosition(TypeScript.start(positionedElement))) { + return this.breakpointSpanOf(positionedElement); + } + return null; + }; + BreakpointResolver.prototype.breakpointSpanOf = function (positionedElement) { + if (!positionedElement) { + return null; + } + for (var containingNode = TypeScript.Syntax.containingNode(positionedElement); containingNode != null; containingNode = TypeScript.Syntax.containingNode(containingNode)) { + if (containingNode.kind() == 244 /* TypeAnnotation */) { + return this.breakpointSpanIfStartsOnSameLine(containingNode); + } + } + var element = positionedElement; + if (TypeScript.isNode(element)) { + return this.breakpointSpanOfNode(positionedElement); + } + if (TypeScript.isToken(element)) { + return this.breakpointSpanOfToken(positionedElement); + } + return this.breakpointSpanOfContainingNode(positionedElement); + }; + return BreakpointResolver; + })(); + function getBreakpointLocation(syntaxTree, askedPos) { + if (TypeScript.isDTSFile(syntaxTree.fileName())) { + return null; + } + var sourceUnit = syntaxTree.sourceUnit(); + var positionedToken = TypeScript.findToken(sourceUnit, askedPos); + var lineMap = syntaxTree.lineMap(); + var posLine = lineMap.getLineNumberFromPosition(askedPos); + var tokenStartLine = lineMap.getLineNumberFromPosition(TypeScript.start(positionedToken)); + if (posLine < tokenStartLine) { + return null; + } + var breakpointResolver = new BreakpointResolver(posLine, lineMap); + return breakpointResolver.breakpointSpanOf(positionedToken); + } + Breakpoints.getBreakpointLocation = getBreakpointLocation; + })(Services.Breakpoints || (Services.Breakpoints = {})); + var Breakpoints = Services.Breakpoints; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Indentation) { + function columnForEndOfTokenAtPosition(syntaxTree, position, options) { + var token = TypeScript.findToken(syntaxTree.sourceUnit(), position); + return columnForStartOfTokenAtPosition(syntaxTree, position, options) + TypeScript.width(token); + } + Indentation.columnForEndOfTokenAtPosition = columnForEndOfTokenAtPosition; + function columnForStartOfTokenAtPosition(syntaxTree, position, options) { + var token = TypeScript.findToken(syntaxTree.sourceUnit(), position); + var firstTokenInLine = TypeScript.Syntax.firstTokenInLineContainingPosition(syntaxTree, token.fullStart()); + var leadingTextInReverse = []; + var current = token; + while (current !== firstTokenInLine) { + current = TypeScript.previousToken(current); + if (current === firstTokenInLine) { + leadingTextInReverse.push(current.trailingTrivia().fullText()); + leadingTextInReverse.push(current.text()); + } + else { + leadingTextInReverse.push(current.fullText()); + } + } + collectLeadingTriviaTextToStartOfLine(firstTokenInLine, leadingTextInReverse); + return columnForLeadingTextInReverse(leadingTextInReverse, options); + } + Indentation.columnForStartOfTokenAtPosition = columnForStartOfTokenAtPosition; + function columnForStartOfFirstTokenInLineContainingPosition(syntaxTree, position, options) { + var firstTokenInLine = TypeScript.Syntax.firstTokenInLineContainingPosition(syntaxTree, position); + var leadingTextInReverse = []; + collectLeadingTriviaTextToStartOfLine(firstTokenInLine, leadingTextInReverse); + return columnForLeadingTextInReverse(leadingTextInReverse, options); + } + Indentation.columnForStartOfFirstTokenInLineContainingPosition = columnForStartOfFirstTokenInLineContainingPosition; + function collectLeadingTriviaTextToStartOfLine(firstTokenInLine, leadingTextInReverse) { + var leadingTrivia = firstTokenInLine.leadingTrivia(); + for (var i = leadingTrivia.count() - 1; i >= 0; i--) { + var trivia = leadingTrivia.syntaxTriviaAt(i); + if (trivia.kind() === 5 /* NewLineTrivia */) { + break; + } + if (trivia.kind() === 6 /* MultiLineCommentTrivia */) { + var lineSegments = TypeScript.Syntax.splitMultiLineCommentTriviaIntoMultipleLines(trivia); + leadingTextInReverse.push(TypeScript.ArrayUtilities.last(lineSegments)); + if (lineSegments.length > 0) { + break; + } + } + leadingTextInReverse.push(trivia.fullText()); + } + } + function columnForLeadingTextInReverse(leadingTextInReverse, options) { + var column = 0; + for (var i = leadingTextInReverse.length - 1; i >= 0; i--) { + var text = leadingTextInReverse[i]; + column = columnForPositionInStringWorker(text, text.length, column, options); + } + return column; + } + function columnForPositionInString(input, position, options) { + return columnForPositionInStringWorker(input, position, 0, options); + } + Indentation.columnForPositionInString = columnForPositionInString; + function columnForPositionInStringWorker(input, position, startColumn, options) { + var column = startColumn; + var spacesPerTab = options.spacesPerTab; + for (var j = 0; j < position; j++) { + var ch = input.charCodeAt(j); + if (ch === 9 /* tab */) { + column += spacesPerTab - column % spacesPerTab; + } + else { + column++; + } + } + return column; + } + function indentationString(column, options) { + var numberOfTabs = 0; + var numberOfSpaces = Math.max(0, column); + if (options.useTabs) { + numberOfTabs = Math.floor(column / options.spacesPerTab); + numberOfSpaces -= numberOfTabs * options.spacesPerTab; + } + return TypeScript.StringUtilities.repeat('\t', numberOfTabs) + TypeScript.StringUtilities.repeat(' ', numberOfSpaces); + } + Indentation.indentationString = indentationString; + function firstNonWhitespacePosition(value) { + for (var i = 0; i < value.length; i++) { + var ch = value.charCodeAt(i); + if (!TypeScript.CharacterInfo.isWhitespace(ch)) { + return i; + } + } + return value.length; + } + Indentation.firstNonWhitespacePosition = firstNonWhitespacePosition; + })(TypeScript.Indentation || (TypeScript.Indentation = {})); + var Indentation = TypeScript.Indentation; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var TextSnapshot = (function () { + function TextSnapshot(snapshot) { + this.snapshot = snapshot; + this.lines = []; + } + TextSnapshot.prototype.getText = function (span) { + return this.snapshot.substr(span.start(), span.length()); + }; + TextSnapshot.prototype.getLineNumberFromPosition = function (position) { + return this.snapshot.lineMap().getLineNumberFromPosition(position); + }; + TextSnapshot.prototype.getLineFromPosition = function (position) { + var lineNumber = this.getLineNumberFromPosition(position); + return this.getLineFromLineNumber(lineNumber); + }; + TextSnapshot.prototype.getLineFromLineNumber = function (lineNumber) { + var line = this.lines[lineNumber]; + if (line === undefined) { + line = this.getLineFromLineNumberWorker(lineNumber); + this.lines[lineNumber] = line; + } + return line; + }; + TextSnapshot.prototype.getLineFromLineNumberWorker = function (lineNumber) { + var lineMap = this.snapshot.lineMap().lineStarts(); + var lineMapIndex = lineNumber; + if (lineMapIndex < 0 || lineMapIndex >= lineMap.length) + throw new Error(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Invalid_line_number_0, [lineMapIndex])); + var start = lineMap[lineMapIndex]; + var end; + var endIncludingLineBreak; + var lineBreak = ""; + if (lineMapIndex == lineMap.length) { + end = endIncludingLineBreak = this.snapshot.length(); + } + else { + endIncludingLineBreak = (lineMapIndex >= lineMap.length - 1 ? this.snapshot.length() : lineMap[lineMapIndex + 1]); + for (var p = endIncludingLineBreak - 1; p >= start; p--) { + var c = this.snapshot.substr(p, 1); + if (c != "\r" && c != "\n") { + break; + } + } + end = p + 1; + lineBreak = this.snapshot.substr(end, endIncludingLineBreak - end); + } + var result = new Formatting.TextSnapshotLine(this, lineNumber, start, end, lineBreak); + return result; + }; + return TextSnapshot; + })(); + Formatting.TextSnapshot = TextSnapshot; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var TextSnapshotLine = (function () { + function TextSnapshotLine(_snapshot, _lineNumber, _start, _end, _lineBreak) { + this._snapshot = _snapshot; + this._lineNumber = _lineNumber; + this._start = _start; + this._end = _end; + this._lineBreak = _lineBreak; + } + TextSnapshotLine.prototype.snapshot = function () { + return this._snapshot; + }; + TextSnapshotLine.prototype.start = function () { + return new Formatting.SnapshotPoint(this._snapshot, this._start); + }; + TextSnapshotLine.prototype.startPosition = function () { + return this._start; + }; + TextSnapshotLine.prototype.end = function () { + return new Formatting.SnapshotPoint(this._snapshot, this._end); + }; + TextSnapshotLine.prototype.endPosition = function () { + return this._end; + }; + TextSnapshotLine.prototype.endIncludingLineBreak = function () { + return new Formatting.SnapshotPoint(this._snapshot, this._end + this._lineBreak.length); + }; + TextSnapshotLine.prototype.endIncludingLineBreakPosition = function () { + return this._end + this._lineBreak.length; + }; + TextSnapshotLine.prototype.length = function () { + return this._end - this._start; + }; + TextSnapshotLine.prototype.lineNumber = function () { + return this._lineNumber; + }; + TextSnapshotLine.prototype.getText = function () { + return this._snapshot.getText(TypeScript.TextSpan.fromBounds(this._start, this._end)); + }; + return TextSnapshotLine; + })(); + Formatting.TextSnapshotLine = TextSnapshotLine; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var SnapshotPoint = (function () { + function SnapshotPoint(snapshot, position) { + this.snapshot = snapshot; + this.position = position; + } + SnapshotPoint.prototype.getContainingLine = function () { + return this.snapshot.getLineFromPosition(this.position); + }; + SnapshotPoint.prototype.add = function (offset) { + return new SnapshotPoint(this.snapshot, this.position + offset); + }; + return SnapshotPoint; + })(); + Formatting.SnapshotPoint = SnapshotPoint; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var FormattingContext = (function () { + function FormattingContext(snapshot, formattingRequestKind) { + this.snapshot = snapshot; + this.formattingRequestKind = formattingRequestKind; + this.currentTokenSpan = null; + this.nextTokenSpan = null; + this.contextNode = null; + this.currentTokenParent = null; + this.nextTokenParent = null; + this.contextNodeAllOnSameLine = null; + this.nextNodeAllOnSameLine = null; + this.tokensAreOnSameLine = null; + this.contextNodeBlockIsOnOneLine = null; + this.nextNodeBlockIsOnOneLine = null; + TypeScript.Debug.assert(this.snapshot != null, "snapshot is null"); + } + FormattingContext.prototype.updateContext = function (currentTokenSpan, currentTokenParent, nextTokenSpan, nextTokenParent, commonParent) { + TypeScript.Debug.assert(currentTokenSpan != null, "currentTokenSpan is null"); + TypeScript.Debug.assert(currentTokenParent != null, "currentTokenParent is null"); + TypeScript.Debug.assert(nextTokenSpan != null, "nextTokenSpan is null"); + TypeScript.Debug.assert(nextTokenParent != null, "nextTokenParent is null"); + TypeScript.Debug.assert(commonParent != null, "commonParent is null"); + this.currentTokenSpan = currentTokenSpan; + this.currentTokenParent = currentTokenParent; + this.nextTokenSpan = nextTokenSpan; + this.nextTokenParent = nextTokenParent; + this.contextNode = commonParent; + this.contextNodeAllOnSameLine = null; + this.nextNodeAllOnSameLine = null; + this.tokensAreOnSameLine = null; + this.contextNodeBlockIsOnOneLine = null; + this.nextNodeBlockIsOnOneLine = null; + }; + FormattingContext.prototype.ContextNodeAllOnSameLine = function () { + if (this.contextNodeAllOnSameLine === null) { + this.contextNodeAllOnSameLine = this.NodeIsOnOneLine(this.contextNode); + } + return this.contextNodeAllOnSameLine; + }; + FormattingContext.prototype.NextNodeAllOnSameLine = function () { + if (this.nextNodeAllOnSameLine === null) { + this.nextNodeAllOnSameLine = this.NodeIsOnOneLine(this.nextTokenParent); + } + return this.nextNodeAllOnSameLine; + }; + FormattingContext.prototype.TokensAreOnSameLine = function () { + if (this.tokensAreOnSameLine === null) { + var startLine = this.snapshot.getLineNumberFromPosition(this.currentTokenSpan.start()); + var endLine = this.snapshot.getLineNumberFromPosition(this.nextTokenSpan.start()); + this.tokensAreOnSameLine = (startLine == endLine); + } + return this.tokensAreOnSameLine; + }; + FormattingContext.prototype.ContextNodeBlockIsOnOneLine = function () { + if (this.contextNodeBlockIsOnOneLine === null) { + this.contextNodeBlockIsOnOneLine = this.BlockIsOnOneLine(this.contextNode); + } + return this.contextNodeBlockIsOnOneLine; + }; + FormattingContext.prototype.NextNodeBlockIsOnOneLine = function () { + if (this.nextNodeBlockIsOnOneLine === null) { + this.nextNodeBlockIsOnOneLine = this.BlockIsOnOneLine(this.nextTokenParent); + } + return this.nextNodeBlockIsOnOneLine; + }; + FormattingContext.prototype.NodeIsOnOneLine = function (node) { + var startLine = this.snapshot.getLineNumberFromPosition(node.start()); + var endLine = this.snapshot.getLineNumberFromPosition(node.end()); + return startLine == endLine; + }; + FormattingContext.prototype.BlockIsOnOneLine = function (node) { + var block = node.node(); + return this.snapshot.getLineNumberFromPosition(TypeScript.end(block.openBraceToken)) === this.snapshot.getLineNumberFromPosition(TypeScript.start(block.closeBraceToken)); + }; + return FormattingContext; + })(); + Formatting.FormattingContext = FormattingContext; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var FormattingManager = (function () { + function FormattingManager(syntaxTree, snapshot, rulesProvider, editorOptions) { + this.syntaxTree = syntaxTree; + this.snapshot = snapshot; + this.rulesProvider = rulesProvider; + this.options = new TypeScript.FormattingOptions(!editorOptions.ConvertTabsToSpaces, editorOptions.TabSize, editorOptions.IndentSize, editorOptions.NewLineCharacter); + } + FormattingManager.prototype.formatSelection = function (minChar, limChar) { + var span = TypeScript.TextSpan.fromBounds(minChar, limChar); + return this.formatSpan(span, 1 /* FormatSelection */); + }; + FormattingManager.prototype.formatDocument = function (minChar, limChar) { + var span = TypeScript.TextSpan.fromBounds(minChar, limChar); + return this.formatSpan(span, 0 /* FormatDocument */); + }; + FormattingManager.prototype.formatOnPaste = function (minChar, limChar) { + var span = TypeScript.TextSpan.fromBounds(minChar, limChar); + return this.formatSpan(span, 5 /* FormatOnPaste */); + }; + FormattingManager.prototype.formatOnSemicolon = function (caretPosition) { + var sourceUnit = this.syntaxTree.sourceUnit(); + var semicolonPositionedToken = TypeScript.findToken(sourceUnit, caretPosition - 1); + if (semicolonPositionedToken.kind() === 78 /* SemicolonToken */) { + var current = semicolonPositionedToken; + while (current.parent !== null && TypeScript.end(current.parent) === TypeScript.end(semicolonPositionedToken) && current.parent.kind() !== 1 /* List */) { + current = current.parent; + } + var span = new TypeScript.TextSpan(TypeScript.fullStart(current), TypeScript.fullWidth(current)); + return this.formatSpan(span, 3 /* FormatOnSemicolon */); + } + return []; + }; + FormattingManager.prototype.formatOnClosingCurlyBrace = function (caretPosition) { + var sourceUnit = this.syntaxTree.sourceUnit(); + var closeBracePositionedToken = TypeScript.findToken(sourceUnit, caretPosition - 1); + if (closeBracePositionedToken.kind() === 71 /* CloseBraceToken */) { + var current = closeBracePositionedToken; + while (current.parent !== null && TypeScript.end(current.parent) === TypeScript.end(closeBracePositionedToken) && current.parent.kind() !== 1 /* List */) { + current = current.parent; + } + var span = new TypeScript.TextSpan(TypeScript.fullStart(current), TypeScript.fullWidth(current)); + return this.formatSpan(span, 4 /* FormatOnClosingCurlyBrace */); + } + return []; + }; + FormattingManager.prototype.formatOnEnter = function (caretPosition) { + var lineNumber = this.snapshot.getLineNumberFromPosition(caretPosition); + if (lineNumber > 0) { + var prevLine = this.snapshot.getLineFromLineNumber(lineNumber - 1); + var currentLine = this.snapshot.getLineFromLineNumber(lineNumber); + var span = TypeScript.TextSpan.fromBounds(prevLine.startPosition(), currentLine.endPosition()); + return this.formatSpan(span, 2 /* FormatOnEnter */); + } + return []; + }; + FormattingManager.prototype.formatSpan = function (span, formattingRequestKind) { + var startLine = this.snapshot.getLineFromPosition(span.start()); + span = TypeScript.TextSpan.fromBounds(startLine.startPosition(), span.end()); + var result = []; + var formattingEdits = Formatting.Formatter.getEdits(span, this.syntaxTree.sourceUnit(), this.options, true, this.snapshot, this.rulesProvider, formattingRequestKind); + formattingEdits.forEach(function (item) { + result.push({ + minChar: item.position, + limChar: item.position + item.length, + text: item.replaceWith + }); + }); + return result; + }; + return FormattingManager; + })(); + Formatting.FormattingManager = FormattingManager; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + (function (FormattingRequestKind) { + FormattingRequestKind[FormattingRequestKind["FormatDocument"] = 0] = "FormatDocument"; + FormattingRequestKind[FormattingRequestKind["FormatSelection"] = 1] = "FormatSelection"; + FormattingRequestKind[FormattingRequestKind["FormatOnEnter"] = 2] = "FormatOnEnter"; + FormattingRequestKind[FormattingRequestKind["FormatOnSemicolon"] = 3] = "FormatOnSemicolon"; + FormattingRequestKind[FormattingRequestKind["FormatOnClosingCurlyBrace"] = 4] = "FormatOnClosingCurlyBrace"; + FormattingRequestKind[FormattingRequestKind["FormatOnPaste"] = 5] = "FormatOnPaste"; + })(Formatting.FormattingRequestKind || (Formatting.FormattingRequestKind = {})); + var FormattingRequestKind = Formatting.FormattingRequestKind; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var Rule = (function () { + function Rule(Descriptor, Operation, Flag) { + if (Flag === void 0) { Flag = 0 /* None */; } + this.Descriptor = Descriptor; + this.Operation = Operation; + this.Flag = Flag; + } + Rule.prototype.toString = function () { + return "[desc=" + this.Descriptor + "," + "operation=" + this.Operation + "," + "flag=" + this.Flag + "]"; + }; + return Rule; + })(); + Formatting.Rule = Rule; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + (function (RuleAction) { + RuleAction[RuleAction["Ignore"] = 0] = "Ignore"; + RuleAction[RuleAction["Space"] = 1] = "Space"; + RuleAction[RuleAction["NewLine"] = 2] = "NewLine"; + RuleAction[RuleAction["Delete"] = 3] = "Delete"; + })(Formatting.RuleAction || (Formatting.RuleAction = {})); + var RuleAction = Formatting.RuleAction; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var RuleDescriptor = (function () { + function RuleDescriptor(LeftTokenRange, RightTokenRange) { + this.LeftTokenRange = LeftTokenRange; + this.RightTokenRange = RightTokenRange; + } + RuleDescriptor.prototype.toString = function () { + return "[leftRange=" + this.LeftTokenRange + "," + "rightRange=" + this.RightTokenRange + "]"; + }; + RuleDescriptor.create1 = function (left, right) { + return RuleDescriptor.create4(Formatting.Shared.TokenRange.FromToken(left), Formatting.Shared.TokenRange.FromToken(right)); + }; + RuleDescriptor.create2 = function (left, right) { + return RuleDescriptor.create4(left, Formatting.Shared.TokenRange.FromToken(right)); + }; + RuleDescriptor.create3 = function (left, right) { + return RuleDescriptor.create4(Formatting.Shared.TokenRange.FromToken(left), right); + }; + RuleDescriptor.create4 = function (left, right) { + return new RuleDescriptor(left, right); + }; + return RuleDescriptor; + })(); + Formatting.RuleDescriptor = RuleDescriptor; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + (function (RuleFlags) { + RuleFlags[RuleFlags["None"] = 0] = "None"; + RuleFlags[RuleFlags["CanDeleteNewLines"] = 1] = "CanDeleteNewLines"; + })(Formatting.RuleFlags || (Formatting.RuleFlags = {})); + var RuleFlags = Formatting.RuleFlags; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var RuleOperation = (function () { + function RuleOperation() { + this.Context = null; + this.Action = null; + } + RuleOperation.prototype.toString = function () { + return "[context=" + this.Context + "," + "action=" + this.Action + "]"; + }; + RuleOperation.create1 = function (action) { + return RuleOperation.create2(Formatting.RuleOperationContext.Any, action); + }; + RuleOperation.create2 = function (context, action) { + var result = new RuleOperation(); + result.Context = context; + result.Action = action; + return result; + }; + return RuleOperation; + })(); + Formatting.RuleOperation = RuleOperation; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var RuleOperationContext = (function () { + function RuleOperationContext() { + var funcs = []; + for (var _i = 0; _i < arguments.length; _i++) { + funcs[_i - 0] = arguments[_i]; + } + this.customContextChecks = funcs; + } + RuleOperationContext.prototype.IsAny = function () { + return this == RuleOperationContext.Any; + }; + RuleOperationContext.prototype.InContext = function (context) { + if (this.IsAny()) { + return true; + } + for (var i = 0, len = this.customContextChecks.length; i < len; i++) { + if (!this.customContextChecks[i](context)) { + return false; + } + } + return true; + }; + RuleOperationContext.Any = new RuleOperationContext(); + return RuleOperationContext; + })(); + Formatting.RuleOperationContext = RuleOperationContext; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var Rules = (function () { + function Rules() { + this.IgnoreBeforeComment = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.Any, Formatting.Shared.TokenRange.Comments), Formatting.RuleOperation.create1(0 /* Ignore */)); + this.IgnoreAfterLineComment = new Formatting.Rule(Formatting.RuleDescriptor.create3(7 /* SingleLineCommentTrivia */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create1(0 /* Ignore */)); + this.NoSpaceBeforeSemicolon = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 78 /* SemicolonToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.NoSpaceBeforeColon = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 106 /* ColonToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 3 /* Delete */)); + this.NoSpaceBeforeQMark = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 105 /* QuestionToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 3 /* Delete */)); + this.SpaceAfterColon = new Formatting.Rule(Formatting.RuleDescriptor.create3(106 /* ColonToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 1 /* Space */)); + this.SpaceAfterQMark = new Formatting.Rule(Formatting.RuleDescriptor.create3(105 /* QuestionToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 1 /* Space */)); + this.SpaceAfterSemicolon = new Formatting.Rule(Formatting.RuleDescriptor.create3(78 /* SemicolonToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); + this.SpaceAfterCloseBrace = new Formatting.Rule(Formatting.RuleDescriptor.create3(71 /* CloseBraceToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsAfterCodeBlockContext), 1 /* Space */)); + this.SpaceBetweenCloseBraceAndElse = new Formatting.Rule(Formatting.RuleDescriptor.create1(71 /* CloseBraceToken */, 23 /* ElseKeyword */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); + this.SpaceBetweenCloseBraceAndWhile = new Formatting.Rule(Formatting.RuleDescriptor.create1(71 /* CloseBraceToken */, 42 /* WhileKeyword */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); + this.NoSpaceAfterCloseBrace = new Formatting.Rule(Formatting.RuleDescriptor.create3(71 /* CloseBraceToken */, Formatting.Shared.TokenRange.FromTokens([73 /* CloseParenToken */, 75 /* CloseBracketToken */, 79 /* CommaToken */, 78 /* SemicolonToken */])), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.NoSpaceBeforeDot = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 76 /* DotToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.NoSpaceAfterDot = new Formatting.Rule(Formatting.RuleDescriptor.create3(76 /* DotToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.NoSpaceBeforeOpenBracket = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 74 /* OpenBracketToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.NoSpaceAfterOpenBracket = new Formatting.Rule(Formatting.RuleDescriptor.create3(74 /* OpenBracketToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.NoSpaceBeforeCloseBracket = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 75 /* CloseBracketToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.NoSpaceAfterCloseBracket = new Formatting.Rule(Formatting.RuleDescriptor.create3(75 /* CloseBracketToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.FunctionOpenBraceLeftTokenRange = Formatting.Shared.TokenRange.AnyIncludingMultilineComments; + this.SpaceBeforeOpenBraceInFunction = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.FunctionOpenBraceLeftTokenRange, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 1 /* Space */), 1 /* CanDeleteNewLines */); + this.TypeScriptOpenBraceLeftTokenRange = Formatting.Shared.TokenRange.FromTokens([11 /* IdentifierName */, 6 /* MultiLineCommentTrivia */]); + this.SpaceBeforeOpenBraceInTypeScriptDeclWithBlock = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.TypeScriptOpenBraceLeftTokenRange, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsTypeScriptDeclWithBlockContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 1 /* Space */), 1 /* CanDeleteNewLines */); + this.ControlOpenBraceLeftTokenRange = Formatting.Shared.TokenRange.FromTokens([73 /* CloseParenToken */, 6 /* MultiLineCommentTrivia */, 22 /* DoKeyword */, 38 /* TryKeyword */, 25 /* FinallyKeyword */, 23 /* ElseKeyword */]); + this.SpaceBeforeOpenBraceInControl = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.ControlOpenBraceLeftTokenRange, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsControlDeclContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 1 /* Space */), 1 /* CanDeleteNewLines */); + this.SpaceAfterOpenBrace = new Formatting.Rule(Formatting.RuleDescriptor.create3(70 /* OpenBraceToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSingleLineBlockContext), 1 /* Space */)); + this.SpaceBeforeCloseBrace = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 71 /* CloseBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSingleLineBlockContext), 1 /* Space */)); + this.NoSpaceBetweenEmptyBraceBrackets = new Formatting.Rule(Formatting.RuleDescriptor.create1(70 /* OpenBraceToken */, 71 /* CloseBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsObjectContext), 3 /* Delete */)); + this.NewLineAfterOpenBraceInBlockContext = new Formatting.Rule(Formatting.RuleDescriptor.create3(70 /* OpenBraceToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsMultilineBlockContext), 2 /* NewLine */)); + this.NewLineBeforeCloseBraceInBlockContext = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.AnyIncludingMultilineComments, 71 /* CloseBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsMultilineBlockContext), 2 /* NewLine */)); + this.NoSpaceAfterUnaryPrefixOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.UnaryPrefixOperators, Formatting.Shared.TokenRange.UnaryPrefixExpressions), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 3 /* Delete */)); + this.NoSpaceAfterUnaryPreincrementOperator = new Formatting.Rule(Formatting.RuleDescriptor.create3(93 /* PlusPlusToken */, Formatting.Shared.TokenRange.UnaryPreincrementExpressions), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.NoSpaceAfterUnaryPredecrementOperator = new Formatting.Rule(Formatting.RuleDescriptor.create3(94 /* MinusMinusToken */, Formatting.Shared.TokenRange.UnaryPredecrementExpressions), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.NoSpaceBeforeUnaryPostincrementOperator = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.UnaryPostincrementExpressions, 93 /* PlusPlusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.NoSpaceBeforeUnaryPostdecrementOperator = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.UnaryPostdecrementExpressions, 94 /* MinusMinusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.SpaceAfterPostincrementWhenFollowedByAdd = new Formatting.Rule(Formatting.RuleDescriptor.create1(93 /* PlusPlusToken */, 89 /* PlusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); + this.SpaceAfterAddWhenFollowedByUnaryPlus = new Formatting.Rule(Formatting.RuleDescriptor.create1(89 /* PlusToken */, 89 /* PlusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); + this.SpaceAfterAddWhenFollowedByPreincrement = new Formatting.Rule(Formatting.RuleDescriptor.create1(89 /* PlusToken */, 93 /* PlusPlusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); + this.SpaceAfterPostdecrementWhenFollowedBySubtract = new Formatting.Rule(Formatting.RuleDescriptor.create1(94 /* MinusMinusToken */, 90 /* MinusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); + this.SpaceAfterSubtractWhenFollowedByUnaryMinus = new Formatting.Rule(Formatting.RuleDescriptor.create1(90 /* MinusToken */, 90 /* MinusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); + this.SpaceAfterSubtractWhenFollowedByPredecrement = new Formatting.Rule(Formatting.RuleDescriptor.create1(90 /* MinusToken */, 94 /* MinusMinusToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); + this.NoSpaceBeforeComma = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 79 /* CommaToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.SpaceAfterCertainKeywords = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.FromTokens([40 /* VarKeyword */, 36 /* ThrowKeyword */, 31 /* NewKeyword */, 21 /* DeleteKeyword */, 33 /* ReturnKeyword */, 39 /* TypeOfKeyword */]), Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); + this.NoSpaceBeforeOpenParenInFuncCall = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsFunctionCallOrNewContext), 3 /* Delete */)); + this.SpaceAfterFunctionInFuncDecl = new Formatting.Rule(Formatting.RuleDescriptor.create3(27 /* FunctionKeyword */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 1 /* Space */)); + this.NoSpaceBeforeOpenParenInFuncDecl = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsFunctionDeclContext), 3 /* Delete */)); + this.SpaceAfterVoidOperator = new Formatting.Rule(Formatting.RuleDescriptor.create3(41 /* VoidKeyword */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsVoidOpContext), 1 /* Space */)); + this.NoSpaceBetweenReturnAndSemicolon = new Formatting.Rule(Formatting.RuleDescriptor.create1(33 /* ReturnKeyword */, 78 /* SemicolonToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.SpaceBetweenStatements = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.FromTokens([73 /* CloseParenToken */, 22 /* DoKeyword */, 23 /* ElseKeyword */, 16 /* CaseKeyword */]), Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotForContext), 1 /* Space */)); + this.SpaceAfterTryFinally = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.FromTokens([38 /* TryKeyword */, 25 /* FinallyKeyword */]), 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); + this.SpaceAfterGetSetInMember = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.FromTokens([64 /* GetKeyword */, 68 /* SetKeyword */]), 11 /* IdentifierName */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 1 /* Space */)); + this.SpaceBeforeBinaryKeywordOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.Any, Formatting.Shared.TokenRange.BinaryKeywordOperators), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); + this.SpaceAfterBinaryKeywordOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.BinaryKeywordOperators, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); + this.NoSpaceAfterConstructor = new Formatting.Rule(Formatting.RuleDescriptor.create1(62 /* ConstructorKeyword */, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.NoSpaceAfterModuleImport = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.FromTokens([65 /* ModuleKeyword */, 66 /* RequireKeyword */]), 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.SpaceAfterCertainTypeScriptKeywords = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.FromTokens([44 /* ClassKeyword */, 63 /* DeclareKeyword */, 46 /* EnumKeyword */, 47 /* ExportKeyword */, 48 /* ExtendsKeyword */, 64 /* GetKeyword */, 51 /* ImplementsKeyword */, 49 /* ImportKeyword */, 52 /* InterfaceKeyword */, 65 /* ModuleKeyword */, 55 /* PrivateKeyword */, 57 /* PublicKeyword */, 68 /* SetKeyword */, 58 /* StaticKeyword */]), Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); + this.SpaceBeforeCertainTypeScriptKeywords = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.Any, Formatting.Shared.TokenRange.FromTokens([48 /* ExtendsKeyword */, 51 /* ImplementsKeyword */])), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); + this.SpaceAfterModuleName = new Formatting.Rule(Formatting.RuleDescriptor.create1(14 /* StringLiteral */, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsModuleDeclContext), 1 /* Space */)); + this.SpaceAfterArrow = new Formatting.Rule(Formatting.RuleDescriptor.create3(85 /* EqualsGreaterThanToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); + this.NoSpaceAfterEllipsis = new Formatting.Rule(Formatting.RuleDescriptor.create1(77 /* DotDotDotToken */, 11 /* IdentifierName */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.NoSpaceAfterOptionalParameters = new Formatting.Rule(Formatting.RuleDescriptor.create3(105 /* QuestionToken */, Formatting.Shared.TokenRange.FromTokens([73 /* CloseParenToken */, 79 /* CommaToken */])), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotBinaryOpContext), 3 /* Delete */)); + this.NoSpaceBeforeOpenAngularBracket = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.TypeNames, 80 /* LessThanToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 3 /* Delete */)); + this.NoSpaceBetweenCloseParenAndAngularBracket = new Formatting.Rule(Formatting.RuleDescriptor.create1(73 /* CloseParenToken */, 80 /* LessThanToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 3 /* Delete */)); + this.NoSpaceAfterOpenAngularBracket = new Formatting.Rule(Formatting.RuleDescriptor.create3(80 /* LessThanToken */, Formatting.Shared.TokenRange.TypeNames), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 3 /* Delete */)); + this.NoSpaceBeforeCloseAngularBracket = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 81 /* GreaterThanToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 3 /* Delete */)); + this.NoSpaceAfterCloseAngularBracket = new Formatting.Rule(Formatting.RuleDescriptor.create3(81 /* GreaterThanToken */, Formatting.Shared.TokenRange.FromTokens([72 /* OpenParenToken */, 74 /* OpenBracketToken */, 81 /* GreaterThanToken */, 79 /* CommaToken */])), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsTypeArgumentOrParameterContext), 3 /* Delete */)); + this.NoSpaceBetweenEmptyInterfaceBraceBrackets = new Formatting.Rule(Formatting.RuleDescriptor.create1(70 /* OpenBraceToken */, 71 /* CloseBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsObjectTypeContext), 3 /* Delete */)); + this.HighPriorityCommonRules = [ + this.IgnoreBeforeComment, + this.IgnoreAfterLineComment, + this.NoSpaceBeforeColon, + this.SpaceAfterColon, + this.NoSpaceBeforeQMark, + this.SpaceAfterQMark, + this.NoSpaceBeforeDot, + this.NoSpaceAfterDot, + this.NoSpaceAfterUnaryPrefixOperator, + this.NoSpaceAfterUnaryPreincrementOperator, + this.NoSpaceAfterUnaryPredecrementOperator, + this.NoSpaceBeforeUnaryPostincrementOperator, + this.NoSpaceBeforeUnaryPostdecrementOperator, + this.SpaceAfterPostincrementWhenFollowedByAdd, + this.SpaceAfterAddWhenFollowedByUnaryPlus, + this.SpaceAfterAddWhenFollowedByPreincrement, + this.SpaceAfterPostdecrementWhenFollowedBySubtract, + this.SpaceAfterSubtractWhenFollowedByUnaryMinus, + this.SpaceAfterSubtractWhenFollowedByPredecrement, + this.NoSpaceAfterCloseBrace, + this.SpaceAfterOpenBrace, + this.SpaceBeforeCloseBrace, + this.NewLineBeforeCloseBraceInBlockContext, + this.SpaceAfterCloseBrace, + this.SpaceBetweenCloseBraceAndElse, + this.SpaceBetweenCloseBraceAndWhile, + this.NoSpaceBetweenEmptyBraceBrackets, + this.SpaceAfterFunctionInFuncDecl, + this.NewLineAfterOpenBraceInBlockContext, + this.SpaceAfterGetSetInMember, + this.NoSpaceBetweenReturnAndSemicolon, + this.SpaceAfterCertainKeywords, + this.NoSpaceBeforeOpenParenInFuncCall, + this.SpaceBeforeBinaryKeywordOperator, + this.SpaceAfterBinaryKeywordOperator, + this.SpaceAfterVoidOperator, + this.NoSpaceAfterConstructor, + this.NoSpaceAfterModuleImport, + this.SpaceAfterCertainTypeScriptKeywords, + this.SpaceBeforeCertainTypeScriptKeywords, + this.SpaceAfterModuleName, + this.SpaceAfterArrow, + this.NoSpaceAfterEllipsis, + this.NoSpaceAfterOptionalParameters, + this.NoSpaceBetweenEmptyInterfaceBraceBrackets, + this.NoSpaceBeforeOpenAngularBracket, + this.NoSpaceBetweenCloseParenAndAngularBracket, + this.NoSpaceAfterOpenAngularBracket, + this.NoSpaceBeforeCloseAngularBracket, + this.NoSpaceAfterCloseAngularBracket + ]; + this.LowPriorityCommonRules = [ + this.NoSpaceBeforeSemicolon, + this.SpaceBeforeOpenBraceInControl, + this.SpaceBeforeOpenBraceInFunction, + this.SpaceBeforeOpenBraceInTypeScriptDeclWithBlock, + this.NoSpaceBeforeComma, + this.NoSpaceBeforeOpenBracket, + this.NoSpaceAfterOpenBracket, + this.NoSpaceBeforeCloseBracket, + this.NoSpaceAfterCloseBracket, + this.SpaceAfterSemicolon, + this.NoSpaceBeforeOpenParenInFuncDecl, + this.SpaceBetweenStatements, + this.SpaceAfterTryFinally + ]; + this.SpaceAfterComma = new Formatting.Rule(Formatting.RuleDescriptor.create3(79 /* CommaToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); + this.NoSpaceAfterComma = new Formatting.Rule(Formatting.RuleDescriptor.create3(79 /* CommaToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.SpaceBeforeBinaryOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.Any, Formatting.Shared.TokenRange.BinaryOperators), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); + this.SpaceAfterBinaryOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.BinaryOperators, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 1 /* Space */)); + this.NoSpaceBeforeBinaryOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.Any, Formatting.Shared.TokenRange.BinaryOperators), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 3 /* Delete */)); + this.NoSpaceAfterBinaryOperator = new Formatting.Rule(Formatting.RuleDescriptor.create4(Formatting.Shared.TokenRange.BinaryOperators, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsBinaryOpContext), 3 /* Delete */)); + this.SpaceAfterKeywordInControl = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Keywords, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsControlDeclContext), 1 /* Space */)); + this.NoSpaceAfterKeywordInControl = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Keywords, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsControlDeclContext), 3 /* Delete */)); + this.NewLineBeforeOpenBraceInFunction = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.FunctionOpenBraceLeftTokenRange, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext, Rules.IsBeforeMultilineBlockContext), 2 /* NewLine */), 1 /* CanDeleteNewLines */); + this.NewLineBeforeOpenBraceInTypeScriptDeclWithBlock = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.TypeScriptOpenBraceLeftTokenRange, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsTypeScriptDeclWithBlockContext, Rules.IsBeforeMultilineBlockContext), 2 /* NewLine */), 1 /* CanDeleteNewLines */); + this.NewLineBeforeOpenBraceInControl = new Formatting.Rule(Formatting.RuleDescriptor.create2(this.ControlOpenBraceLeftTokenRange, 70 /* OpenBraceToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsControlDeclContext, Rules.IsBeforeMultilineBlockContext), 2 /* NewLine */), 1 /* CanDeleteNewLines */); + this.SpaceAfterSemicolonInFor = new Formatting.Rule(Formatting.RuleDescriptor.create3(78 /* SemicolonToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsForContext), 1 /* Space */)); + this.NoSpaceAfterSemicolonInFor = new Formatting.Rule(Formatting.RuleDescriptor.create3(78 /* SemicolonToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsForContext), 3 /* Delete */)); + this.SpaceAfterOpenParen = new Formatting.Rule(Formatting.RuleDescriptor.create3(72 /* OpenParenToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); + this.SpaceBeforeCloseParen = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 73 /* CloseParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 1 /* Space */)); + this.NoSpaceBetweenParens = new Formatting.Rule(Formatting.RuleDescriptor.create1(72 /* OpenParenToken */, 73 /* CloseParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.NoSpaceAfterOpenParen = new Formatting.Rule(Formatting.RuleDescriptor.create3(72 /* OpenParenToken */, Formatting.Shared.TokenRange.Any), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.NoSpaceBeforeCloseParen = new Formatting.Rule(Formatting.RuleDescriptor.create2(Formatting.Shared.TokenRange.Any, 73 /* CloseParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsSameLineTokenContext), 3 /* Delete */)); + this.SpaceAfterAnonymousFunctionKeyword = new Formatting.Rule(Formatting.RuleDescriptor.create1(27 /* FunctionKeyword */, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 1 /* Space */)); + this.NoSpaceAfterAnonymousFunctionKeyword = new Formatting.Rule(Formatting.RuleDescriptor.create1(27 /* FunctionKeyword */, 72 /* OpenParenToken */), Formatting.RuleOperation.create2(new Formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 3 /* Delete */)); + } + Rules.prototype.getRuleName = function (rule) { + var o = this; + for (var name in o) { + if (o[name] === rule) { + return name; + } + } + throw new Error(TypeScript.getDiagnosticMessage(TypeScript.DiagnosticCode.Unknown_rule, null)); + }; + Rules.IsForContext = function (context) { + return context.contextNode.kind() === 154 /* ForStatement */; + }; + Rules.IsNotForContext = function (context) { + return !Rules.IsForContext(context); + }; + Rules.IsBinaryOpContext = function (context) { + switch (context.contextNode.kind()) { + case 174 /* AssignmentExpression */: + case 175 /* AddAssignmentExpression */: + case 176 /* SubtractAssignmentExpression */: + case 177 /* MultiplyAssignmentExpression */: + case 178 /* DivideAssignmentExpression */: + case 179 /* ModuloAssignmentExpression */: + case 180 /* AndAssignmentExpression */: + case 181 /* ExclusiveOrAssignmentExpression */: + case 182 /* OrAssignmentExpression */: + case 183 /* LeftShiftAssignmentExpression */: + case 184 /* SignedRightShiftAssignmentExpression */: + case 185 /* UnsignedRightShiftAssignmentExpression */: + case 186 /* ConditionalExpression */: + case 187 /* LogicalOrExpression */: + case 188 /* LogicalAndExpression */: + case 189 /* BitwiseOrExpression */: + case 190 /* BitwiseExclusiveOrExpression */: + case 191 /* BitwiseAndExpression */: + case 192 /* EqualsWithTypeConversionExpression */: + case 193 /* NotEqualsWithTypeConversionExpression */: + case 194 /* EqualsExpression */: + case 195 /* NotEqualsExpression */: + case 196 /* LessThanExpression */: + case 197 /* GreaterThanExpression */: + case 198 /* LessThanOrEqualExpression */: + case 199 /* GreaterThanOrEqualExpression */: + case 200 /* InstanceOfExpression */: + case 201 /* InExpression */: + case 202 /* LeftShiftExpression */: + case 203 /* SignedRightShiftExpression */: + case 204 /* UnsignedRightShiftExpression */: + case 205 /* MultiplyExpression */: + case 206 /* DivideExpression */: + case 207 /* ModuloExpression */: + case 208 /* AddExpression */: + case 209 /* SubtractExpression */: + return true; + case 133 /* ImportDeclaration */: + case 225 /* VariableDeclarator */: + case 232 /* EqualsValueClause */: + return context.currentTokenSpan.kind === 107 /* EqualsToken */ || context.nextTokenSpan.kind === 107 /* EqualsToken */; + case 155 /* ForInStatement */: + return context.currentTokenSpan.kind === 29 /* InKeyword */ || context.nextTokenSpan.kind === 29 /* InKeyword */; + } + return false; + }; + Rules.IsNotBinaryOpContext = function (context) { + return !Rules.IsBinaryOpContext(context); + }; + Rules.IsSameLineTokenOrBeforeMultilineBlockContext = function (context) { + return context.TokensAreOnSameLine() || Rules.IsBeforeMultilineBlockContext(context); + }; + Rules.IsBeforeMultilineBlockContext = function (context) { + return Rules.IsBeforeBlockContext(context) && !(context.NextNodeAllOnSameLine() || context.NextNodeBlockIsOnOneLine()); + }; + Rules.IsMultilineBlockContext = function (context) { + return Rules.IsBlockContext(context) && !(context.ContextNodeAllOnSameLine() || context.ContextNodeBlockIsOnOneLine()); + }; + Rules.IsSingleLineBlockContext = function (context) { + return Rules.IsBlockContext(context) && (context.ContextNodeAllOnSameLine() || context.ContextNodeBlockIsOnOneLine()); + }; + Rules.IsBlockContext = function (context) { + return Rules.NodeIsBlockContext(context.contextNode); + }; + Rules.IsBeforeBlockContext = function (context) { + return Rules.NodeIsBlockContext(context.nextTokenParent); + }; + Rules.NodeIsBlockContext = function (node) { + if (Rules.NodeIsTypeScriptDeclWithBlockContext(node)) { + return true; + } + switch (node.kind()) { + case 146 /* Block */: + case 151 /* SwitchStatement */: + case 215 /* ObjectLiteralExpression */: + return true; + } + return false; + }; + Rules.IsFunctionDeclContext = function (context) { + switch (context.contextNode.kind()) { + case 129 /* FunctionDeclaration */: + case 135 /* MemberFunctionDeclaration */: + case 139 /* GetAccessor */: + case 140 /* SetAccessor */: + case 145 /* MethodSignature */: + case 142 /* CallSignature */: + case 222 /* FunctionExpression */: + case 137 /* ConstructorDeclaration */: + case 219 /* SimpleArrowFunctionExpression */: + case 218 /* ParenthesizedArrowFunctionExpression */: + case 128 /* InterfaceDeclaration */: + return true; + } + return false; + }; + Rules.IsTypeScriptDeclWithBlockContext = function (context) { + return Rules.NodeIsTypeScriptDeclWithBlockContext(context.contextNode); + }; + Rules.NodeIsTypeScriptDeclWithBlockContext = function (node) { + switch (node.kind()) { + case 131 /* ClassDeclaration */: + case 132 /* EnumDeclaration */: + case 122 /* ObjectType */: + case 130 /* ModuleDeclaration */: + return true; + } + return false; + }; + Rules.IsAfterCodeBlockContext = function (context) { + switch (context.currentTokenParent.kind()) { + case 131 /* ClassDeclaration */: + case 130 /* ModuleDeclaration */: + case 132 /* EnumDeclaration */: + case 146 /* Block */: + case 151 /* SwitchStatement */: + return true; + } + return false; + }; + Rules.IsControlDeclContext = function (context) { + switch (context.contextNode.kind()) { + case 147 /* IfStatement */: + case 151 /* SwitchStatement */: + case 154 /* ForStatement */: + case 155 /* ForInStatement */: + case 158 /* WhileStatement */: + case 159 /* TryStatement */: + case 161 /* DoStatement */: + case 163 /* WithStatement */: + case 235 /* ElseClause */: + case 236 /* CatchClause */: + case 237 /* FinallyClause */: + return true; + default: + return false; + } + }; + Rules.IsObjectContext = function (context) { + return context.contextNode.kind() === 215 /* ObjectLiteralExpression */; + }; + Rules.IsFunctionCallContext = function (context) { + return context.contextNode.kind() === 213 /* InvocationExpression */; + }; + Rules.IsNewContext = function (context) { + return context.contextNode.kind() === 216 /* ObjectCreationExpression */; + }; + Rules.IsFunctionCallOrNewContext = function (context) { + return Rules.IsFunctionCallContext(context) || Rules.IsNewContext(context); + }; + Rules.IsSameLineTokenContext = function (context) { + return context.TokensAreOnSameLine(); + }; + Rules.IsNotFormatOnEnter = function (context) { + return context.formattingRequestKind != 2 /* FormatOnEnter */; + }; + Rules.IsModuleDeclContext = function (context) { + return context.contextNode.kind() === 130 /* ModuleDeclaration */; + }; + Rules.IsObjectTypeContext = function (context) { + return context.contextNode.kind() === 122 /* ObjectType */ && context.contextNode.parent().kind() !== 128 /* InterfaceDeclaration */; + }; + Rules.IsTypeArgumentOrParameter = function (tokenKind, parentKind) { + return ((tokenKind === 80 /* LessThanToken */ || tokenKind === 81 /* GreaterThanToken */) && (parentKind === 229 /* TypeParameterList */ || parentKind === 228 /* TypeArgumentList */)); + }; + Rules.IsTypeArgumentOrParameterContext = function (context) { + return Rules.IsTypeArgumentOrParameter(context.currentTokenSpan.kind, context.currentTokenParent.kind()) || Rules.IsTypeArgumentOrParameter(context.nextTokenSpan.kind, context.nextTokenParent.kind()); + }; + Rules.IsVoidOpContext = function (context) { + return context.currentTokenSpan.kind === 41 /* VoidKeyword */ && context.currentTokenParent.kind() === 172 /* VoidExpression */; + }; + return Rules; + })(); + Formatting.Rules = Rules; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var RulesMap = (function () { + function RulesMap() { + this.map = []; + this.mapRowLength = 0; + } + RulesMap.create = function (rules) { + var result = new RulesMap(); + result.Initialize(rules); + return result; + }; + RulesMap.prototype.Initialize = function (rules) { + this.mapRowLength = TypeScript.SyntaxKind.LastToken + 1; + this.map = new Array(this.mapRowLength * this.mapRowLength); + var rulesBucketConstructionStateList = new Array(this.map.length); + this.FillRules(rules, rulesBucketConstructionStateList); + return this.map; + }; + RulesMap.prototype.FillRules = function (rules, rulesBucketConstructionStateList) { + var _this = this; + rules.forEach(function (rule) { + _this.FillRule(rule, rulesBucketConstructionStateList); + }); + }; + RulesMap.prototype.GetRuleBucketIndex = function (row, column) { + var rulesBucketIndex = (row * this.mapRowLength) + column; + return rulesBucketIndex; + }; + RulesMap.prototype.FillRule = function (rule, rulesBucketConstructionStateList) { + var _this = this; + var specificRule = rule.Descriptor.LeftTokenRange != Formatting.Shared.TokenRange.Any && rule.Descriptor.RightTokenRange != Formatting.Shared.TokenRange.Any; + rule.Descriptor.LeftTokenRange.GetTokens().forEach(function (left) { + rule.Descriptor.RightTokenRange.GetTokens().forEach(function (right) { + var rulesBucketIndex = _this.GetRuleBucketIndex(left, right); + var rulesBucket = _this.map[rulesBucketIndex]; + if (rulesBucket == undefined) { + rulesBucket = _this.map[rulesBucketIndex] = new RulesBucket(); + } + rulesBucket.AddRule(rule, specificRule, rulesBucketConstructionStateList, rulesBucketIndex); + }); + }); + }; + RulesMap.prototype.GetRule = function (context) { + var bucketIndex = this.GetRuleBucketIndex(context.currentTokenSpan.kind, context.nextTokenSpan.kind); + var bucket = this.map[bucketIndex]; + if (bucket != null) { + for (var i = 0, len = bucket.Rules().length; i < len; i++) { + var rule = bucket.Rules()[i]; + if (rule.Operation.Context.InContext(context)) + return rule; + } + } + return null; + }; + return RulesMap; + })(); + Formatting.RulesMap = RulesMap; + var MaskBitSize = 5; + var Mask = 0x1f; + (function (RulesPosition) { + RulesPosition[RulesPosition["IgnoreRulesSpecific"] = 0] = "IgnoreRulesSpecific"; + RulesPosition[RulesPosition["IgnoreRulesAny"] = MaskBitSize * 1] = "IgnoreRulesAny"; + RulesPosition[RulesPosition["ContextRulesSpecific"] = MaskBitSize * 2] = "ContextRulesSpecific"; + RulesPosition[RulesPosition["ContextRulesAny"] = MaskBitSize * 3] = "ContextRulesAny"; + RulesPosition[RulesPosition["NoContextRulesSpecific"] = MaskBitSize * 4] = "NoContextRulesSpecific"; + RulesPosition[RulesPosition["NoContextRulesAny"] = MaskBitSize * 5] = "NoContextRulesAny"; + })(Formatting.RulesPosition || (Formatting.RulesPosition = {})); + var RulesPosition = Formatting.RulesPosition; + var RulesBucketConstructionState = (function () { + function RulesBucketConstructionState() { + this.rulesInsertionIndexBitmap = 0; + } + RulesBucketConstructionState.prototype.GetInsertionIndex = function (maskPosition) { + var index = 0; + var pos = 0; + var indexBitmap = this.rulesInsertionIndexBitmap; + while (pos <= maskPosition) { + index += (indexBitmap & Mask); + indexBitmap >>= MaskBitSize; + pos += MaskBitSize; + } + return index; + }; + RulesBucketConstructionState.prototype.IncreaseInsertionIndex = function (maskPosition) { + var value = (this.rulesInsertionIndexBitmap >> maskPosition) & Mask; + value++; + TypeScript.Debug.assert((value & Mask) == value, "Adding more rules into the sub-bucket than allowed. Maximum allowed is 32 rules."); + var temp = this.rulesInsertionIndexBitmap & ~(Mask << maskPosition); + temp |= value << maskPosition; + this.rulesInsertionIndexBitmap = temp; + }; + return RulesBucketConstructionState; + })(); + Formatting.RulesBucketConstructionState = RulesBucketConstructionState; + var RulesBucket = (function () { + function RulesBucket() { + this.rules = []; + } + RulesBucket.prototype.Rules = function () { + return this.rules; + }; + RulesBucket.prototype.AddRule = function (rule, specificTokens, constructionState, rulesBucketIndex) { + var position; + if (rule.Operation.Action == 0 /* Ignore */) { + position = specificTokens ? 0 /* IgnoreRulesSpecific */ : RulesPosition.IgnoreRulesAny; + } + else if (!rule.Operation.Context.IsAny()) { + position = specificTokens ? RulesPosition.ContextRulesSpecific : RulesPosition.ContextRulesAny; + } + else { + position = specificTokens ? RulesPosition.NoContextRulesSpecific : RulesPosition.NoContextRulesAny; + } + var state = constructionState[rulesBucketIndex]; + if (state === undefined) { + state = constructionState[rulesBucketIndex] = new RulesBucketConstructionState(); + } + var index = state.GetInsertionIndex(position); + this.rules.splice(index, 0, rule); + state.IncreaseInsertionIndex(position); + }; + return RulesBucket; + })(); + Formatting.RulesBucket = RulesBucket; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var RulesProvider = (function () { + function RulesProvider(logger) { + this.logger = logger; + this.globalRules = new Formatting.Rules(); + } + RulesProvider.prototype.getRuleName = function (rule) { + return this.globalRules.getRuleName(rule); + }; + RulesProvider.prototype.getRuleByName = function (name) { + return this.globalRules[name]; + }; + RulesProvider.prototype.getRulesMap = function () { + return this.rulesMap; + }; + RulesProvider.prototype.ensureUpToDate = function (options) { + var _this = this; + if (this.options == null || !ts.compareDataObjects(this.options, options)) { + var activeRules = TypeScript.timeFunction(this.logger, "RulesProvider: createActiveRules()", function () { + return _this.createActiveRules(options); + }); + var rulesMap = TypeScript.timeFunction(this.logger, "RulesProvider: RulesMap.create()", function () { + return Formatting.RulesMap.create(activeRules); + }); + this.activeRules = activeRules; + this.rulesMap = rulesMap; + this.options = ts.clone(options); + } + }; + RulesProvider.prototype.createActiveRules = function (options) { + var rules = this.globalRules.HighPriorityCommonRules.slice(0); + if (options.InsertSpaceAfterCommaDelimiter) { + rules.push(this.globalRules.SpaceAfterComma); + } + else { + rules.push(this.globalRules.NoSpaceAfterComma); + } + if (options.InsertSpaceAfterFunctionKeywordForAnonymousFunctions) { + rules.push(this.globalRules.SpaceAfterAnonymousFunctionKeyword); + } + else { + rules.push(this.globalRules.NoSpaceAfterAnonymousFunctionKeyword); + } + if (options.InsertSpaceAfterKeywordsInControlFlowStatements) { + rules.push(this.globalRules.SpaceAfterKeywordInControl); + } + else { + rules.push(this.globalRules.NoSpaceAfterKeywordInControl); + } + if (options.InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis) { + rules.push(this.globalRules.SpaceAfterOpenParen); + rules.push(this.globalRules.SpaceBeforeCloseParen); + rules.push(this.globalRules.NoSpaceBetweenParens); + } + else { + rules.push(this.globalRules.NoSpaceAfterOpenParen); + rules.push(this.globalRules.NoSpaceBeforeCloseParen); + rules.push(this.globalRules.NoSpaceBetweenParens); + } + if (options.InsertSpaceAfterSemicolonInForStatements) { + rules.push(this.globalRules.SpaceAfterSemicolonInFor); + } + else { + rules.push(this.globalRules.NoSpaceAfterSemicolonInFor); + } + if (options.InsertSpaceBeforeAndAfterBinaryOperators) { + rules.push(this.globalRules.SpaceBeforeBinaryOperator); + rules.push(this.globalRules.SpaceAfterBinaryOperator); + } + else { + rules.push(this.globalRules.NoSpaceBeforeBinaryOperator); + rules.push(this.globalRules.NoSpaceAfterBinaryOperator); + } + if (options.PlaceOpenBraceOnNewLineForControlBlocks) { + rules.push(this.globalRules.NewLineBeforeOpenBraceInControl); + } + if (options.PlaceOpenBraceOnNewLineForFunctions) { + rules.push(this.globalRules.NewLineBeforeOpenBraceInFunction); + rules.push(this.globalRules.NewLineBeforeOpenBraceInTypeScriptDeclWithBlock); + } + rules = rules.concat(this.globalRules.LowPriorityCommonRules); + return rules; + }; + return RulesProvider; + })(); + Formatting.RulesProvider = RulesProvider; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var TextEditInfo = (function () { + function TextEditInfo(position, length, replaceWith) { + this.position = position; + this.length = length; + this.replaceWith = replaceWith; + } + TextEditInfo.prototype.toString = function () { + return "[ position: " + this.position + ", length: " + this.length + ", replaceWith: '" + this.replaceWith + "' ]"; + }; + return TextEditInfo; + })(); + Formatting.TextEditInfo = TextEditInfo; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + (function (Shared) { + var TokenRangeAccess = (function () { + function TokenRangeAccess(from, to, except) { + this.tokens = []; + for (var token = from; token <= to; token++) { + if (except.indexOf(token) < 0) { + this.tokens.push(token); + } + } + } + TokenRangeAccess.prototype.GetTokens = function () { + return this.tokens; + }; + TokenRangeAccess.prototype.Contains = function (token) { + return this.tokens.indexOf(token) >= 0; + }; + TokenRangeAccess.prototype.toString = function () { + return "[tokenRangeStart=" + TypeScript.SyntaxKind[this.tokens[0]] + "," + "tokenRangeEnd=" + TypeScript.SyntaxKind[this.tokens[this.tokens.length - 1]] + "]"; + }; + return TokenRangeAccess; + })(); + Shared.TokenRangeAccess = TokenRangeAccess; + var TokenValuesAccess = (function () { + function TokenValuesAccess(tks) { + this.tokens = tks && tks.length ? tks : []; + } + TokenValuesAccess.prototype.GetTokens = function () { + return this.tokens; + }; + TokenValuesAccess.prototype.Contains = function (token) { + return this.tokens.indexOf(token) >= 0; + }; + return TokenValuesAccess; + })(); + Shared.TokenValuesAccess = TokenValuesAccess; + var TokenSingleValueAccess = (function () { + function TokenSingleValueAccess(token) { + this.token = token; + } + TokenSingleValueAccess.prototype.GetTokens = function () { + return [this.token]; + }; + TokenSingleValueAccess.prototype.Contains = function (tokenValue) { + return tokenValue == this.token; + }; + TokenSingleValueAccess.prototype.toString = function () { + return "[singleTokenKind=" + TypeScript.SyntaxKind[this.token] + "]"; + }; + return TokenSingleValueAccess; + })(); + Shared.TokenSingleValueAccess = TokenSingleValueAccess; + var TokenAllAccess = (function () { + function TokenAllAccess() { + } + TokenAllAccess.prototype.GetTokens = function () { + var result = []; + for (var token = TypeScript.SyntaxKind.FirstToken; token <= TypeScript.SyntaxKind.LastToken; token++) { + result.push(token); + } + return result; + }; + TokenAllAccess.prototype.Contains = function (tokenValue) { + return true; + }; + TokenAllAccess.prototype.toString = function () { + return "[allTokens]"; + }; + return TokenAllAccess; + })(); + Shared.TokenAllAccess = TokenAllAccess; + var TokenRange = (function () { + function TokenRange(tokenAccess) { + this.tokenAccess = tokenAccess; + } + TokenRange.FromToken = function (token) { + return new TokenRange(new TokenSingleValueAccess(token)); + }; + TokenRange.FromTokens = function (tokens) { + return new TokenRange(new TokenValuesAccess(tokens)); + }; + TokenRange.FromRange = function (f, to, except) { + if (except === void 0) { except = []; } + return new TokenRange(new TokenRangeAccess(f, to, except)); + }; + TokenRange.AllTokens = function () { + return new TokenRange(new TokenAllAccess()); + }; + TokenRange.prototype.GetTokens = function () { + return this.tokenAccess.GetTokens(); + }; + TokenRange.prototype.Contains = function (token) { + return this.tokenAccess.Contains(token); + }; + TokenRange.prototype.toString = function () { + return this.tokenAccess.toString(); + }; + TokenRange.Any = TokenRange.AllTokens(); + TokenRange.AnyIncludingMultilineComments = TokenRange.FromTokens(TokenRange.Any.GetTokens().concat([6 /* MultiLineCommentTrivia */])); + TokenRange.Keywords = TokenRange.FromRange(TypeScript.SyntaxKind.FirstKeyword, TypeScript.SyntaxKind.LastKeyword); + TokenRange.Operators = TokenRange.FromRange(78 /* SemicolonToken */, 119 /* SlashEqualsToken */); + TokenRange.BinaryOperators = TokenRange.FromRange(80 /* LessThanToken */, 119 /* SlashEqualsToken */); + TokenRange.BinaryKeywordOperators = TokenRange.FromTokens([29 /* InKeyword */, 30 /* InstanceOfKeyword */]); + TokenRange.ReservedKeywords = TokenRange.FromRange(TypeScript.SyntaxKind.FirstFutureReservedStrictKeyword, TypeScript.SyntaxKind.LastFutureReservedStrictKeyword); + TokenRange.UnaryPrefixOperators = TokenRange.FromTokens([93 /* PlusPlusToken */, 94 /* MinusMinusToken */, 102 /* TildeToken */, 101 /* ExclamationToken */]); + TokenRange.UnaryPrefixExpressions = TokenRange.FromTokens([13 /* NumericLiteral */, 11 /* IdentifierName */, 72 /* OpenParenToken */, 74 /* OpenBracketToken */, 70 /* OpenBraceToken */, 35 /* ThisKeyword */, 31 /* NewKeyword */]); + TokenRange.UnaryPreincrementExpressions = TokenRange.FromTokens([11 /* IdentifierName */, 72 /* OpenParenToken */, 35 /* ThisKeyword */, 31 /* NewKeyword */]); + TokenRange.UnaryPostincrementExpressions = TokenRange.FromTokens([11 /* IdentifierName */, 73 /* CloseParenToken */, 75 /* CloseBracketToken */, 31 /* NewKeyword */]); + TokenRange.UnaryPredecrementExpressions = TokenRange.FromTokens([11 /* IdentifierName */, 72 /* OpenParenToken */, 35 /* ThisKeyword */, 31 /* NewKeyword */]); + TokenRange.UnaryPostdecrementExpressions = TokenRange.FromTokens([11 /* IdentifierName */, 73 /* CloseParenToken */, 75 /* CloseBracketToken */, 31 /* NewKeyword */]); + TokenRange.Comments = TokenRange.FromTokens([7 /* SingleLineCommentTrivia */, 6 /* MultiLineCommentTrivia */]); + TokenRange.TypeNames = TokenRange.FromTokens([11 /* IdentifierName */, 67 /* NumberKeyword */, 69 /* StringKeyword */, 61 /* BooleanKeyword */, 41 /* VoidKeyword */, 60 /* AnyKeyword */]); + return TokenRange; + })(); + Shared.TokenRange = TokenRange; + })(Formatting.Shared || (Formatting.Shared = {})); + var Shared = Formatting.Shared; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var TokenSpan = (function (_super) { + __extends(TokenSpan, _super); + function TokenSpan(kind, start, length) { + _super.call(this, start, length); + this.kind = kind; + } + return TokenSpan; + })(TypeScript.TextSpan); + Formatting.TokenSpan = TokenSpan; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var IndentationNodeContext = (function () { + function IndentationNodeContext(parent, node, fullStart, indentationAmount, childIndentationAmountDelta) { + this.update(parent, node, fullStart, indentationAmount, childIndentationAmountDelta); + } + IndentationNodeContext.prototype.parent = function () { + return this._parent; + }; + IndentationNodeContext.prototype.node = function () { + return this._node; + }; + IndentationNodeContext.prototype.fullStart = function () { + return this._fullStart; + }; + IndentationNodeContext.prototype.fullWidth = function () { + return TypeScript.fullWidth(this._node); + }; + IndentationNodeContext.prototype.start = function () { + return this._fullStart + TypeScript.leadingTriviaWidth(this._node); + }; + IndentationNodeContext.prototype.end = function () { + return this._fullStart + TypeScript.leadingTriviaWidth(this._node) + TypeScript.width(this._node); + }; + IndentationNodeContext.prototype.indentationAmount = function () { + return this._indentationAmount; + }; + IndentationNodeContext.prototype.childIndentationAmountDelta = function () { + return this._childIndentationAmountDelta; + }; + IndentationNodeContext.prototype.depth = function () { + return this._depth; + }; + IndentationNodeContext.prototype.kind = function () { + return this._node.kind(); + }; + IndentationNodeContext.prototype.hasSkippedOrMissingTokenChild = function () { + if (this._hasSkippedOrMissingTokenChild === null) { + this._hasSkippedOrMissingTokenChild = TypeScript.Syntax.nodeHasSkippedOrMissingTokens(this._node); + } + return this._hasSkippedOrMissingTokenChild; + }; + IndentationNodeContext.prototype.clone = function (pool) { + var parent = null; + if (this._parent) { + parent = this._parent.clone(pool); + } + return pool.getNode(parent, this._node, this._fullStart, this._indentationAmount, this._childIndentationAmountDelta); + }; + IndentationNodeContext.prototype.update = function (parent, node, fullStart, indentationAmount, childIndentationAmountDelta) { + this._parent = parent; + this._node = node; + this._fullStart = fullStart; + this._indentationAmount = indentationAmount; + this._childIndentationAmountDelta = childIndentationAmountDelta; + this._hasSkippedOrMissingTokenChild = null; + if (parent) { + this._depth = parent.depth() + 1; + } + else { + this._depth = 0; + } + }; + return IndentationNodeContext; + })(); + Formatting.IndentationNodeContext = IndentationNodeContext; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var IndentationNodeContextPool = (function () { + function IndentationNodeContextPool() { + this.nodes = []; + } + IndentationNodeContextPool.prototype.getNode = function (parent, node, fullStart, indentationLevel, childIndentationLevelDelta) { + if (this.nodes.length > 0) { + var cachedNode = this.nodes.pop(); + cachedNode.update(parent, node, fullStart, indentationLevel, childIndentationLevelDelta); + return cachedNode; + } + return new Formatting.IndentationNodeContext(parent, node, fullStart, indentationLevel, childIndentationLevelDelta); + }; + IndentationNodeContextPool.prototype.releaseNode = function (node, recursive) { + if (recursive === void 0) { recursive = false; } + this.nodes.push(node); + if (recursive) { + var parent = node.parent(); + if (parent) { + this.releaseNode(parent, recursive); + } + } + }; + return IndentationNodeContextPool; + })(); + Formatting.IndentationNodeContextPool = IndentationNodeContextPool; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var IndentationTrackingWalker = (function (_super) { + __extends(IndentationTrackingWalker, _super); + function IndentationTrackingWalker(textSpan, sourceUnit, snapshot, indentFirstToken, options) { + _super.call(this); + this.options = options; + this._position = 0; + this._parent = null; + this._indentationNodeContextPool = new Formatting.IndentationNodeContextPool(); + this._textSpan = textSpan; + this._text = sourceUnit.syntaxTree.text; + this._snapshot = snapshot; + this._parent = this._indentationNodeContextPool.getNode(null, sourceUnit, 0, 0, 0); + this._lastTriviaWasNewLine = indentFirstToken; + } + IndentationTrackingWalker.prototype.position = function () { + return this._position; + }; + IndentationTrackingWalker.prototype.parent = function () { + return this._parent; + }; + IndentationTrackingWalker.prototype.textSpan = function () { + return this._textSpan; + }; + IndentationTrackingWalker.prototype.snapshot = function () { + return this._snapshot; + }; + IndentationTrackingWalker.prototype.indentationNodeContextPool = function () { + return this._indentationNodeContextPool; + }; + IndentationTrackingWalker.prototype.forceIndentNextToken = function (tokenStart) { + this._lastTriviaWasNewLine = true; + this.forceRecomputeIndentationOfParent(tokenStart, true); + }; + IndentationTrackingWalker.prototype.forceSkipIndentingNextToken = function (tokenStart) { + this._lastTriviaWasNewLine = false; + this.forceRecomputeIndentationOfParent(tokenStart, false); + }; + IndentationTrackingWalker.prototype.indentToken = function (token, indentationAmount, commentIndentationAmount) { + throw TypeScript.Errors.abstract(); + }; + IndentationTrackingWalker.prototype.visitTokenInSpan = function (token) { + if (this._lastTriviaWasNewLine) { + var indentationAmount = this.getTokenIndentationAmount(token); + var commentIndentationAmount = this.getCommentIndentationAmount(token); + this.indentToken(token, indentationAmount, commentIndentationAmount); + } + }; + IndentationTrackingWalker.prototype.visitToken = function (token) { + var tokenSpan = new TypeScript.TextSpan(this._position, token.fullWidth()); + if (tokenSpan.intersectsWithTextSpan(this._textSpan)) { + this.visitTokenInSpan(token); + var trivia = token.trailingTrivia(); + this._lastTriviaWasNewLine = trivia.hasNewLine() && trivia.syntaxTriviaAt(trivia.count() - 1).kind() == 5 /* NewLineTrivia */; + } + this._position += token.fullWidth(); + }; + IndentationTrackingWalker.prototype.visitNode = function (node) { + var nodeSpan = new TypeScript.TextSpan(this._position, TypeScript.fullWidth(node)); + if (nodeSpan.intersectsWithTextSpan(this._textSpan)) { + var indentation = this.getNodeIndentation(node); + var currentParent = this._parent; + this._parent = this._indentationNodeContextPool.getNode(currentParent, node, this._position, indentation.indentationAmount, indentation.indentationAmountDelta); + TypeScript.visitNodeOrToken(this, node); + this._indentationNodeContextPool.releaseNode(this._parent); + this._parent = currentParent; + } + else { + this._position += TypeScript.fullWidth(node); + } + }; + IndentationTrackingWalker.prototype.getTokenIndentationAmount = function (token) { + if (TypeScript.firstToken(this._parent.node()) === token || token.kind() === 70 /* OpenBraceToken */ || token.kind() === 71 /* CloseBraceToken */ || token.kind() === 74 /* OpenBracketToken */ || token.kind() === 75 /* CloseBracketToken */ || (token.kind() === 42 /* WhileKeyword */ && this._parent.node().kind() == 161 /* DoStatement */)) { + return this._parent.indentationAmount(); + } + return (this._parent.indentationAmount() + this._parent.childIndentationAmountDelta()); + }; + IndentationTrackingWalker.prototype.getCommentIndentationAmount = function (token) { + if (token.kind() === 71 /* CloseBraceToken */ || token.kind() === 75 /* CloseBracketToken */) { + return (this._parent.indentationAmount() + this._parent.childIndentationAmountDelta()); + } + return this._parent.indentationAmount(); + }; + IndentationTrackingWalker.prototype.getNodeIndentation = function (node, newLineInsertedByFormatting) { + var parent = this._parent; + var parentIndentationAmount; + if (this._textSpan.containsPosition(parent.start())) { + parentIndentationAmount = parent.indentationAmount(); + } + else { + if (parent.kind() === 146 /* Block */ && !this.shouldIndentBlockInParent(this._parent.parent())) { + parent = this._parent.parent(); + } + var line = this._snapshot.getLineFromPosition(parent.start()).getText(); + var firstNonWhiteSpacePosition = TypeScript.Indentation.firstNonWhitespacePosition(line); + parentIndentationAmount = TypeScript.Indentation.columnForPositionInString(line, firstNonWhiteSpacePosition, this.options); + } + var parentIndentationAmountDelta = parent.childIndentationAmountDelta(); + var indentationAmount; + var indentationAmountDelta; + var parentNode = parent.node(); + switch (node.kind()) { + default: + indentationAmount = (parentIndentationAmount + parentIndentationAmountDelta); + indentationAmountDelta = 0; + break; + case 131 /* ClassDeclaration */: + case 130 /* ModuleDeclaration */: + case 122 /* ObjectType */: + case 132 /* EnumDeclaration */: + case 151 /* SwitchStatement */: + case 215 /* ObjectLiteralExpression */: + case 137 /* ConstructorDeclaration */: + case 129 /* FunctionDeclaration */: + case 222 /* FunctionExpression */: + case 135 /* MemberFunctionDeclaration */: + case 139 /* GetAccessor */: + case 140 /* SetAccessor */: + case 138 /* IndexMemberDeclaration */: + case 236 /* CatchClause */: + case 214 /* ArrayLiteralExpression */: + case 124 /* ArrayType */: + case 221 /* ElementAccessExpression */: + case 144 /* IndexSignature */: + case 154 /* ForStatement */: + case 155 /* ForInStatement */: + case 158 /* WhileStatement */: + case 161 /* DoStatement */: + case 163 /* WithStatement */: + case 233 /* CaseSwitchClause */: + case 234 /* DefaultSwitchClause */: + case 150 /* ReturnStatement */: + case 157 /* ThrowStatement */: + case 219 /* SimpleArrowFunctionExpression */: + case 218 /* ParenthesizedArrowFunctionExpression */: + case 224 /* VariableDeclaration */: + case 134 /* ExportAssignment */: + case 213 /* InvocationExpression */: + case 216 /* ObjectCreationExpression */: + case 142 /* CallSignature */: + case 143 /* ConstructSignature */: + indentationAmount = (parentIndentationAmount + parentIndentationAmountDelta); + indentationAmountDelta = this.options.indentSpaces; + break; + case 147 /* IfStatement */: + if (parent.kind() === 235 /* ElseClause */ && !TypeScript.SyntaxUtilities.isLastTokenOnLine(parentNode.elseKeyword, this._text)) { + indentationAmount = parentIndentationAmount; + } + else { + indentationAmount = (parentIndentationAmount + parentIndentationAmountDelta); + } + indentationAmountDelta = this.options.indentSpaces; + break; + case 235 /* ElseClause */: + indentationAmount = parentIndentationAmount; + indentationAmountDelta = this.options.indentSpaces; + break; + case 146 /* Block */: + if (this.shouldIndentBlockInParent(parent)) { + indentationAmount = parentIndentationAmount + parentIndentationAmountDelta; + } + else { + indentationAmount = parentIndentationAmount; + } + indentationAmountDelta = this.options.indentSpaces; + break; + } + if (parentNode) { + if (!newLineInsertedByFormatting) { + var parentStartLine = this._snapshot.getLineNumberFromPosition(parent.start()); + var currentNodeStartLine = this._snapshot.getLineNumberFromPosition(this._position + TypeScript.leadingTriviaWidth(node)); + if (parentStartLine === currentNodeStartLine || newLineInsertedByFormatting === false) { + indentationAmount = parentIndentationAmount; + indentationAmountDelta = Math.min(this.options.indentSpaces, parentIndentationAmountDelta + indentationAmountDelta); + } + } + } + return { + indentationAmount: indentationAmount, + indentationAmountDelta: indentationAmountDelta + }; + }; + IndentationTrackingWalker.prototype.shouldIndentBlockInParent = function (parent) { + switch (parent.kind()) { + case 120 /* SourceUnit */: + case 130 /* ModuleDeclaration */: + case 146 /* Block */: + case 233 /* CaseSwitchClause */: + case 234 /* DefaultSwitchClause */: + return true; + default: + return false; + } + }; + IndentationTrackingWalker.prototype.forceRecomputeIndentationOfParent = function (tokenStart, newLineAdded) { + var parent = this._parent; + if (parent.fullStart() === tokenStart) { + this._parent = parent.parent(); + var indentation = this.getNodeIndentation(parent.node(), newLineAdded); + parent.update(parent.parent(), parent.node(), parent.fullStart(), indentation.indentationAmount, indentation.indentationAmountDelta); + this._parent = parent; + } + }; + return IndentationTrackingWalker; + })(TypeScript.SyntaxWalker); + Formatting.IndentationTrackingWalker = IndentationTrackingWalker; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var MultipleTokenIndenter = (function (_super) { + __extends(MultipleTokenIndenter, _super); + function MultipleTokenIndenter(textSpan, sourceUnit, snapshot, indentFirstToken, options) { + _super.call(this, textSpan, sourceUnit, snapshot, indentFirstToken, options); + this._edits = []; + } + MultipleTokenIndenter.prototype.indentToken = function (token, indentationAmount, commentIndentationAmount) { + if (token.fullWidth() === 0) { + return; + } + if (this.parent().hasSkippedOrMissingTokenChild()) { + return; + } + var tokenSpan = new TypeScript.TextSpan(this.position() + token.leadingTriviaWidth(), TypeScript.width(token)); + if (!this.textSpan().containsTextSpan(tokenSpan)) { + return; + } + var indentationString = TypeScript.Indentation.indentationString(indentationAmount, this.options); + var commentIndentationString = TypeScript.Indentation.indentationString(commentIndentationAmount, this.options); + this.recordIndentationEditsForToken(token, indentationString, commentIndentationString); + }; + MultipleTokenIndenter.prototype.edits = function () { + return this._edits; + }; + MultipleTokenIndenter.prototype.recordEdit = function (position, length, replaceWith) { + this._edits.push(new Formatting.TextEditInfo(position, length, replaceWith)); + }; + MultipleTokenIndenter.prototype.recordIndentationEditsForToken = function (token, indentationString, commentIndentationString) { + var position = this.position(); + var indentNextTokenOrTrivia = true; + var leadingWhiteSpace = ""; + var triviaList = token.leadingTrivia(); + if (triviaList) { + for (var i = 0, length = triviaList.count(); i < length; i++, position += trivia.fullWidth()) { + var trivia = triviaList.syntaxTriviaAt(i); + if (!this.textSpan().containsTextSpan(new TypeScript.TextSpan(position, trivia.fullWidth()))) { + continue; + } + switch (trivia.kind()) { + case 6 /* MultiLineCommentTrivia */: + this.recordIndentationEditsForMultiLineComment(trivia, position, commentIndentationString, leadingWhiteSpace, !indentNextTokenOrTrivia); + indentNextTokenOrTrivia = false; + leadingWhiteSpace = ""; + break; + case 7 /* SingleLineCommentTrivia */: + case 8 /* SkippedTokenTrivia */: + if (indentNextTokenOrTrivia) { + this.recordIndentationEditsForSingleLineOrSkippedText(trivia, position, commentIndentationString); + indentNextTokenOrTrivia = false; + } + break; + case 4 /* WhitespaceTrivia */: + var nextTrivia = length > i + 1 && triviaList.syntaxTriviaAt(i + 1); + var whiteSpaceIndentationString = nextTrivia && nextTrivia.isComment() ? commentIndentationString : indentationString; + if (indentNextTokenOrTrivia) { + if (!(nextTrivia && nextTrivia.isNewLine())) { + this.recordIndentationEditsForWhitespace(trivia, position, whiteSpaceIndentationString); + } + indentNextTokenOrTrivia = false; + } + leadingWhiteSpace += trivia.fullText(); + break; + case 5 /* NewLineTrivia */: + indentNextTokenOrTrivia = true; + leadingWhiteSpace = ""; + break; + default: + throw TypeScript.Errors.invalidOperation(); + } + } + } + if (token.kind() !== 10 /* EndOfFileToken */ && indentNextTokenOrTrivia) { + if (indentationString.length > 0) { + this.recordEdit(position, 0, indentationString); + } + } + }; + MultipleTokenIndenter.prototype.recordIndentationEditsForSingleLineOrSkippedText = function (trivia, fullStart, indentationString) { + if (indentationString.length > 0) { + this.recordEdit(fullStart, 0, indentationString); + } + }; + MultipleTokenIndenter.prototype.recordIndentationEditsForWhitespace = function (trivia, fullStart, indentationString) { + var text = trivia.fullText(); + if (indentationString === text) { + return; + } + this.recordEdit(fullStart, text.length, indentationString); + }; + MultipleTokenIndenter.prototype.recordIndentationEditsForMultiLineComment = function (trivia, fullStart, indentationString, leadingWhiteSpace, firstLineAlreadyIndented) { + var position = fullStart; + var segments = TypeScript.Syntax.splitMultiLineCommentTriviaIntoMultipleLines(trivia); + if (segments.length <= 1) { + if (!firstLineAlreadyIndented) { + this.recordIndentationEditsForSingleLineOrSkippedText(trivia, fullStart, indentationString); + } + return; + } + var whiteSpaceColumnsInFirstSegment = TypeScript.Indentation.columnForPositionInString(leadingWhiteSpace, leadingWhiteSpace.length, this.options); + var indentationColumns = TypeScript.Indentation.columnForPositionInString(indentationString, indentationString.length, this.options); + var startIndex = 0; + if (firstLineAlreadyIndented) { + startIndex = 1; + position += segments[0].length; + } + for (var i = startIndex; i < segments.length; i++) { + var segment = segments[i]; + this.recordIndentationEditsForSegment(segment, position, indentationColumns, whiteSpaceColumnsInFirstSegment); + position += segment.length; + } + }; + MultipleTokenIndenter.prototype.recordIndentationEditsForSegment = function (segment, fullStart, indentationColumns, whiteSpaceColumnsInFirstSegment) { + var firstNonWhitespacePosition = TypeScript.Indentation.firstNonWhitespacePosition(segment); + var leadingWhiteSpaceColumns = TypeScript.Indentation.columnForPositionInString(segment, firstNonWhitespacePosition, this.options); + var deltaFromFirstSegment = leadingWhiteSpaceColumns - whiteSpaceColumnsInFirstSegment; + var finalColumns = indentationColumns + deltaFromFirstSegment; + if (finalColumns < 0) { + finalColumns = 0; + } + var indentationString = TypeScript.Indentation.indentationString(finalColumns, this.options); + if (firstNonWhitespacePosition < segment.length && TypeScript.CharacterInfo.isLineTerminator(segment.charCodeAt(firstNonWhitespacePosition))) { + return; + } + if (indentationString === segment.substring(0, firstNonWhitespacePosition)) { + return; + } + this.recordEdit(fullStart, firstNonWhitespacePosition, indentationString); + }; + return MultipleTokenIndenter; + })(Formatting.IndentationTrackingWalker); + Formatting.MultipleTokenIndenter = MultipleTokenIndenter; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var SingleTokenIndenter = (function (_super) { + __extends(SingleTokenIndenter, _super); + function SingleTokenIndenter(indentationPosition, sourceUnit, snapshot, indentFirstToken, options) { + _super.call(this, new TypeScript.TextSpan(indentationPosition, 1), sourceUnit, snapshot, indentFirstToken, options); + this.indentationAmount = null; + this.indentationPosition = indentationPosition; + } + SingleTokenIndenter.getIndentationAmount = function (position, sourceUnit, snapshot, options) { + var walker = new SingleTokenIndenter(position, sourceUnit, snapshot, true, options); + TypeScript.visitNodeOrToken(walker, sourceUnit); + return walker.indentationAmount; + }; + SingleTokenIndenter.prototype.indentToken = function (token, indentationAmount, commentIndentationAmount) { + if (token.fullWidth() === 0 || (this.indentationPosition - this.position() < token.leadingTriviaWidth())) { + this.indentationAmount = commentIndentationAmount; + } + else { + this.indentationAmount = indentationAmount; + } + }; + return SingleTokenIndenter; + })(Formatting.IndentationTrackingWalker); + Formatting.SingleTokenIndenter = SingleTokenIndenter; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + (function (Formatting) { + var Formatter = (function (_super) { + __extends(Formatter, _super); + function Formatter(textSpan, sourceUnit, indentFirstToken, options, snapshot, rulesProvider, formattingRequestKind) { + _super.call(this, textSpan, sourceUnit, snapshot, indentFirstToken, options); + this.previousTokenSpan = null; + this.previousTokenParent = null; + this.scriptHasErrors = false; + this.previousTokenParent = this.parent().clone(this.indentationNodeContextPool()); + this.rulesProvider = rulesProvider; + this.formattingRequestKind = formattingRequestKind; + this.formattingContext = new Formatting.FormattingContext(this.snapshot(), this.formattingRequestKind); + } + Formatter.getEdits = function (textSpan, sourceUnit, options, indentFirstToken, snapshot, rulesProvider, formattingRequestKind) { + var walker = new Formatter(textSpan, sourceUnit, indentFirstToken, options, snapshot, rulesProvider, formattingRequestKind); + TypeScript.visitNodeOrToken(walker, sourceUnit); + return walker.edits(); + }; + Formatter.prototype.visitTokenInSpan = function (token) { + if (token.fullWidth() !== 0) { + var tokenSpan = new TypeScript.TextSpan(this.position() + token.leadingTriviaWidth(), TypeScript.width(token)); + if (this.textSpan().containsTextSpan(tokenSpan)) { + this.processToken(token); + } + } + _super.prototype.visitTokenInSpan.call(this, token); + }; + Formatter.prototype.processToken = function (token) { + var position = this.position(); + if (token.leadingTriviaWidth() !== 0) { + this.processTrivia(token.leadingTrivia(), position); + position += token.leadingTriviaWidth(); + } + var currentTokenSpan = new Formatting.TokenSpan(token.kind(), position, TypeScript.width(token)); + if (!this.parent().hasSkippedOrMissingTokenChild()) { + if (this.previousTokenSpan) { + this.formatPair(this.previousTokenSpan, this.previousTokenParent, currentTokenSpan, this.parent()); + } + else { + this.trimWhitespaceInLineRange(this.getLineNumber(this.textSpan()), this.getLineNumber(currentTokenSpan)); + } + } + this.previousTokenSpan = currentTokenSpan; + if (this.previousTokenParent) { + this.indentationNodeContextPool().releaseNode(this.previousTokenParent, true); + } + this.previousTokenParent = this.parent().clone(this.indentationNodeContextPool()); + position += TypeScript.width(token); + if (token.trailingTriviaWidth() !== 0) { + this.processTrivia(token.trailingTrivia(), position); + } + }; + Formatter.prototype.processTrivia = function (triviaList, fullStart) { + var position = fullStart; + for (var i = 0, n = triviaList.count(); i < n; i++) { + var trivia = triviaList.syntaxTriviaAt(i); + if (trivia.isComment() || trivia.isSkippedToken()) { + var currentTokenSpan = new Formatting.TokenSpan(trivia.kind(), position, trivia.fullWidth()); + if (this.textSpan().containsTextSpan(currentTokenSpan)) { + if (trivia.isComment() && this.previousTokenSpan) { + this.formatPair(this.previousTokenSpan, this.previousTokenParent, currentTokenSpan, this.parent()); + } + else { + var startLine = this.getLineNumber(this.previousTokenSpan || this.textSpan()); + this.trimWhitespaceInLineRange(startLine, this.getLineNumber(currentTokenSpan)); + } + this.previousTokenSpan = currentTokenSpan; + if (this.previousTokenParent) { + this.indentationNodeContextPool().releaseNode(this.previousTokenParent, true); + } + this.previousTokenParent = this.parent().clone(this.indentationNodeContextPool()); + } + } + position += trivia.fullWidth(); + } + }; + Formatter.prototype.findCommonParents = function (parent1, parent2) { + var shallowParent; + var shallowParentDepth; + var deepParent; + var deepParentDepth; + if (parent1.depth() < parent2.depth()) { + shallowParent = parent1; + shallowParentDepth = parent1.depth(); + deepParent = parent2; + deepParentDepth = parent2.depth(); + } + else { + shallowParent = parent2; + shallowParentDepth = parent2.depth(); + deepParent = parent1; + deepParentDepth = parent1.depth(); + } + TypeScript.Debug.assert(shallowParentDepth >= 0, "Expected shallowParentDepth >= 0"); + TypeScript.Debug.assert(deepParentDepth >= 0, "Expected deepParentDepth >= 0"); + TypeScript.Debug.assert(deepParentDepth >= shallowParentDepth, "Expected deepParentDepth >= shallowParentDepth"); + while (deepParentDepth > shallowParentDepth) { + deepParent = deepParent.parent(); + deepParentDepth--; + } + TypeScript.Debug.assert(deepParentDepth === shallowParentDepth, "Expected deepParentDepth === shallowParentDepth"); + while (deepParent.node() && shallowParent.node()) { + if (deepParent.node() === shallowParent.node()) { + return deepParent; + } + deepParent = deepParent.parent(); + shallowParent = shallowParent.parent(); + } + throw TypeScript.Errors.invalidOperation(); + }; + Formatter.prototype.formatPair = function (t1, t1Parent, t2, t2Parent) { + var token1Line = this.getLineNumber(t1); + var token2Line = this.getLineNumber(t2); + var commonParent = this.findCommonParents(t1Parent, t2Parent); + this.formattingContext.updateContext(t1, t1Parent, t2, t2Parent, commonParent); + var rule = this.rulesProvider.getRulesMap().GetRule(this.formattingContext); + if (rule != null) { + this.RecordRuleEdits(rule, t1, t2); + if ((rule.Operation.Action == 1 /* Space */ || rule.Operation.Action == 3 /* Delete */) && token1Line != token2Line) { + this.forceSkipIndentingNextToken(t2.start()); + } + if (rule.Operation.Action == 2 /* NewLine */ && token1Line == token2Line) { + this.forceIndentNextToken(t2.start()); + } + } + if (token1Line != token2Line && (!rule || (rule.Operation.Action != 3 /* Delete */ && rule.Flag != 1 /* CanDeleteNewLines */))) { + this.trimWhitespaceInLineRange(token1Line, token2Line, t1); + } + }; + Formatter.prototype.getLineNumber = function (span) { + return this.snapshot().getLineNumberFromPosition(span.start()); + }; + Formatter.prototype.trimWhitespaceInLineRange = function (startLine, endLine, token) { + for (var lineNumber = startLine; lineNumber < endLine; ++lineNumber) { + var line = this.snapshot().getLineFromLineNumber(lineNumber); + this.trimWhitespace(line, token); + } + }; + Formatter.prototype.trimWhitespace = function (line, token) { + if (token && (token.kind == 6 /* MultiLineCommentTrivia */ || token.kind == 7 /* SingleLineCommentTrivia */) && token.start() <= line.endPosition() && token.end() >= line.endPosition()) + return; + var text = line.getText(); + var index = 0; + for (index = text.length - 1; index >= 0; --index) { + if (!TypeScript.CharacterInfo.isWhitespace(text.charCodeAt(index))) { + break; + } + } + ++index; + if (index < text.length) { + this.recordEdit(line.startPosition() + index, line.length() - index, ""); + } + }; + Formatter.prototype.RecordRuleEdits = function (rule, t1, t2) { + if (rule.Operation.Action == 0 /* Ignore */) { + return; + } + var betweenSpan; + switch (rule.Operation.Action) { + case 3 /* Delete */: + { + betweenSpan = new TypeScript.TextSpan(t1.end(), t2.start() - t1.end()); + if (betweenSpan.length() > 0) { + this.recordEdit(betweenSpan.start(), betweenSpan.length(), ""); + return; + } + } + break; + case 2 /* NewLine */: + { + if (!(rule.Flag == 1 /* CanDeleteNewLines */ || this.getLineNumber(t1) == this.getLineNumber(t2))) { + return; + } + betweenSpan = new TypeScript.TextSpan(t1.end(), t2.start() - t1.end()); + var doEdit = false; + var betweenText = this.snapshot().getText(betweenSpan); + var lineFeedLoc = betweenText.indexOf(this.options.newLineCharacter); + if (lineFeedLoc < 0) { + doEdit = true; + } + else { + lineFeedLoc = betweenText.indexOf(this.options.newLineCharacter, lineFeedLoc + 1); + if (lineFeedLoc >= 0) { + doEdit = true; + } + } + if (doEdit) { + this.recordEdit(betweenSpan.start(), betweenSpan.length(), this.options.newLineCharacter); + return; + } + } + break; + case 1 /* Space */: + { + if (!(rule.Flag == 1 /* CanDeleteNewLines */ || this.getLineNumber(t1) == this.getLineNumber(t2))) { + return; + } + betweenSpan = new TypeScript.TextSpan(t1.end(), t2.start() - t1.end()); + if (betweenSpan.length() > 1 || this.snapshot().getText(betweenSpan) != " ") { + this.recordEdit(betweenSpan.start(), betweenSpan.length(), " "); + return; + } + } + break; + } + }; + return Formatter; + })(Formatting.MultipleTokenIndenter); + Formatting.Formatter = Formatter; + })(Services.Formatting || (Services.Formatting = {})); + var Formatting = Services.Formatting; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var BloomFilter = (function () { + function BloomFilter(expectedCount) { + var m = Math.max(1, BloomFilter.computeM(expectedCount)); + var k = Math.max(1, BloomFilter.computeK(expectedCount)); + ; + var sizeInEvenBytes = (m + 7) & ~7; + this.bitArray = []; + for (var i = 0, len = sizeInEvenBytes; i < len; i++) { + this.bitArray[i] = false; + } + this.hashFunctionCount = k; + } + BloomFilter.computeM = function (expectedCount) { + var p = BloomFilter.falsePositiveProbability; + var n = expectedCount; + var numerator = n * Math.log(p); + var denominator = Math.log(1.0 / Math.pow(2.0, Math.log(2.0))); + return Math.ceil(numerator / denominator); + }; + BloomFilter.computeK = function (expectedCount) { + var n = expectedCount; + var m = BloomFilter.computeM(expectedCount); + var temp = Math.log(2.0) * m / n; + return Math.round(temp); + }; + BloomFilter.prototype.computeHash = function (key, seed) { + return TypeScript.Hash.computeMurmur2StringHashCode(key, seed); + }; + BloomFilter.prototype.addKeys = function (keys) { + for (var name in keys) { + if (ts.lookUp(keys, name)) { + this.add(name); + } + } + }; + BloomFilter.prototype.add = function (value) { + for (var i = 0; i < this.hashFunctionCount; i++) { + var hash = this.computeHash(value, i); + hash = hash % this.bitArray.length; + this.bitArray[Math.abs(hash)] = true; + } + }; + BloomFilter.prototype.probablyContains = function (value) { + for (var i = 0; i < this.hashFunctionCount; i++) { + var hash = this.computeHash(value, i); + hash = hash % this.bitArray.length; + if (!this.bitArray[Math.abs(hash)]) { + return false; + } + } + return true; + }; + BloomFilter.prototype.isEquivalent = function (filter) { + return BloomFilter.isEquivalent(this.bitArray, filter.bitArray) && this.hashFunctionCount === filter.hashFunctionCount; + }; + BloomFilter.isEquivalent = function (array1, array2) { + if (array1.length !== array2.length) { + return false; + } + for (var i = 0; i < array1.length; i++) { + if (array1[i] !== array2[i]) { + return false; + } + } + return true; + }; + BloomFilter.falsePositiveProbability = 0.0001; + return BloomFilter; + })(); + TypeScript.BloomFilter = BloomFilter; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var NullLogger = (function () { + function NullLogger() { + } + NullLogger.prototype.information = function () { + return false; + }; + NullLogger.prototype.debug = function () { + return false; + }; + NullLogger.prototype.warning = function () { + return false; + }; + NullLogger.prototype.error = function () { + return false; + }; + NullLogger.prototype.fatal = function () { + return false; + }; + NullLogger.prototype.log = function (s) { + }; + return NullLogger; + })(); + TypeScript.NullLogger = NullLogger; + function timeFunction(logger, funcDescription, func) { + var start = (new Date()).getTime(); + var result = func(); + var end = (new Date()).getTime(); + if (logger.information()) { + logger.log(funcDescription + " completed in " + (end - start) + " msec"); + } + return result; + } + TypeScript.timeFunction = timeFunction; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var proto = "__proto__"; + var BlockIntrinsics = (function () { + function BlockIntrinsics() { + this.prototype = undefined; + this.toString = undefined; + this.toLocaleString = undefined; + this.valueOf = undefined; + this.hasOwnProperty = undefined; + this.propertyIsEnumerable = undefined; + this.isPrototypeOf = undefined; + this["constructor"] = undefined; + this[proto] = null; + this[proto] = undefined; + } + return BlockIntrinsics; + })(); + function createIntrinsicsObject() { + return new BlockIntrinsics(); + } + TypeScript.createIntrinsicsObject = createIntrinsicsObject; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var Comment = (function () { + function Comment(_trivia, endsLine, _start, _end) { + this._trivia = _trivia; + this.endsLine = endsLine; + this._start = _start; + this._end = _end; + } + Comment.prototype.start = function () { + return this._start; + }; + Comment.prototype.end = function () { + return this._end; + }; + Comment.prototype.fullText = function () { + return this._trivia.fullText(); + }; + Comment.prototype.kind = function () { + return this._trivia.kind(); + }; + Comment.prototype.structuralEquals = function (ast, includingPosition) { + if (includingPosition) { + if (this.start() !== ast.start() || this.end() !== ast.end()) { + return false; + } + } + return this._trivia.fullText() === ast._trivia.fullText() && this.endsLine === ast.endsLine; + }; + return Comment; + })(); + TypeScript.Comment = Comment; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + function walkListChildren(preAst, walker) { + for (var i = 0, n = preAst.length; i < n; i++) { + walker.walk(preAst[i]); + } + } + function walkThrowStatementChildren(preAst, walker) { + walker.walk(preAst.expression); + } + function walkPrefixUnaryExpressionChildren(preAst, walker) { + walker.walk(preAst.operand); + } + function walkPostfixUnaryExpressionChildren(preAst, walker) { + walker.walk(preAst.operand); + } + function walkDeleteExpressionChildren(preAst, walker) { + walker.walk(preAst.expression); + } + function walkTypeArgumentListChildren(preAst, walker) { + walker.walk(preAst.typeArguments); + } + function walkTypeOfExpressionChildren(preAst, walker) { + walker.walk(preAst.expression); + } + function walkVoidExpressionChildren(preAst, walker) { + walker.walk(preAst.expression); + } + function walkArgumentListChildren(preAst, walker) { + walker.walk(preAst.typeArgumentList); + walker.walk(preAst.arguments); + } + function walkArrayLiteralExpressionChildren(preAst, walker) { + walker.walk(preAst.expressions); + } + function walkSimplePropertyAssignmentChildren(preAst, walker) { + walker.walk(preAst.propertyName); + walker.walk(preAst.expression); + } + function walkFunctionPropertyAssignmentChildren(preAst, walker) { + walker.walk(preAst.propertyName); + walker.walk(preAst.callSignature); + walker.walk(preAst.block); + } + function walkGetAccessorChildren(preAst, walker) { + walker.walk(preAst.propertyName); + walker.walk(preAst.callSignature); + walker.walk(preAst.block); + } + function walkSeparatedListChildren(preAst, walker) { + for (var i = 0, n = preAst.length; i < n; i++) { + walker.walk(preAst[i]); + } + } + function walkSetAccessorChildren(preAst, walker) { + walker.walk(preAst.propertyName); + walker.walk(preAst.callSignature); + walker.walk(preAst.block); + } + function walkObjectLiteralExpressionChildren(preAst, walker) { + walker.walk(preAst.propertyAssignments); + } + function walkCastExpressionChildren(preAst, walker) { + walker.walk(preAst.type); + walker.walk(preAst.expression); + } + function walkParenthesizedExpressionChildren(preAst, walker) { + walker.walk(preAst.expression); + } + function walkElementAccessExpressionChildren(preAst, walker) { + walker.walk(preAst.expression); + walker.walk(preAst.argumentExpression); + } + function walkMemberAccessExpressionChildren(preAst, walker) { + walker.walk(preAst.expression); + walker.walk(preAst.name); + } + function walkQualifiedNameChildren(preAst, walker) { + walker.walk(preAst.left); + walker.walk(preAst.right); + } + function walkBinaryExpressionChildren(preAst, walker) { + walker.walk(preAst.left); + walker.walk(preAst.right); + } + function walkEqualsValueClauseChildren(preAst, walker) { + walker.walk(preAst.value); + } + function walkTypeParameterChildren(preAst, walker) { + walker.walk(preAst.identifier); + walker.walk(preAst.constraint); + } + function walkTypeParameterListChildren(preAst, walker) { + walker.walk(preAst.typeParameters); + } + function walkGenericTypeChildren(preAst, walker) { + walker.walk(preAst.name); + walker.walk(preAst.typeArgumentList); + } + function walkTypeAnnotationChildren(preAst, walker) { + walker.walk(preAst.type); + } + function walkTypeQueryChildren(preAst, walker) { + walker.walk(preAst.name); + } + function walkInvocationExpressionChildren(preAst, walker) { + walker.walk(preAst.expression); + walker.walk(preAst.argumentList); + } + function walkObjectCreationExpressionChildren(preAst, walker) { + walker.walk(preAst.expression); + walker.walk(preAst.argumentList); + } + function walkTrinaryExpressionChildren(preAst, walker) { + walker.walk(preAst.condition); + walker.walk(preAst.whenTrue); + walker.walk(preAst.whenFalse); + } + function walkFunctionExpressionChildren(preAst, walker) { + walker.walk(preAst.identifier); + walker.walk(preAst.callSignature); + walker.walk(preAst.block); + } + function walkFunctionTypeChildren(preAst, walker) { + walker.walk(preAst.typeParameterList); + walker.walk(preAst.parameterList); + walker.walk(preAst.type); + } + function walkParenthesizedArrowFunctionExpressionChildren(preAst, walker) { + walker.walk(preAst.callSignature); + walker.walk(preAst.block); + walker.walk(preAst.expression); + } + function walkSimpleArrowFunctionExpressionChildren(preAst, walker) { + walker.walk(preAst.parameter); + walker.walk(preAst.block); + walker.walk(preAst.expression); + } + function walkMemberFunctionDeclarationChildren(preAst, walker) { + walker.walk(preAst.propertyName); + walker.walk(preAst.callSignature); + walker.walk(preAst.block); + } + function walkFuncDeclChildren(preAst, walker) { + walker.walk(preAst.identifier); + walker.walk(preAst.callSignature); + walker.walk(preAst.block); + } + function walkIndexMemberDeclarationChildren(preAst, walker) { + walker.walk(preAst.indexSignature); + } + function walkIndexSignatureChildren(preAst, walker) { + walker.walk(preAst.parameters); + walker.walk(preAst.typeAnnotation); + } + function walkCallSignatureChildren(preAst, walker) { + walker.walk(preAst.typeParameterList); + walker.walk(preAst.parameterList); + walker.walk(preAst.typeAnnotation); + } + function walkConstraintChildren(preAst, walker) { + walker.walk(preAst.typeOrExpression); + } + function walkConstructorDeclarationChildren(preAst, walker) { + walker.walk(preAst.callSignature); + walker.walk(preAst.block); + } + function walkConstructorTypeChildren(preAst, walker) { + walker.walk(preAst.typeParameterList); + walker.walk(preAst.parameterList); + walker.walk(preAst.type); + } + function walkConstructSignatureChildren(preAst, walker) { + walker.walk(preAst.callSignature); + } + function walkParameterChildren(preAst, walker) { + walker.walk(preAst.identifier); + walker.walk(preAst.typeAnnotation); + walker.walk(preAst.equalsValueClause); + } + function walkParameterListChildren(preAst, walker) { + walker.walk(preAst.parameters); + } + function walkPropertySignatureChildren(preAst, walker) { + walker.walk(preAst.propertyName); + walker.walk(preAst.typeAnnotation); + } + function walkVariableDeclaratorChildren(preAst, walker) { + walker.walk(preAst.propertyName); + walker.walk(preAst.typeAnnotation); + walker.walk(preAst.equalsValueClause); + } + function walkMemberVariableDeclarationChildren(preAst, walker) { + walker.walk(preAst.variableDeclarator); + } + function walkMethodSignatureChildren(preAst, walker) { + walker.walk(preAst.propertyName); + walker.walk(preAst.callSignature); + } + function walkReturnStatementChildren(preAst, walker) { + walker.walk(preAst.expression); + } + function walkForStatementChildren(preAst, walker) { + walker.walk(preAst.variableDeclaration); + walker.walk(preAst.initializer); + walker.walk(preAst.condition); + walker.walk(preAst.incrementor); + walker.walk(preAst.statement); + } + function walkForInStatementChildren(preAst, walker) { + walker.walk(preAst.variableDeclaration); + walker.walk(preAst.left); + walker.walk(preAst.expression); + walker.walk(preAst.statement); + } + function walkIfStatementChildren(preAst, walker) { + walker.walk(preAst.condition); + walker.walk(preAst.statement); + walker.walk(preAst.elseClause); + } + function walkElseClauseChildren(preAst, walker) { + walker.walk(preAst.statement); + } + function walkWhileStatementChildren(preAst, walker) { + walker.walk(preAst.condition); + walker.walk(preAst.statement); + } + function walkDoStatementChildren(preAst, walker) { + walker.walk(preAst.condition); + walker.walk(preAst.statement); + } + function walkBlockChildren(preAst, walker) { + walker.walk(preAst.statements); + } + function walkVariableDeclarationChildren(preAst, walker) { + walker.walk(preAst.variableDeclarators); + } + function walkCaseSwitchClauseChildren(preAst, walker) { + walker.walk(preAst.expression); + walker.walk(preAst.statements); + } + function walkDefaultSwitchClauseChildren(preAst, walker) { + walker.walk(preAst.statements); + } + function walkSwitchStatementChildren(preAst, walker) { + walker.walk(preAst.expression); + walker.walk(preAst.switchClauses); + } + function walkTryStatementChildren(preAst, walker) { + walker.walk(preAst.block); + walker.walk(preAst.catchClause); + walker.walk(preAst.finallyClause); + } + function walkCatchClauseChildren(preAst, walker) { + walker.walk(preAst.identifier); + walker.walk(preAst.typeAnnotation); + walker.walk(preAst.block); + } + function walkExternalModuleReferenceChildren(preAst, walker) { + walker.walk(preAst.stringLiteral); + } + function walkFinallyClauseChildren(preAst, walker) { + walker.walk(preAst.block); + } + function walkClassDeclChildren(preAst, walker) { + walker.walk(preAst.identifier); + walker.walk(preAst.typeParameterList); + walker.walk(preAst.heritageClauses); + walker.walk(preAst.classElements); + } + function walkScriptChildren(preAst, walker) { + walker.walk(preAst.moduleElements); + } + function walkHeritageClauseChildren(preAst, walker) { + walker.walk(preAst.typeNames); + } + function walkInterfaceDeclerationChildren(preAst, walker) { + walker.walk(preAst.identifier); + walker.walk(preAst.typeParameterList); + walker.walk(preAst.heritageClauses); + walker.walk(preAst.body); + } + function walkObjectTypeChildren(preAst, walker) { + walker.walk(preAst.typeMembers); + } + function walkArrayTypeChildren(preAst, walker) { + walker.walk(preAst.type); + } + function walkModuleDeclarationChildren(preAst, walker) { + walker.walk(preAst.name); + walker.walk(preAst.stringLiteral); + walker.walk(preAst.moduleElements); + } + function walkModuleNameModuleReferenceChildren(preAst, walker) { + walker.walk(preAst.moduleName); + } + function walkEnumDeclarationChildren(preAst, walker) { + walker.walk(preAst.identifier); + walker.walk(preAst.enumElements); + } + function walkEnumElementChildren(preAst, walker) { + walker.walk(preAst.propertyName); + walker.walk(preAst.equalsValueClause); + } + function walkImportDeclarationChildren(preAst, walker) { + walker.walk(preAst.identifier); + walker.walk(preAst.moduleReference); + } + function walkExportAssignmentChildren(preAst, walker) { + walker.walk(preAst.identifier); + } + function walkWithStatementChildren(preAst, walker) { + walker.walk(preAst.condition); + walker.walk(preAst.statement); + } + function walkExpressionStatementChildren(preAst, walker) { + walker.walk(preAst.expression); + } + function walkLabeledStatementChildren(preAst, walker) { + walker.walk(preAst.identifier); + walker.walk(preAst.statement); + } + function walkVariableStatementChildren(preAst, walker) { + walker.walk(preAst.variableDeclaration); + } + var childrenWalkers = new Array(TypeScript.SyntaxKind.LastNode + 1); + for (var i = TypeScript.SyntaxKind.FirstToken, n = TypeScript.SyntaxKind.LastToken; i <= n; i++) { + childrenWalkers[i] = null; + } + for (var i = TypeScript.SyntaxKind.FirstTrivia, n = TypeScript.SyntaxKind.LastTrivia; i <= n; i++) { + childrenWalkers[i] = null; + } + childrenWalkers[175 /* AddAssignmentExpression */] = walkBinaryExpressionChildren; + childrenWalkers[208 /* AddExpression */] = walkBinaryExpressionChildren; + childrenWalkers[180 /* AndAssignmentExpression */] = walkBinaryExpressionChildren; + childrenWalkers[60 /* AnyKeyword */] = null; + childrenWalkers[226 /* ArgumentList */] = walkArgumentListChildren; + childrenWalkers[214 /* ArrayLiteralExpression */] = walkArrayLiteralExpressionChildren; + childrenWalkers[124 /* ArrayType */] = walkArrayTypeChildren; + childrenWalkers[219 /* SimpleArrowFunctionExpression */] = walkSimpleArrowFunctionExpressionChildren; + childrenWalkers[218 /* ParenthesizedArrowFunctionExpression */] = walkParenthesizedArrowFunctionExpressionChildren; + childrenWalkers[174 /* AssignmentExpression */] = walkBinaryExpressionChildren; + childrenWalkers[191 /* BitwiseAndExpression */] = walkBinaryExpressionChildren; + childrenWalkers[190 /* BitwiseExclusiveOrExpression */] = walkBinaryExpressionChildren; + childrenWalkers[166 /* BitwiseNotExpression */] = walkPrefixUnaryExpressionChildren; + childrenWalkers[189 /* BitwiseOrExpression */] = walkBinaryExpressionChildren; + childrenWalkers[146 /* Block */] = walkBlockChildren; + childrenWalkers[61 /* BooleanKeyword */] = null; + childrenWalkers[152 /* BreakStatement */] = null; + childrenWalkers[142 /* CallSignature */] = walkCallSignatureChildren; + childrenWalkers[233 /* CaseSwitchClause */] = walkCaseSwitchClauseChildren; + childrenWalkers[220 /* CastExpression */] = walkCastExpressionChildren; + childrenWalkers[236 /* CatchClause */] = walkCatchClauseChildren; + childrenWalkers[131 /* ClassDeclaration */] = walkClassDeclChildren; + childrenWalkers[173 /* CommaExpression */] = walkBinaryExpressionChildren; + childrenWalkers[186 /* ConditionalExpression */] = walkTrinaryExpressionChildren; + childrenWalkers[239 /* Constraint */] = walkConstraintChildren; + childrenWalkers[137 /* ConstructorDeclaration */] = walkConstructorDeclarationChildren; + childrenWalkers[143 /* ConstructSignature */] = walkConstructSignatureChildren; + childrenWalkers[153 /* ContinueStatement */] = null; + childrenWalkers[125 /* ConstructorType */] = walkConstructorTypeChildren; + childrenWalkers[162 /* DebuggerStatement */] = null; + childrenWalkers[234 /* DefaultSwitchClause */] = walkDefaultSwitchClauseChildren; + childrenWalkers[170 /* DeleteExpression */] = walkDeleteExpressionChildren; + childrenWalkers[178 /* DivideAssignmentExpression */] = walkBinaryExpressionChildren; + childrenWalkers[206 /* DivideExpression */] = walkBinaryExpressionChildren; + childrenWalkers[161 /* DoStatement */] = walkDoStatementChildren; + childrenWalkers[221 /* ElementAccessExpression */] = walkElementAccessExpressionChildren; + childrenWalkers[235 /* ElseClause */] = walkElseClauseChildren; + childrenWalkers[156 /* EmptyStatement */] = null; + childrenWalkers[132 /* EnumDeclaration */] = walkEnumDeclarationChildren; + childrenWalkers[243 /* EnumElement */] = walkEnumElementChildren; + childrenWalkers[194 /* EqualsExpression */] = walkBinaryExpressionChildren; + childrenWalkers[232 /* EqualsValueClause */] = walkEqualsValueClauseChildren; + childrenWalkers[192 /* EqualsWithTypeConversionExpression */] = walkBinaryExpressionChildren; + childrenWalkers[181 /* ExclusiveOrAssignmentExpression */] = walkBinaryExpressionChildren; + childrenWalkers[134 /* ExportAssignment */] = walkExportAssignmentChildren; + childrenWalkers[149 /* ExpressionStatement */] = walkExpressionStatementChildren; + childrenWalkers[230 /* ExtendsHeritageClause */] = walkHeritageClauseChildren; + childrenWalkers[245 /* ExternalModuleReference */] = walkExternalModuleReferenceChildren; + childrenWalkers[24 /* FalseKeyword */] = null; + childrenWalkers[237 /* FinallyClause */] = walkFinallyClauseChildren; + childrenWalkers[155 /* ForInStatement */] = walkForInStatementChildren; + childrenWalkers[154 /* ForStatement */] = walkForStatementChildren; + childrenWalkers[129 /* FunctionDeclaration */] = walkFuncDeclChildren; + childrenWalkers[222 /* FunctionExpression */] = walkFunctionExpressionChildren; + childrenWalkers[241 /* FunctionPropertyAssignment */] = walkFunctionPropertyAssignmentChildren; + childrenWalkers[123 /* FunctionType */] = walkFunctionTypeChildren; + childrenWalkers[126 /* GenericType */] = walkGenericTypeChildren; + childrenWalkers[139 /* GetAccessor */] = walkGetAccessorChildren; + childrenWalkers[197 /* GreaterThanExpression */] = walkBinaryExpressionChildren; + childrenWalkers[199 /* GreaterThanOrEqualExpression */] = walkBinaryExpressionChildren; + childrenWalkers[147 /* IfStatement */] = walkIfStatementChildren; + childrenWalkers[231 /* ImplementsHeritageClause */] = walkHeritageClauseChildren; + childrenWalkers[133 /* ImportDeclaration */] = walkImportDeclarationChildren; + childrenWalkers[138 /* IndexMemberDeclaration */] = walkIndexMemberDeclarationChildren; + childrenWalkers[144 /* IndexSignature */] = walkIndexSignatureChildren; + childrenWalkers[201 /* InExpression */] = walkBinaryExpressionChildren; + childrenWalkers[200 /* InstanceOfExpression */] = walkBinaryExpressionChildren; + childrenWalkers[128 /* InterfaceDeclaration */] = walkInterfaceDeclerationChildren; + childrenWalkers[213 /* InvocationExpression */] = walkInvocationExpressionChildren; + childrenWalkers[160 /* LabeledStatement */] = walkLabeledStatementChildren; + childrenWalkers[183 /* LeftShiftAssignmentExpression */] = walkBinaryExpressionChildren; + childrenWalkers[202 /* LeftShiftExpression */] = walkBinaryExpressionChildren; + childrenWalkers[196 /* LessThanExpression */] = walkBinaryExpressionChildren; + childrenWalkers[198 /* LessThanOrEqualExpression */] = walkBinaryExpressionChildren; + childrenWalkers[1 /* List */] = walkListChildren; + childrenWalkers[188 /* LogicalAndExpression */] = walkBinaryExpressionChildren; + childrenWalkers[167 /* LogicalNotExpression */] = walkPrefixUnaryExpressionChildren; + childrenWalkers[187 /* LogicalOrExpression */] = walkBinaryExpressionChildren; + childrenWalkers[212 /* MemberAccessExpression */] = walkMemberAccessExpressionChildren; + childrenWalkers[135 /* MemberFunctionDeclaration */] = walkMemberFunctionDeclarationChildren; + childrenWalkers[136 /* MemberVariableDeclaration */] = walkMemberVariableDeclarationChildren; + childrenWalkers[145 /* MethodSignature */] = walkMethodSignatureChildren; + childrenWalkers[130 /* ModuleDeclaration */] = walkModuleDeclarationChildren; + childrenWalkers[246 /* ModuleNameModuleReference */] = walkModuleNameModuleReferenceChildren; + childrenWalkers[179 /* ModuloAssignmentExpression */] = walkBinaryExpressionChildren; + childrenWalkers[207 /* ModuloExpression */] = walkBinaryExpressionChildren; + childrenWalkers[177 /* MultiplyAssignmentExpression */] = walkBinaryExpressionChildren; + childrenWalkers[205 /* MultiplyExpression */] = walkBinaryExpressionChildren; + childrenWalkers[11 /* IdentifierName */] = null; + childrenWalkers[165 /* NegateExpression */] = walkPrefixUnaryExpressionChildren; + childrenWalkers[0 /* None */] = null; + childrenWalkers[195 /* NotEqualsExpression */] = walkBinaryExpressionChildren; + childrenWalkers[193 /* NotEqualsWithTypeConversionExpression */] = walkBinaryExpressionChildren; + childrenWalkers[32 /* NullKeyword */] = null; + childrenWalkers[67 /* NumberKeyword */] = null; + childrenWalkers[13 /* NumericLiteral */] = null; + childrenWalkers[216 /* ObjectCreationExpression */] = walkObjectCreationExpressionChildren; + childrenWalkers[215 /* ObjectLiteralExpression */] = walkObjectLiteralExpressionChildren; + childrenWalkers[122 /* ObjectType */] = walkObjectTypeChildren; + childrenWalkers[223 /* OmittedExpression */] = null; + childrenWalkers[182 /* OrAssignmentExpression */] = walkBinaryExpressionChildren; + childrenWalkers[242 /* Parameter */] = walkParameterChildren; + childrenWalkers[227 /* ParameterList */] = walkParameterListChildren; + childrenWalkers[217 /* ParenthesizedExpression */] = walkParenthesizedExpressionChildren; + childrenWalkers[164 /* PlusExpression */] = walkPrefixUnaryExpressionChildren; + childrenWalkers[211 /* PostDecrementExpression */] = walkPostfixUnaryExpressionChildren; + childrenWalkers[210 /* PostIncrementExpression */] = walkPostfixUnaryExpressionChildren; + childrenWalkers[169 /* PreDecrementExpression */] = walkPrefixUnaryExpressionChildren; + childrenWalkers[168 /* PreIncrementExpression */] = walkPrefixUnaryExpressionChildren; + childrenWalkers[141 /* PropertySignature */] = walkPropertySignatureChildren; + childrenWalkers[121 /* QualifiedName */] = walkQualifiedNameChildren; + childrenWalkers[12 /* RegularExpressionLiteral */] = null; + childrenWalkers[150 /* ReturnStatement */] = walkReturnStatementChildren; + childrenWalkers[120 /* SourceUnit */] = walkScriptChildren; + childrenWalkers[2 /* SeparatedList */] = walkSeparatedListChildren; + childrenWalkers[140 /* SetAccessor */] = walkSetAccessorChildren; + childrenWalkers[184 /* SignedRightShiftAssignmentExpression */] = walkBinaryExpressionChildren; + childrenWalkers[203 /* SignedRightShiftExpression */] = walkBinaryExpressionChildren; + childrenWalkers[240 /* SimplePropertyAssignment */] = walkSimplePropertyAssignmentChildren; + childrenWalkers[14 /* StringLiteral */] = null; + childrenWalkers[69 /* StringKeyword */] = null; + childrenWalkers[176 /* SubtractAssignmentExpression */] = walkBinaryExpressionChildren; + childrenWalkers[209 /* SubtractExpression */] = walkBinaryExpressionChildren; + childrenWalkers[50 /* SuperKeyword */] = null; + childrenWalkers[151 /* SwitchStatement */] = walkSwitchStatementChildren; + childrenWalkers[35 /* ThisKeyword */] = null; + childrenWalkers[157 /* ThrowStatement */] = walkThrowStatementChildren; + childrenWalkers[3 /* TriviaList */] = null; + childrenWalkers[37 /* TrueKeyword */] = null; + childrenWalkers[159 /* TryStatement */] = walkTryStatementChildren; + childrenWalkers[244 /* TypeAnnotation */] = walkTypeAnnotationChildren; + childrenWalkers[228 /* TypeArgumentList */] = walkTypeArgumentListChildren; + childrenWalkers[171 /* TypeOfExpression */] = walkTypeOfExpressionChildren; + childrenWalkers[238 /* TypeParameter */] = walkTypeParameterChildren; + childrenWalkers[229 /* TypeParameterList */] = walkTypeParameterListChildren; + childrenWalkers[127 /* TypeQuery */] = walkTypeQueryChildren; + childrenWalkers[185 /* UnsignedRightShiftAssignmentExpression */] = walkBinaryExpressionChildren; + childrenWalkers[204 /* UnsignedRightShiftExpression */] = walkBinaryExpressionChildren; + childrenWalkers[224 /* VariableDeclaration */] = walkVariableDeclarationChildren; + childrenWalkers[225 /* VariableDeclarator */] = walkVariableDeclaratorChildren; + childrenWalkers[148 /* VariableStatement */] = walkVariableStatementChildren; + childrenWalkers[172 /* VoidExpression */] = walkVoidExpressionChildren; + childrenWalkers[41 /* VoidKeyword */] = null; + childrenWalkers[158 /* WhileStatement */] = walkWhileStatementChildren; + childrenWalkers[163 /* WithStatement */] = walkWithStatementChildren; + for (var e in TypeScript.SyntaxKind) { + if (TypeScript.SyntaxKind.hasOwnProperty(e) && TypeScript.StringUtilities.isString(TypeScript.SyntaxKind[e])) { + TypeScript.Debug.assert(childrenWalkers[e] !== undefined, "Fix initWalkers: " + TypeScript.SyntaxKind[e]); + } + } + var AstWalkOptions = (function () { + function AstWalkOptions() { + this.goChildren = true; + this.stopWalking = false; + } + return AstWalkOptions; + })(); + TypeScript.AstWalkOptions = AstWalkOptions; + var SimplePreAstWalker = (function () { + function SimplePreAstWalker(pre, state) { + this.pre = pre; + this.state = state; + this.options = new AstWalkOptions(); + } + SimplePreAstWalker.prototype.walk = function (ast) { + if (!ast) { + return; + } + this.pre(ast, this.state); + var walker = childrenWalkers[ast.kind()]; + if (walker) { + walker(ast, this); + } + }; + return SimplePreAstWalker; + })(); + var SimplePrePostAstWalker = (function () { + function SimplePrePostAstWalker(pre, post, state) { + this.pre = pre; + this.post = post; + this.state = state; + this.options = new AstWalkOptions(); + } + SimplePrePostAstWalker.prototype.walk = function (ast) { + if (!ast) { + return; + } + this.pre(ast, this.state); + var walker = childrenWalkers[ast.kind()]; + if (walker) { + walker(ast, this); + } + this.post(ast, this.state); + }; + return SimplePrePostAstWalker; + })(); + var NormalAstWalker = (function () { + function NormalAstWalker(pre, post, state) { + this.pre = pre; + this.post = post; + this.state = state; + this.options = new AstWalkOptions(); + } + NormalAstWalker.prototype.walk = function (ast) { + if (!ast) { + return; + } + if (this.options.stopWalking) { + return; + } + this.pre(ast, this); + if (this.options.stopWalking) { + return; + } + if (this.options.goChildren) { + var walker = childrenWalkers[ast.kind()]; + if (walker) { + walker(ast, this); + } + } + else { + this.options.goChildren = true; + } + if (this.post) { + this.post(ast, this); + } + }; + return NormalAstWalker; + })(); + var AstWalkerFactory = (function () { + function AstWalkerFactory() { + } + AstWalkerFactory.prototype.walk = function (ast, pre, post, state) { + new NormalAstWalker(pre, post, state).walk(ast); + }; + AstWalkerFactory.prototype.simpleWalk = function (ast, pre, post, state) { + if (post) { + new SimplePrePostAstWalker(pre, post, state).walk(ast); + } + else { + new SimplePreAstWalker(pre, state).walk(ast); + } + }; + return AstWalkerFactory; + })(); + TypeScript.AstWalkerFactory = AstWalkerFactory; + var globalAstWalkerFactory = new AstWalkerFactory(); + function getAstWalkerFactory() { + return globalAstWalkerFactory; + } + TypeScript.getAstWalkerFactory = getAstWalkerFactory; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + (function (ASTHelpers) { + var sentinelEmptyArray = []; + function isValidAstNode(ast) { + return ast && !TypeScript.isShared(ast) && TypeScript.start(ast) !== -1 && TypeScript.end(ast) !== -1; + } + ASTHelpers.isValidAstNode = isValidAstNode; + function isValidSpan(ast) { + if (!ast) + return false; + if (ast.start() === -1 || ast.end() === -1) + return false; + return true; + } + ASTHelpers.isValidSpan = isValidSpan; + function getAstAtPosition(script, pos, useTrailingTriviaAsLimChar, forceInclusive) { + if (useTrailingTriviaAsLimChar === void 0) { useTrailingTriviaAsLimChar = true; } + if (forceInclusive === void 0) { forceInclusive = false; } + var top = null; + var pre = function (cur, walker) { + if (!TypeScript.isShared(cur) && isValidAstNode(cur)) { + var isInvalid1 = cur.kind() === 149 /* ExpressionStatement */ && TypeScript.width(cur) === 0; + if (isInvalid1) { + walker.options.goChildren = false; + } + else { + var inclusive = forceInclusive || cur.kind() === 11 /* IdentifierName */ || cur.kind() === 212 /* MemberAccessExpression */ || cur.kind() === 121 /* QualifiedName */ || cur.kind() === 224 /* VariableDeclaration */ || cur.kind() === 225 /* VariableDeclarator */ || cur.kind() === 213 /* InvocationExpression */ || pos === TypeScript.end(script) + TypeScript.lastToken(script).trailingTriviaWidth(); + var minChar = TypeScript.start(cur); + var limChar = TypeScript.end(cur) + (useTrailingTriviaAsLimChar ? TypeScript.trailingTriviaWidth(cur) : 0) + (inclusive ? 1 : 0); + if (pos >= minChar && pos < limChar) { + if ((cur.kind() !== 1 /* List */ && cur.kind() !== 2 /* SeparatedList */) || TypeScript.end(cur) > TypeScript.start(cur)) { + if (top === null) { + top = cur; + } + else if (TypeScript.start(cur) >= TypeScript.start(top) && (TypeScript.end(cur) + (useTrailingTriviaAsLimChar ? TypeScript.trailingTriviaWidth(cur) : 0)) <= (TypeScript.end(top) + (useTrailingTriviaAsLimChar ? TypeScript.trailingTriviaWidth(top) : 0))) { + if (TypeScript.width(top) !== 0 || TypeScript.width(cur) !== 0) { + top = cur; + } + } + } + } + walker.options.goChildren = (minChar <= pos && pos <= limChar); + } + } + }; + TypeScript.getAstWalkerFactory().walk(script, pre); + return top; + } + ASTHelpers.getAstAtPosition = getAstAtPosition; + function getExtendsHeritageClause(clauses) { + return getHeritageClause(clauses, 230 /* ExtendsHeritageClause */); + } + ASTHelpers.getExtendsHeritageClause = getExtendsHeritageClause; + function getImplementsHeritageClause(clauses) { + return getHeritageClause(clauses, 231 /* ImplementsHeritageClause */); + } + ASTHelpers.getImplementsHeritageClause = getImplementsHeritageClause; + function getHeritageClause(clauses, kind) { + if (clauses) { + for (var i = 0, n = clauses.length; i < n; i++) { + var child = clauses[i]; + if (child.typeNames.length > 0 && child.kind() === kind) { + return child; + } + } + } + return null; + } + function isCallExpression(ast) { + return (ast && ast.kind() === 213 /* InvocationExpression */) || (ast && ast.kind() === 216 /* ObjectCreationExpression */); + } + ASTHelpers.isCallExpression = isCallExpression; + function isCallExpressionTarget(ast) { + return !!getCallExpressionTarget(ast); + } + ASTHelpers.isCallExpressionTarget = isCallExpressionTarget; + function getCallExpressionTarget(ast) { + if (!ast) { + return null; + } + var current = ast; + while (current && current.parent) { + if (current.parent.kind() === 212 /* MemberAccessExpression */ && current.parent.name === current) { + current = current.parent; + continue; + } + break; + } + if (current && current.parent) { + if (current.parent.kind() === 213 /* InvocationExpression */ || current.parent.kind() === 216 /* ObjectCreationExpression */) { + return current === current.parent.expression ? current : null; + } + } + return null; + } + ASTHelpers.getCallExpressionTarget = getCallExpressionTarget; + function isNameOfSomeDeclaration(ast) { + if (ast === null || ast.parent === null) { + return false; + } + if (ast.kind() !== 11 /* IdentifierName */) { + return false; + } + switch (ast.parent.kind()) { + case 131 /* ClassDeclaration */: + return ast.parent.identifier === ast; + case 128 /* InterfaceDeclaration */: + return ast.parent.identifier === ast; + case 132 /* EnumDeclaration */: + return ast.parent.identifier === ast; + case 130 /* ModuleDeclaration */: + return ast.parent.name === ast || ast.parent.stringLiteral === ast; + case 225 /* VariableDeclarator */: + return ast.parent.propertyName === ast; + case 129 /* FunctionDeclaration */: + return ast.parent.identifier === ast; + case 135 /* MemberFunctionDeclaration */: + return ast.parent.propertyName === ast; + case 242 /* Parameter */: + return ast.parent.identifier === ast; + case 238 /* TypeParameter */: + return ast.parent.identifier === ast; + case 240 /* SimplePropertyAssignment */: + return ast.parent.propertyName === ast; + case 241 /* FunctionPropertyAssignment */: + return ast.parent.propertyName === ast; + case 243 /* EnumElement */: + return ast.parent.propertyName === ast; + case 133 /* ImportDeclaration */: + return ast.parent.identifier === ast; + case 145 /* MethodSignature */: + return ast.parent.propertyName === ast; + case 141 /* PropertySignature */: + return ast.parent.propertyName === ast; + } + return false; + } + function isDeclarationASTOrDeclarationNameAST(ast) { + return isNameOfSomeDeclaration(ast) || ASTHelpers.isDeclarationAST(ast); + } + ASTHelpers.isDeclarationASTOrDeclarationNameAST = isDeclarationASTOrDeclarationNameAST; + function getEnclosingParameterForInitializer(ast) { + var current = ast; + while (current) { + switch (current.kind()) { + case 232 /* EqualsValueClause */: + if (current.parent && current.parent.kind() === 242 /* Parameter */) { + return current.parent; + } + break; + case 131 /* ClassDeclaration */: + case 128 /* InterfaceDeclaration */: + case 130 /* ModuleDeclaration */: + return null; + } + current = current.parent; + } + return null; + } + ASTHelpers.getEnclosingParameterForInitializer = getEnclosingParameterForInitializer; + function getEnclosingMemberDeclaration(ast) { + var current = ast; + while (current) { + switch (current.kind()) { + case 136 /* MemberVariableDeclaration */: + case 145 /* MethodSignature */: + case 135 /* MemberFunctionDeclaration */: + case 139 /* GetAccessor */: + case 140 /* SetAccessor */: + return current; + case 131 /* ClassDeclaration */: + case 128 /* InterfaceDeclaration */: + case 130 /* ModuleDeclaration */: + return null; + } + current = current.parent; + } + return null; + } + ASTHelpers.getEnclosingMemberDeclaration = getEnclosingMemberDeclaration; + function isNameOfFunction(ast) { + return ast && ast.parent && ast.kind() === 11 /* IdentifierName */ && ast.parent.kind() === 129 /* FunctionDeclaration */ && ast.parent.identifier === ast; + } + ASTHelpers.isNameOfFunction = isNameOfFunction; + function isNameOfMemberFunction(ast) { + return ast && ast.parent && ast.kind() === 11 /* IdentifierName */ && ast.parent.kind() === 135 /* MemberFunctionDeclaration */ && ast.parent.propertyName === ast; + } + ASTHelpers.isNameOfMemberFunction = isNameOfMemberFunction; + function isNameOfMemberAccessExpression(ast) { + if (ast && ast.parent && ast.parent.kind() === 212 /* MemberAccessExpression */ && ast.parent.name === ast) { + return true; + } + return false; + } + ASTHelpers.isNameOfMemberAccessExpression = isNameOfMemberAccessExpression; + function isRightSideOfQualifiedName(ast) { + if (ast && ast.parent && ast.parent.kind() === 121 /* QualifiedName */ && ast.parent.right === ast) { + return true; + } + return false; + } + ASTHelpers.isRightSideOfQualifiedName = isRightSideOfQualifiedName; + function parentIsModuleDeclaration(ast) { + return ast.parent && ast.parent.kind() === 130 /* ModuleDeclaration */; + } + ASTHelpers.parentIsModuleDeclaration = parentIsModuleDeclaration; + function isDeclarationAST(ast) { + switch (ast.kind()) { + case 225 /* VariableDeclarator */: + return getVariableStatement(ast) !== null; + case 133 /* ImportDeclaration */: + case 131 /* ClassDeclaration */: + case 128 /* InterfaceDeclaration */: + case 242 /* Parameter */: + case 219 /* SimpleArrowFunctionExpression */: + case 218 /* ParenthesizedArrowFunctionExpression */: + case 144 /* IndexSignature */: + case 129 /* FunctionDeclaration */: + case 130 /* ModuleDeclaration */: + case 124 /* ArrayType */: + case 122 /* ObjectType */: + case 238 /* TypeParameter */: + case 137 /* ConstructorDeclaration */: + case 135 /* MemberFunctionDeclaration */: + case 139 /* GetAccessor */: + case 140 /* SetAccessor */: + case 136 /* MemberVariableDeclaration */: + case 138 /* IndexMemberDeclaration */: + case 132 /* EnumDeclaration */: + case 243 /* EnumElement */: + case 240 /* SimplePropertyAssignment */: + case 241 /* FunctionPropertyAssignment */: + case 222 /* FunctionExpression */: + case 142 /* CallSignature */: + case 143 /* ConstructSignature */: + case 145 /* MethodSignature */: + case 141 /* PropertySignature */: + return true; + default: + return false; + } + } + ASTHelpers.isDeclarationAST = isDeclarationAST; + function preComments(element, text) { + if (element) { + switch (element.kind()) { + case 148 /* VariableStatement */: + case 149 /* ExpressionStatement */: + case 131 /* ClassDeclaration */: + case 133 /* ImportDeclaration */: + case 129 /* FunctionDeclaration */: + case 130 /* ModuleDeclaration */: + case 132 /* EnumDeclaration */: + case 147 /* IfStatement */: + case 240 /* SimplePropertyAssignment */: + case 135 /* MemberFunctionDeclaration */: + case 128 /* InterfaceDeclaration */: + case 139 /* GetAccessor */: + case 140 /* SetAccessor */: + case 150 /* ReturnStatement */: + case 137 /* ConstructorDeclaration */: + case 136 /* MemberVariableDeclaration */: + case 243 /* EnumElement */: + case 142 /* CallSignature */: + case 143 /* ConstructSignature */: + case 144 /* IndexSignature */: + case 141 /* PropertySignature */: + case 145 /* MethodSignature */: + case 241 /* FunctionPropertyAssignment */: + case 242 /* Parameter */: + return convertNodeLeadingComments(element, text); + } + } + return null; + } + ASTHelpers.preComments = preComments; + function postComments(element, text) { + if (element) { + switch (element.kind()) { + case 149 /* ExpressionStatement */: + return convertNodeTrailingComments(element, text, true); + case 148 /* VariableStatement */: + case 131 /* ClassDeclaration */: + case 133 /* ImportDeclaration */: + case 129 /* FunctionDeclaration */: + case 130 /* ModuleDeclaration */: + case 132 /* EnumDeclaration */: + case 147 /* IfStatement */: + case 240 /* SimplePropertyAssignment */: + case 135 /* MemberFunctionDeclaration */: + case 128 /* InterfaceDeclaration */: + case 139 /* GetAccessor */: + case 140 /* SetAccessor */: + case 150 /* ReturnStatement */: + case 137 /* ConstructorDeclaration */: + case 136 /* MemberVariableDeclaration */: + case 243 /* EnumElement */: + case 142 /* CallSignature */: + case 143 /* ConstructSignature */: + case 144 /* IndexSignature */: + case 141 /* PropertySignature */: + case 145 /* MethodSignature */: + case 241 /* FunctionPropertyAssignment */: + case 242 /* Parameter */: + return convertNodeTrailingComments(element, text); + } + } + return null; + } + ASTHelpers.postComments = postComments; + function convertNodeTrailingComments(node, text, allowWithNewLine) { + if (allowWithNewLine === void 0) { allowWithNewLine = false; } + var _lastToken = TypeScript.lastToken(node); + if (_lastToken === null || !_lastToken.hasTrailingTrivia()) { + return null; + } + if (!allowWithNewLine && TypeScript.SyntaxUtilities.isLastTokenOnLine(_lastToken, text)) { + return null; + } + return convertComments(_lastToken.trailingTrivia(text), TypeScript.fullStart(node) + TypeScript.fullWidth(node) - _lastToken.trailingTriviaWidth(text)); + } + function convertNodeLeadingComments(element, text) { + if (element) { + return convertTokenLeadingComments(TypeScript.firstToken(element), text); + } + return null; + } + function convertTokenLeadingComments(token, text) { + if (token === null) { + return null; + } + return token.hasLeadingTrivia() ? convertComments(token.leadingTrivia(text), token.fullStart()) : null; + } + ASTHelpers.convertTokenLeadingComments = convertTokenLeadingComments; + function convertTokenTrailingComments(token, text) { + if (token === null) { + return null; + } + return token.hasTrailingTrivia() ? convertComments(token.trailingTrivia(text), TypeScript.fullEnd(token) - token.trailingTriviaWidth(text)) : null; + } + ASTHelpers.convertTokenTrailingComments = convertTokenTrailingComments; + function convertComments(triviaList, commentStartPosition) { + var result = null; + for (var i = 0, n = triviaList.count(); i < n; i++) { + var trivia = triviaList.syntaxTriviaAt(i); + if (trivia.isComment()) { + var hasTrailingNewLine = ((i + 1) < n) && triviaList.syntaxTriviaAt(i + 1).isNewLine(); + result = result || []; + result.push(convertComment(trivia, commentStartPosition, hasTrailingNewLine)); + } + commentStartPosition += trivia.fullWidth(); + } + return result; + } + function convertComment(trivia, commentStartPosition, hasTrailingNewLine) { + var comment = new TypeScript.Comment(trivia, hasTrailingNewLine, commentStartPosition, commentStartPosition + trivia.fullWidth()); + return comment; + } + function docComments(ast, text) { + if (isDeclarationAST(ast)) { + var comments = null; + if (ast.kind() === 225 /* VariableDeclarator */) { + comments = TypeScript.ASTHelpers.preComments(getVariableStatement(ast), text); + } + else if (ast.kind() === 242 /* Parameter */) { + comments = TypeScript.ASTHelpers.preComments(ast, text); + if (!comments) { + var previousToken = TypeScript.findToken(TypeScript.syntaxTree(ast).sourceUnit(), TypeScript.firstToken(ast).fullStart() - 1); + if (previousToken && (previousToken.kind() === 72 /* OpenParenToken */ || previousToken.kind() === 79 /* CommaToken */)) { + comments = convertTokenTrailingComments(previousToken, text); + } + } + } + else { + comments = TypeScript.ASTHelpers.preComments(ast, text); + } + if (comments && comments.length > 0) { + return comments.filter(function (c) { return isDocComment(c); }); + } + } + return sentinelEmptyArray; + } + ASTHelpers.docComments = docComments; + function isDocComment(comment) { + if (comment.kind() === 6 /* MultiLineCommentTrivia */) { + var fullText = comment.fullText(); + return fullText.charAt(2) === "*" && fullText.charAt(3) !== "/"; + } + return false; + } + ASTHelpers.isDocComment = isDocComment; + function getParameterList(ast) { + if (ast) { + switch (ast.kind()) { + case 137 /* ConstructorDeclaration */: + return getParameterList(ast.callSignature); + case 129 /* FunctionDeclaration */: + return getParameterList(ast.callSignature); + case 218 /* ParenthesizedArrowFunctionExpression */: + return getParameterList(ast.callSignature); + case 143 /* ConstructSignature */: + return getParameterList(ast.callSignature); + case 135 /* MemberFunctionDeclaration */: + return getParameterList(ast.callSignature); + case 241 /* FunctionPropertyAssignment */: + return getParameterList(ast.callSignature); + case 222 /* FunctionExpression */: + return getParameterList(ast.callSignature); + case 145 /* MethodSignature */: + return getParameterList(ast.callSignature); + case 125 /* ConstructorType */: + return ast.parameterList; + case 123 /* FunctionType */: + return ast.parameterList; + case 142 /* CallSignature */: + return ast.parameterList; + case 139 /* GetAccessor */: + return getParameterList(ast.callSignature); + case 140 /* SetAccessor */: + return getParameterList(ast.callSignature); + } + } + return null; + } + ASTHelpers.getParameterList = getParameterList; + function getType(ast) { + if (ast) { + switch (ast.kind()) { + case 129 /* FunctionDeclaration */: + return getType(ast.callSignature); + case 218 /* ParenthesizedArrowFunctionExpression */: + return getType(ast.callSignature); + case 143 /* ConstructSignature */: + return getType(ast.callSignature); + case 135 /* MemberFunctionDeclaration */: + return getType(ast.callSignature); + case 241 /* FunctionPropertyAssignment */: + return getType(ast.callSignature); + case 222 /* FunctionExpression */: + return getType(ast.callSignature); + case 145 /* MethodSignature */: + return getType(ast.callSignature); + case 142 /* CallSignature */: + return getType(ast.typeAnnotation); + case 144 /* IndexSignature */: + return getType(ast.typeAnnotation); + case 141 /* PropertySignature */: + return getType(ast.typeAnnotation); + case 139 /* GetAccessor */: + return getType(ast.callSignature); + case 242 /* Parameter */: + return getType(ast.typeAnnotation); + case 136 /* MemberVariableDeclaration */: + return getType(ast.variableDeclarator); + case 225 /* VariableDeclarator */: + return getType(ast.typeAnnotation); + case 236 /* CatchClause */: + return getType(ast.typeAnnotation); + case 125 /* ConstructorType */: + return ast.type; + case 123 /* FunctionType */: + return ast.type; + case 244 /* TypeAnnotation */: + return ast.type; + } + } + return null; + } + ASTHelpers.getType = getType; + function getVariableStatement(variableDeclarator) { + if (variableDeclarator && variableDeclarator.parent && variableDeclarator.parent.parent && variableDeclarator.parent.parent.parent && variableDeclarator.parent.kind() === 2 /* SeparatedList */ && variableDeclarator.parent.parent.kind() === 224 /* VariableDeclaration */ && variableDeclarator.parent.parent.parent.kind() === 148 /* VariableStatement */) { + return variableDeclarator.parent.parent.parent; + } + return null; + } + function getVariableDeclaratorModifiers(variableDeclarator) { + var variableStatement = getVariableStatement(variableDeclarator); + return variableStatement ? variableStatement.modifiers : TypeScript.Syntax.emptyList(); + } + ASTHelpers.getVariableDeclaratorModifiers = getVariableDeclaratorModifiers; + function isIntegerLiteralAST(expression) { + if (expression) { + switch (expression.kind()) { + case 164 /* PlusExpression */: + case 165 /* NegateExpression */: + expression = expression.operand; + return expression.kind() === 13 /* NumericLiteral */ && TypeScript.IntegerUtilities.isInteger(expression.text()); + case 13 /* NumericLiteral */: + var text = expression.text(); + return TypeScript.IntegerUtilities.isInteger(text) || TypeScript.IntegerUtilities.isHexInteger(text); + } + } + return false; + } + ASTHelpers.isIntegerLiteralAST = isIntegerLiteralAST; + function getEnclosingModuleDeclaration(ast) { + while (ast) { + if (ast.kind() === 130 /* ModuleDeclaration */) { + return ast; + } + ast = ast.parent; + } + return null; + } + ASTHelpers.getEnclosingModuleDeclaration = getEnclosingModuleDeclaration; + function isEntireNameOfModuleDeclaration(nameAST) { + return parentIsModuleDeclaration(nameAST) && nameAST.parent.name === nameAST; + } + function getModuleDeclarationFromNameAST(ast) { + if (ast) { + switch (ast.kind()) { + case 14 /* StringLiteral */: + if (parentIsModuleDeclaration(ast) && ast.parent.stringLiteral === ast) { + return ast.parent; + } + return null; + case 11 /* IdentifierName */: + case 121 /* QualifiedName */: + if (isEntireNameOfModuleDeclaration(ast)) { + return ast.parent; + } + break; + default: + return null; + } + for (ast = ast.parent; ast && ast.kind() === 121 /* QualifiedName */; ast = ast.parent) { + if (isEntireNameOfModuleDeclaration(ast)) { + return ast.parent; + } + } + } + return null; + } + ASTHelpers.getModuleDeclarationFromNameAST = getModuleDeclarationFromNameAST; + function isLastNameOfModule(ast, astName) { + if (ast) { + if (ast.stringLiteral) { + return astName === ast.stringLiteral; + } + else if (ast.name.kind() === 121 /* QualifiedName */) { + return astName === ast.name.right; + } + else { + return astName === ast.name; + } + } + return false; + } + ASTHelpers.isLastNameOfModule = isLastNameOfModule; + function getNameOfIdenfierOrQualifiedName(name) { + if (name.kind() === 11 /* IdentifierName */) { + return name.text(); + } + else { + TypeScript.Debug.assert(name.kind() == 121 /* QualifiedName */); + var dotExpr = name; + return getNameOfIdenfierOrQualifiedName(dotExpr.left) + "." + getNameOfIdenfierOrQualifiedName(dotExpr.right); + } + } + ASTHelpers.getNameOfIdenfierOrQualifiedName = getNameOfIdenfierOrQualifiedName; + function getModuleNames(name, result) { + result = result || []; + if (name.kind() === 121 /* QualifiedName */) { + getModuleNames(name.left, result); + result.push(name.right); + } + else { + result.push(name); + } + return result; + } + ASTHelpers.getModuleNames = getModuleNames; + })(TypeScript.ASTHelpers || (TypeScript.ASTHelpers = {})); + var ASTHelpers = TypeScript.ASTHelpers; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + var MemberName = (function () { + function MemberName() { + this.prefix = ""; + this.suffix = ""; + } + MemberName.prototype.isString = function () { + return false; + }; + MemberName.prototype.isArray = function () { + return false; + }; + MemberName.prototype.isMarker = function () { + return !this.isString() && !this.isArray(); + }; + MemberName.prototype.toString = function () { + return MemberName.memberNameToString(this); + }; + MemberName.memberNameToString = function (memberName, markerInfo, markerBaseLength) { + if (markerBaseLength === void 0) { markerBaseLength = 0; } + var result = memberName.prefix; + if (memberName.isString()) { + result += memberName.text; + } + else if (memberName.isArray()) { + var ar = memberName; + for (var index = 0; index < ar.entries.length; index++) { + if (ar.entries[index].isMarker()) { + if (markerInfo) { + markerInfo.push(markerBaseLength + result.length); + } + continue; + } + result += MemberName.memberNameToString(ar.entries[index], markerInfo, markerBaseLength + result.length); + result += ar.delim; + } + } + result += memberName.suffix; + return result; + }; + MemberName.create = function (arg1, arg2, arg3) { + if (typeof arg1 === "string") { + return new MemberNameString(arg1); + } + else { + var result = new MemberNameArray(); + if (arg2) + result.prefix = arg2; + if (arg3) + result.suffix = arg3; + result.entries.push(arg1); + return result; + } + }; + return MemberName; + })(); + TypeScript.MemberName = MemberName; + var MemberNameString = (function (_super) { + __extends(MemberNameString, _super); + function MemberNameString(text) { + _super.call(this); + this.text = text; + } + MemberNameString.prototype.isString = function () { + return true; + }; + return MemberNameString; + })(MemberName); + TypeScript.MemberNameString = MemberNameString; + var MemberNameArray = (function (_super) { + __extends(MemberNameArray, _super); + function MemberNameArray() { + _super.call(this); + this.delim = ""; + this.entries = []; + } + MemberNameArray.prototype.isArray = function () { + return true; + }; + MemberNameArray.prototype.add = function (entry) { + this.entries.push(entry); + }; + MemberNameArray.prototype.addAll = function (entries) { + for (var i = 0; i < entries.length; i++) { + this.entries.push(entries[i]); + } + }; + return MemberNameArray; + })(MemberName); + TypeScript.MemberNameArray = MemberNameArray; +})(TypeScript || (TypeScript = {})); +var TypeScript; +(function (TypeScript) { + function stripStartAndEndQuotes(str) { + var firstCharCode = str && str.charCodeAt(0); + if (str && str.length >= 2 && firstCharCode === str.charCodeAt(str.length - 1) && (firstCharCode === 39 /* singleQuote */ || firstCharCode === 34 /* doubleQuote */)) { + return str.substring(1, str.length - 1); + } + return str; + } + TypeScript.stripStartAndEndQuotes = stripStartAndEndQuotes; + function isSingleQuoted(str) { + return str && str.length >= 2 && str.charCodeAt(0) === str.charCodeAt(str.length - 1) && str.charCodeAt(0) === 39 /* singleQuote */; + } + TypeScript.isSingleQuoted = isSingleQuoted; + function isDoubleQuoted(str) { + return str && str.length >= 2 && str.charCodeAt(0) === str.charCodeAt(str.length - 1) && str.charCodeAt(0) === 34 /* doubleQuote */; + } + TypeScript.isDoubleQuoted = isDoubleQuoted; + function isQuoted(str) { + return isDoubleQuoted(str) || isSingleQuoted(str); + } + TypeScript.isQuoted = isQuoted; + function quoteStr(str) { + return "\"" + str + "\""; + } + TypeScript.quoteStr = quoteStr; + var switchToForwardSlashesRegEx = /\\/g; + function switchToForwardSlashes(path) { + return path.replace(switchToForwardSlashesRegEx, "/"); + } + TypeScript.switchToForwardSlashes = switchToForwardSlashes; + function trimModName(modName) { + if (modName.length > 5 && modName.substring(modName.length - 5, modName.length) === ".d.ts") { + return modName.substring(0, modName.length - 5); + } + if (modName.length > 3 && modName.substring(modName.length - 3, modName.length) === ".ts") { + return modName.substring(0, modName.length - 3); + } + if (modName.length > 3 && modName.substring(modName.length - 3, modName.length) === ".js") { + return modName.substring(0, modName.length - 3); + } + return modName; + } + TypeScript.trimModName = trimModName; + function getDeclareFilePath(fname) { + return isTSFile(fname) ? changePathToDTS(fname) : changePathToDTS(fname); + } + TypeScript.getDeclareFilePath = getDeclareFilePath; + function isFileOfExtension(fname, ext) { + var invariantFname = fname.toLocaleUpperCase(); + var invariantExt = ext.toLocaleUpperCase(); + var extLength = invariantExt.length; + return invariantFname.length > extLength && invariantFname.substring(invariantFname.length - extLength, invariantFname.length) === invariantExt; + } + function isTSFile(fname) { + return isFileOfExtension(fname, ".ts"); + } + TypeScript.isTSFile = isTSFile; + function isDTSFile(fname) { + return isFileOfExtension(fname, ".d.ts"); + } + TypeScript.isDTSFile = isDTSFile; + function getPrettyName(modPath, quote, treatAsFileName) { + if (quote === void 0) { quote = true; } + if (treatAsFileName === void 0) { treatAsFileName = false; } + var modName = treatAsFileName ? switchToForwardSlashes(modPath) : trimModName(stripStartAndEndQuotes(modPath)); + var components = this.getPathComponents(modName); + return components.length ? (quote ? quoteStr(components[components.length - 1]) : components[components.length - 1]) : modPath; + } + TypeScript.getPrettyName = getPrettyName; + function getPathComponents(path) { + return path.split("/"); + } + TypeScript.getPathComponents = getPathComponents; + function getRelativePathToFixedPath(fixedModFilePath, absoluteModPath, isAbsoultePathURL) { + if (isAbsoultePathURL === void 0) { isAbsoultePathURL = true; } + absoluteModPath = switchToForwardSlashes(absoluteModPath); + var modComponents = this.getPathComponents(absoluteModPath); + var fixedModComponents = this.getPathComponents(fixedModFilePath); + var joinStartIndex = 0; + for (; joinStartIndex < modComponents.length && joinStartIndex < fixedModComponents.length; joinStartIndex++) { + if (fixedModComponents[joinStartIndex] !== modComponents[joinStartIndex]) { + break; + } + } + if (joinStartIndex !== 0) { + var relativePath = ""; + var relativePathComponents = modComponents.slice(joinStartIndex, modComponents.length); + for (; joinStartIndex < fixedModComponents.length; joinStartIndex++) { + if (fixedModComponents[joinStartIndex] !== "") { + relativePath = relativePath + "../"; + } + } + return relativePath + relativePathComponents.join("/"); + } + if (isAbsoultePathURL && absoluteModPath.indexOf("://") === -1) { + absoluteModPath = "file:///" + absoluteModPath; + } + return absoluteModPath; + } + TypeScript.getRelativePathToFixedPath = getRelativePathToFixedPath; + function changePathToDTS(modPath) { + return trimModName(stripStartAndEndQuotes(modPath)) + ".d.ts"; + } + TypeScript.changePathToDTS = changePathToDTS; + function isRelative(path) { + return path.length > 0 && path.charAt(0) === "."; + } + TypeScript.isRelative = isRelative; + function isRooted(path) { + return path.length > 0 && (path.charAt(0) === "\\" || path.charAt(0) === "/" || (path.indexOf(":\\") !== -1) || (path.indexOf(":/") !== -1)); + } + TypeScript.isRooted = isRooted; + function getRootFilePath(outFname) { + if (outFname === "") { + return outFname; + } + else { + var isPath = outFname.indexOf("/") !== -1; + return isPath ? filePath(outFname) : ""; + } + } + TypeScript.getRootFilePath = getRootFilePath; + function filePathComponents(fullPath) { + fullPath = switchToForwardSlashes(fullPath); + var components = getPathComponents(fullPath); + return components.slice(0, components.length - 1); + } + TypeScript.filePathComponents = filePathComponents; + function filePath(fullPath) { + var path = filePathComponents(fullPath); + return path.join("/") + "/"; + } + TypeScript.filePath = filePath; + function convertToDirectoryPath(dirPath) { + if (dirPath && dirPath.charAt(dirPath.length - 1) !== "/") { + dirPath += "/"; + } + return dirPath; + } + TypeScript.convertToDirectoryPath = convertToDirectoryPath; + var normalizePathRegEx = /^\\\\[^\\]/; + function normalizePath(path) { + if (normalizePathRegEx.test(path)) { + path = "file:" + path; + } + var parts = this.getPathComponents(switchToForwardSlashes(path)); + var normalizedParts = []; + for (var i = 0; i < parts.length; i++) { + var part = parts[i]; + if (part === ".") { + continue; + } + if (normalizedParts.length > 0 && TypeScript.ArrayUtilities.last(normalizedParts) !== ".." && part === "..") { + normalizedParts.pop(); + continue; + } + normalizedParts.push(part); + } + return normalizedParts.join("/"); + } + TypeScript.normalizePath = normalizePath; +})(TypeScript || (TypeScript = {})); +var ts; +(function (ts) { + var scanner = ts.createScanner(1 /* ES5 */); + var emptyArray = []; + function createNode(kind, pos, end, flags, parent) { + var node = new (ts.getNodeConstructor(kind))(); + node.pos = pos; + node.end = end; + node.flags = flags; + node.parent = parent; + return node; + } + var NodeObject = (function () { + function NodeObject() { + } + NodeObject.prototype.getSourceFile = function () { + var node = this; + while (node.kind !== 177 /* SourceFile */) + node = node.parent; + return node; + }; + NodeObject.prototype.getStart = function () { + return ts.getTokenPosOfNode(this); + }; + NodeObject.prototype.getFullStart = function () { + return this.pos; + }; + NodeObject.prototype.getEnd = function () { + return this.end; + }; + NodeObject.prototype.getWidth = function () { + return this.getEnd() - this.getStart(); + }; + NodeObject.prototype.getFullWidth = function () { + return this.end - this.getFullStart(); + }; + NodeObject.prototype.getLeadingTriviaWidth = function () { + return this.getStart() - this.pos; + }; + NodeObject.prototype.getFullText = function () { + return this.getSourceFile().text.substring(this.pos, this.end); + }; + NodeObject.prototype.addSyntheticNodes = function (nodes, pos, end) { + scanner.setTextPos(pos); + while (pos < end) { + var token = scanner.scan(); + var textPos = scanner.getTextPos(); + var node = nodes.push(createNode(token, pos, textPos, 256 /* Synthetic */, this)); + pos = textPos; + } + return pos; + }; + NodeObject.prototype.createSyntaxList = function (nodes) { + var list = createNode(179 /* SyntaxList */, nodes.pos, nodes.end, 256 /* Synthetic */, this); + list._children = []; + var pos = nodes.pos; + for (var i = 0, len = nodes.length; i < len; i++) { + var node = nodes[i]; + if (pos < node.pos) { + pos = this.addSyntheticNodes(list._children, pos, node.pos); + } + list._children.push(node); + pos = node.end; + } + if (pos < nodes.end) { + this.addSyntheticNodes(list._children, pos, nodes.end); + } + return list; + }; + NodeObject.prototype.createChildren = function () { + var _this = this; + if (this.kind > 111 /* Missing */) { + scanner.setText(this.getSourceFile().text); + var children = []; + var pos = this.pos; + var processNode = function (node) { + if (pos < node.pos) { + pos = _this.addSyntheticNodes(children, pos, node.pos); + } + children.push(node); + pos = node.end; + }; + var processNodes = function (nodes) { + if (pos < nodes.pos) { + pos = _this.addSyntheticNodes(children, pos, nodes.pos); + } + children.push(_this.createSyntaxList(nodes)); + pos = nodes.end; + }; + ts.forEachChild(this, processNode, processNodes); + if (pos < this.end) { + this.addSyntheticNodes(children, pos, this.end); + } + scanner.setText(undefined); + } + this._children = children || emptyArray; + }; + NodeObject.prototype.getChildCount = function () { + if (!this._children) + this.createChildren(); + return this._children.length; + }; + NodeObject.prototype.getChildAt = function (index) { + if (!this._children) + this.createChildren(); + return this._children[index]; + }; + NodeObject.prototype.getChildren = function () { + if (!this._children) + this.createChildren(); + return this._children; + }; + NodeObject.prototype.getFirstToken = function () { + var children = this.getChildren(); + for (var i = 0; i < children.length; i++) { + var child = children[i]; + if (child.kind < 111 /* Missing */) + return child; + if (child.kind > 111 /* Missing */) + return child.getFirstToken(); + } + }; + NodeObject.prototype.getLastToken = function () { + var children = this.getChildren(); + for (var i = children.length - 1; i >= 0; i--) { + var child = children[i]; + if (child.kind < 111 /* Missing */) + return child; + if (child.kind > 111 /* Missing */) + return child.getLastToken(); + } + }; + return NodeObject; + })(); + var SymbolObject = (function () { + function SymbolObject(flags, name) { + this.flags = flags; + this.name = name; + } + SymbolObject.prototype.getFlags = function () { + return this.flags; + }; + SymbolObject.prototype.getName = function () { + return this.name; + }; + SymbolObject.prototype.getDeclarations = function () { + return this.declarations; + }; + return SymbolObject; + })(); + var TypeObject = (function () { + function TypeObject(checker, flags) { + this.checker = checker; + this.flags = flags; + } + TypeObject.prototype.getFlags = function () { + return this.flags; + }; + TypeObject.prototype.getSymbol = function () { + return this.symbol; + }; + TypeObject.prototype.getProperties = function () { + return this.checker.getPropertiesOfType(this); + }; + TypeObject.prototype.getApparentProperties = function () { + return this.checker.getAugmentedPropertiesOfApparentType(this); + }; + TypeObject.prototype.getCallSignatures = function () { + return this.checker.getSignaturesOfType(this, 0 /* Call */); + }; + TypeObject.prototype.getConstructSignatures = function () { + return this.checker.getSignaturesOfType(this, 1 /* Construct */); + }; + TypeObject.prototype.getStringIndexType = function () { + return this.checker.getIndexTypeOfType(this, 0 /* String */); + }; + TypeObject.prototype.getNumberIndexType = function () { + return this.checker.getIndexTypeOfType(this, 1 /* Number */); + }; + return TypeObject; + })(); + var SignatureObject = (function () { + function SignatureObject(checker) { + this.checker = checker; + } + SignatureObject.prototype.getDeclaration = function () { + return this.declaration; + }; + SignatureObject.prototype.getTypeParameters = function () { + return this.typeParameters; + }; + SignatureObject.prototype.getParameters = function () { + return this.parameters; + }; + SignatureObject.prototype.getReturnType = function () { + return this.checker.getReturnTypeOfSignature(this); + }; + return SignatureObject; + })(); + (function (EmitOutputResult) { + EmitOutputResult[EmitOutputResult["Succeeded"] = 0] = "Succeeded"; + EmitOutputResult[EmitOutputResult["FailedBecauseOfSyntaxErrors"] = 1] = "FailedBecauseOfSyntaxErrors"; + EmitOutputResult[EmitOutputResult["FailedBecauseOfCompilerOptionsErrors"] = 2] = "FailedBecauseOfCompilerOptionsErrors"; + EmitOutputResult[EmitOutputResult["FailedToGenerateDeclarationsBecauseOfSemanticErrors"] = 3] = "FailedToGenerateDeclarationsBecauseOfSemanticErrors"; + })(ts.EmitOutputResult || (ts.EmitOutputResult = {})); + var EmitOutputResult = ts.EmitOutputResult; + (function (OutputFileType) { + OutputFileType[OutputFileType["JavaScript"] = 0] = "JavaScript"; + OutputFileType[OutputFileType["SourceMap"] = 1] = "SourceMap"; + OutputFileType[OutputFileType["Declaration"] = 2] = "Declaration"; + })(ts.OutputFileType || (ts.OutputFileType = {})); + var OutputFileType = ts.OutputFileType; + (function (EndOfLineState) { + EndOfLineState[EndOfLineState["Start"] = 0] = "Start"; + EndOfLineState[EndOfLineState["InMultiLineCommentTrivia"] = 1] = "InMultiLineCommentTrivia"; + EndOfLineState[EndOfLineState["InSingleQuoteStringLiteral"] = 2] = "InSingleQuoteStringLiteral"; + EndOfLineState[EndOfLineState["InDoubleQuoteStringLiteral"] = 3] = "InDoubleQuoteStringLiteral"; + })(ts.EndOfLineState || (ts.EndOfLineState = {})); + var EndOfLineState = ts.EndOfLineState; + (function (TokenClass) { + TokenClass[TokenClass["Punctuation"] = 0] = "Punctuation"; + TokenClass[TokenClass["Keyword"] = 1] = "Keyword"; + TokenClass[TokenClass["Operator"] = 2] = "Operator"; + TokenClass[TokenClass["Comment"] = 3] = "Comment"; + TokenClass[TokenClass["Whitespace"] = 4] = "Whitespace"; + TokenClass[TokenClass["Identifier"] = 5] = "Identifier"; + TokenClass[TokenClass["NumberLiteral"] = 6] = "NumberLiteral"; + TokenClass[TokenClass["StringLiteral"] = 7] = "StringLiteral"; + TokenClass[TokenClass["RegExpLiteral"] = 8] = "RegExpLiteral"; + })(ts.TokenClass || (ts.TokenClass = {})); + var TokenClass = ts.TokenClass; + var ScriptElementKind = (function () { + function ScriptElementKind() { + } + ScriptElementKind.unknown = ""; + ScriptElementKind.keyword = "keyword"; + ScriptElementKind.scriptElement = "script"; + ScriptElementKind.moduleElement = "module"; + ScriptElementKind.classElement = "class"; + ScriptElementKind.interfaceElement = "interface"; + ScriptElementKind.enumElement = "enum"; + ScriptElementKind.variableElement = "var"; + ScriptElementKind.localVariableElement = "local var"; + ScriptElementKind.functionElement = "function"; + ScriptElementKind.localFunctionElement = "local function"; + ScriptElementKind.memberFunctionElement = "method"; + ScriptElementKind.memberGetAccessorElement = "getter"; + ScriptElementKind.memberSetAccessorElement = "setter"; + ScriptElementKind.memberVariableElement = "property"; + ScriptElementKind.constructorImplementationElement = "constructor"; + ScriptElementKind.callSignatureElement = "call"; + ScriptElementKind.indexSignatureElement = "index"; + ScriptElementKind.constructSignatureElement = "construct"; + ScriptElementKind.parameterElement = "parameter"; + ScriptElementKind.typeParameterElement = "type parameter"; + ScriptElementKind.primitiveType = "primitive type"; + return ScriptElementKind; + })(); + ts.ScriptElementKind = ScriptElementKind; + var ScriptElementKindModifier = (function () { + function ScriptElementKindModifier() { + } + ScriptElementKindModifier.none = ""; + ScriptElementKindModifier.publicMemberModifier = "public"; + ScriptElementKindModifier.privateMemberModifier = "private"; + ScriptElementKindModifier.exportedModifier = "export"; + ScriptElementKindModifier.ambientModifier = "declare"; + ScriptElementKindModifier.staticModifier = "static"; + return ScriptElementKindModifier; + })(); + ts.ScriptElementKindModifier = ScriptElementKindModifier; + var MatchKind = (function () { + function MatchKind() { + } + MatchKind.none = null; + MatchKind.exact = "exact"; + MatchKind.subString = "substring"; + MatchKind.prefix = "prefix"; + return MatchKind; + })(); + ts.MatchKind = MatchKind; + var DocumentObject = (function () { + function DocumentObject(compilationSettings, filename, referencedFiles, scriptSnapshot, byteOrderMark, version, _isOpen, syntaxTree, soruceFile) { + this.compilationSettings = compilationSettings; + this.filename = filename; + this.referencedFiles = referencedFiles; + this.scriptSnapshot = scriptSnapshot; + this.byteOrderMark = byteOrderMark; + this.version = version; + this._isOpen = _isOpen; + this.syntaxTree = syntaxTree; + this.soruceFile = soruceFile; + this.bloomFilter = null; + } + DocumentObject.prototype.getFilename = function () { + return this.filename; + }; + DocumentObject.prototype.getVersion = function () { + return this.version; + }; + DocumentObject.prototype.isOpen = function () { + return this._isOpen; + }; + DocumentObject.prototype.getByteOrderMark = function () { + return this.byteOrderMark; + }; + DocumentObject.prototype.isDeclareFile = function () { + return TypeScript.isDTSFile(this.filename); + }; + DocumentObject.prototype.getSourceUnit = function () { + return this.getSyntaxTree().sourceUnit(); + }; + DocumentObject.prototype.getLineMap = function () { + return this.getSyntaxTree().lineMap(); + }; + DocumentObject.prototype.getSyntaxTree = function () { + if (!this.syntaxTree) { + var start = new Date().getTime(); + this.syntaxTree = TypeScript.Parser.parse(this.filename, TypeScript.SimpleText.fromScriptSnapshot(this.scriptSnapshot), this.compilationSettings.target, this.isDeclareFile()); + var time = new Date().getTime() - start; + } + return this.syntaxTree; + }; + DocumentObject.prototype.getSourceFile = function () { + if (!this.soruceFile) { + var start = new Date().getTime(); + this.soruceFile = ts.createSourceFile(this.filename, this.scriptSnapshot.getText(0, this.scriptSnapshot.getLength()), this.compilationSettings.target); + var time = new Date().getTime() - start; + } + return this.soruceFile; + }; + DocumentObject.prototype.getBloomFilter = function () { + if (!this.bloomFilter) { + var identifiers = TypeScript.createIntrinsicsObject(); + var pre = function (cur) { + if (TypeScript.ASTHelpers.isValidAstNode(cur)) { + if (cur.kind() === 11 /* IdentifierName */) { + var nodeText = TypeScript.tokenValueText(cur); + identifiers[nodeText] = true; + } + } + }; + TypeScript.getAstWalkerFactory().simpleWalk(this.getSourceUnit(), pre, null, identifiers); + var identifierCount = 0; + for (var name in identifiers) { + if (identifiers[name]) { + identifierCount++; + } + } + this.bloomFilter = new TypeScript.BloomFilter(identifierCount); + this.bloomFilter.addKeys(identifiers); + } + return this.bloomFilter; + }; + DocumentObject.prototype.emitToOwnOutputFile = function () { + return !this.compilationSettings.out || this.getSyntaxTree().isExternalModule(); + }; + DocumentObject.prototype.update = function (scriptSnapshot, version, isOpen, textChangeRange) { + var oldSyntaxTree = this.syntaxTree; + if (textChangeRange !== null && ts.Debug.shouldAssert(1 /* Normal */)) { + var oldText = this.scriptSnapshot; + var newText = scriptSnapshot; + TypeScript.Debug.assert((oldText.getLength() - textChangeRange.span().length() + textChangeRange.newLength()) === newText.getLength()); + if (ts.Debug.shouldAssert(3 /* VeryAggressive */)) { + var oldTextPrefix = oldText.getText(0, textChangeRange.span().start()); + var newTextPrefix = newText.getText(0, textChangeRange.span().start()); + TypeScript.Debug.assert(oldTextPrefix === newTextPrefix); + var oldTextSuffix = oldText.getText(textChangeRange.span().end(), oldText.getLength()); + var newTextSuffix = newText.getText(textChangeRange.newSpan().end(), newText.getLength()); + TypeScript.Debug.assert(oldTextSuffix === newTextSuffix); + } + } + var text = TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot); + var newSyntaxTree = textChangeRange === null || oldSyntaxTree === null || DocumentObject.incrementalParse === null ? TypeScript.Parser.parse(this.filename, text, this.compilationSettings.target, TypeScript.isDTSFile(this.filename)) : DocumentObject.incrementalParse(oldSyntaxTree, textChangeRange, text); + return new DocumentObject(this.compilationSettings, this.filename, this.referencedFiles, scriptSnapshot, this.byteOrderMark, version, isOpen, newSyntaxTree, null); + }; + DocumentObject.incrementalParse = TypeScript.IncrementalParser.parse; + return DocumentObject; + })(); + function createDocument(compilationSettings, fileName, scriptSnapshot, byteOrderMark, version, isOpen, referencedFiles) { + return new DocumentObject(compilationSettings, fileName, referencedFiles, scriptSnapshot, byteOrderMark, version, isOpen, null, null); + } + ts.createDocument = createDocument; + function getDefaultCompilerOptions() { + return { + target: 1 /* ES5 */, + module: 0 /* None */ + }; + } + ts.getDefaultCompilerOptions = getDefaultCompilerOptions; + function compareDataObjects(dst, src) { + for (var e in dst) { + if (typeof dst[e] === "object") { + if (!compareDataObjects(dst[e], src[e])) + return false; + } + else if (typeof dst[e] !== "function") { + if (dst[e] !== src[e]) + return false; + } + } + return true; + } + ts.compareDataObjects = compareDataObjects; + var OperationCanceledException = (function () { + function OperationCanceledException() { + } + return OperationCanceledException; + })(); + ts.OperationCanceledException = OperationCanceledException; + var CancellationTokenObject = (function () { + function CancellationTokenObject(cancellationToken) { + this.cancellationToken = cancellationToken; + } + CancellationTokenObject.prototype.isCancellationRequested = function () { + return this.cancellationToken && this.cancellationToken.isCancellationRequested(); + }; + CancellationTokenObject.prototype.throwIfCancellationRequested = function () { + if (this.isCancellationRequested()) { + throw new OperationCanceledException(); + } + }; + CancellationTokenObject.None = new CancellationTokenObject(null); + return CancellationTokenObject; + })(); + var HostCache = (function () { + function HostCache(host) { + this.host = host; + this.filenameToEntry = {}; + var filenames = host.getScriptFileNames(); + for (var i = 0, n = filenames.length; i < n; i++) { + var filename = filenames[i]; + this.filenameToEntry[TypeScript.switchToForwardSlashes(filename)] = { + filename: filename, + version: host.getScriptVersion(filename), + isOpen: host.getScriptIsOpen(filename), + byteOrderMark: host.getScriptByteOrderMark(filename) + }; + } + this._compilationSettings = host.getCompilationSettings() || getDefaultCompilerOptions(); + } + HostCache.prototype.compilationSettings = function () { + return this._compilationSettings; + }; + HostCache.prototype.getEntry = function (filename) { + filename = TypeScript.switchToForwardSlashes(filename); + return ts.lookUp(this.filenameToEntry, filename); + }; + HostCache.prototype.contains = function (filename) { + return !!this.getEntry(filename); + }; + HostCache.prototype.getHostfilename = function (filename) { + var hostCacheEntry = this.getEntry(filename); + if (hostCacheEntry) { + return hostCacheEntry.filename; + } + return filename; + }; + HostCache.prototype.getFilenames = function () { + var _this = this; + var fileNames = []; + ts.forEachKey(this.filenameToEntry, function (key) { + if (ts.hasProperty(_this.filenameToEntry, key)) + fileNames.push(key); + }); + return fileNames; + }; + HostCache.prototype.getVersion = function (filename) { + return this.getEntry(filename).version; + }; + HostCache.prototype.isOpen = function (filename) { + return this.getEntry(filename).isOpen; + }; + HostCache.prototype.getByteOrderMark = function (filename) { + return this.getEntry(filename).byteOrderMark; + }; + HostCache.prototype.getScriptSnapshot = function (filename) { + var file = this.getEntry(filename); + if (!file.sourceText) { + file.sourceText = this.host.getScriptSnapshot(file.filename); + } + return file.sourceText; + }; + HostCache.prototype.getScriptTextChangeRangeSinceVersion = function (filename, lastKnownVersion) { + var currentVersion = this.getVersion(filename); + if (lastKnownVersion === currentVersion) { + return TypeScript.TextChangeRange.unchanged; + } + var scriptSnapshot = this.getScriptSnapshot(filename); + return scriptSnapshot.getTextChangeRangeSinceVersion(lastKnownVersion); + }; + return HostCache; + })(); + var SyntaxTreeCache = (function () { + function SyntaxTreeCache(host) { + this.host = host; + this.currentfilename = ""; + this.currentFileVersion = -1; + this.currentFileSyntaxTree = null; + this.currentFileScriptSnapshot = null; + this.hostCache = new HostCache(host); + } + SyntaxTreeCache.prototype.getCurrentFileSyntaxTree = function (filename) { + this.hostCache = new HostCache(this.host); + var version = this.hostCache.getVersion(filename); + var syntaxTree = null; + if (this.currentFileSyntaxTree === null || this.currentfilename !== filename) { + var scriptSnapshot = this.hostCache.getScriptSnapshot(filename); + syntaxTree = this.createSyntaxTree(filename, scriptSnapshot); + } + else if (this.currentFileVersion !== version) { + var scriptSnapshot = this.hostCache.getScriptSnapshot(filename); + syntaxTree = this.updateSyntaxTree(filename, scriptSnapshot, this.currentFileSyntaxTree, this.currentFileVersion); + } + if (syntaxTree !== null) { + this.currentFileScriptSnapshot = scriptSnapshot; + this.currentFileVersion = version; + this.currentfilename = filename; + this.currentFileSyntaxTree = syntaxTree; + } + return this.currentFileSyntaxTree; + }; + SyntaxTreeCache.prototype.getCurrentScriptSnapshot = function (filename) { + this.getCurrentFileSyntaxTree(filename); + return this.currentFileScriptSnapshot; + }; + SyntaxTreeCache.prototype.createSyntaxTree = function (filename, scriptSnapshot) { + var text = TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot); + var syntaxTree = TypeScript.Parser.parse(filename, text, getDefaultCompilerOptions().target, TypeScript.isDTSFile(filename)); + return syntaxTree; + }; + SyntaxTreeCache.prototype.updateSyntaxTree = function (filename, scriptSnapshot, previousSyntaxTree, previousFileVersion) { + var editRange = this.hostCache.getScriptTextChangeRangeSinceVersion(filename, previousFileVersion); + if (editRange === null) { + return this.createSyntaxTree(filename, scriptSnapshot); + } + var nextSyntaxTree = TypeScript.IncrementalParser.parse(previousSyntaxTree, editRange, TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot)); + this.ensureInvariants(filename, editRange, nextSyntaxTree, this.currentFileScriptSnapshot, scriptSnapshot); + return nextSyntaxTree; + }; + SyntaxTreeCache.prototype.ensureInvariants = function (filename, editRange, incrementalTree, oldScriptSnapshot, newScriptSnapshot) { + var expectedNewLength = oldScriptSnapshot.getLength() - editRange.span().length() + editRange.newLength(); + var actualNewLength = newScriptSnapshot.getLength(); + function provideMoreDebugInfo() { + var debugInformation = ["expected length:", expectedNewLength, "and actual length:", actualNewLength, "are not equal\r\n"]; + var oldSpan = editRange.span(); + function prettyPrintString(s) { + return '"' + s.replace(/\r/g, '\\r').replace(/\n/g, '\\n') + '"'; + } + debugInformation.push('Edit range (old text) (start: ' + oldSpan.start() + ', end: ' + oldSpan.end() + ') \r\n'); + debugInformation.push('Old text edit range contents: ' + prettyPrintString(oldScriptSnapshot.getText(oldSpan.start(), oldSpan.end()))); + var newSpan = editRange.newSpan(); + debugInformation.push('Edit range (new text) (start: ' + newSpan.start() + ', end: ' + newSpan.end() + ') \r\n'); + debugInformation.push('New text edit range contents: ' + prettyPrintString(newScriptSnapshot.getText(newSpan.start(), newSpan.end()))); + return debugInformation.join(' '); + } + ts.Debug.assert(expectedNewLength === actualNewLength, "Expected length is different from actual!", provideMoreDebugInfo); + if (ts.Debug.shouldAssert(3 /* VeryAggressive */)) { + var oldPrefixText = oldScriptSnapshot.getText(0, editRange.span().start()); + var newPrefixText = newScriptSnapshot.getText(0, editRange.span().start()); + ts.Debug.assert(oldPrefixText === newPrefixText, 'Expected equal prefix texts!'); + var oldSuffixText = oldScriptSnapshot.getText(editRange.span().end(), oldScriptSnapshot.getLength()); + var newSuffixText = newScriptSnapshot.getText(editRange.newSpan().end(), newScriptSnapshot.getLength()); + ts.Debug.assert(oldSuffixText === newSuffixText, 'Expected equal suffix texts!'); + var incrementalTreeText = TypeScript.fullText(incrementalTree.sourceUnit()); + var actualSnapshotText = newScriptSnapshot.getText(0, newScriptSnapshot.getLength()); + ts.Debug.assert(incrementalTreeText === actualSnapshotText, 'Expected full texts to be equal'); + } + }; + return SyntaxTreeCache; + })(); + function createDocumentRegistry() { + var buckets = {}; + function getKeyFromCompilationSettings(settings) { + return "_" + ts.ScriptTarget[settings.target]; + } + function getBucketForCompilationSettings(settings, createIfMissing) { + var key = getKeyFromCompilationSettings(settings); + var bucket = ts.lookUp(buckets, key); + if (!bucket && createIfMissing) { + buckets[key] = bucket = {}; + } + return bucket; + } + function reportStats() { + var bucketInfoArray = Object.keys(buckets).filter(function (name) { return name && name.charAt(0) === '_'; }).map(function (name) { + var entries = ts.lookUp(buckets, name); + var documents = []; + for (var i in entries) { + var entry = entries[i]; + documents.push({ + name: i, + refCount: entry.refCount, + references: entry.owners.slice(0) + }); + } + documents.sort(function (x, y) { return y.refCount - x.refCount; }); + return { bucket: name, documents: documents }; + }); + return JSON.stringify(bucketInfoArray, null, 2); + } + function acquireDocument(filename, compilationSettings, scriptSnapshot, byteOrderMark, version, isOpen, referencedFiles) { + if (referencedFiles === void 0) { referencedFiles = []; } + var bucket = getBucketForCompilationSettings(compilationSettings, true); + var entry = ts.lookUp(bucket, filename); + if (!entry) { + var document = createDocument(compilationSettings, filename, scriptSnapshot, byteOrderMark, version, isOpen, referencedFiles); + bucket[filename] = entry = { + document: document, + refCount: 0, + owners: [] + }; + } + entry.refCount++; + return entry.document; + } + function updateDocument(document, filename, compilationSettings, scriptSnapshot, version, isOpen, textChangeRange) { + var bucket = getBucketForCompilationSettings(compilationSettings, false); + ts.Debug.assert(bucket); + var entry = ts.lookUp(bucket, filename); + ts.Debug.assert(entry); + if (entry.document.isOpen() === isOpen && entry.document.getVersion() === version) { + return entry.document; + } + entry.document = entry.document.update(scriptSnapshot, version, isOpen, textChangeRange); + return entry.document; + } + function releaseDocument(filename, compilationSettings) { + var bucket = getBucketForCompilationSettings(compilationSettings, false); + ts.Debug.assert(bucket); + var entry = ts.lookUp(bucket, filename); + entry.refCount--; + ts.Debug.assert(entry.refCount >= 0); + if (entry.refCount === 0) { + delete bucket[filename]; + } + } + return { + acquireDocument: acquireDocument, + updateDocument: updateDocument, + releaseDocument: releaseDocument, + reportStats: reportStats + }; + } + ts.createDocumentRegistry = createDocumentRegistry; + var keywordCompletions = []; + for (var i = ts.SyntaxKind.FirstKeyword; i <= ts.SyntaxKind.LastKeyword; i++) { + keywordCompletions.push({ + name: ts.tokenToString(i), + kind: ScriptElementKind.keyword, + kindModifiers: ScriptElementKindModifier.none + }); + } + function createLanguageService(host, documentRegistry) { + var syntaxTreeCache = new SyntaxTreeCache(host); + var formattingRulesProvider; + var hostCache; + var program; + var typeChecker; + var useCaseSensitivefilenames = false; + var documentsByName = {}; + var documentRegistry = documentRegistry; + var cancellationToken = new CancellationTokenObject(host.getCancellationToken()); + var activeCompletionSession; + if (!TypeScript.LocalizedDiagnosticMessages) { + TypeScript.LocalizedDiagnosticMessages = host.getLocalizedDiagnosticMessages(); + } + function getDocument(filename) { + return ts.lookUp(documentsByName, filename); + } + function createCompilerHost() { + return { + getSourceFile: function (filename, languageVersion) { + var document = getDocument(filename); + ts.Debug.assert(!!document, "document can not be undefined"); + return document.getSourceFile(); + }, + getCancellationToken: function () { return cancellationToken; }, + getCanonicalFileName: function (filename) { return useCaseSensitivefilenames ? filename : filename.toLowerCase(); }, + useCaseSensitiveFileNames: function () { return useCaseSensitivefilenames; }, + getNewLine: function () { return "\r\n"; }, + getDefaultLibFilename: function () { + throw Error("TOD:: getDefaultLibfilename"); + }, + writeFile: function (filename, data) { + throw Error("TODO: write file"); + }, + getCurrentDirectory: function () { + throw Error("TODO: getCurrentDirectory"); + } + }; + } + function synchronizeHostData() { + hostCache = new HostCache(host); + var compilationSettings = hostCache.compilationSettings(); + var oldProgram = program; + if (oldProgram) { + var oldSettings = program.getCompilerOptions(); + var settingsChangeAffectsSyntax = oldSettings.target !== compilationSettings.target || oldSettings.module !== compilationSettings.module; + var changesInCompilationSettingsAffectSyntax = oldSettings && compilationSettings && !compareDataObjects(oldSettings, compilationSettings) && settingsChangeAffectsSyntax; + var oldSourceFiles = program.getSourceFiles(); + for (var i = 0, n = oldSourceFiles.length; i < n; i++) { + cancellationToken.throwIfCancellationRequested(); + var filename = oldSourceFiles[i].filename; + if (!hostCache.contains(filename) || changesInCompilationSettingsAffectSyntax) { + documentRegistry.releaseDocument(filename, oldSettings); + delete documentsByName[filename]; + } + } + } + var hostfilenames = hostCache.getFilenames(); + for (var i = 0, n = hostfilenames.length; i < n; i++) { + var filename = hostfilenames[i]; + var version = hostCache.getVersion(filename); + var isOpen = hostCache.isOpen(filename); + var scriptSnapshot = hostCache.getScriptSnapshot(filename); + var document = getDocument(filename); + if (document) { + if (document.getVersion() === version && document.isOpen() === isOpen) { + continue; + } + var textChangeRange = null; + if (document.isOpen && isOpen) { + textChangeRange = hostCache.getScriptTextChangeRangeSinceVersion(filename, document.getVersion()); + } + document = documentRegistry.updateDocument(document, filename, compilationSettings, scriptSnapshot, version, isOpen, textChangeRange); + } + else { + document = documentRegistry.acquireDocument(filename, compilationSettings, scriptSnapshot, hostCache.getByteOrderMark(filename), version, isOpen, []); + } + documentsByName[filename] = document; + } + program = ts.createProgram(hostfilenames, compilationSettings, createCompilerHost()); + typeChecker = program.getTypeChecker(); + } + function dispose() { + if (program) { + ts.forEach(program.getSourceFiles(), function (f) { + documentRegistry.releaseDocument(f.filename, program.getCompilerOptions()); + }); + } + } + function getSyntacticDiagnostics(filename) { + synchronizeHostData(); + return program.getDiagnostics(program.getSourceFile(filename)); + } + function getSemanticDiagnostics(filename) { + synchronizeHostData(); + return typeChecker.getDiagnostics(program.getSourceFile(filename)); + } + function getCompilerOptionsDiagnostics() { + synchronizeHostData(); + return program.getGlobalDiagnostics(); + } + function getValidCompletionEntryDisplayName(displayName, target) { + if (displayName && displayName.length > 0) { + var firstChar = displayName.charCodeAt(0); + if (firstChar === 39 /* singleQuote */ || firstChar === 34 /* doubleQuote */) { + displayName = TypeScript.stripStartAndEndQuotes(displayName); + } + if (TypeScript.Scanner.isValidIdentifier(TypeScript.SimpleText.fromString(displayName), target)) { + return displayName; + } + } + return undefined; + } + function createCompletionEntry(symbol) { + var displayName = getValidCompletionEntryDisplayName(symbol.getName(), program.getCompilerOptions().target); + if (!displayName) { + return undefined; + } + var declarations = symbol.getDeclarations(); + var firstDeclaration = [0]; + return { + name: displayName, + kind: getSymbolKind(symbol), + kindModifiers: declarations ? getNodeModifiers(declarations[0]) : ScriptElementKindModifier.none + }; + } + function getCompletionsAtPosition(filename, position, isMemberCompletion) { + function getCompletionEntriesFromSymbols(symbols, session) { + ts.forEach(symbols, function (symbol) { + var entry = createCompletionEntry(symbol); + if (entry) { + session.entries.push(entry); + session.symbols[entry.name] = symbol; + } + }); + } + function isCompletionListBlocker(sourceUnit, position) { + if (position < 0 || position > TypeScript.fullWidth(sourceUnit)) { + return true; + } + return TypeScript.Syntax.isEntirelyInsideComment(sourceUnit, position) || TypeScript.Syntax.isEntirelyInStringOrRegularExpressionLiteral(sourceUnit, position) || isIdentifierDefinitionLocation(sourceUnit, position) || isRightOfIllegalDot(sourceUnit, position); + } + function getContainingObjectLiteralApplicableForCompletion(sourceUnit, position) { + var previousToken = getNonIdentifierCompleteTokenOnLeft(sourceUnit, position); + if (previousToken) { + var parent = previousToken.parent; + switch (previousToken.kind()) { + case 70 /* OpenBraceToken */: + case 79 /* CommaToken */: + if (parent && parent.kind() === 2 /* SeparatedList */) { + parent = parent.parent; + } + if (parent && parent.kind() === 215 /* ObjectLiteralExpression */) { + return parent; + } + break; + } + } + return undefined; + } + function isIdentifierDefinitionLocation(sourceUnit, position) { + var positionedToken = getNonIdentifierCompleteTokenOnLeft(sourceUnit, position); + if (positionedToken) { + var containingNodeKind = TypeScript.Syntax.containingNode(positionedToken) && TypeScript.Syntax.containingNode(positionedToken).kind(); + switch (positionedToken.kind()) { + case 79 /* CommaToken */: + return containingNodeKind === 227 /* ParameterList */ || containingNodeKind === 224 /* VariableDeclaration */ || containingNodeKind === 132 /* EnumDeclaration */; + case 72 /* OpenParenToken */: + return containingNodeKind === 227 /* ParameterList */ || containingNodeKind === 236 /* CatchClause */; + case 70 /* OpenBraceToken */: + return containingNodeKind === 132 /* EnumDeclaration */; + case 57 /* PublicKeyword */: + case 55 /* PrivateKeyword */: + case 58 /* StaticKeyword */: + case 77 /* DotDotDotToken */: + return containingNodeKind === 242 /* Parameter */; + case 44 /* ClassKeyword */: + case 65 /* ModuleKeyword */: + case 46 /* EnumKeyword */: + case 52 /* InterfaceKeyword */: + case 27 /* FunctionKeyword */: + case 40 /* VarKeyword */: + case 64 /* GetKeyword */: + case 68 /* SetKeyword */: + return true; + } + switch (positionedToken.text()) { + case "class": + case "interface": + case "enum": + case "module": + return true; + } + } + return false; + } + function getNonIdentifierCompleteTokenOnLeft(sourceUnit, position) { + var positionedToken = TypeScript.Syntax.findCompleteTokenOnLeft(sourceUnit, position, true); + if (positionedToken && position === TypeScript.end(positionedToken) && positionedToken.kind() == 10 /* EndOfFileToken */) { + positionedToken = TypeScript.previousToken(positionedToken, true); + } + if (positionedToken && position === TypeScript.end(positionedToken) && positionedToken.kind() === 11 /* IdentifierName */) { + positionedToken = TypeScript.previousToken(positionedToken, true); + } + return positionedToken; + } + function isRightOfIllegalDot(sourceUnit, position) { + var positionedToken = getNonIdentifierCompleteTokenOnLeft(sourceUnit, position); + if (positionedToken) { + switch (positionedToken.kind()) { + case 76 /* DotToken */: + var leftOfDotPositionedToken = TypeScript.previousToken(positionedToken, true); + return leftOfDotPositionedToken && leftOfDotPositionedToken.kind() === 13 /* NumericLiteral */; + case 13 /* NumericLiteral */: + var text = positionedToken.text(); + return text.charAt(text.length - 1) === "."; + } + } + return false; + } + synchronizeHostData(); + filename = TypeScript.switchToForwardSlashes(filename); + var document = getDocument(filename); + var sourceUnit = document.getSourceUnit(); + if (isCompletionListBlocker(document.getSyntaxTree().sourceUnit(), position)) { + host.log("Returning an empty list because completion was blocked."); + return null; + } + var node = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, position, true, true); + if (node && node.kind() === 11 /* IdentifierName */ && TypeScript.start(node) === TypeScript.end(node)) { + node = node.parent; + } + var isRightOfDot = false; + if (node && node.kind() === 212 /* MemberAccessExpression */ && TypeScript.end(node.expression) < position) { + isRightOfDot = true; + node = node.expression; + } + else if (node && node.kind() === 121 /* QualifiedName */ && TypeScript.end(node.left) < position) { + isRightOfDot = true; + node = node.left; + } + else if (node && node.parent && node.kind() === 11 /* IdentifierName */ && node.parent.kind() === 212 /* MemberAccessExpression */ && node.parent.name === node) { + isRightOfDot = true; + node = node.parent.expression; + } + else if (node && node.parent && node.kind() === 11 /* IdentifierName */ && node.parent.kind() === 121 /* QualifiedName */ && node.parent.right === node) { + isRightOfDot = true; + node = node.parent.left; + } + var mappedNode = getNodeAtPosition(document.getSourceFile(), TypeScript.end(node) - 1); + ts.Debug.assert(mappedNode, "Could not map a Fidelity node to an AST node"); + activeCompletionSession = { + filename: filename, + position: position, + entries: [], + symbols: {}, + location: mappedNode, + typeChecker: typeChecker + }; + if (isRightOfDot) { + var type = typeChecker.getTypeOfExpression(mappedNode); + if (!type) { + return undefined; + } + var symbols = type.getApparentProperties(); + isMemberCompletion = true; + getCompletionEntriesFromSymbols(symbols, activeCompletionSession); + } + else { + var containingObjectLiteral = getContainingObjectLiteralApplicableForCompletion(document.getSyntaxTree().sourceUnit(), position); + if (containingObjectLiteral) { + var searchPosition = Math.min(position, TypeScript.end(containingObjectLiteral)); + var path = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, searchPosition); + while (node && node.kind() !== 215 /* ObjectLiteralExpression */) { + node = node.parent; + } + if (!node || node.kind() !== 215 /* ObjectLiteralExpression */) { + return null; + } + isMemberCompletion = true; + } + else { + isMemberCompletion = false; + var symbolMeanings = ts.SymbolFlags.Type | ts.SymbolFlags.Value | ts.SymbolFlags.Namespace; + var symbols = typeChecker.getSymbolsInScope(mappedNode, symbolMeanings); + getCompletionEntriesFromSymbols(symbols, activeCompletionSession); + } + } + if (!isMemberCompletion) { + Array.prototype.push.apply(activeCompletionSession.entries, keywordCompletions); + } + return { + isMemberCompletion: isMemberCompletion, + entries: activeCompletionSession.entries + }; + } + function getCompletionEntryDetails(filename, position, entryName) { + filename = TypeScript.switchToForwardSlashes(filename); + var session = activeCompletionSession; + if (!session || session.filename !== filename || session.position !== position) { + return undefined; + } + var symbol = ts.lookUp(activeCompletionSession.symbols, entryName); + if (symbol) { + var type = session.typeChecker.getTypeOfSymbol(symbol); + ts.Debug.assert(type, "Could not find type for symbol"); + var completionEntry = createCompletionEntry(symbol); + return { + name: entryName, + kind: completionEntry.kind, + kindModifiers: completionEntry.kindModifiers, + type: session.typeChecker.typeToString(type, session.location), + fullSymbolName: typeChecker.symbolToString(symbol, session.location), + docComment: "" + }; + } + else { + return { + name: entryName, + kind: ScriptElementKind.keyword, + kindModifiers: ScriptElementKindModifier.none, + type: undefined, + fullSymbolName: entryName, + docComment: undefined + }; + } + } + function getNodeAtPosition(sourceFile, position) { + var current = sourceFile; + outer: while (true) { + for (var i = 0, n = current.getChildCount(); i < n; i++) { + var child = current.getChildAt(i); + if (child.getStart() <= position && position < child.getEnd()) { + current = child; + continue outer; + } + if (child.end > position) + break; + } + return current; + } + } + function getEnclosingDeclaration(node) { + while (true) { + node = node.parent; + if (!node) { + return node; + } + switch (node.kind) { + case 116 /* Method */: + case 167 /* FunctionDeclaration */: + case 136 /* FunctionExpression */: + case 118 /* GetAccessor */: + case 119 /* SetAccessor */: + case 169 /* ClassDeclaration */: + case 170 /* InterfaceDeclaration */: + case 171 /* EnumDeclaration */: + case 172 /* ModuleDeclaration */: + return node; + } + } + } + function getSymbolKind(symbol) { + var flags = symbol.getFlags(); + if (flags & ts.SymbolFlags.Module) + return ScriptElementKind.moduleElement; + if (flags & 16 /* Class */) + return ScriptElementKind.classElement; + if (flags & 32 /* Interface */) + return ScriptElementKind.interfaceElement; + if (flags & 64 /* Enum */) + return ScriptElementKind.enumElement; + if (flags & 1 /* Variable */) + return ScriptElementKind.variableElement; + if (flags & 8 /* Function */) + return ScriptElementKind.functionElement; + if (flags & 8192 /* GetAccessor */) + return ScriptElementKind.memberGetAccessorElement; + if (flags & 16384 /* SetAccessor */) + return ScriptElementKind.memberSetAccessorElement; + if (flags & 2048 /* Method */) + return ScriptElementKind.memberFunctionElement; + if (flags & 2 /* Property */) + return ScriptElementKind.memberVariableElement; + if (flags & 131072 /* IndexSignature */) + return ScriptElementKind.indexSignatureElement; + if (flags & 65536 /* ConstructSignature */) + return ScriptElementKind.constructSignatureElement; + if (flags & 32768 /* CallSignature */) + return ScriptElementKind.callSignatureElement; + if (flags & 4096 /* Constructor */) + return ScriptElementKind.constructorImplementationElement; + if (flags & 262144 /* TypeParameter */) + return ScriptElementKind.typeParameterElement; + if (flags & 4 /* EnumMember */) + return ScriptElementKind.variableElement; + return ScriptElementKind.unknown; + } + function getTypeKind(type) { + var flags = type.getFlags(); + if (flags & 128 /* Enum */) + return ScriptElementKind.enumElement; + if (flags & 1024 /* Class */) + return ScriptElementKind.classElement; + if (flags & 2048 /* Interface */) + return ScriptElementKind.interfaceElement; + if (flags & 512 /* TypeParameter */) + return ScriptElementKind.typeParameterElement; + if (flags & ts.TypeFlags.Intrinsic) + return ScriptElementKind.primitiveType; + if (flags & 256 /* StringLiteral */) + return ScriptElementKind.primitiveType; + return ScriptElementKind.unknown; + } + function getNodeModifiers(node) { + var flags = node.flags; + var result = []; + if (flags & 32 /* Private */) + result.push(ScriptElementKindModifier.privateMemberModifier); + if (flags & 16 /* Public */) + result.push(ScriptElementKindModifier.publicMemberModifier); + if (flags & 64 /* Static */) + result.push(ScriptElementKindModifier.staticModifier); + if (flags & 1 /* Export */) + result.push(ScriptElementKindModifier.exportedModifier); + if (ts.isInAmbientContext(node)) + result.push(ScriptElementKindModifier.ambientModifier); + return result.length > 0 ? result.join(',') : ScriptElementKindModifier.none; + } + function getTypeAtPosition(filename, position) { + synchronizeHostData(); + filename = TypeScript.switchToForwardSlashes(filename); + var document = getDocument(filename); + var node = getNodeAtPosition(document.getSourceFile(), position); + if (!node) + return undefined; + switch (node.kind) { + case 55 /* Identifier */: + if (node.parent.kind === 132 /* CallExpression */ || node.parent.kind === 133 /* NewExpression */) { + } + var symbol = typeChecker.getSymbolOfIdentifier(node); + ts.Debug.assert(symbol, "getTypeAtPosition: Could not find symbol for node"); + var type = typeChecker.getTypeOfSymbol(symbol); + return { + memberName: new TypeScript.MemberNameString(typeChecker.typeToString(type)), + docComment: "", + fullSymbolName: typeChecker.symbolToString(symbol, getEnclosingDeclaration(node)), + kind: getSymbolKind(symbol), + minChar: node.pos, + limChar: node.end + }; + case 83 /* ThisKeyword */: + case 112 /* QualifiedName */: + case 81 /* SuperKeyword */: + case 3 /* StringLiteral */: + var type = typeChecker.getTypeOfExpression(node); + ts.Debug.assert(type, "getTypeAtPosition: Could not find type for node"); + return { + memberName: new TypeScript.MemberNameString(""), + docComment: "", + fullSymbolName: typeChecker.typeToString(type, getEnclosingDeclaration(node)), + kind: getTypeKind(type), + minChar: node.pos, + limChar: node.end + }; + break; + } + } + function getSyntaxTree(filename) { + filename = TypeScript.switchToForwardSlashes(filename); + return syntaxTreeCache.getCurrentFileSyntaxTree(filename); + } + function getNameOrDottedNameSpan(filename, startPos, endPos) { + function getTypeInfoEligiblePath(filename, position, isConstructorValidPosition) { + var sourceUnit = syntaxTreeCache.getCurrentFileSyntaxTree(filename).sourceUnit(); + var ast = TypeScript.ASTHelpers.getAstAtPosition(sourceUnit, position, false, true); + if (ast === null) { + return null; + } + if (ast.kind() === 227 /* ParameterList */ && ast.parent.kind() === 142 /* CallSignature */ && ast.parent.parent.kind() === 137 /* ConstructorDeclaration */) { + ast = ast.parent.parent; + } + switch (ast.kind()) { + default: + return null; + case 137 /* ConstructorDeclaration */: + var constructorAST = ast; + if (!isConstructorValidPosition || !(position >= TypeScript.start(constructorAST) && position <= TypeScript.start(constructorAST) + "constructor".length)) { + return null; + } + else { + return ast; + } + case 129 /* FunctionDeclaration */: + return null; + case 212 /* MemberAccessExpression */: + case 121 /* QualifiedName */: + case 50 /* SuperKeyword */: + case 14 /* StringLiteral */: + case 35 /* ThisKeyword */: + case 11 /* IdentifierName */: + return ast; + } + } + filename = TypeScript.switchToForwardSlashes(filename); + var node = getTypeInfoEligiblePath(filename, startPos, false); + if (!node) + return null; + while (node) { + if (TypeScript.ASTHelpers.isNameOfMemberAccessExpression(node) || TypeScript.ASTHelpers.isRightSideOfQualifiedName(node)) { + node = node.parent; + } + else { + break; + } + } + return { + minChar: TypeScript.start(node), + limChar: TypeScript.end(node) + }; + } + function getBreakpointStatementAtPosition(filename, position) { + filename = TypeScript.switchToForwardSlashes(filename); + var syntaxtree = getSyntaxTree(filename); + return TypeScript.Services.Breakpoints.getBreakpointLocation(syntaxtree, position); + } + function getScriptLexicalStructure(filename) { + filename = TypeScript.switchToForwardSlashes(filename); + var syntaxTree = getSyntaxTree(filename); + var items = []; + TypeScript.Services.GetScriptLexicalStructureWalker.getListsOfAllScriptLexicalStructure(items, filename, syntaxTree.sourceUnit()); + return items; + } + function getOutliningRegions(filename) { + filename = TypeScript.switchToForwardSlashes(filename); + var syntaxTree = getSyntaxTree(filename); + return TypeScript.Services.OutliningElementsCollector.collectElements(syntaxTree.sourceUnit()); + } + function getBraceMatchingAtPosition(filename, position) { + filename = TypeScript.switchToForwardSlashes(filename); + var syntaxTree = getSyntaxTree(filename); + return TypeScript.Services.BraceMatcher.getMatchSpans(syntaxTree, position); + } + function getIndentationAtPosition(filename, position, editorOptions) { + filename = TypeScript.switchToForwardSlashes(filename); + var syntaxTree = getSyntaxTree(filename); + var scriptSnapshot = syntaxTreeCache.getCurrentScriptSnapshot(filename); + var scriptText = TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot); + var textSnapshot = new TypeScript.Services.Formatting.TextSnapshot(scriptText); + var options = new TypeScript.FormattingOptions(!editorOptions.ConvertTabsToSpaces, editorOptions.TabSize, editorOptions.IndentSize, editorOptions.NewLineCharacter); + return TypeScript.Services.Formatting.SingleTokenIndenter.getIndentationAmount(position, syntaxTree.sourceUnit(), textSnapshot, options); + } + function getFormattingManager(filename, options) { + if (formattingRulesProvider == null) { + formattingRulesProvider = new TypeScript.Services.Formatting.RulesProvider(host); + } + formattingRulesProvider.ensureUpToDate(options); + var syntaxTree = getSyntaxTree(filename); + var scriptSnapshot = syntaxTreeCache.getCurrentScriptSnapshot(filename); + var scriptText = TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot); + var textSnapshot = new TypeScript.Services.Formatting.TextSnapshot(scriptText); + var manager = new TypeScript.Services.Formatting.FormattingManager(syntaxTree, textSnapshot, formattingRulesProvider, options); + return manager; + } + function getFormattingEditsForRange(filename, minChar, limChar, options) { + filename = TypeScript.switchToForwardSlashes(filename); + var manager = getFormattingManager(filename, options); + return manager.formatSelection(minChar, limChar); + } + function getFormattingEditsForDocument(filename, minChar, limChar, options) { + filename = TypeScript.switchToForwardSlashes(filename); + var manager = getFormattingManager(filename, options); + return manager.formatDocument(minChar, limChar); + } + function getFormattingEditsOnPaste(filename, minChar, limChar, options) { + filename = TypeScript.switchToForwardSlashes(filename); + var manager = getFormattingManager(filename, options); + return manager.formatOnPaste(minChar, limChar); + } + function getFormattingEditsAfterKeystroke(filename, position, key, options) { + filename = TypeScript.switchToForwardSlashes(filename); + var manager = getFormattingManager(filename, options); + if (key === "}") + return manager.formatOnClosingCurlyBrace(position); + else if (key === ";") + return manager.formatOnSemicolon(position); + else if (key === "\n") + return manager.formatOnEnter(position); + else + return []; + } + return { + dispose: dispose, + refresh: function () { + }, + cleanupSemanticCache: function () { + }, + getSyntacticDiagnostics: getSyntacticDiagnostics, + getSemanticDiagnostics: getSemanticDiagnostics, + getCompilerOptionsDiagnostics: getCompilerOptionsDiagnostics, + getCompletionsAtPosition: getCompletionsAtPosition, + getCompletionEntryDetails: getCompletionEntryDetails, + getTypeAtPosition: getTypeAtPosition, + getSignatureAtPosition: function (filename, position) { return undefined; }, + getDefinitionAtPosition: function (filename, position) { return []; }, + getReferencesAtPosition: function (filename, position) { return []; }, + getOccurrencesAtPosition: function (filename, position) { return []; }, + getImplementorsAtPosition: function (filename, position) { return []; }, + getNameOrDottedNameSpan: getNameOrDottedNameSpan, + getBreakpointStatementAtPosition: getBreakpointStatementAtPosition, + getNavigateToItems: function (searchValue) { return []; }, + getScriptLexicalStructure: getScriptLexicalStructure, + getOutliningRegions: getOutliningRegions, + getBraceMatchingAtPosition: getBraceMatchingAtPosition, + getIndentationAtPosition: getIndentationAtPosition, + getFormattingEditsForRange: getFormattingEditsForRange, + getFormattingEditsForDocument: getFormattingEditsForDocument, + getFormattingEditsOnPaste: getFormattingEditsOnPaste, + getFormattingEditsAfterKeystroke: getFormattingEditsAfterKeystroke, + getEmitOutput: function (filename) { return undefined; } + }; + } + ts.createLanguageService = createLanguageService; + function createClassifier(host) { + var scanner; + var lastDiagnosticKey = null; + var noRegexTable; + var reportDiagnostic = function (position, fullWidth, key, args) { + lastDiagnosticKey = key; + }; + if (!noRegexTable) { + noRegexTable = []; + noRegexTable[11 /* IdentifierName */] = true; + noRegexTable[14 /* StringLiteral */] = true; + noRegexTable[13 /* NumericLiteral */] = true; + noRegexTable[12 /* RegularExpressionLiteral */] = true; + noRegexTable[35 /* ThisKeyword */] = true; + noRegexTable[93 /* PlusPlusToken */] = true; + noRegexTable[94 /* MinusMinusToken */] = true; + noRegexTable[73 /* CloseParenToken */] = true; + noRegexTable[75 /* CloseBracketToken */] = true; + noRegexTable[71 /* CloseBraceToken */] = true; + noRegexTable[37 /* TrueKeyword */] = true; + noRegexTable[24 /* FalseKeyword */] = true; + } + function getClassificationsForLine(text, lexState) { + var offset = 0; + if (lexState !== 0 /* Start */) { + if (lexState === 3 /* InDoubleQuoteStringLiteral */) { + text = '"\\\n' + text; + } + else if (lexState === 2 /* InSingleQuoteStringLiteral */) { + text = "'\\\n" + text; + } + else if (lexState === 1 /* InMultiLineCommentTrivia */) { + text = "/*\n" + text; + } + offset = 3; + } + var result = { + finalLexState: 0 /* Start */, + entries: [] + }; + var simpleText = TypeScript.SimpleText.fromString(text); + scanner = TypeScript.Scanner.createScanner(1 /* ES5 */, simpleText, reportDiagnostic); + var lastTokenKind = 0 /* None */; + var token = null; + do { + lastDiagnosticKey = null; + token = scanner.scan(!noRegexTable[lastTokenKind]); + lastTokenKind = token.kind(); + processToken(text, simpleText, offset, token, result); + } while (token.kind() !== 10 /* EndOfFileToken */); + lastDiagnosticKey = null; + return result; + } + function processToken(text, simpleText, offset, token, result) { + processTriviaList(text, offset, token.leadingTrivia(simpleText), result); + addResult(text, offset, result, TypeScript.width(token), token.kind()); + processTriviaList(text, offset, token.trailingTrivia(simpleText), result); + if (TypeScript.fullEnd(token) >= text.length) { + if (lastDiagnosticKey === TypeScript.DiagnosticCode.AsteriskSlash_expected) { + result.finalLexState = 1 /* InMultiLineCommentTrivia */; + return; + } + if (token.kind() === 14 /* StringLiteral */) { + var tokenText = token.text(); + if (tokenText.length > 0 && tokenText.charCodeAt(tokenText.length - 1) === 92 /* backslash */) { + var quoteChar = tokenText.charCodeAt(0); + result.finalLexState = quoteChar === 34 /* doubleQuote */ ? 3 /* InDoubleQuoteStringLiteral */ : 2 /* InSingleQuoteStringLiteral */; + return; + } + } + } + } + function processTriviaList(text, offset, triviaList, result) { + for (var i = 0, n = triviaList.count(); i < n; i++) { + var trivia = triviaList.syntaxTriviaAt(i); + addResult(text, offset, result, trivia.fullWidth(), trivia.kind()); + } + } + function addResult(text, offset, result, length, kind) { + if (length > 0) { + if (result.entries.length === 0) { + length -= offset; + } + result.entries.push({ length: length, classification: classFromKind(kind) }); + } + } + function classFromKind(kind) { + if (TypeScript.SyntaxFacts.isAnyKeyword(kind)) { + return 1 /* Keyword */; + } + else if (TypeScript.SyntaxFacts.isBinaryExpressionOperatorToken(kind) || TypeScript.SyntaxFacts.isPrefixUnaryExpressionOperatorToken(kind)) { + return 2 /* Operator */; + } + else if (TypeScript.SyntaxFacts.isAnyPunctuation(kind)) { + return 0 /* Punctuation */; + } + switch (kind) { + case 4 /* WhitespaceTrivia */: + return 4 /* Whitespace */; + case 6 /* MultiLineCommentTrivia */: + case 7 /* SingleLineCommentTrivia */: + return 3 /* Comment */; + case 13 /* NumericLiteral */: + return 6 /* NumberLiteral */; + case 14 /* StringLiteral */: + return 7 /* StringLiteral */; + case 12 /* RegularExpressionLiteral */: + return 8 /* RegExpLiteral */; + case 11 /* IdentifierName */: + default: + return 5 /* Identifier */; + } + } + return { + getClassificationsForLine: getClassificationsForLine + }; + } + ts.createClassifier = createClassifier; + function initializeServices() { + ts.objectAllocator = { + getNodeConstructor: function (kind) { + function Node() { + } + var proto = new NodeObject(); + proto.kind = kind; + proto.pos = 0; + proto.end = 0; + proto.flags = 0; + proto.parent = undefined; + Node.prototype = proto; + return Node; + }, + getSymbolConstructor: function () { return SymbolObject; }, + getTypeConstructor: function () { return TypeObject; }, + getSignatureConstructor: function () { return SignatureObject; } + }; + } + initializeServices(); +})(ts || (ts = {})); +var TypeScript; +(function (TypeScript) { + function isNoDefaultLibMatch(comment) { + var isNoDefaultLibRegex = /^(\/\/\/\s*/gim; + return isNoDefaultLibRegex.exec(comment); + } + TypeScript.tripleSlashReferenceRegExp = /^(\/\/\/\s*/; + function getFileReferenceFromReferencePath(fileName, text, position, comment, diagnostics) { + var lineMap = text.lineMap(); + var simpleReferenceRegEx = /^\/\/\/\s*= 7 && fullReference[6] === "true"; + return { + line: 0, + character: 0, + position: 0, + length: 0, + path: TypeScript.switchToForwardSlashes(adjustedPath), + isResident: isResident + }; + } + } + } + return null; + } + var reportDiagnostic = function () { + }; + function processImports(text, scanner, token, importedFiles) { + var lineChar = { line: -1, character: -1 }; + var lineMap = text.lineMap(); + var start = new Date().getTime(); + while (token.kind() !== 10 /* EndOfFileToken */) { + if (token.kind() === 49 /* ImportKeyword */) { + var importToken = token; + token = scanner.scan(false); + if (TypeScript.SyntaxFacts.isIdentifierNameOrAnyKeyword(token)) { + token = scanner.scan(false); + if (token.kind() === 107 /* EqualsToken */) { + token = scanner.scan(false); + if (token.kind() === 65 /* ModuleKeyword */ || token.kind() === 66 /* RequireKeyword */) { + token = scanner.scan(false); + if (token.kind() === 72 /* OpenParenToken */) { + token = scanner.scan(false); + lineMap.fillLineAndCharacterFromPosition(TypeScript.start(importToken, text), lineChar); + if (token.kind() === 14 /* StringLiteral */) { + var ref = { + line: lineChar.line, + character: lineChar.character, + position: TypeScript.start(token, text), + length: TypeScript.width(token), + path: TypeScript.stripStartAndEndQuotes(TypeScript.switchToForwardSlashes(token.text())), + isResident: false + }; + importedFiles.push(ref); + } + } + } + } + } + } + token = scanner.scan(false); + } + var totalTime = new Date().getTime() - start; + } + function processTripleSlashDirectives(fileName, text, firstToken) { + var leadingTrivia = firstToken.leadingTrivia(text); + var position = 0; + var lineChar = { line: -1, character: -1 }; + var noDefaultLib = false; + var diagnostics = []; + var referencedFiles = []; + var lineMap = text.lineMap(); + for (var i = 0, n = leadingTrivia.count(); i < n; i++) { + var trivia = leadingTrivia.syntaxTriviaAt(i); + if (trivia.kind() === 7 /* SingleLineCommentTrivia */) { + var triviaText = trivia.fullText(); + var referencedCode = getFileReferenceFromReferencePath(fileName, text, position, triviaText, diagnostics); + if (referencedCode) { + lineMap.fillLineAndCharacterFromPosition(position, lineChar); + referencedCode.position = position; + referencedCode.length = trivia.fullWidth(); + referencedCode.line = lineChar.line; + referencedCode.character = lineChar.character; + referencedFiles.push(referencedCode); + } + var isNoDefaultLib = isNoDefaultLibMatch(triviaText); + if (isNoDefaultLib) { + noDefaultLib = isNoDefaultLib[3] === "true"; + } + } + position += trivia.fullWidth(); + } + return { noDefaultLib: noDefaultLib, diagnostics: diagnostics, referencedFiles: referencedFiles }; + } + function preProcessFile(fileName, sourceText, readImportFiles) { + if (readImportFiles === void 0) { readImportFiles = true; } + var text = TypeScript.SimpleText.fromScriptSnapshot(sourceText); + var scanner = TypeScript.Scanner.createScanner(1 /* ES5 */, text, reportDiagnostic); + var firstToken = scanner.scan(false); + var importedFiles = []; + if (readImportFiles) { + processImports(text, scanner, firstToken, importedFiles); + } + var properties = processTripleSlashDirectives(fileName, text, firstToken); + return { referencedFiles: properties.referencedFiles, importedFiles: importedFiles, isLibFile: properties.noDefaultLib, diagnostics: properties.diagnostics }; + } + TypeScript.preProcessFile = preProcessFile; + function getReferencedFiles(fileName, sourceText) { + return preProcessFile(fileName, sourceText, false).referencedFiles; + } + TypeScript.getReferencedFiles = getReferencedFiles; +})(TypeScript || (TypeScript = {})); +var debugObjectHost = this; +var ts; +(function (ts) { + var LanguageVersion; + (function (LanguageVersion) { + LanguageVersion[LanguageVersion["EcmaScript3"] = 0] = "EcmaScript3"; + LanguageVersion[LanguageVersion["EcmaScript5"] = 1] = "EcmaScript5"; + })(LanguageVersion || (LanguageVersion = {})); + var ModuleGenTarget; + (function (ModuleGenTarget) { + ModuleGenTarget[ModuleGenTarget["Unspecified"] = 0] = "Unspecified"; + ModuleGenTarget[ModuleGenTarget["Synchronous"] = 1] = "Synchronous"; + ModuleGenTarget[ModuleGenTarget["Asynchronous"] = 2] = "Asynchronous"; + })(ModuleGenTarget || (ModuleGenTarget = {})); + function languageVersionToScriptTarget(languageVersion) { + if (typeof languageVersion === "undefined") + return undefined; + switch (languageVersion) { + case 0 /* EcmaScript3 */: + return 0 /* ES3 */; + case 1 /* EcmaScript5 */: + return 1 /* ES5 */; + default: + throw Error("unsuported LanguageVersion value: " + languageVersion); + } + } + function moduleGenTargetToModuleKind(moduleGenTarget) { + if (typeof moduleGenTarget === "undefined") + return undefined; + switch (moduleGenTarget) { + case 2 /* Asynchronous */: + return 2 /* AMD */; + case 1 /* Synchronous */: + return 1 /* CommonJS */; + case 0 /* Unspecified */: + return 0 /* None */; + default: + throw Error("unsuported ModuleGenTarget value: " + moduleGenTarget); + } + } + function scriptTargetTolanguageVersion(scriptTarget) { + if (typeof scriptTarget === "undefined") + return undefined; + switch (scriptTarget) { + case 0 /* ES3 */: + return 0 /* EcmaScript3 */; + case 1 /* ES5 */: + return 1 /* EcmaScript5 */; + default: + throw Error("unsuported ScriptTarget value: " + scriptTarget); + } + } + function moduleKindToModuleGenTarget(moduleKind) { + if (typeof moduleKind === "undefined") + return undefined; + switch (moduleKind) { + case 2 /* AMD */: + return 2 /* Asynchronous */; + case 1 /* CommonJS */: + return 1 /* Synchronous */; + case 0 /* None */: + return 0 /* Unspecified */; + default: + throw Error("unsuported ModuleKind value: " + moduleKind); + } + } + function compilationSettingsToCompilerOptions(settings) { + var options = {}; + options.removeComments = settings.removeComments; + options.noResolve = settings.noResolve; + options.noImplicitAny = settings.noImplicitAny; + options.noLib = settings.noLib; + options.target = languageVersionToScriptTarget(settings.codeGenTarget); + options.module = moduleGenTargetToModuleKind(settings.moduleGenTarget); + options.out = settings.outFileOption; + options.outDir = settings.outDirOption; + options.sourceMap = settings.mapSourceFiles; + options.mapRoot = settings.mapRoot; + options.sourceRoot = settings.sourceRoot; + options.declaration = settings.generateDeclarationFiles; + options.codepage = settings.codepage; + return options; + } + function compilerOptionsToCompilationSettings(options) { + var settings = {}; + settings.removeComments = options.removeComments; + settings.noResolve = options.noResolve; + settings.noImplicitAny = options.noImplicitAny; + settings.noLib = options.noLib; + settings.codeGenTarget = scriptTargetTolanguageVersion(options.target); + settings.moduleGenTarget = moduleKindToModuleGenTarget(options.module); + settings.outFileOption = options.out; + settings.outDirOption = options.outDir; + settings.mapSourceFiles = options.sourceMap; + settings.mapRoot = options.mapRoot; + settings.sourceRoot = options.sourceRoot; + settings.generateDeclarationFiles = options.declaration; + settings.codepage = options.codepage; + return settings; + } + function logInternalError(logger, err) { + logger.log("*INTERNAL ERROR* - Exception in typescript services: " + err.message); + } + var ScriptSnapshotShimAdapter = (function () { + function ScriptSnapshotShimAdapter(scriptSnapshotShim) { + this.scriptSnapshotShim = scriptSnapshotShim; + this.lineStartPositions = null; + } + ScriptSnapshotShimAdapter.prototype.getText = function (start, end) { + return this.scriptSnapshotShim.getText(start, end); + }; + ScriptSnapshotShimAdapter.prototype.getLength = function () { + return this.scriptSnapshotShim.getLength(); + }; + ScriptSnapshotShimAdapter.prototype.getLineStartPositions = function () { + if (this.lineStartPositions == null) { + this.lineStartPositions = JSON.parse(this.scriptSnapshotShim.getLineStartPositions()); + } + return this.lineStartPositions; + }; + ScriptSnapshotShimAdapter.prototype.getTextChangeRangeSinceVersion = function (scriptVersion) { + var encoded = this.scriptSnapshotShim.getTextChangeRangeSinceVersion(scriptVersion); + if (encoded == null) { + return null; + } + var decoded = JSON.parse(encoded); + return new TypeScript.TextChangeRange(new TypeScript.TextSpan(decoded.span.start, decoded.span.length), decoded.newLength); + }; + return ScriptSnapshotShimAdapter; + })(); + var LanguageServiceShimHostAdapter = (function () { + function LanguageServiceShimHostAdapter(shimHost) { + this.shimHost = shimHost; + } + LanguageServiceShimHostAdapter.prototype.information = function () { + return this.shimHost.information(); + }; + LanguageServiceShimHostAdapter.prototype.debug = function () { + return this.shimHost.debug(); + }; + LanguageServiceShimHostAdapter.prototype.warning = function () { + return this.shimHost.warning(); + }; + LanguageServiceShimHostAdapter.prototype.error = function () { + return this.shimHost.error(); + }; + LanguageServiceShimHostAdapter.prototype.fatal = function () { + return this.shimHost.fatal(); + }; + LanguageServiceShimHostAdapter.prototype.log = function (s) { + this.shimHost.log(s); + }; + LanguageServiceShimHostAdapter.prototype.getCompilationSettings = function () { + var settingsJson = this.shimHost.getCompilationSettings(); + if (settingsJson == null || settingsJson == "") { + throw Error("LanguageServiceShimHostAdapter.getCompilationSettings: empty compilationSettings"); + return null; + } + var options = compilationSettingsToCompilerOptions(JSON.parse(settingsJson)); + options.noResolve = true; + return options; + }; + LanguageServiceShimHostAdapter.prototype.getScriptFileNames = function () { + var encoded = this.shimHost.getScriptFileNames(); + return JSON.parse(encoded); + }; + LanguageServiceShimHostAdapter.prototype.getScriptSnapshot = function (fileName) { + return new ScriptSnapshotShimAdapter(this.shimHost.getScriptSnapshot(fileName)); + }; + LanguageServiceShimHostAdapter.prototype.getScriptVersion = function (fileName) { + return this.shimHost.getScriptVersion(fileName); + }; + LanguageServiceShimHostAdapter.prototype.getScriptIsOpen = function (fileName) { + return this.shimHost.getScriptIsOpen(fileName); + }; + LanguageServiceShimHostAdapter.prototype.getScriptByteOrderMark = function (fileName) { + return this.shimHost.getScriptByteOrderMark(fileName); + }; + LanguageServiceShimHostAdapter.prototype.getLocalizedDiagnosticMessages = function () { + var diagnosticMessagesJson = this.shimHost.getLocalizedDiagnosticMessages(); + if (diagnosticMessagesJson == null || diagnosticMessagesJson == "") { + return null; + } + try { + return JSON.parse(diagnosticMessagesJson); + } + catch (e) { + this.log(e.description || "diagnosticMessages.generated.json has invalid JSON format"); + return null; + } + }; + LanguageServiceShimHostAdapter.prototype.getCancellationToken = function () { + return this.shimHost.getCancellationToken(); + }; + return LanguageServiceShimHostAdapter; + })(); + function simpleForwardCall(logger, actionDescription, action) { + logger.log(actionDescription); + var start = Date.now(); + var result = action(); + var end = Date.now(); + logger.log(actionDescription + " completed in " + (end - start) + " msec"); + if (typeof (result) === "string") { + var str = result; + if (str.length > 128) { + str = str.substring(0, 128) + "..."; + } + logger.log(" result.length=" + str.length + ", result='" + JSON.stringify(str) + "'"); + } + return result; + } + function forwardJSONCall(logger, actionDescription, action) { + try { + var result = simpleForwardCall(logger, actionDescription, action); + return JSON.stringify({ result: result }); + } + catch (err) { + if (err instanceof ts.OperationCanceledException) { + return JSON.stringify({ canceled: true }); + } + logInternalError(logger, err); + err.description = actionDescription; + return JSON.stringify({ error: err }); + } + } + var ShimBase = (function () { + function ShimBase(factory) { + this.factory = factory; + factory.registerShim(this); + } + ShimBase.prototype.dispose = function (dummy) { + this.factory.unregisterShim(this); + }; + return ShimBase; + })(); + var LanguageServiceShimObject = (function (_super) { + __extends(LanguageServiceShimObject, _super); + function LanguageServiceShimObject(factory, host, languageService) { + _super.call(this, factory); + this.host = host; + this.languageService = languageService; + this.logger = this.host; + } + LanguageServiceShimObject.prototype.forwardJSONCall = function (actionDescription, action) { + return forwardJSONCall(this.logger, actionDescription, action); + }; + LanguageServiceShimObject.prototype.dispose = function (dummy) { + this.logger.log("dispose()"); + this.languageService.dispose(); + this.languageService = null; + if (debugObjectHost && debugObjectHost.CollectGarbage) { + debugObjectHost.CollectGarbage(); + this.logger.log("CollectGarbage()"); + } + this.logger = null; + _super.prototype.dispose.call(this, dummy); + }; + LanguageServiceShimObject.prototype.refresh = function (throwOnError) { + var _this = this; + this.forwardJSONCall("refresh(" + throwOnError + ")", function () { + _this.languageService.refresh(); + return null; + }); + }; + LanguageServiceShimObject.prototype.cleanupSemanticCache = function () { + var _this = this; + this.forwardJSONCall("cleanupSemanticCache()", function () { + _this.languageService.cleanupSemanticCache(); + return null; + }); + }; + LanguageServiceShimObject.realizeDiagnostic = function (diagnostic) { + return { + message: diagnostic.messageText, + start: diagnostic.start, + length: diagnostic.length, + category: ts.DiagnosticCategory[diagnostic.category].toLowerCase() + }; + }; + LanguageServiceShimObject.prototype.realizeDiagnosticWithFileName = function (diagnostic) { + return { + fileName: diagnostic.file.filename, + message: diagnostic.messageText, + start: diagnostic.start, + length: diagnostic.length, + category: ts.DiagnosticCategory[diagnostic.category].toLowerCase() + }; + }; + LanguageServiceShimObject.prototype.getSyntacticDiagnostics = function (fileName) { + var _this = this; + return this.forwardJSONCall("getSyntacticDiagnostics(\"" + fileName + "\")", function () { + var errors = _this.languageService.getSyntacticDiagnostics(fileName); + return errors.map(LanguageServiceShimObject.realizeDiagnostic); + }); + }; + LanguageServiceShimObject.prototype.getSemanticDiagnostics = function (fileName) { + var _this = this; + return this.forwardJSONCall("getSemanticDiagnostics(\"" + fileName + "\")", function () { + var errors = _this.languageService.getSemanticDiagnostics(fileName); + return errors.map(LanguageServiceShimObject.realizeDiagnostic); + }); + }; + LanguageServiceShimObject.prototype.getCompilerOptionsDiagnostics = function () { + var _this = this; + return this.forwardJSONCall("getCompilerOptionsDiagnostics()", function () { + var errors = _this.languageService.getCompilerOptionsDiagnostics(); + return errors.map(function (d) { return _this.realizeDiagnosticWithFileName(d); }); + }); + }; + LanguageServiceShimObject.prototype.getTypeAtPosition = function (fileName, position) { + var _this = this; + return this.forwardJSONCall("getTypeAtPosition(\"" + fileName + "\", " + position + ")", function () { + var typeInfo = _this.languageService.getTypeAtPosition(fileName, position); + return typeInfo; + }); + }; + LanguageServiceShimObject.prototype.getNameOrDottedNameSpan = function (fileName, startPos, endPos) { + var _this = this; + return this.forwardJSONCall("getNameOrDottedNameSpan(\"" + fileName + "\", " + startPos + ", " + endPos + ")", function () { + var spanInfo = _this.languageService.getNameOrDottedNameSpan(fileName, startPos, endPos); + return spanInfo; + }); + }; + LanguageServiceShimObject.prototype.getBreakpointStatementAtPosition = function (fileName, position) { + var _this = this; + return this.forwardJSONCall("getBreakpointStatementAtPosition(\"" + fileName + "\", " + position + ")", function () { + var spanInfo = _this.languageService.getBreakpointStatementAtPosition(fileName, position); + return spanInfo; + }); + }; + LanguageServiceShimObject.prototype.getSignatureAtPosition = function (fileName, position) { + var _this = this; + return this.forwardJSONCall("getSignatureAtPosition(\"" + fileName + "\", " + position + ")", function () { + var signatureInfo = _this.languageService.getSignatureAtPosition(fileName, position); + return signatureInfo; + }); + }; + LanguageServiceShimObject.prototype.getDefinitionAtPosition = function (fileName, position) { + var _this = this; + return this.forwardJSONCall("getDefinitionAtPosition(\"" + fileName + "\", " + position + ")", function () { + return _this.languageService.getDefinitionAtPosition(fileName, position); + }); + }; + LanguageServiceShimObject.prototype.getBraceMatchingAtPosition = function (fileName, position) { + var _this = this; + return this.forwardJSONCall("getBraceMatchingAtPosition(\"" + fileName + "\", " + position + ")", function () { + var textRanges = _this.languageService.getBraceMatchingAtPosition(fileName, position); + return textRanges; + }); + }; + LanguageServiceShimObject.prototype.getIndentationAtPosition = function (fileName, position, options) { + var _this = this; + return this.forwardJSONCall("getIndentationAtPosition(\"" + fileName + "\", " + position + ")", function () { + var localOptions = JSON.parse(options); + var columnOffset = _this.languageService.getIndentationAtPosition(fileName, position, localOptions); + return { value: columnOffset }; + }); + }; + LanguageServiceShimObject.prototype.getReferencesAtPosition = function (fileName, position) { + var _this = this; + return this.forwardJSONCall("getReferencesAtPosition(\"" + fileName + "\", " + position + ")", function () { + return _this.languageService.getReferencesAtPosition(fileName, position); + }); + }; + LanguageServiceShimObject.prototype.getOccurrencesAtPosition = function (fileName, position) { + var _this = this; + return this.forwardJSONCall("getOccurrencesAtPosition(\"" + fileName + "\", " + position + ")", function () { + return _this.languageService.getOccurrencesAtPosition(fileName, position); + }); + }; + LanguageServiceShimObject.prototype.getImplementorsAtPosition = function (fileName, position) { + var _this = this; + return this.forwardJSONCall("getImplementorsAtPosition(\"" + fileName + "\", " + position + ")", function () { + return _this.languageService.getImplementorsAtPosition(fileName, position); + }); + }; + LanguageServiceShimObject.prototype.getCompletionsAtPosition = function (fileName, position, isMemberCompletion) { + var _this = this; + return this.forwardJSONCall("getCompletionsAtPosition(\"" + fileName + "\", " + position + ", " + isMemberCompletion + ")", function () { + var completion = _this.languageService.getCompletionsAtPosition(fileName, position, isMemberCompletion); + return completion; + }); + }; + LanguageServiceShimObject.prototype.getCompletionEntryDetails = function (fileName, position, entryName) { + var _this = this; + return this.forwardJSONCall("getCompletionEntryDetails(\"" + fileName + "\", " + position + ", " + entryName + ")", function () { + var details = _this.languageService.getCompletionEntryDetails(fileName, position, entryName); + return details; + }); + }; + LanguageServiceShimObject.prototype.getFormattingEditsForRange = function (fileName, minChar, limChar, options) { + var _this = this; + return this.forwardJSONCall("getFormattingEditsForRange(\"" + fileName + "\", " + minChar + ", " + limChar + ")", function () { + var localOptions = JSON.parse(options); + var edits = _this.languageService.getFormattingEditsForRange(fileName, minChar, limChar, localOptions); + return edits; + }); + }; + LanguageServiceShimObject.prototype.getFormattingEditsForDocument = function (fileName, minChar, limChar, options) { + var _this = this; + return this.forwardJSONCall("getFormattingEditsForDocument(\"" + fileName + "\", " + minChar + ", " + limChar + ")", function () { + var localOptions = JSON.parse(options); + var edits = _this.languageService.getFormattingEditsForDocument(fileName, minChar, limChar, localOptions); + return edits; + }); + }; + LanguageServiceShimObject.prototype.getFormattingEditsOnPaste = function (fileName, minChar, limChar, options) { + var _this = this; + return this.forwardJSONCall("getFormattingEditsOnPaste(\"" + fileName + "\", " + minChar + ", " + limChar + ")", function () { + var localOptions = JSON.parse(options); + var edits = _this.languageService.getFormattingEditsOnPaste(fileName, minChar, limChar, localOptions); + return edits; + }); + }; + LanguageServiceShimObject.prototype.getFormattingEditsAfterKeystroke = function (fileName, position, key, options) { + var _this = this; + return this.forwardJSONCall("getFormattingEditsAfterKeystroke(\"" + fileName + "\", " + position + ", \"" + key + "\")", function () { + var localOptions = JSON.parse(options); + var edits = _this.languageService.getFormattingEditsAfterKeystroke(fileName, position, key, localOptions); + return edits; + }); + }; + LanguageServiceShimObject.prototype.getNavigateToItems = function (searchValue) { + var _this = this; + return this.forwardJSONCall("getNavigateToItems(\"" + searchValue + "\")", function () { + var items = _this.languageService.getNavigateToItems(searchValue); + var result = _this._navigateToItemsToString(items); + return result; + }); + }; + LanguageServiceShimObject.prototype.getScriptLexicalStructure = function (fileName) { + var _this = this; + return this.forwardJSONCall("getScriptLexicalStructure(\"" + fileName + "\")", function () { + var items = _this.languageService.getScriptLexicalStructure(fileName); + var result = _this._navigateToItemsToString(items); + return result; + }); + }; + LanguageServiceShimObject.prototype.getOutliningRegions = function (fileName) { + var _this = this; + return this.forwardJSONCall("getOutliningRegions(\"" + fileName + "\")", function () { + var items = _this.languageService.getOutliningRegions(fileName); + return items; + }); + }; + LanguageServiceShimObject.prototype.getEmitOutput = function (fileName) { + var _this = this; + return this.forwardJSONCall("getEmitOutput(\"" + fileName + "\")", function () { + var output = _this.languageService.getEmitOutput(fileName); + return output; + }); + }; + LanguageServiceShimObject.prototype._navigateToItemsToString = function (items) { + var result = []; + for (var i = 0; i < items.length; i++) { + var item = items[i]; + result.push({ + name: item.name, + kind: item.kind, + kindModifiers: item.kindModifiers, + containerName: item.containerName, + containerKind: item.containerKind, + matchKind: item.matchKind, + fileName: item.fileName, + minChar: item.minChar, + limChar: item.limChar, + additionalSpans: item.additionalSpans ? item.additionalSpans.map(function (i) { + return { start: i.minChar, end: i.limChar }; + }) : undefined + }); + } + return result; + }; + return LanguageServiceShimObject; + })(ShimBase); + var ClassifierShimObject = (function (_super) { + __extends(ClassifierShimObject, _super); + function ClassifierShimObject(factory, host) { + _super.call(this, factory); + this.host = host; + this.classifier = ts.createClassifier(this.host); + } + ClassifierShimObject.prototype.getClassificationsForLine = function (text, lexState) { + var classification = this.classifier.getClassificationsForLine(text, lexState); + var items = classification.entries; + var result = ""; + for (var i = 0; i < items.length; i++) { + result += items[i].length + "\n"; + result += items[i].classification + "\n"; + } + result += classification.finalLexState; + return result; + }; + return ClassifierShimObject; + })(ShimBase); + var CoreServicesShimObject = (function (_super) { + __extends(CoreServicesShimObject, _super); + function CoreServicesShimObject(factory, host) { + _super.call(this, factory); + this.host = host; + } + CoreServicesShimObject.prototype.forwardJSONCall = function (actionDescription, action) { + return forwardJSONCall(this.host, actionDescription, action); + }; + CoreServicesShimObject.prototype.getPreProcessedFileInfo = function (fileName, sourceText) { + return this.forwardJSONCall("getPreProcessedFileInfo(\"" + fileName + "\")", function () { + var result = TypeScript.preProcessFile(fileName, sourceText); + return result; + }); + }; + CoreServicesShimObject.prototype.getDefaultCompilationSettings = function () { + return this.forwardJSONCall("getDefaultCompilationSettings()", function () { + return compilerOptionsToCompilationSettings(ts.getDefaultCompilerOptions()); + }); + }; + return CoreServicesShimObject; + })(ShimBase); + var TypeScriptServicesFactory = (function () { + function TypeScriptServicesFactory() { + this._shims = []; + this.documentRegistry = ts.createDocumentRegistry(); + } + TypeScriptServicesFactory.prototype.createLanguageServiceShim = function (host) { + try { + var hostAdapter = new LanguageServiceShimHostAdapter(host); + var pullLanguageService = ts.createLanguageService(hostAdapter, this.documentRegistry); + return new LanguageServiceShimObject(this, host, pullLanguageService); + } + catch (err) { + logInternalError(host, err); + throw err; + } + }; + TypeScriptServicesFactory.prototype.createClassifierShim = function (host) { + try { + return new ClassifierShimObject(this, host); + } + catch (err) { + logInternalError(host, err); + throw err; + } + }; + TypeScriptServicesFactory.prototype.createCoreServicesShim = function (host) { + try { + return new CoreServicesShimObject(this, host); + } + catch (err) { + logInternalError(host, err); + throw err; + } + }; + TypeScriptServicesFactory.prototype.close = function () { + this._shims = []; + this.documentRegistry = ts.createDocumentRegistry(); + }; + TypeScriptServicesFactory.prototype.registerShim = function (shim) { + this._shims.push(shim); + }; + TypeScriptServicesFactory.prototype.unregisterShim = function (shim) { + for (var i = 0, n = this._shims.length; i < n; i++) { + if (this._shims[i] === shim) { + delete this._shims[i]; + return; + } + } + throw TypeScript.Errors.invalidOperation(); + }; + return TypeScriptServicesFactory; + })(); + ts.TypeScriptServicesFactory = TypeScriptServicesFactory; +})(ts || (ts = {})); +var TypeScript; +(function (TypeScript) { + (function (Services) { + Services.TypeScriptServicesFactory = ts.TypeScriptServicesFactory; + })(TypeScript.Services || (TypeScript.Services = {})); + var Services = TypeScript.Services; +})(TypeScript || (TypeScript = {})); diff --git a/src/lib/dom.generated.d.ts b/src/lib/dom.generated.d.ts index cdb6a48fcb1c1..2e7c5eba819f9 100644 --- a/src/lib/dom.generated.d.ts +++ b/src/lib/dom.generated.d.ts @@ -1865,6 +1865,32 @@ declare var Window: { new(): Window; } +interface FormData { + append(name: any, value: any, blobName?: string): void; +} +declare var FormData: { + prototype: FormData; + new (form?: HTMLFormElement): FormData; +} + +interface SourceBuffer extends EventTarget { + updating: boolean; + appendWindowStart: number; + appendWindowEnd: number; + buffered: TimeRanges; + timestampOffset: number; + audioTracks: AudioTrackList; + appendBuffer(data: ArrayBufferView): void; + appendBuffer(data: ArrayBuffer): void; + remove(start: number, end: number): void; + abort(): void; + appendStream(stream: MSStream, maxSize?: number): void; +} +declare var SourceBuffer: { + prototype: SourceBuffer; + new(): SourceBuffer; +} + interface NavigatorID { appVersion: string; appName: string; @@ -10196,14 +10222,6 @@ declare var MSManipulationEvent: { MS_MANIPULATION_STATE_CANCELLED: number; } -interface FormData { - append(name: any, value: any, blobName?: string): void; -} -declare var FormData: { - prototype: FormData; - new(): FormData; -} - interface HTMLDataListElement extends HTMLElement { options: HTMLCollection; } @@ -10622,23 +10640,6 @@ interface RandomSource { getRandomValues(array: ArrayBufferView): ArrayBufferView; } -interface SourceBuffer extends EventTarget { - updating: boolean; - appendWindowStart: number; - appendWindowEnd: number; - buffered: TimeRanges; - timestampOffset: number; - audioTracks: AudioTrackList; - appendBuffer(data: ArrayBuffer): void; - remove(start: number, end: number): void; - abort(): void; - appendStream(stream: MSStream, maxSize?: number): void; -} -declare var SourceBuffer: { - prototype: SourceBuffer; - new(): SourceBuffer; -} - interface MSInputMethodContext extends EventTarget { oncandidatewindowshow: (ev: any) => any; target: HTMLElement;