Skip to content

Commit cf8bfde

Browse files
committed
alloc: Stabilize rc module.
Weak pointers experimental. Most everything else stable.
1 parent 71f3d8f commit cf8bfde

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

src/liballoc/rc.rs

+18-1
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,8 @@ fn main() {
148148
149149
*/
150150

151+
#![stable]
152+
151153
use core::mem::transmute;
152154
use core::cell::Cell;
153155
use core::clone::Clone;
@@ -171,6 +173,7 @@ struct RcBox<T> {
171173

172174
/// Immutable reference counted pointer type
173175
#[unsafe_no_drop_flag]
176+
#[stable]
174177
pub struct Rc<T> {
175178
// FIXME #12808: strange names to try to avoid interfering with
176179
// field accesses of the contained type via Deref
@@ -179,6 +182,7 @@ pub struct Rc<T> {
179182
_noshare: marker::NoShare
180183
}
181184

185+
#[stable]
182186
impl<T> Rc<T> {
183187
/// Construct a new reference-counted box
184188
pub fn new(value: T) -> Rc<T> {
@@ -203,6 +207,7 @@ impl<T> Rc<T> {
203207

204208
impl<T> Rc<T> {
205209
/// Downgrade the reference-counted pointer to a weak reference
210+
#[experimental = "Weak pointers may not belong in this module."]
206211
pub fn downgrade(&self) -> Weak<T> {
207212
self.inc_weak();
208213
Weak {
@@ -238,6 +243,7 @@ impl<T: Clone> Rc<T> {
238243
}
239244
}
240245

246+
#[experimental = "Deref is experimental."]
241247
impl<T> Deref<T> for Rc<T> {
242248
/// Borrow the value contained in the reference-counted box
243249
#[inline(always)]
@@ -247,6 +253,7 @@ impl<T> Deref<T> for Rc<T> {
247253
}
248254

249255
#[unsafe_destructor]
256+
#[experimental = "Drop is experimental."]
250257
impl<T> Drop for Rc<T> {
251258
fn drop(&mut self) {
252259
unsafe {
@@ -269,7 +276,7 @@ impl<T> Drop for Rc<T> {
269276
}
270277
}
271278

272-
#[unstable]
279+
#[unstable = "Clone is unstable."]
273280
impl<T> Clone for Rc<T> {
274281
#[inline]
275282
fn clone(&self) -> Rc<T> {
@@ -278,22 +285,26 @@ impl<T> Clone for Rc<T> {
278285
}
279286
}
280287

288+
#[stable]
281289
impl<T: Default> Default for Rc<T> {
282290
#[inline]
283291
fn default() -> Rc<T> {
284292
Rc::new(Default::default())
285293
}
286294
}
287295

296+
#[unstable = "PartialEq is unstable."]
288297
impl<T: PartialEq> PartialEq for Rc<T> {
289298
#[inline(always)]
290299
fn eq(&self, other: &Rc<T>) -> bool { **self == **other }
291300
#[inline(always)]
292301
fn ne(&self, other: &Rc<T>) -> bool { **self != **other }
293302
}
294303

304+
#[unstable = "Eq is unstable."]
295305
impl<T: Eq> Eq for Rc<T> {}
296306

307+
#[unstable = "PartialOrd is unstable."]
297308
impl<T: PartialOrd> PartialOrd for Rc<T> {
298309
#[inline(always)]
299310
fn partial_cmp(&self, other: &Rc<T>) -> Option<Ordering> {
@@ -313,11 +324,13 @@ impl<T: PartialOrd> PartialOrd for Rc<T> {
313324
fn ge(&self, other: &Rc<T>) -> bool { **self >= **other }
314325
}
315326

327+
#[unstable = "Ord is unstable."]
316328
impl<T: Ord> Ord for Rc<T> {
317329
#[inline]
318330
fn cmp(&self, other: &Rc<T>) -> Ordering { (**self).cmp(&**other) }
319331
}
320332

333+
#[experimental = "Show is experimental."]
321334
impl<T: fmt::Show> fmt::Show for Rc<T> {
322335
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
323336
(**self).fmt(f)
@@ -326,6 +339,7 @@ impl<T: fmt::Show> fmt::Show for Rc<T> {
326339

327340
/// Weak reference to a reference-counted box
328341
#[unsafe_no_drop_flag]
342+
#[experimental = "Weak pointers may not belong in this module."]
329343
pub struct Weak<T> {
330344
// FIXME #12808: strange names to try to avoid interfering with
331345
// field accesses of the contained type via Deref
@@ -334,6 +348,7 @@ pub struct Weak<T> {
334348
_noshare: marker::NoShare
335349
}
336350

351+
#[experimental = "Weak pointers may not belong in this module."]
337352
impl<T> Weak<T> {
338353
/// Upgrade a weak reference to a strong reference
339354
pub fn upgrade(&self) -> Option<Rc<T>> {
@@ -347,6 +362,7 @@ impl<T> Weak<T> {
347362
}
348363

349364
#[unsafe_destructor]
365+
#[experimental = "Weak pointers may not belong in this module."]
350366
impl<T> Drop for Weak<T> {
351367
fn drop(&mut self) {
352368
unsafe {
@@ -364,6 +380,7 @@ impl<T> Drop for Weak<T> {
364380
}
365381

366382
#[unstable]
383+
#[experimental = "Weak pointers may not belong in this module."]
367384
impl<T> Clone for Weak<T> {
368385
#[inline]
369386
fn clone(&self) -> Weak<T> {

0 commit comments

Comments
 (0)