ast::TupleVariantKind(ref args) if args.len() > 0 => {
let rs = ExplicitRscope;
let input_tys: Vec<_> = args.iter().map(|va| ccx.to_ty(&rs, &*va.ty)).collect();
- ty::mk_ctor_fn(tcx, variant_def_id, input_tys.index(&FullRange), enum_ty)
+ ty::mk_ctor_fn(tcx, variant_def_id, &input_tys[], enum_ty)
}
ast::TupleVariantKind(_) => {
ccx,
trait_id,
&trait_def.generics,
- trait_items.index(&FullRange),
+ &trait_items[],
&m.id,
&m.ident.name,
&m.explicit_self,
ccx,
trait_id,
&trait_def.generics,
- trait_items.index(&FullRange),
+ &trait_items[],
&m.id,
&m.pe_ident().name,
m.pe_explicit_self(),
rcvr_ty_generics.repr(ccx.tcx));
let tcx = ccx.tcx;
- let mut seen_methods = FnvHashSet::new();
+ let mut seen_methods = FnvHashSet();
for m in ms {
if !seen_methods.insert(m.pe_ident().repr(tcx)) {
- tcx.sess.span_err(m.span, "duplicate method in trait impl");
+ span_err!(tcx.sess, m.span, E0201, "duplicate method in trait impl");
}
let m_def_id = local_def(m.id);
methods.push(&**method);
}
ast::TypeImplItem(ref typedef) => {
+ if opt_trait_ref.is_none() {
+ span_err!(tcx.sess, typedef.span, E0202,
+ "associated items are not allowed in inherent impls");
+ }
+
let typ = ccx.to_ty(&ExplicitRscope, &*typedef.typ);
tcx.tcache
.borrow_mut()
let tcx = ccx.tcx;
// Write the type of each of the members and check for duplicate fields.
- let mut seen_fields: FnvHashMap<ast::Name, Span> = FnvHashMap::new();
+ let mut seen_fields: FnvHashMap<ast::Name, Span> = FnvHashMap();
let field_tys = struct_def.fields.iter().map(|f| {
let result = convert_field(ccx, &scheme.generics, f, local_def(id));
local_def(field.node.id)].ty).collect();
let ctor_fn_ty = ty::mk_ctor_fn(tcx,
local_def(ctor_id),
- inputs.index(&FullRange),
+ &inputs[],
selfty);
write_ty_to_tcx(tcx, ctor_id, ctor_fn_ty);
tcx.tcache.borrow_mut().insert(local_def(ctor_id),
match ccx.tcx.map.get(trait_id.node) {
ast_map::NodeItem(item) => trait_def_of_item(ccx, &*item),
_ => {
- ccx.tcx.sess.bug(format!("get_trait_def({}): not an item",
- trait_id.node).index(&FullRange))
+ ccx.tcx.sess.bug(&format!("get_trait_def({}): not an item",
+ trait_id.node)[])
}
}
}
ref s => {
tcx.sess.span_bug(
it.span,
- format!("trait_def_of_item invoked on {:?}", s).index(&FullRange));
+ &format!("trait_def_of_item invoked on {:?}", s)[]);
}
};
-> ty::Generics<'tcx> {
ty_generics(ccx,
subst::TypeSpace,
- generics.lifetimes.index(&FullRange),
- generics.ty_params.index(&FullRange),
+ &generics.lifetimes[],
+ &generics.ty_params[],
ty::Generics::empty(),
&generics.where_clause)
}
let mut generics =
ty_generics(ccx,
subst::TypeSpace,
- ast_generics.lifetimes.index(&FullRange),
- ast_generics.ty_params.index(&FullRange),
+ &ast_generics.lifetimes[],
+ &ast_generics.ty_params[],
ty::Generics::empty(),
&ast_generics.where_clause);
let early_lifetimes = resolve_lifetime::early_bound_lifetimes(generics);
ty_generics(ccx,
subst::FnSpace,
- early_lifetimes.index(&FullRange),
- generics.ty_params.index(&FullRange),
+ &early_lifetimes[],
+ &generics.ty_params[],
base_generics,
&generics.where_clause)
}
assert!(ptr.bound_lifetimes.is_empty());
unbound = Some(ptr.trait_ref.clone());
} else {
- ccx.tcx.sess.span_err(span, "type parameter has more than one relaxed default \
+ span_err!(ccx.tcx.sess, span, E0203,
+ "type parameter has more than one relaxed default \
bound, only one is supported");
}
}
let param_ty = ty::ParamTy::new(space, index, param.ident.name);
let bounds = compute_bounds(ccx,
param_ty.to_ty(ccx.tcx),
- param.bounds.index(&FullRange),
+ ¶m.bounds[],
SizedByDefault::Yes,
param.span);
let default = match param.default {
if !param_bounds.builtin_bounds.contains(&ty::BoundSized) {
ty::each_bound_trait_and_supertraits(
tcx,
- param_bounds.trait_bounds.index(&FullRange),
+ ¶m_bounds.trait_bounds[],
|trait_ref| {
let trait_def = ty::lookup_trait_def(tcx, trait_ref.def_id());
if trait_def.bounds.builtin_bounds.contains(&ty::BoundSized) {
let output = match decl.output {
ast::Return(ref ty) =>
ty::FnConverging(ast_ty_to_ty(ccx, &rb, &**ty)),
- ast::NoReturn(_) =>
+ ast::DefaultReturn(..) =>
+ ty::FnConverging(ty::mk_nil(ccx.tcx)),
+ ast::NoReturn(..) =>
ty::FnDiverging
};
impl trait, self type, or predicates",
param_ty.user_string(tcx)).as_slice());
} else {
- tcx.sess.span_err(
- ty_param.span,
- format!("the type parameter `{}` is not constrained by the \
+ span_err!(tcx.sess, ty_param.span, E0207,
+ "the type parameter `{}` is not constrained by the \
impl trait, self type, or predicates",
- param_ty.user_string(tcx)).as_slice());
+ param_ty.user_string(tcx));
tcx.sess.span_help(
ty_param.span,
format!("you can temporarily opt out of this rule by placing \