Skip to content

Commit b2c9462

Browse files
committed
Prepare more for new proc_macro API
* Move storage of `Span` information on `Literal` and `Term` into the stable/unstable layers as the unstable one will soon encompass this * Remove `PartialEq` for `Span` as it's being replaced by an `eq` method.
1 parent b28f38a commit b2c9462

File tree

3 files changed

+111
-102
lines changed

3 files changed

+111
-102
lines changed

src/lib.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,6 @@ pub struct LineColumn {
169169
}
170170

171171
#[derive(Copy, Clone)]
172-
#[cfg_attr(procmacro2_semver_exempt, derive(PartialEq, Eq))]
173172
pub struct Span {
174173
inner: imp::Span,
175174
_marker: marker::PhantomData<Rc<()>>,
@@ -239,6 +238,11 @@ impl Span {
239238
pub fn join(&self, other: Span) -> Option<Span> {
240239
self.inner.join(other.inner).map(Span::_new)
241240
}
241+
242+
#[cfg(procmacro2_semver_exempt)]
243+
pub fn eq(&self, other: &Span) -> bool {
244+
self.inner.eq(&other.inner)
245+
}
242246
}
243247

244248
impl fmt::Debug for Span {
@@ -405,33 +409,31 @@ impl fmt::Display for Op {
405409
#[derive(Copy, Clone)]
406410
pub struct Term {
407411
inner: imp::Term,
408-
span: Span,
409412
_marker: marker::PhantomData<Rc<()>>,
410413
}
411414

412415
impl Term {
413-
fn _new(inner: imp::Term, span: Span) -> Term {
416+
fn _new(inner: imp::Term) -> Term {
414417
Term {
415418
inner: inner,
416-
span: span,
417419
_marker: marker::PhantomData,
418420
}
419421
}
420422

421423
pub fn new(string: &str, span: Span) -> Term {
422-
Term::_new(imp::Term::intern(string), span)
424+
Term::_new(imp::Term::new(string, span.inner))
423425
}
424426

425427
pub fn as_str(&self) -> &str {
426428
self.inner.as_str()
427429
}
428430

429431
pub fn span(&self) -> Span {
430-
self.span
432+
Span::_new(self.inner.span())
431433
}
432434

433435
pub fn set_span(&mut self, span: Span) {
434-
self.span = span;
436+
self.inner.set_span(span.inner);
435437
}
436438
}
437439

@@ -450,7 +452,6 @@ impl fmt::Debug for Term {
450452
#[derive(Clone)]
451453
pub struct Literal {
452454
inner: imp::Literal,
453-
span: Span,
454455
_marker: marker::PhantomData<Rc<()>>,
455456
}
456457

@@ -476,7 +477,6 @@ impl Literal {
476477
fn _new(inner: imp::Literal) -> Literal {
477478
Literal {
478479
inner: inner,
479-
span: Span::call_site(),
480480
_marker: marker::PhantomData,
481481
}
482482
}
@@ -540,11 +540,11 @@ impl Literal {
540540
}
541541

542542
pub fn span(&self) -> Span {
543-
self.span
543+
Span::_new(self.inner.span())
544544
}
545545

546546
pub fn set_span(&mut self, span: Span) {
547-
self.span = span;
547+
self.inner.set_span(span.inner);
548548
}
549549
}
550550

src/stable.rs

Lines changed: 39 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ use std::cmp;
88
use std::collections::HashMap;
99
use std::fmt;
1010
use std::iter;
11-
use std::marker::PhantomData;
1211
use std::rc::Rc;
1312
use std::str::FromStr;
1413
use std::vec;
@@ -105,13 +104,7 @@ impl fmt::Display for TokenStream {
105104
Spacing::Joint => joint = true,
106105
}
107106
}
108-
TokenTree::Literal(ref tt) => {
109-
write!(f, "{}", tt)?;
110-
// handle comments
111-
if tt.inner.0.starts_with("/") {
112-
write!(f, "\n")?;
113-
}
114-
}
107+
TokenTree::Literal(ref tt) => write!(f, "{}", tt)?,
115108
}
116109
}
117110

@@ -404,16 +397,16 @@ impl Span {
404397
#[derive(Copy, Clone)]
405398
pub struct Term {
406399
intern: usize,
407-
not_send_sync: PhantomData<*const ()>,
400+
span: Span,
408401
}
409402

410403
thread_local!(static SYMBOLS: RefCell<Interner> = RefCell::new(Interner::new()));
411404

412405
impl Term {
413-
pub fn intern(string: &str) -> Term {
406+
pub fn new(string: &str, span: Span) -> Term {
414407
Term {
415408
intern: SYMBOLS.with(|s| s.borrow_mut().intern(string)),
416-
not_send_sync: PhantomData,
409+
span,
417410
}
418411
}
419412

@@ -424,6 +417,14 @@ impl Term {
424417
unsafe { &*(s as *const str) }
425418
})
426419
}
420+
421+
pub fn span(&self) -> Span {
422+
self.span
423+
}
424+
425+
pub fn set_span(&mut self, span: Span) {
426+
self.span = span;
427+
}
427428
}
428429

429430
impl fmt::Debug for Term {
@@ -471,18 +472,28 @@ impl Interner {
471472
}
472473

473474
#[derive(Clone, Debug)]
474-
pub struct Literal(String);
475+
pub struct Literal {
476+
text: String,
477+
span: Span,
478+
}
475479

476480
impl Literal {
481+
fn _new(text: String) -> Literal {
482+
Literal {
483+
text,
484+
span: Span::call_site(),
485+
}
486+
}
487+
477488
pub fn byte_char(byte: u8) -> Literal {
478489
match byte {
479-
0 => Literal(format!("b'\\0'")),
480-
b'\"' => Literal(format!("b'\"'")),
490+
0 => Literal::_new(format!("b'\\0'")),
491+
b'\"' => Literal::_new(format!("b'\"'")),
481492
n => {
482493
let mut escaped = "b'".to_string();
483494
escaped.extend(ascii::escape_default(n).map(|c| c as char));
484495
escaped.push('\'');
485-
Literal(escaped)
496+
Literal::_new(escaped)
486497
}
487498
}
488499
}
@@ -502,11 +513,7 @@ impl Literal {
502513
}
503514
}
504515
escaped.push('"');
505-
Literal(escaped)
506-
}
507-
508-
pub fn doccomment(s: &str) -> Literal {
509-
Literal(s.to_string())
516+
Literal::_new(escaped)
510517
}
511518

512519
pub fn float(n: f64) -> Literal {
@@ -517,45 +524,33 @@ impl Literal {
517524
if !s.contains('.') {
518525
s += ".0";
519526
}
520-
Literal(s)
527+
Literal::_new(s)
521528
}
522529

523530
pub fn integer(s: i64) -> Literal {
524-
Literal(s.to_string())
531+
Literal::_new(s.to_string())
525532
}
526533

527-
pub fn raw_string(s: &str, pounds: usize) -> Literal {
528-
let mut ret = format!("r");
529-
ret.extend((0..pounds).map(|_| "#"));
530-
ret.push('"');
531-
ret.push_str(s);
532-
ret.push('"');
533-
ret.extend((0..pounds).map(|_| "#"));
534-
Literal(ret)
534+
pub fn span(&self) -> Span {
535+
self.span
535536
}
536537

537-
pub fn raw_byte_string(s: &str, pounds: usize) -> Literal {
538-
let mut ret = format!("br");
539-
ret.extend((0..pounds).map(|_| "#"));
540-
ret.push('"');
541-
ret.push_str(s);
542-
ret.push('"');
543-
ret.extend((0..pounds).map(|_| "#"));
544-
Literal(ret)
538+
pub fn set_span(&mut self, span: Span) {
539+
self.span = span;
545540
}
546541
}
547542

548543
impl fmt::Display for Literal {
549544
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
550-
self.0.fmt(f)
545+
self.text.fmt(f)
551546
}
552547
}
553548

554549
macro_rules! ints {
555550
($($t:ty,)*) => {$(
556551
impl From<$t> for Literal {
557552
fn from(t: $t) -> Literal {
558-
Literal(format!(concat!("{}", stringify!($t)), t))
553+
Literal::_new(format!(concat!("{}", stringify!($t)), t))
559554
}
560555
}
561556
)*}
@@ -572,7 +567,7 @@ macro_rules! floats {
572567
fn from(t: $t) -> Literal {
573568
assert!(!t.is_nan());
574569
assert!(!t.is_infinite());
575-
Literal(format!(concat!("{}", stringify!($t)), t))
570+
Literal::_new(format!(concat!("{}", stringify!($t)), t))
576571
}
577572
}
578573
)*}
@@ -589,13 +584,13 @@ impl<'a> From<&'a str> for Literal {
589584
.collect::<String>();
590585
s.push('"');
591586
s.insert(0, '"');
592-
Literal(s)
587+
Literal::_new(s)
593588
}
594589
}
595590

596591
impl From<char> for Literal {
597592
fn from(t: char) -> Literal {
598-
Literal(format!("'{}'", t.escape_default().collect::<String>()))
593+
Literal::_new(format!("'{}'", t.escape_default().collect::<String>()))
599594
}
600595
}
601596

@@ -710,7 +705,7 @@ fn literal(input: Cursor) -> PResult<::Literal> {
710705
let end = start + len;
711706
Ok((
712707
a,
713-
::Literal::_new(Literal(input.rest[start..end].to_string())),
708+
::Literal::_new(Literal::_new(input.rest[start..end].to_string())),
714709
))
715710
}
716711
Err(LexError) => Err(LexError),

0 commit comments

Comments
 (0)