Skip to content

Commit e77c00e

Browse files
committed
---
yaml --- r: 39405 b: refs/heads/incoming c: 53b181d h: refs/heads/master i: 39403: 9c2860d v: v3
1 parent 8a3b811 commit e77c00e

File tree

3 files changed

+38
-2
lines changed

3 files changed

+38
-2
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ refs/heads/try: 3d5418789064fdb463e872a4e651af1c628a3650
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
88
refs/heads/try2: a810c03263670238bccd64cabb12a23a46e3a278
9-
refs/heads/incoming: bdb2d659aec65c7f39b7f58dc917d61d51bb0f97
9+
refs/heads/incoming: 53b181dd47b9a10583bb9b300acc8b3ba9f56717
1010
refs/heads/dist-snap: 22efa39382d41b084fde1719df7ae8ce5697d8c9
1111
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1212
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/incoming/src/librustc/middle/lint.rs

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ enum lint {
6565
non_camel_case_types,
6666
structural_records,
6767
type_limits,
68+
default_methods,
6869

6970
managed_heap_memory,
7071
owned_heap_memory,
@@ -200,7 +201,12 @@ fn get_lint_dict() -> lint_dict {
200201
(~"type_limits",
201202
@{lint: type_limits,
202203
desc: ~"comparisons made useless by limits of the types involved",
203-
default: warn})
204+
default: warn}),
205+
206+
(~"default_methods",
207+
@{lint: default_methods,
208+
desc: ~"allow default methods",
209+
default: forbid}),
204210

205211
/* FIXME(#3266)--make liveness warnings lintable
206212
(~"unused_variable",
@@ -414,6 +420,7 @@ fn check_item(i: @ast::item, cx: ty::ctxt) {
414420
check_item_structural_records(cx, i);
415421
check_item_deprecated_modes(cx, i);
416422
check_item_type_limits(cx, i);
423+
check_item_default_methods(cx, i);
417424
}
418425

419426
// Take a visitor, and modify it so that it will not proceed past subitems.
@@ -563,6 +570,27 @@ fn check_item_type_limits(cx: ty::ctxt, it: @ast::item) {
563570
visit::visit_item(it, (), visit);
564571
}
565572

573+
fn check_item_default_methods(cx: ty::ctxt, item: @ast::item) {
574+
match item.node {
575+
ast::item_trait(_, _, methods) => {
576+
for methods.each |method| {
577+
match *method {
578+
ast::required(*) => {}
579+
ast::provided(*) => {
580+
cx.sess.span_lint(
581+
default_methods,
582+
item.id,
583+
item.id,
584+
item.span,
585+
~"default methods are experimental");
586+
}
587+
}
588+
}
589+
}
590+
_ => {}
591+
}
592+
}
593+
566594
fn check_item_structural_records(cx: ty::ctxt, it: @ast::item) {
567595
let visit = item_stopping_visitor(visit::mk_simple_visitor(@{
568596
visit_expr: fn@(e: @ast::expr) {
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#[forbid(default_methods)];
2+
3+
trait Foo {
4+
fn bar() { io::println("hi"); } //~ ERROR default methods are experimental
5+
}
6+
7+
fn main() {}
8+

0 commit comments

Comments
 (0)