Skip to content

Commit 3b125ff

Browse files
committed
Add the DerefImm and DerefMut traits.
1 parent 19fadf6 commit 3b125ff

File tree

3 files changed

+26
-1
lines changed

3 files changed

+26
-1
lines changed

src/librustc/middle/lang_items.rs

+3
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,9 @@ lets_do_this! {
232232
ShrTraitLangItem, "shr", shr_trait;
233233
IndexTraitLangItem, "index", index_trait;
234234

235+
DerefTraitLangItem, "deref", deref_trait;
236+
DerefMutTraitLangItem, "deref_mut", deref_mut_trait;
237+
235238
EqTraitLangItem, "eq", eq_trait;
236239
OrdTraitLangItem, "ord", ord_trait;
237240

src/libstd/ops.rs

+22
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,28 @@ pub trait Index<Index,Result> {
464464
fn index(&self, index: &Index) -> Result;
465465
}
466466

467+
#[cfg(stage0)]
468+
pub trait Deref<Result> {
469+
fn deref<'a>(&'a self) -> &'a Result;
470+
}
471+
472+
#[cfg(not(stage0))]
473+
#[lang="deref"]
474+
pub trait Deref<Result> {
475+
fn deref<'a>(&'a self) -> &'a Result;
476+
}
477+
478+
#[cfg(stage0)]
479+
pub trait DerefMut<Result>: Deref<Result> {
480+
fn deref_mut<'a>(&'a mut self) -> &'a mut Result;
481+
}
482+
483+
#[cfg(not(stage0))]
484+
#[lang="deref_mut"]
485+
pub trait DerefMut<Result>: Deref<Result> {
486+
fn deref_mut<'a>(&'a mut self) -> &'a mut Result;
487+
}
488+
467489
#[cfg(test)]
468490
mod bench {
469491
extern crate test;

src/libstd/prelude.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ generally useful to many Rust programs.
2323
pub use kinds::{Freeze, Pod, Send, Sized};
2424
pub use ops::{Add, Sub, Mul, Div, Rem, Neg, Not};
2525
pub use ops::{BitAnd, BitOr, BitXor};
26-
pub use ops::{Drop};
26+
pub use ops::{Drop, Deref, DerefMut};
2727
pub use ops::{Shl, Shr, Index};
2828
pub use option::{Option, Some, None};
2929
pub use result::{Result, Ok, Err};

0 commit comments

Comments
 (0)