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};
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
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]
}
}
+#[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)
}
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