@@ -177,63 +177,96 @@ export enum IdentifierHandling {
177
177
}
178
178
179
179
export function tokenFromKeyword ( text : string ) : Token {
180
- assert ( text . length ) ;
180
+ let len = text . length ;
181
+ assert ( len ) ;
181
182
switch ( text . charCodeAt ( 0 ) ) {
182
183
case CharCode . a : {
183
- if ( text == "abstract" ) return Token . ABSTRACT ;
184
+ if ( len == 5 ) {
185
+ if ( text == "async" ) return Token . ASYNC ;
186
+ if ( text == "await" ) return Token . AWAIT ;
187
+ break ;
188
+ }
184
189
if ( text == "as" ) return Token . AS ;
185
- if ( text == "async" ) return Token . ASYNC ;
186
- if ( text == "await" ) return Token . AWAIT ;
190
+ if ( text == "abstract" ) return Token . ABSTRACT ;
187
191
break ;
188
192
}
189
193
case CharCode . b : {
190
194
if ( text == "break" ) return Token . BREAK ;
191
195
break ;
192
196
}
193
197
case CharCode . c : {
198
+ if ( len == 5 ) {
199
+ if ( text == "const" ) return Token . CONST ;
200
+ if ( text == "class" ) return Token . CLASS ;
201
+ if ( text == "catch" ) return Token . CATCH ;
202
+ break ;
203
+ }
194
204
if ( text == "case" ) return Token . CASE ;
195
- if ( text == "catch" ) return Token . CATCH ;
196
- if ( text == "class" ) return Token . CLASS ;
197
205
if ( text == "continue" ) return Token . CONTINUE ;
198
- if ( text == "const" ) return Token . CONST ;
199
206
if ( text == "constructor" ) return Token . CONSTRUCTOR ;
200
207
break ;
201
208
}
202
209
case CharCode . d : {
203
- if ( text == "debugger" ) return Token . DEBUGGER ;
204
- if ( text == "declare" ) return Token . DECLARE ;
205
- if ( text == "default" ) return Token . DEFAULT ;
206
- if ( text == "delete" ) return Token . DELETE ;
210
+ if ( len == 7 ) {
211
+ if ( text == "default" ) return Token . DEFAULT ;
212
+ if ( text == "declare" ) return Token . DECLARE ;
213
+ break ;
214
+ }
207
215
if ( text == "do" ) return Token . DO ;
216
+ if ( text == "delete" ) return Token . DELETE ;
217
+ if ( text == "debugger" ) return Token . DEBUGGER ;
208
218
break ;
209
219
}
210
220
case CharCode . e : {
211
- if ( text == "else" ) return Token . ELSE ;
212
- if ( text == "enum" ) return Token . ENUM ;
221
+ if ( len == 4 ) {
222
+ if ( text == "else" ) return Token . ELSE ;
223
+ if ( text == "enum" ) return Token . ENUM ;
224
+ break ;
225
+ }
213
226
if ( text == "export" ) return Token . EXPORT ;
214
227
if ( text == "extends" ) return Token . EXTENDS ;
215
228
break ;
216
229
}
217
230
case CharCode . f : {
218
- if ( text == "false" ) return Token . FALSE ;
219
- if ( text == "finally" ) return Token . FINALLY ;
220
- if ( text == "for" ) return Token . FOR ;
221
- if ( text == "from" ) return Token . FROM ;
231
+ if ( len <= 5 ) {
232
+ if ( text == "false" ) return Token . FALSE ;
233
+ if ( text == "for" ) return Token . FOR ;
234
+ if ( text == "from" ) return Token . FROM ;
235
+ break ;
236
+ }
222
237
if ( text == "function" ) return Token . FUNCTION ;
238
+ if ( text == "finally" ) return Token . FINALLY ;
223
239
break ;
224
240
}
225
241
case CharCode . g : {
226
242
if ( text == "get" ) return Token . GET ;
227
243
break ;
228
244
}
229
245
case CharCode . i : {
230
- if ( text == "if" ) return Token . IF ;
231
- if ( text == "implements" ) return Token . IMPLEMENTS ;
232
- if ( text == "import" ) return Token . IMPORT ;
233
- if ( text == "in" ) return Token . IN ;
234
- if ( text == "instanceof" ) return Token . INSTANCEOF ;
235
- if ( text == "interface" ) return Token . INTERFACE ;
236
- if ( text == "is" ) return Token . IS ;
246
+ if ( len == 2 ) {
247
+ if ( text == "if" ) return Token . IF ;
248
+ if ( text == "in" ) return Token . IN ;
249
+ if ( text == "is" ) return Token . IS ;
250
+ break ;
251
+ }
252
+ switch ( text . charCodeAt ( 3 ) ) {
253
+ case CharCode . l : {
254
+ if ( text == "implements" ) return Token . IMPLEMENTS ;
255
+ break ;
256
+ }
257
+ case CharCode . o : {
258
+ if ( text == "import" ) return Token . IMPORT ;
259
+ break ;
260
+ }
261
+ case CharCode . t : {
262
+ if ( text == "instanceof" ) return Token . INSTANCEOF ;
263
+ break ;
264
+ }
265
+ case CharCode . e : {
266
+ if ( text == "interface" ) return Token . INTERFACE ;
267
+ break ;
268
+ }
269
+ }
237
270
break ;
238
271
}
239
272
case CharCode . k : {
@@ -249,40 +282,49 @@ export function tokenFromKeyword(text: string): Token {
249
282
break ;
250
283
}
251
284
case CharCode . n : {
252
- if ( text == "namespace" ) return Token . NAMESPACE ;
253
285
if ( text == "new" ) return Token . NEW ;
254
286
if ( text == "null" ) return Token . NULL ;
287
+ if ( text == "namespace" ) return Token . NAMESPACE ;
255
288
break ;
256
289
}
257
290
case CharCode . o : {
258
291
if ( text == "of" ) return Token . OF ;
259
292
break ;
260
293
}
261
294
case CharCode . p : {
262
- if ( text == "package" ) return Token . PACKAGE ;
263
- if ( text == "private" ) return Token . PRIVATE ;
264
- if ( text == "protected" ) return Token . PROTECTED ;
295
+ if ( len == 7 ) {
296
+ if ( text == "private" ) return Token . PRIVATE ;
297
+ if ( text == "package" ) return Token . PACKAGE ;
298
+ break ;
299
+ }
265
300
if ( text == "public" ) return Token . PUBLIC ;
301
+ if ( text == "protected" ) return Token . PROTECTED ;
266
302
break ;
267
303
}
268
304
case CharCode . r : {
269
- if ( text == "readonly" ) return Token . READONLY ;
270
305
if ( text == "return" ) return Token . RETURN ;
306
+ if ( text == "readonly" ) return Token . READONLY ;
271
307
break ;
272
308
}
273
309
case CharCode . s : {
310
+ if ( len == 6 ) {
311
+ if ( text == "switch" ) return Token . SWITCH ;
312
+ if ( text == "static" ) return Token . STATIC ;
313
+ break ;
314
+ }
274
315
if ( text == "set" ) return Token . SET ;
275
- if ( text == "static" ) return Token . STATIC ;
276
316
if ( text == "super" ) return Token . SUPER ;
277
- if ( text == "switch" ) return Token . SWITCH ;
278
317
break ;
279
318
}
280
319
case CharCode . t : {
281
- if ( text == "this" ) return Token . THIS ;
282
- if ( text == "throw" ) return Token . THROW ;
283
- if ( text == "true" ) return Token . TRUE ;
320
+ if ( len == 4 ) {
321
+ if ( text == "true" ) return Token . TRUE ;
322
+ if ( text == "this" ) return Token . THIS ;
323
+ if ( text == "type" ) return Token . TYPE ;
324
+ break ;
325
+ }
284
326
if ( text == "try" ) return Token . TRY ;
285
- if ( text == "type " ) return Token . TYPE ;
327
+ if ( text == "throw " ) return Token . THROW ;
286
328
if ( text == "typeof" ) return Token . TYPEOF ;
287
329
break ;
288
330
}
@@ -917,9 +959,9 @@ export class Tokenizer extends DiagnosticEmitter {
917
959
if ( identifierHandling != IdentifierHandling . ALWAYS ) {
918
960
let maybeKeywordToken = tokenFromKeyword ( text . substring ( posBefore , pos ) ) ;
919
961
if (
920
- maybeKeywordToken !== Token . INVALID &&
962
+ maybeKeywordToken != Token . INVALID &&
921
963
! (
922
- identifierHandling === IdentifierHandling . PREFER &&
964
+ identifierHandling == IdentifierHandling . PREFER &&
923
965
tokenIsAlsoIdentifier ( maybeKeywordToken )
924
966
)
925
967
) {
0 commit comments