@@ -177,63 +177,96 @@ export enum IdentifierHandling {
177177}
178178
179179export function tokenFromKeyword ( text : string ) : Token {
180- assert ( text . length ) ;
180+ let len = text . length ;
181+ assert ( len ) ;
181182 switch ( text . charCodeAt ( 0 ) ) {
182183 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+ }
184189 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 ;
187191 break ;
188192 }
189193 case CharCode . b : {
190194 if ( text == "break" ) return Token . BREAK ;
191195 break ;
192196 }
193197 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+ }
194204 if ( text == "case" ) return Token . CASE ;
195- if ( text == "catch" ) return Token . CATCH ;
196- if ( text == "class" ) return Token . CLASS ;
197205 if ( text == "continue" ) return Token . CONTINUE ;
198- if ( text == "const" ) return Token . CONST ;
199206 if ( text == "constructor" ) return Token . CONSTRUCTOR ;
200207 break ;
201208 }
202209 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+ }
207215 if ( text == "do" ) return Token . DO ;
216+ if ( text == "delete" ) return Token . DELETE ;
217+ if ( text == "debugger" ) return Token . DEBUGGER ;
208218 break ;
209219 }
210220 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+ }
213226 if ( text == "export" ) return Token . EXPORT ;
214227 if ( text == "extends" ) return Token . EXTENDS ;
215228 break ;
216229 }
217230 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+ }
222237 if ( text == "function" ) return Token . FUNCTION ;
238+ if ( text == "finally" ) return Token . FINALLY ;
223239 break ;
224240 }
225241 case CharCode . g : {
226242 if ( text == "get" ) return Token . GET ;
227243 break ;
228244 }
229245 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+ }
237270 break ;
238271 }
239272 case CharCode . k : {
@@ -249,40 +282,49 @@ export function tokenFromKeyword(text: string): Token {
249282 break ;
250283 }
251284 case CharCode . n : {
252- if ( text == "namespace" ) return Token . NAMESPACE ;
253285 if ( text == "new" ) return Token . NEW ;
254286 if ( text == "null" ) return Token . NULL ;
287+ if ( text == "namespace" ) return Token . NAMESPACE ;
255288 break ;
256289 }
257290 case CharCode . o : {
258291 if ( text == "of" ) return Token . OF ;
259292 break ;
260293 }
261294 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+ }
265300 if ( text == "public" ) return Token . PUBLIC ;
301+ if ( text == "protected" ) return Token . PROTECTED ;
266302 break ;
267303 }
268304 case CharCode . r : {
269- if ( text == "readonly" ) return Token . READONLY ;
270305 if ( text == "return" ) return Token . RETURN ;
306+ if ( text == "readonly" ) return Token . READONLY ;
271307 break ;
272308 }
273309 case CharCode . s : {
310+ if ( len == 6 ) {
311+ if ( text == "switch" ) return Token . SWITCH ;
312+ if ( text == "static" ) return Token . STATIC ;
313+ break ;
314+ }
274315 if ( text == "set" ) return Token . SET ;
275- if ( text == "static" ) return Token . STATIC ;
276316 if ( text == "super" ) return Token . SUPER ;
277- if ( text == "switch" ) return Token . SWITCH ;
278317 break ;
279318 }
280319 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+ }
284326 if ( text == "try" ) return Token . TRY ;
285- if ( text == "type " ) return Token . TYPE ;
327+ if ( text == "throw " ) return Token . THROW ;
286328 if ( text == "typeof" ) return Token . TYPEOF ;
287329 break ;
288330 }
@@ -917,9 +959,9 @@ export class Tokenizer extends DiagnosticEmitter {
917959 if ( identifierHandling != IdentifierHandling . ALWAYS ) {
918960 let maybeKeywordToken = tokenFromKeyword ( text . substring ( posBefore , pos ) ) ;
919961 if (
920- maybeKeywordToken !== Token . INVALID &&
962+ maybeKeywordToken != Token . INVALID &&
921963 ! (
922- identifierHandling === IdentifierHandling . PREFER &&
964+ identifierHandling == IdentifierHandling . PREFER &&
923965 tokenIsAlsoIdentifier ( maybeKeywordToken )
924966 )
925967 ) {
0 commit comments