use rustc_serialize::json::as_json;
use syntax::codemap::CodeMap;
-use rustc::hir::def_id::DefId;
-use syntax::ast::{CrateNum, NodeId};
+use syntax::ast::CrateNum;
use super::data::{self, SpanData};
use super::dump::Dump;
fn lower(self, cm: &CodeMap) -> Self::Target;
}
+pub type Id = u32;
+
#[derive(Debug, RustcEncodable)]
pub struct CratePreludeData {
pub crate_name: String,
/// Data for enum declarations.
#[derive(Clone, Debug, RustcEncodable)]
pub struct EnumData {
- pub id: NodeId,
+ pub id: Id,
pub value: String,
pub qualname: String,
pub span: SpanData,
- pub scope: NodeId,
+ pub scope: Id,
}
impl Lower for data::EnumData {
/// Data for extern crates.
#[derive(Debug, RustcEncodable)]
pub struct ExternCrateData {
- pub id: NodeId,
+ pub id: Id,
pub name: String,
pub crate_num: CrateNum,
pub location: String,
pub span: SpanData,
- pub scope: NodeId,
+ pub scope: Id,
}
impl Lower for data::ExternCrateData {
#[derive(Debug, RustcEncodable)]
pub struct FunctionCallData {
pub span: SpanData,
- pub scope: NodeId,
- pub ref_id: DefId,
+ pub scope: Id,
+ pub ref_id: Id,
}
impl Lower for data::FunctionCallData {
FunctionCallData {
span: SpanData::from_span(self.span, cm),
scope: self.scope,
- ref_id: self.ref_id,
+ ref_id: self.ref_id.index.as_u32(),
}
}
}
/// Data for all kinds of functions and methods.
#[derive(Clone, Debug, RustcEncodable)]
pub struct FunctionData {
- pub id: NodeId,
+ pub id: Id,
pub name: String,
pub qualname: String,
- pub declaration: Option<DefId>,
+ pub declaration: Option<Id>,
pub span: SpanData,
- pub scope: NodeId,
+ pub scope: Id,
}
impl Lower for data::FunctionData {
id: self.id,
name: self.name,
qualname: self.qualname,
- declaration: self.declaration,
+ declaration: self.declaration.map(|id| id.index.as_u32()),
span: SpanData::from_span(self.span, cm),
scope: self.scope,
}
#[derive(Debug, RustcEncodable)]
pub struct FunctionRefData {
pub span: SpanData,
- pub scope: NodeId,
- pub ref_id: DefId,
+ pub scope: Id,
+ pub ref_id: Id,
}
impl Lower for data::FunctionRefData {
FunctionRefData {
span: SpanData::from_span(self.span, cm),
scope: self.scope,
- ref_id: self.ref_id,
+ ref_id: self.ref_id.index.as_u32(),
}
}
}
#[derive(Debug, RustcEncodable)]
pub struct ImplData {
- pub id: NodeId,
+ pub id: Id,
pub span: SpanData,
- pub scope: NodeId,
- pub trait_ref: Option<DefId>,
- pub self_ref: Option<DefId>,
+ pub scope: Id,
+ pub trait_ref: Option<Id>,
+ pub self_ref: Option<Id>,
}
impl Lower for data::ImplData {
id: self.id,
span: SpanData::from_span(self.span, cm),
scope: self.scope,
- trait_ref: self.trait_ref,
- self_ref: self.self_ref,
+ trait_ref: self.trait_ref.map(|id| id.index.as_u32()),
+ self_ref: self.self_ref.map(|id| id.index.as_u32()),
}
}
}
#[derive(Debug, RustcEncodable)]
pub struct InheritanceData {
pub span: SpanData,
- pub base_id: DefId,
- pub deriv_id: NodeId
+ pub base_id: Id,
+ pub deriv_id: Id
}
impl Lower for data::InheritanceData {
fn lower(self, cm: &CodeMap) -> InheritanceData {
InheritanceData {
span: SpanData::from_span(self.span, cm),
- base_id: self.base_id,
+ base_id: self.base_id.index.as_u32(),
deriv_id: self.deriv_id
}
}
// Because macro expansion happens before ref-ids are determined,
// we use the callee span to reference the associated macro definition.
pub callee_span: SpanData,
- pub scope: NodeId,
+ pub scope: Id,
pub imported: bool,
}
#[derive(Debug, RustcEncodable)]
pub struct MethodCallData {
pub span: SpanData,
- pub scope: NodeId,
- pub ref_id: Option<DefId>,
- pub decl_id: Option<DefId>,
+ pub scope: Id,
+ pub ref_id: Option<Id>,
+ pub decl_id: Option<Id>,
}
impl Lower for data::MethodCallData {
MethodCallData {
span: SpanData::from_span(self.span, cm),
scope: self.scope,
- ref_id: self.ref_id,
- decl_id: self.decl_id,
+ ref_id: self.ref_id.map(|id| id.index.as_u32()),
+ decl_id: self.decl_id.map(|id| id.index.as_u32()),
}
}
}
/// Data for method declarations (methods with a body are treated as functions).
#[derive(Clone, Debug, RustcEncodable)]
pub struct MethodData {
- pub id: NodeId,
+ pub id: Id,
pub qualname: String,
pub span: SpanData,
- pub scope: NodeId,
+ pub scope: Id,
}
impl Lower for data::MethodData {
/// Data for modules.
#[derive(Debug, RustcEncodable)]
pub struct ModData {
- pub id: NodeId,
+ pub id: Id,
pub name: String,
pub qualname: String,
pub span: SpanData,
- pub scope: NodeId,
+ pub scope: Id,
pub filename: String,
}
#[derive(Debug, RustcEncodable)]
pub struct ModRefData {
pub span: SpanData,
- pub scope: NodeId,
- pub ref_id: Option<DefId>,
+ pub scope: Id,
+ pub ref_id: Option<Id>,
pub qualname: String
}
ModRefData {
span: SpanData::from_span(self.span, cm),
scope: self.scope,
- ref_id: self.ref_id,
+ ref_id: self.ref_id.map(|id| id.index.as_u32()),
qualname: self.qualname,
}
}
#[derive(Debug, RustcEncodable)]
pub struct StructData {
pub span: SpanData,
- pub id: NodeId,
- pub ctor_id: NodeId,
+ pub id: Id,
+ pub ctor_id: Id,
pub qualname: String,
- pub scope: NodeId,
+ pub scope: Id,
pub value: String
}
#[derive(Debug, RustcEncodable)]
pub struct StructVariantData {
pub span: SpanData,
- pub id: NodeId,
+ pub id: Id,
pub qualname: String,
pub type_value: String,
pub value: String,
- pub scope: NodeId
+ pub scope: Id
}
impl Lower for data::StructVariantData {
#[derive(Debug, RustcEncodable)]
pub struct TraitData {
pub span: SpanData,
- pub id: NodeId,
+ pub id: Id,
pub qualname: String,
- pub scope: NodeId,
+ pub scope: Id,
pub value: String
}
#[derive(Debug, RustcEncodable)]
pub struct TupleVariantData {
pub span: SpanData,
- pub id: NodeId,
+ pub id: Id,
pub name: String,
pub qualname: String,
pub type_value: String,
pub value: String,
- pub scope: NodeId,
+ pub scope: Id,
}
impl Lower for data::TupleVariantData {
/// Data for a typedef.
#[derive(Debug, RustcEncodable)]
pub struct TypedefData {
- pub id: NodeId,
+ pub id: Id,
pub span: SpanData,
pub qualname: String,
pub value: String,
#[derive(Clone, Debug, RustcEncodable)]
pub struct TypeRefData {
pub span: SpanData,
- pub scope: NodeId,
- pub ref_id: Option<DefId>,
+ pub scope: Id,
+ pub ref_id: Option<Id>,
pub qualname: String,
}
TypeRefData {
span: SpanData::from_span(self.span, cm),
scope: self.scope,
- ref_id: self.ref_id,
+ ref_id: self.ref_id.map(|id| id.index.as_u32()),
qualname: self.qualname,
}
}
#[derive(Debug, RustcEncodable)]
pub struct UseData {
- pub id: NodeId,
+ pub id: Id,
pub span: SpanData,
pub name: String,
- pub mod_id: Option<DefId>,
- pub scope: NodeId
+ pub mod_id: Option<Id>,
+ pub scope: Id
}
impl Lower for data::UseData {
id: self.id,
span: SpanData::from_span(self.span, cm),
name: self.name,
- mod_id: self.mod_id,
+ mod_id: self.mod_id.map(|id| id.index.as_u32()),
scope: self.scope,
}
}
#[derive(Debug, RustcEncodable)]
pub struct UseGlobData {
- pub id: NodeId,
+ pub id: Id,
pub span: SpanData,
pub names: Vec<String>,
- pub scope: NodeId
+ pub scope: Id
}
impl Lower for data::UseGlobData {
/// Data for local and global variables (consts and statics).
#[derive(Debug, RustcEncodable)]
pub struct VariableData {
- pub id: NodeId,
+ pub id: Id,
pub name: String,
pub qualname: String,
pub span: SpanData,
- pub scope: NodeId,
+ pub scope: Id,
pub value: String,
pub type_value: String,
}
pub struct VariableRefData {
pub name: String,
pub span: SpanData,
- pub scope: NodeId,
- pub ref_id: DefId,
+ pub scope: Id,
+ pub ref_id: Id,
}
impl Lower for data::VariableRefData {
name: self.name,
span: SpanData::from_span(self.span, cm),
scope: self.scope,
- ref_id: self.ref_id,
+ ref_id: self.ref_id.index.as_u32(),
}
}
}