syntax: add IterBytes impls for some ast types
This commit is contained in:
parent
4bfe0f717f
commit
8d19f44c9d
2 changed files with 101 additions and 0 deletions
|
|
@ -17,6 +17,7 @@ use opt_vec::OptVec;
|
|||
use core::cast;
|
||||
use core::option::{None, Option, Some};
|
||||
use core::to_bytes;
|
||||
use core::to_bytes::IterBytes;
|
||||
use core::to_str::ToStr;
|
||||
use std::serialize::{Encodable, Decodable, Encoder, Decoder};
|
||||
|
||||
|
|
@ -121,6 +122,20 @@ pub struct Lifetime {
|
|||
ident: ident
|
||||
}
|
||||
|
||||
#[cfg(stage0)]
|
||||
impl to_bytes::IterBytes for Lifetime {
|
||||
fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) {
|
||||
to_bytes::iter_bytes_3(&self.id, &self.span, &self.ident, lsb0, f)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(not(stage0))]
|
||||
impl to_bytes::IterBytes for Lifetime {
|
||||
fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool {
|
||||
to_bytes::iter_bytes_3(&self.id, &self.span, &self.ident, lsb0, f)
|
||||
}
|
||||
}
|
||||
|
||||
// a "Path" is essentially Rust's notion of a name;
|
||||
// for instance: core::cmp::Eq . It's represented
|
||||
// as a sequence of identifiers, along with a bunch
|
||||
|
|
@ -1057,6 +1072,32 @@ pub enum self_ty_ {
|
|||
sty_uniq(mutability) // `~self`
|
||||
}
|
||||
|
||||
#[cfg(stage0)]
|
||||
impl to_bytes::IterBytes for self_ty_ {
|
||||
fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) {
|
||||
match *self {
|
||||
sty_static => 0u8.iter_bytes(lsb0, f),
|
||||
sty_value => 1u8.iter_bytes(lsb0, f),
|
||||
sty_region(ref lft, ref mutbl) => to_bytes::iter_bytes_3(&2u8, &lft, mutbl, lsb0, f),
|
||||
sty_box(ref mutbl) => to_bytes::iter_bytes_2(&3u8, mutbl, lsb0, f),
|
||||
sty_uniq(ref mutbl) => to_bytes::iter_bytes_2(&4u8, mutbl, lsb0, f),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(not(stage0))]
|
||||
impl to_bytes::IterBytes for self_ty_ {
|
||||
fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool {
|
||||
match *self {
|
||||
sty_static => 0u8.iter_bytes(lsb0, f),
|
||||
sty_value => 1u8.iter_bytes(lsb0, f),
|
||||
sty_region(ref lft, ref mutbl) => to_bytes::iter_bytes_3(&2u8, &lft, mutbl, lsb0, f),
|
||||
sty_box(ref mutbl) => to_bytes::iter_bytes_2(&3u8, mutbl, lsb0, f),
|
||||
sty_uniq(ref mutbl) => to_bytes::iter_bytes_2(&4u8, mutbl, lsb0, f),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub type self_ty = spanned<self_ty_>;
|
||||
|
||||
#[auto_encode]
|
||||
|
|
|
|||
|
|
@ -152,6 +152,20 @@ impl<D:Decoder> Decodable<D> for span {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(stage0)]
|
||||
impl to_bytes::IterBytes for span {
|
||||
fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) {
|
||||
to_bytes::iter_bytes_3(&self.lo, &self.hi, &self.expn_info, lsb0, f);
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(not(stage0))]
|
||||
impl to_bytes::IterBytes for span {
|
||||
fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool {
|
||||
to_bytes::iter_bytes_3(&self.lo, &self.hi, &self.expn_info, lsb0, f)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn spanned<T>(lo: BytePos, hi: BytePos, t: T) -> spanned<T> {
|
||||
respan(mk_sp(lo, hi), t)
|
||||
}
|
||||
|
|
@ -199,16 +213,62 @@ pub struct FileMapAndLine {fm: @FileMap, line: uint}
|
|||
pub struct FileMapAndBytePos {fm: @FileMap, pos: BytePos}
|
||||
pub struct NameAndSpan {name: ~str, span: Option<span>}
|
||||
|
||||
#[cfg(stage0)]
|
||||
impl to_bytes::IterBytes for NameAndSpan {
|
||||
fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) {
|
||||
to_bytes::iter_bytes_2(&self.name, &self.span, lsb0, f)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(not(stage0))]
|
||||
impl to_bytes::IterBytes for NameAndSpan {
|
||||
fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool {
|
||||
to_bytes::iter_bytes_2(&self.name, &self.span, lsb0, f)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct CallInfo {
|
||||
call_site: span,
|
||||
callee: NameAndSpan
|
||||
}
|
||||
|
||||
#[cfg(stage0)]
|
||||
impl to_bytes::IterBytes for CallInfo {
|
||||
fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) {
|
||||
to_bytes::iter_bytes_2(&self.call_site, &self.callee, lsb0, f)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(not(stage0))]
|
||||
impl to_bytes::IterBytes for CallInfo {
|
||||
fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool {
|
||||
to_bytes::iter_bytes_2(&self.call_site, &self.callee, lsb0, f)
|
||||
}
|
||||
}
|
||||
|
||||
/// Extra information for tracking macro expansion of spans
|
||||
pub enum ExpnInfo {
|
||||
ExpandedFrom(CallInfo)
|
||||
}
|
||||
|
||||
#[cfg(stage0)]
|
||||
impl to_bytes::IterBytes for ExpnInfo {
|
||||
fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) {
|
||||
match *self {
|
||||
ExpandedFrom(ref call_info) => to_bytes::iter_bytes_2(&0u8, call_info, lsb0, f)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(not(stage0))]
|
||||
impl to_bytes::IterBytes for ExpnInfo {
|
||||
fn iter_bytes(&self, lsb0: bool, f: to_bytes::Cb) -> bool {
|
||||
match *self {
|
||||
ExpandedFrom(ref call_info) => to_bytes::iter_bytes_2(&0u8, call_info, lsb0, f)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub type FileName = ~str;
|
||||
|
||||
pub struct FileLines
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue