Skip to content

Commit d3f51dc

Browse files
committed
Allow passing self as an argument to methods
Part of UFCS (rust-lang#16293)
1 parent af99157 commit d3f51dc

File tree

3 files changed

+4
-22
lines changed

3 files changed

+4
-22
lines changed

src/librustc/middle/resolve.rs

-16
Original file line numberDiff line numberDiff line change
@@ -5751,22 +5751,6 @@ impl<'a> Resolver<'a> {
57515751
// Write the result into the def map.
57525752
debug!("(resolving expr) resolved `{}`",
57535753
self.path_idents_to_string(path));
5754-
5755-
// First-class methods are not supported yet; error
5756-
// out here.
5757-
match def {
5758-
(DefMethod(..), _) => {
5759-
self.resolve_error(expr.span,
5760-
"first-class methods \
5761-
are not supported");
5762-
self.session.span_note(expr.span,
5763-
"call the method \
5764-
using the `.` \
5765-
syntax");
5766-
}
5767-
_ => {}
5768-
}
5769-
57705754
self.record_def(expr.id, def);
57715755
}
57725756
None => {

src/librustc/middle/trans/callee.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ fn trans<'blk, 'tcx>(bcx: Block<'blk, 'tcx>, expr: &ast::Expr)
165165
let def_id = inline::maybe_instantiate_inline(bcx.ccx(), did);
166166
Callee { bcx: bcx, data: Intrinsic(def_id.node, substs) }
167167
}
168-
def::DefFn(did, _, _) |
168+
def::DefFn(did, _, _) | def::DefMethod(did, _) |
169169
def::DefStaticMethod(did, def::FromImpl(_), _) => {
170170
fn_callee(bcx, trans_fn_ref(bcx, did, ExprId(ref_expr.id)))
171171
}
@@ -205,7 +205,7 @@ fn trans<'blk, 'tcx>(bcx: Block<'blk, 'tcx>, expr: &ast::Expr)
205205
def::DefTy(..) | def::DefPrimTy(..) | def::DefAssociatedTy(..) |
206206
def::DefUse(..) | def::DefTyParamBinder(..) |
207207
def::DefRegion(..) | def::DefLabel(..) | def::DefTyParam(..) |
208-
def::DefSelfTy(..) | def::DefMethod(..) => {
208+
def::DefSelfTy(..) => {
209209
bcx.tcx().sess.span_bug(
210210
ref_expr.span,
211211
format!("cannot translate def {:?} \

src/librustc/middle/typeck/check/mod.rs

+2-4
Original file line numberDiff line numberDiff line change
@@ -5029,7 +5029,8 @@ pub fn polytype_for_def(fcx: &FnCtxt,
50295029
}
50305030
def::DefFn(id, _, _) | def::DefStaticMethod(id, _, _) |
50315031
def::DefStatic(id, _) | def::DefVariant(_, id, _) |
5032-
def::DefStruct(id) | def::DefConst(id) => {
5032+
def::DefStruct(id) | def::DefConst(id) |
5033+
def::DefMethod(id, _) => {
50335034
return ty::lookup_item_type(fcx.ccx.tcx, id);
50345035
}
50355036
def::DefTrait(_) |
@@ -5057,9 +5058,6 @@ pub fn polytype_for_def(fcx: &FnCtxt,
50575058
def::DefSelfTy(..) => {
50585059
fcx.ccx.tcx.sess.span_bug(sp, "expected value, found self ty");
50595060
}
5060-
def::DefMethod(..) => {
5061-
fcx.ccx.tcx.sess.span_bug(sp, "expected value, found method");
5062-
}
50635061
}
50645062
}
50655063

0 commit comments

Comments
 (0)