refactor(compiler): remove unnecessary ! operators from lexer (#28055)
				
					
				
			When we added the strict null checks, the lexer had some `!` operators added to prevent the compilation from failing. This commit resolves this problem correctly and removes the hacks. Also the comment ``` // Note: this is always lowercase! ``` has been removed as it is no longer true. See #24571 PR Close #28055
This commit is contained in:
		
							parent
							
								
									673ac2945c
								
							
						
					
					
						commit
						1b0580a9ec
					
				| @ -36,11 +36,12 @@ export enum TokenType { | ||||
| } | ||||
| 
 | ||||
| export class Token { | ||||
|   constructor(public type: TokenType, public parts: string[], public sourceSpan: ParseSourceSpan) {} | ||||
|   constructor( | ||||
|       public type: TokenType|null, public parts: string[], public sourceSpan: ParseSourceSpan) {} | ||||
| } | ||||
| 
 | ||||
| export class TokenError extends ParseError { | ||||
|   constructor(errorMsg: string, public tokenType: TokenType, span: ParseSourceSpan) { | ||||
|   constructor(errorMsg: string, public tokenType: TokenType|null, span: ParseSourceSpan) { | ||||
|     super(span, errorMsg); | ||||
|   } | ||||
| } | ||||
| @ -86,16 +87,13 @@ class _Tokenizer { | ||||
|   private _length: number; | ||||
|   private _tokenizeIcu: boolean; | ||||
|   private _interpolationConfig: InterpolationConfig; | ||||
|   // Note: this is always lowercase!
 | ||||
|   private _peek: number = -1; | ||||
|   private _nextPeek: number = -1; | ||||
|   private _index: number = -1; | ||||
|   private _line: number = 0; | ||||
|   private _column: number = -1; | ||||
|   // TODO(issue/24571): remove '!'.
 | ||||
|   private _currentTokenStart !: ParseLocation; | ||||
|   // TODO(issue/24571): remove '!'.
 | ||||
|   private _currentTokenType !: TokenType; | ||||
|   private _currentTokenStart: ParseLocation|null = null; | ||||
|   private _currentTokenType: TokenType|null = null; | ||||
|   private _expansionCaseStack: TokenType[] = []; | ||||
|   private _inInterpolation: boolean = false; | ||||
| 
 | ||||
| @ -206,11 +204,21 @@ class _Tokenizer { | ||||
|   } | ||||
| 
 | ||||
|   private _endToken(parts: string[], end: ParseLocation = this._getLocation()): Token { | ||||
|     if (this._currentTokenStart === null) { | ||||
|       throw new TokenError( | ||||
|           'Programming error - attempted to end a token when there was no start to the token', | ||||
|           this._currentTokenType, this._getSpan(end, end)); | ||||
|     } | ||||
|     if (this._currentTokenType === null) { | ||||
|       throw new TokenError( | ||||
|           'Programming error - attempted to end a token which has no token type', null, | ||||
|           this._getSpan(this._currentTokenStart, end)); | ||||
|     } | ||||
|     const token = | ||||
|         new Token(this._currentTokenType, parts, new ParseSourceSpan(this._currentTokenStart, end)); | ||||
|     this.tokens.push(token); | ||||
|     this._currentTokenStart = null !; | ||||
|     this._currentTokenType = null !; | ||||
|     this._currentTokenStart = null; | ||||
|     this._currentTokenType = null; | ||||
|     return token; | ||||
|   } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user