1
1
// @flow strict
2
2
3
- import defineToJSON from '../jsutils/defineToJSON' ;
4
-
5
3
import { syntaxError } from '../error/syntaxError' ;
6
4
7
- import { type Token } from './ast' ;
5
+ import { Token } from './ast' ;
8
6
import { type Source } from './source' ;
9
7
import { dedentBlockStringValue } from './blockString' ;
10
8
import { type TokenKindEnum , TokenKind } from './tokenKind' ;
@@ -41,7 +39,7 @@ export class Lexer {
41
39
lineStart : number ;
42
40
43
41
constructor ( source : Source ) {
44
- const startOfFileToken = new Tok ( TokenKind . SOF , 0 , 0 , 0 , 0 , null ) ;
42
+ const startOfFileToken = new Token ( TokenKind . SOF , 0 , 0 , 0 , 0 , null ) ;
45
43
46
44
this . source = source ;
47
45
this . lastToken = startOfFileToken ;
@@ -97,38 +95,6 @@ export function isPunctuatorTokenKind(kind: TokenKindEnum) {
97
95
) ;
98
96
}
99
97
100
- /**
101
- * Helper function for constructing the Token object.
102
- */
103
- function Tok (
104
- kind : TokenKindEnum ,
105
- start : number ,
106
- end : number ,
107
- line : number ,
108
- column : number ,
109
- prev : Token | null ,
110
- value ?: string ,
111
- ) {
112
- this . kind = kind ;
113
- this . start = start ;
114
- this . end = end ;
115
- this . line = line ;
116
- this . column = column ;
117
- this . value = value ;
118
- this . prev = prev ;
119
- this . next = null ;
120
- }
121
-
122
- // Print a simplified form when appearing in JSON/util.inspect.
123
- defineToJSON ( Tok , function ( ) {
124
- return {
125
- kind : this . kind ,
126
- value : this . value ,
127
- line : this . line ,
128
- column : this . column ,
129
- } ;
130
- } ) ;
131
-
132
98
function printCharCode ( code ) {
133
99
return (
134
100
// NaN/undefined represents access beyond the end of the file.
@@ -159,7 +125,7 @@ function readToken(lexer: Lexer, prev: Token): Token {
159
125
const col = 1 + pos - lexer . lineStart ;
160
126
161
127
if ( pos >= bodyLength ) {
162
- return new Tok ( TokenKind . EOF , bodyLength , bodyLength , line , col , prev ) ;
128
+ return new Token ( TokenKind . EOF , bodyLength , bodyLength , line , col , prev ) ;
163
129
}
164
130
165
131
const code = body . charCodeAt ( pos ) ;
@@ -168,52 +134,52 @@ function readToken(lexer: Lexer, prev: Token): Token {
168
134
switch ( code ) {
169
135
// !
170
136
case 33 :
171
- return new Tok ( TokenKind . BANG , pos , pos + 1 , line , col , prev ) ;
137
+ return new Token ( TokenKind . BANG , pos , pos + 1 , line , col , prev ) ;
172
138
// #
173
139
case 35 :
174
140
return readComment ( source , pos , line , col , prev ) ;
175
141
// $
176
142
case 36 :
177
- return new Tok ( TokenKind . DOLLAR , pos , pos + 1 , line , col , prev ) ;
143
+ return new Token ( TokenKind . DOLLAR , pos , pos + 1 , line , col , prev ) ;
178
144
// &
179
145
case 38 :
180
- return new Tok ( TokenKind . AMP , pos , pos + 1 , line , col , prev ) ;
146
+ return new Token ( TokenKind . AMP , pos , pos + 1 , line , col , prev ) ;
181
147
// (
182
148
case 40 :
183
- return new Tok ( TokenKind . PAREN_L , pos , pos + 1 , line , col , prev ) ;
149
+ return new Token ( TokenKind . PAREN_L , pos , pos + 1 , line , col , prev ) ;
184
150
// )
185
151
case 41 :
186
- return new Tok ( TokenKind . PAREN_R , pos , pos + 1 , line , col , prev ) ;
152
+ return new Token ( TokenKind . PAREN_R , pos , pos + 1 , line , col , prev ) ;
187
153
// .
188
154
case 46 :
189
155
if ( body . charCodeAt ( pos + 1 ) === 46 && body . charCodeAt ( pos + 2 ) === 46 ) {
190
- return new Tok ( TokenKind . SPREAD , pos , pos + 3 , line , col , prev ) ;
156
+ return new Token ( TokenKind . SPREAD , pos , pos + 3 , line , col , prev ) ;
191
157
}
192
158
break ;
193
159
// :
194
160
case 58 :
195
- return new Tok ( TokenKind . COLON , pos , pos + 1 , line , col , prev ) ;
161
+ return new Token ( TokenKind . COLON , pos , pos + 1 , line , col , prev ) ;
196
162
// =
197
163
case 61 :
198
- return new Tok ( TokenKind . EQUALS , pos , pos + 1 , line , col , prev ) ;
164
+ return new Token ( TokenKind . EQUALS , pos , pos + 1 , line , col , prev ) ;
199
165
// @
200
166
case 64 :
201
- return new Tok ( TokenKind . AT , pos , pos + 1 , line , col , prev ) ;
167
+ return new Token ( TokenKind . AT , pos , pos + 1 , line , col , prev ) ;
202
168
// [
203
169
case 91 :
204
- return new Tok ( TokenKind . BRACKET_L , pos , pos + 1 , line , col , prev ) ;
170
+ return new Token ( TokenKind . BRACKET_L , pos , pos + 1 , line , col , prev ) ;
205
171
// ]
206
172
case 93 :
207
- return new Tok ( TokenKind . BRACKET_R , pos , pos + 1 , line , col , prev ) ;
173
+ return new Token ( TokenKind . BRACKET_R , pos , pos + 1 , line , col , prev ) ;
208
174
// {
209
175
case 123 :
210
- return new Tok ( TokenKind . BRACE_L , pos , pos + 1 , line , col , prev ) ;
176
+ return new Token ( TokenKind . BRACE_L , pos , pos + 1 , line , col , prev ) ;
211
177
// |
212
178
case 124 :
213
- return new Tok ( TokenKind . PIPE , pos , pos + 1 , line , col , prev ) ;
179
+ return new Token ( TokenKind . PIPE , pos , pos + 1 , line , col , prev ) ;
214
180
// }
215
181
case 125 :
216
- return new Tok ( TokenKind . BRACE_R , pos , pos + 1 , line , col , prev ) ;
182
+ return new Token ( TokenKind . BRACE_R , pos , pos + 1 , line , col , prev ) ;
217
183
// A-Z _ a-z
218
184
case 65 :
219
185
case 66 :
@@ -364,7 +330,7 @@ function readComment(source, start, line, col, prev): Token {
364
330
( code > 0x001f || code === 0x0009 )
365
331
) ;
366
332
367
- return new Tok (
333
+ return new Token (
368
334
TokenKind . COMMENT ,
369
335
start ,
370
336
position ,
@@ -439,7 +405,7 @@ function readNumber(source, start, firstCode, line, col, prev): Token {
439
405
) ;
440
406
}
441
407
442
- return new Tok (
408
+ return new Token (
443
409
isFloat ? TokenKind . FLOAT : TokenKind . INT ,
444
410
start ,
445
411
position ,
@@ -493,7 +459,7 @@ function readString(source, start, line, col, prev): Token {
493
459
// Closing Quote (")
494
460
if ( code === 34 ) {
495
461
value += body . slice ( chunkStart , position ) ;
496
- return new Tok (
462
+ return new Token (
497
463
TokenKind . STRING ,
498
464
start ,
499
465
position + 1 ,
@@ -600,7 +566,7 @@ function readBlockString(source, start, line, col, prev, lexer): Token {
600
566
body . charCodeAt ( position + 2 ) === 34
601
567
) {
602
568
rawValue += body . slice ( chunkStart , position ) ;
603
- return new Tok (
569
+ return new Token (
604
570
TokenKind . BLOCK_STRING ,
605
571
start ,
606
572
position + 3 ,
@@ -711,7 +677,7 @@ function readName(source, start, line, col, prev): Token {
711
677
) {
712
678
++ position ;
713
679
}
714
- return new Tok (
680
+ return new Token (
715
681
TokenKind . NAME ,
716
682
start ,
717
683
position ,
0 commit comments