@@ -8,8 +8,8 @@ use crate::ptr::P;
8
8
use crate :: util:: case:: Case ;
9
9
10
10
use rustc_data_structures:: stable_hasher:: { HashStable , StableHasher } ;
11
- use rustc_data_structures:: sync:: Lrc ;
12
11
use rustc_macros:: HashStable_Generic ;
12
+ use rustc_serialize:: { Decodable , Decoder , Encodable , Encoder } ;
13
13
use rustc_span:: symbol:: { kw, sym} ;
14
14
#[ allow( hidden_glob_reexports) ]
15
15
use rustc_span:: symbol:: { Ident , Symbol } ;
@@ -226,7 +226,23 @@ fn ident_can_begin_type(name: Symbol, span: Span, is_raw: bool) -> bool {
226
226
. contains ( & name)
227
227
}
228
228
229
- #[ derive( Clone , PartialEq , Encodable , Decodable , Debug , HashStable_Generic ) ]
229
+ // njn: comment
230
+ // rustc_index::newtype_index! {
231
+ // pub struct NtIndex {
232
+ // ENCODABLE = custom
233
+ // DEBUG_FORMAT = "NtIndex({})"
234
+ // }
235
+ // }
236
+
237
+ // njn: comment
238
+ // njn: name?
239
+ //#[derive(Clone, Copy)]
240
+ //pub struct Nt(NtIndex);
241
+
242
+ //impl Nt {
243
+ //}
244
+
245
+ #[ derive( Clone , Copy , PartialEq , Debug , HashStable_Generic ) ]
230
246
pub enum TokenKind {
231
247
/* Expression-operator symbols. */
232
248
Eq ,
@@ -280,6 +296,7 @@ pub enum TokenKind {
280
296
/// treat regular and interpolated lifetime identifiers in the same way.
281
297
Lifetime ( Symbol ) ,
282
298
299
+ // njn: update comment
283
300
/// An embedded AST node, as produced by a macro. This only exists for
284
301
/// historical reasons. We'd like to get rid of it, for multiple reasons.
285
302
/// - It's conceptually very strange. Saying a token can contain an AST
@@ -289,7 +306,8 @@ pub enum TokenKind {
289
306
/// - It prevents `Token` from implementing `Copy`.
290
307
/// It adds complexity and likely slows things down. Please don't add new
291
308
/// occurrences of this token kind!
292
- Interpolated ( Lrc < Nonterminal > ) ,
309
+ //Interpolated(Nt),
310
+ Interpolated ( & ' static Nonterminal ) ,
293
311
294
312
/// A doc comment token.
295
313
/// `Symbol` is the doc comment's data excluding its "quotes" (`///`, `/**`, etc)
@@ -299,7 +317,128 @@ pub enum TokenKind {
299
317
Eof ,
300
318
}
301
319
302
- #[ derive( Clone , PartialEq , Encodable , Decodable , Debug , HashStable_Generic ) ]
320
+ // njn: necessary?
321
+ impl < S : Encoder > Encodable < S > for TokenKind {
322
+ fn encode ( & self , s : & mut S ) {
323
+ match self {
324
+ Eq => s. emit_usize ( 0 ) ,
325
+ Lt => s. emit_usize ( 1 ) ,
326
+ Le => s. emit_usize ( 2 ) ,
327
+ EqEq => s. emit_usize ( 3 ) ,
328
+ Ne => s. emit_usize ( 4 ) ,
329
+ Ge => s. emit_usize ( 5 ) ,
330
+ Gt => s. emit_usize ( 6 ) ,
331
+ AndAnd => s. emit_usize ( 7 ) ,
332
+ OrOr => s. emit_usize ( 8 ) ,
333
+ Not => s. emit_usize ( 9 ) ,
334
+ Tilde => s. emit_usize ( 10 ) ,
335
+ BinOp ( tok) => {
336
+ s. emit_usize ( 11 ) ;
337
+ tok. encode ( s)
338
+ }
339
+ BinOpEq ( tok) => {
340
+ s. emit_usize ( 12 ) ;
341
+ tok. encode ( s)
342
+ }
343
+ At => s. emit_usize ( 13 ) ,
344
+ Dot => s. emit_usize ( 14 ) ,
345
+ DotDot => s. emit_usize ( 15 ) ,
346
+ DotDotDot => s. emit_usize ( 16 ) ,
347
+ DotDotEq => s. emit_usize ( 17 ) ,
348
+ Comma => s. emit_usize ( 18 ) ,
349
+ Semi => s. emit_usize ( 19 ) ,
350
+ Colon => s. emit_usize ( 20 ) ,
351
+ ModSep => s. emit_usize ( 21 ) ,
352
+ RArrow => s. emit_usize ( 22 ) ,
353
+ LArrow => s. emit_usize ( 23 ) ,
354
+ FatArrow => s. emit_usize ( 24 ) ,
355
+ Pound => s. emit_usize ( 25 ) ,
356
+ Dollar => s. emit_usize ( 26 ) ,
357
+ Question => s. emit_usize ( 27 ) ,
358
+ SingleQuote => s. emit_usize ( 28 ) ,
359
+ OpenDelim ( delim) => {
360
+ s. emit_usize ( 29 ) ;
361
+ delim. encode ( s)
362
+ }
363
+ CloseDelim ( delim) => {
364
+ s. emit_usize ( 30 ) ;
365
+ delim. encode ( s)
366
+ }
367
+ Literal ( lit) => {
368
+ s. emit_usize ( 31 ) ;
369
+ lit. encode ( s)
370
+ }
371
+ Ident ( name, is_raw) => {
372
+ s. emit_usize ( 32 ) ;
373
+ name. encode ( s) ;
374
+ is_raw. encode ( s)
375
+ }
376
+ Lifetime ( name) => {
377
+ s. emit_usize ( 33 ) ;
378
+ name. encode ( s)
379
+ }
380
+ Interpolated ( _nt) => {
381
+ s. emit_usize ( 34 ) ;
382
+ panic ! ( "njn: impossible?" ) ;
383
+ }
384
+ DocComment ( kind, style, sym) => {
385
+ s. emit_usize ( 35 ) ;
386
+ kind. encode ( s) ;
387
+ style. encode ( s) ;
388
+ sym. encode ( s)
389
+ }
390
+ Eof => s. emit_usize ( 36 ) ,
391
+ }
392
+ }
393
+ }
394
+
395
+ // njn: necessary?
396
+ impl < D : Decoder > Decodable < D > for TokenKind {
397
+ fn decode ( d : & mut D ) -> TokenKind {
398
+ match d. read_usize ( ) {
399
+ 0 => Eq ,
400
+ 1 => Lt ,
401
+ 2 => Le ,
402
+ 3 => EqEq ,
403
+ 4 => Ne ,
404
+ 5 => Ge ,
405
+ 6 => Gt ,
406
+ 7 => AndAnd ,
407
+ 8 => OrOr ,
408
+ 9 => Not ,
409
+ 10 => Tilde ,
410
+ 11 => BinOp ( Decodable :: decode ( d) ) ,
411
+ 12 => BinOpEq ( Decodable :: decode ( d) ) ,
412
+ 13 => At ,
413
+ 14 => Dot ,
414
+ 15 => DotDot ,
415
+ 16 => DotDotDot ,
416
+ 17 => DotDotEq ,
417
+ 18 => Comma ,
418
+ 19 => Semi ,
419
+ 20 => Colon ,
420
+ 21 => ModSep ,
421
+ 22 => RArrow ,
422
+ 23 => LArrow ,
423
+ 24 => FatArrow ,
424
+ 25 => Pound ,
425
+ 26 => Dollar ,
426
+ 27 => Question ,
427
+ 28 => SingleQuote ,
428
+ 29 => OpenDelim ( Decodable :: decode ( d) ) ,
429
+ 30 => CloseDelim ( Decodable :: decode ( d) ) ,
430
+ 31 => Literal ( Decodable :: decode ( d) ) ,
431
+ 32 => Ident ( Decodable :: decode ( d) , Decodable :: decode ( d) ) ,
432
+ 33 => Lifetime ( Decodable :: decode ( d) ) ,
433
+ 34 => panic ! ( "njn: unreachable?" ) ,
434
+ 35 => DocComment ( Decodable :: decode ( d) , Decodable :: decode ( d) , Decodable :: decode ( d) ) ,
435
+ 36 => Eof ,
436
+ _ => panic ! ( "njn: bad" ) ,
437
+ }
438
+ }
439
+ }
440
+
441
+ #[ derive( Clone , Copy , PartialEq , Encodable , Decodable , Debug , HashStable_Generic ) ]
303
442
pub struct Token {
304
443
pub kind : TokenKind ,
305
444
pub span : Span ,
0 commit comments