Skip to content

Commit 013e2f5

Browse files
committed
---
yaml --- r: 152443 b: refs/heads/try2 c: 4fecc50 h: refs/heads/master i: 152441: a0460f2 152439: 40e94ef v: v3
1 parent ba286e8 commit 013e2f5

File tree

140 files changed

+1225
-2246
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

140 files changed

+1225
-2246
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ refs/heads/snap-stage3: 78a7676898d9f80ab540c6df5d4c9ce35bb50463
55
refs/heads/try: 519addf6277dbafccbb4159db4b710c37eaa2ec5
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
8-
refs/heads/try2: 4fdc27e55ec9cda0ab5315701a96d25e720ce2c3
8+
refs/heads/try2: 4fecc503ee6f4fcd97d0d9421bfed279dd67ac6c
99
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/try2/mk/docs.mk

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -273,18 +273,14 @@ LIB_DOC_DEP_$(1) = \
273273
$$(RSINPUTS_$(1)) \
274274
$$(RUSTDOC_EXE) \
275275
$$(foreach dep,$$(RUST_DEPS_$(1)), \
276-
$$(TLIB2_T_$(CFG_BUILD)_H_$(CFG_BUILD))/stamp.$$(dep) \
277-
doc/$$(dep)/)
276+
$$(TLIB2_T_$(CFG_BUILD)_H_$(CFG_BUILD))/stamp.$$(dep))
278277
else
279278
LIB_DOC_DEP_$(1) = $$(CRATEFILE_$(1)) $$(RSINPUTS_$(1))
280279
endif
281280

282-
doc/$(1)/:
283-
$$(Q)mkdir -p $$@
284-
285281
$(2) += doc/$(1)/index.html
286282
doc/$(1)/index.html: CFG_COMPILER_HOST_TRIPLE = $(CFG_TARGET)
287-
doc/$(1)/index.html: $$(LIB_DOC_DEP_$(1)) doc/$(1)/
283+
doc/$(1)/index.html: $$(LIB_DOC_DEP_$(1))
288284
@$$(call E, rustdoc $$@)
289285
$$(Q)$$(RUSTDOC) --cfg dox --cfg stage2 $$<
290286
endef

branches/try2/src/compiletest/compiletest.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,6 @@ pub fn test_opts(config: &Config) -> test::TestOpts {
292292
save_metrics: config.save_metrics.clone(),
293293
test_shard: config.test_shard.clone(),
294294
nocapture: false,
295-
color: test::AutoColor,
296295
}
297296
}
298297

branches/try2/src/compiletest/procsrv.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
use std::os;
1212
use std::str;
1313
use std::io::process::{ProcessExit, Command, Process, ProcessOutput};
14-
use std::dynamic_lib::DynamicLibrary;
14+
use std::unstable::dynamic_lib::DynamicLibrary;
1515

