|
10 | 10 |
|
11 | 11 | #|
|
12 | 12 |
|
13 |
| -mode : (or/c #f 'before-lang-line |
14 |
| - 'no-lang-line |
| 13 | +mode : (or/c #f |
| 14 | + before-lang-line? |
| 15 | + no-lang-line? |
15 | 16 | (cons lexer mode)
|
16 | 17 | lexer)
|
17 | 18 |
|
18 | 19 | the module lexer tracks any white-space and comments before
|
19 | 20 | the #lang line (if any) explicitly by wrapping calls to the
|
20 |
| -scheme-lexer (in #f or 'before-lang-line mode). |
| 21 | +racket-lexer (in #f or before-lang-line mode). |
21 | 22 | Once it finds a non-white-space and non-comment
|
22 | 23 | token, it checks to see if there is a #lang line and, if so
|
23 | 24 | changes the mode to be the lexer that the #lang indicates,
|
24 | 25 | delegating to it (the last two modes listed above).
|
25 | 26 | If there is no #lang line, then it continues
|
26 |
| -to delegate to the scheme-lexer (in the 'no-lang-line mode). |
| 27 | +to delegate to the racket-lexer (in the no-lang-line mode). |
27 | 28 |
|
28 | 29 | |#
|
29 | 30 |
|
30 | 31 | (struct before-lang-line (racket-lexer-mode) #:prefab)
|
| 32 | +(struct no-lang-line (racket-lexer-mode) #:prefab) |
31 | 33 | (define (do-module-lexer* in offset mode can-return-attribs-hash? filter-lexer)
|
32 | 34 | (cond
|
33 | 35 | [(or (not mode) (before-lang-line? mode))
|
@@ -114,17 +116,17 @@ to delegate to the scheme-lexer (in the 'no-lang-line mode).
|
114 | 116 | ;; sync ports
|
115 | 117 | (for ([i (in-range (file-position in) (file-position p))])
|
116 | 118 | (read-byte-or-special in))
|
117 |
| - (values lexeme 'error data new-token-start end-pos 0 'no-lang-line)] |
| 119 | + (values lexeme 'error data new-token-start end-pos 0 (no-lang-line #f))] |
118 | 120 | [else
|
119 | 121 | (for ([i (in-range (file-position in) (file-position lexer-port))])
|
120 | 122 | (read-byte-or-special in))
|
121 | 123 | (values lexeme
|
122 | 124 | (if can-return-attribs-hash? type (attribs->symbol type))
|
123 |
| - data new-token-start new-token-end 0 'no-lang-line)])])] |
124 |
| - [(eq? mode 'no-lang-line) |
125 |
| - (let-values ([(lexeme type data new-token-start new-token-end) |
126 |
| - (racket-lexer in)]) |
127 |
| - (values lexeme type data new-token-start new-token-end 0 'no-lang-line))] |
| 125 | + data new-token-start new-token-end 0 (no-lang-line #f))])])] |
| 126 | + [(no-lang-line? mode) |
| 127 | + (define-values (lexeme type data new-token-start new-token-end backup new-mode) |
| 128 | + (racket-lexer* in offset (no-lang-line-racket-lexer-mode mode))) |
| 129 | + (values lexeme type data new-token-start new-token-end backup (no-lang-line new-mode))] |
128 | 130 | [(pair? mode)
|
129 | 131 | ;; #lang-selected language consumes and produces a mode:
|
130 | 132 | (let-values ([(lexeme type data new-token-start new-token-end backup-delta new-mode)
|
|
0 commit comments