未验证 提交 63ecd6aa 编写于 作者: M Masaki Hara

Prohibit parenthesized params in more types.

上级 bedd7da3
......@@ -161,10 +161,7 @@ pub fn ast_path_substs_for_ty(&self,
match item_segment.parameters {
hir::AngleBracketedParameters(_) => {}
hir::ParenthesizedParameters(..) => {
struct_span_err!(tcx.sess, span, E0214,
"parenthesized parameters may only be used with a trait")
.span_label(span, "only traits may use parentheses")
.emit();
self.prohibit_parenthesized_params(item_segment);
return Substs::for_item(tcx, def_id, |_, _| {
tcx.types.re_static
......@@ -948,6 +945,10 @@ fn qpath_to_ty(&self,
pub fn prohibit_type_params(&self, segments: &[hir::PathSegment]) {
for segment in segments {
if let hir::ParenthesizedParameters(_) = segment.parameters {
self.prohibit_parenthesized_params(segment);
break;
}
for typ in segment.parameters.types() {
struct_span_err!(self.tcx().sess, typ.span, E0109,
"type parameters are not allowed on this type")
......@@ -970,6 +971,15 @@ pub fn prohibit_type_params(&self, segments: &[hir::PathSegment]) {
}
}
pub fn prohibit_parenthesized_params(&self, segment: &hir::PathSegment) {
if let hir::ParenthesizedParameters(ref data) = segment.parameters {
struct_span_err!(self.tcx().sess, data.span, E0214,
"parenthesized parameters may only be used with a trait")
.span_label(data.span, "only traits may use parentheses")
.emit();
}
}
pub fn prohibit_projection(&self, span: Span) {
let mut err = struct_span_err!(self.tcx().sess, span, E0229,
"associated type bindings are not allowed here");
......
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
fn main() {
let s: String() = String::from("foo");
//~^ ERROR parenthesized parameters may only be used with a trait
let x: usize() = 1;
//~^ ERROR parenthesized parameters may only be used with a trait
let b: ::std::boxed()::Box<_> = Box::new(1);
//~^ ERROR parenthesized parameters may only be used with a trait
}
fn foo<X:Default>() {
let d : X() = Default::default();
//~^ ERROR parenthesized parameters may only be used with a trait
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册