1616
fn target_env(lib_path: &str, prog: &str) -> Vec<(String, String)> {
1717
let prog = if cfg!(windows) {prog.slice_to(prog.len() - 4)} else {prog};

branches/try2/src/liballoc/arc.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ impl<T: Share + Send> Drop for Arc<T> {
184184

185185
// This fence is needed to prevent reordering of use of the data and
186186
// deletion of the data. Because it is marked `Release`, the
187-
// decreasing of the reference count synchronizes with this `Acquire`
187+
// decreasing of the reference count sychronizes with this `Acquire`
188188
// fence. This means that use of the data happens before decreasing
189189
// the refernce count, which happens before this fence, which
190190
// happens before the deletion of the data.

branches/try2/src/libarena/lib.rs

Lines changed: 67 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,8 @@ pub struct Arena {
8181
// The head is separated out from the list as a unbenchmarked
8282
// microoptimization, to avoid needing to case on the list to access the
8383
// head.
84-
head: RefCell<Chunk>,
85-
copy_head: RefCell<Chunk>,
84+
head: Chunk,
85+
copy_head: Chunk,
8686
chunks: RefCell<Vec<Chunk>>,
8787
}
8888

@@ -95,8 +95,8 @@ impl Arena {
9595
/// Allocate a new Arena with `initial_size` bytes preallocated.
9696
pub fn new_with_size(initial_size: uint) -> Arena {
9797
Arena {
98-
head: RefCell::new(chunk(initial_size, false)),
99-
copy_head: RefCell::new(chunk(initial_size, true)),
98+
head: chunk(initial_size, false),
99+
copy_head: chunk(initial_size, true),
100100
chunks: RefCell::new(Vec::new()),
101101
}
102102
}
@@ -114,7 +114,7 @@ fn chunk(size: uint, is_copy: bool) -> Chunk {
114114
impl Drop for Arena {
115115
fn drop(&mut self) {
116116
unsafe {
117-
destroy_chunk(&*self.head.borrow());
117+
destroy_chunk(&self.head);
118118
for chunk in self.chunks.borrow().iter() {
119119
if !chunk.is_copy.get() {
120120
destroy_chunk(chunk);
@@ -171,40 +171,38 @@ fn un_bitpack_tydesc_ptr(p: uint) -> (*TyDesc, bool) {
171171

172172
impl Arena {
173173
fn chunk_size(&self) -> uint {
174-
self.copy_head.borrow().capacity()
174+
self.copy_head.capacity()
175175
}
176-
177176
// Functions for the POD part of the arena
178-
fn alloc_copy_grow(&self, n_bytes: uint, align: uint) -> *u8 {
177+
fn alloc_copy_grow(&mut self, n_bytes: uint, align: uint) -> *u8 {
179178
// Allocate a new chunk.
180179
let new_min_chunk_size = cmp::max(n_bytes, self.chunk_size());
181-
self.chunks.borrow_mut().push(self.copy_head.borrow().clone());
182-
183-
*self.copy_head.borrow_mut() =
180+
self.chunks.borrow_mut().push(self.copy_head.clone());
181+
self.copy_head =
184182
chunk(num::next_power_of_two(new_min_chunk_size + 1u), true);
185183

186184
return self.alloc_copy_inner(n_bytes, align);
187185
}
188186

189187
#[inline]
190-
fn alloc_copy_inner(&self, n_bytes: uint, align: uint) -> *u8 {
191-
let start = round_up(self.copy_head.borrow().fill.get(), align);
192-
193-
let end = start + n_bytes;
194-
if end > self.chunk_size() {
195-
return self.alloc_copy_grow(n_bytes, align);
196-
}
188+
fn alloc_copy_inner(&mut self, n_bytes: uint, align: uint) -> *u8 {
189+
unsafe {
190+
let start = round_up(self.copy_head.fill.get(), align);
191+
let end = start + n_bytes;
192+
if end > self.chunk_size() {
193+
return self.alloc_copy_grow(n_bytes, align);
194+
}
195+
self.copy_head.fill.set(end);
197196

198-
let copy_head = self.copy_head.borrow();
199-
copy_head.fill.set(end);
197+
//debug!("idx = {}, size = {}, align = {}, fill = {}",
198+
// start, n_bytes, align, head.fill.get());
200199

201-
unsafe {
202-
copy_head.as_ptr().offset(start as int)
200+
self.copy_head.as_ptr().offset(start as int)
203201
}
204202
}
205203

206204
#[inline]
207-
fn alloc_copy<'a, T>(&'a self, op: || -> T) -> &'a T {
205+
fn alloc_copy<'a, T>(&'a mut self, op: || -> T) -> &'a T {
208206
unsafe {
209207
let ptr = self.alloc_copy_inner(mem::size_of::<T>(),
210208
mem::min_align_of::<T>());
@@ -215,48 +213,42 @@ impl Arena {
215213
}
216214

217215
// Functions for the non-POD part of the arena
218-
fn alloc_noncopy_grow(&self, n_bytes: uint, align: uint) -> (*u8, *u8) {
216+
fn alloc_noncopy_grow(&mut self, n_bytes: uint, align: uint)
217+
-> (*u8, *u8) {
219218
// Allocate a new chunk.
220219
let new_min_chunk_size = cmp::max(n_bytes, self.chunk_size());
221-
self.chunks.borrow_mut().push(self.head.borrow().clone());
222-
223-
*self.head.borrow_mut() =
220+
self.chunks.borrow_mut().push(self.head.clone());
221+
self.head =
224222
chunk(num::next_power_of_two(new_min_chunk_size + 1u), false);
225223

226224
return self.alloc_noncopy_inner(n_bytes, align);
227225
}
228226

229227
#[inline]
230-
fn alloc_noncopy_inner(&self, n_bytes: uint, align: uint) -> (*u8, *u8) {
231-
// Be careful to not maintain any `head` borrows active, because
232-
// `alloc_noncopy_grow` borrows it mutably.
233-
let (start, end, tydesc_start, head_capacity) = {
234-
let head = self.head.borrow();
235-
let fill = head.fill.get();
236-
237-
let tydesc_start = fill;
238-
let after_tydesc = fill + mem::size_of::<*TyDesc>();
228+
fn alloc_noncopy_inner(&mut self, n_bytes: uint, align: uint)
229+
-> (*u8, *u8) {
230+
unsafe {
231+
let tydesc_start = self.head.fill.get();
232+
let after_tydesc = self.head.fill.get() + mem::size_of::<*TyDesc>();
239233
let start = round_up(after_tydesc, align);
240234
let end = start + n_bytes;
241235

242-
(start, end, tydesc_start, head.capacity())
243-
};
236+
if end > self.head.capacity() {
237+
return self.alloc_noncopy_grow(n_bytes, align);
238+
}
244239

245-
if end > head_capacity {
246-
return self.alloc_noncopy_grow(n_bytes, align);
247-
}
240+
self.head.fill.set(round_up(end, mem::align_of::<*TyDesc>()));
248241

249-
let head = self.head.borrow();
250-
head.fill.set(round_up(end, mem::align_of::<*TyDesc>()));
242+
//debug!("idx = {}, size = {}, align = {}, fill = {}",
243+
// start, n_bytes, align, head.fill);
251244

252-
unsafe {
253-
let buf = head.as_ptr();
245+
let buf = self.head.as_ptr();
254246
return (buf.offset(tydesc_start as int), buf.offset(start as int));
255247
}
256248
}
257249

258250
#[inline]
259-
fn alloc_noncopy<'a, T>(&'a self, op: || -> T) -> &'a T {
251+
fn alloc_noncopy<'a, T>(&'a mut self, op: || -> T) -> &'a T {
260252
unsafe {
261253
let tydesc = get_tydesc::<T>();
262254
let (ty_ptr, ptr) =
@@ -282,10 +274,12 @@ impl Arena {
282274
#[inline]
283275
pub fn alloc<'a, T>(&'a self, op: || -> T) -> &'a T {
284276
unsafe {
277+
// FIXME #13933: Remove/justify all `&T` to `&mut T` transmutes
278+
let this: &mut Arena = mem::transmute::<&_, &mut _>(self);
285279
if intrinsics::needs_drop::<T>() {
286-
self.alloc_noncopy(op)
280+
this.alloc_noncopy(op)
287281
} else {
288-
self.alloc_copy(op)
282+
this.alloc_copy(op)
289283
}
290284
}
291285
}
@@ -304,20 +298,6 @@ fn test_arena_destructors() {
304298
}
305299
}
306300

307-
#[test]
308-
fn test_arena_alloc_nested() {
309-
struct Inner { value: uint }
310-
struct Outer<'a> { inner: &'a Inner }
311-
312-
let arena = Arena::new();
313-
314-
let result = arena.alloc(|| Outer {
315-
inner: arena.alloc(|| Inner { value: 10 })
316-
});
317-
318-
assert_eq!(result.inner.value, 10);
319-
}
320-
321301
#[test]
322302
#[should_fail]
323303
fn test_arena_destructors_fail() {
@@ -345,20 +325,19 @@ fn test_arena_destructors_fail() {
345325
/// run again for these objects.
346326
pub struct TypedArena<T> {
347327
/// A pointer to the next object to be allocated.
348-
ptr: Cell<*T>,
328+
ptr: *T,
349329

350330
/// A pointer to the end of the allocated area. When this pointer is
351331
/// reached, a new chunk is allocated.
352-
end: Cell<*T>,
332+
end: *T,
353333

354334
/// A pointer to the first arena segment.
355-
first: RefCell<TypedArenaChunkRef<T>>,
335+
first: Option<Box<TypedArenaChunk<T>>>,
356336
}
357-
type TypedArenaChunkRef<T> = Option<Box<TypedArenaChunk<T>>>;
358337

359338
struct TypedArenaChunk<T> {
360339
/// Pointer to the next arena segment.
361-
next: TypedArenaChunkRef<T>,
340+
next: Option<Box<TypedArenaChunk<T>>>,
362341

363342
/// The number of elements that this chunk can hold.
364343
capacity: uint,
@@ -444,52 +423,53 @@ impl<T> TypedArena<T> {
444423
pub fn with_capacity(capacity: uint) -> TypedArena<T> {
445424
let chunk = TypedArenaChunk::<T>::new(None, capacity);
446425
TypedArena {
447-
ptr: Cell::new(chunk.start() as *T),
448-
end: Cell::new(chunk.end() as *T),
449-
first: RefCell::new(Some(chunk)),
426+
ptr: chunk.start() as *T,
427+
end: chunk.end() as *T,
428+
first: Some(chunk),
450429
}
451430
}
452431

453432
/// Allocates an object in the TypedArena, returning a reference to it.
454433
#[inline]
455434
pub fn alloc<'a>(&'a self, object: T) -> &'a T {
456-
if self.ptr == self.end {
457-
self.grow()
458-
}
435+
unsafe {
436+
// FIXME #13933: Remove/justify all `&T` to `&mut T` transmutes
437+
let this: &mut TypedArena<T> = mem::transmute::<&_, &mut _>(self);
438+
if this.ptr == this.end {
439+
this.grow()
440+
}
459441

460-
let ptr: &'a T = unsafe {
461-
let ptr: &'a mut T = mem::transmute(self.ptr);
442+
let ptr: &'a mut T = mem::transmute(this.ptr);
462443
ptr::write(ptr, object);
463-
self.ptr.set(self.ptr.get().offset(1));
444+
this.ptr = this.ptr.offset(1);
445+
let ptr: &'a T = ptr;
464446
ptr
465-
};
466-
467-
ptr
447+
}
468448
}
469449

470450
/// Grows the arena.
471451
#[inline(never)]
472-
fn grow(&self) {
473-
let chunk = self.first.borrow_mut().take_unwrap();
452+
fn grow(&mut self) {
453+
let chunk = self.first.take_unwrap();
474454
let new_capacity = chunk.capacity.checked_mul(&2).unwrap();
475455
let chunk = TypedArenaChunk::<T>::new(Some(chunk), new_capacity);
476-
self.ptr.set(chunk.start() as *T);
477-
self.end.set(chunk.end() as *T);
478-
*self.first.borrow_mut() = Some(chunk)
456+
self.ptr = chunk.start() as *T;
457+
self.end = chunk.end() as *T;
458+
self.first = Some(chunk)
479459
}
480460
}
481461

482462
#[unsafe_destructor]
483463
impl<T> Drop for TypedArena<T> {
484464
fn drop(&mut self) {
485465
// Determine how much was filled.
486-
let start = self.first.borrow().get_ref().start() as uint;
487-
let end = self.ptr.get() as uint;
466+
let start = self.first.get_ref().start() as uint;
467+
let end = self.ptr as uint;
488468
let diff = (end - start) / mem::size_of::<T>();
489469

490470
// Pass that to the `destroy` method.
491471
unsafe {
492-
self.first.borrow_mut().get_mut_ref().destroy(diff)
472+
self.first.get_mut_ref().destroy(diff)
493473
}
494474
}
495475
}

branches/try2/src/libcollections/bitv.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
use core::prelude::*;
1414

1515
use core::cmp;
16-
use core::default::Default;
1716
use core::fmt;
1817
use core::iter::{Enumerate, Repeat, Map, Zip};
1918
use core::ops;
@@ -699,11 +698,6 @@ pub struct BitvSet {
699698
bitv: BigBitv
700699
}
701700

702-
impl Default for BitvSet {
703-
#[inline]
704-
fn default() -> BitvSet { BitvSet::new() }
705-
}
706-
707701
impl BitvSet {
708702
/// Creates a new bit vector set with initially no contents
709703
pub fn new() -> BitvSet {

branches/try2/src/libcollections/dlist.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
use core::prelude::*;
2525

2626
use alloc::owned::Box;
27-
use core::default::Default;
2827
use core::fmt;
2928
use core::iter;
3029
use core::mem;
@@ -263,11 +262,6 @@ impl<T> Deque<T> for DList<T> {
263262
}
264263
}
265264

266-
impl<T> Default for DList<T> {
267-
#[inline]
268-
fn default() -> DList<T> { DList::new() }
269-
}
270-
271265
impl<T> DList<T> {
272266
/// Create an empty DList
273267
#[inline]

0 commit comments

Comments
 (0)