about summary refs log tree commit diff
path: root/src
AgeCommit message (Collapse)AuthorLines
2013-08-26auto merge of #8766 : brson/rust/vecfromfn, r=alexcrichtonbors-4/+8
A recently-enabled test of this is causing valgrind failures.
2013-08-26std: Make vec::from_fn failure-safeBrian Anderson-4/+8
2013-08-26auto merge of #8488 : klutzy/rust/mingw-w64, r=brsonbors-40/+497
This patchset enables rustc to cross-build mingw-w64 outputs. Tested on mingw + mingw-w64 (mingw-builds, win64/seh/win32-threads/gcc-4.8.1). I also patched llvm to support Win64 stack unwinding. https://github.com/klutzy/llvm/commit/ebe22bdbcebc4f8342c4c7c50e3b61fa6c68c1ad I cross-built test/run-pass/smallest-hello-world.rs and confirmed it works. However, I also found something went wrong if I don't have custom `#[start]` routine.
2013-08-26auto merge of #8758 : pnkfelix/rust/fsk-more-oldvisit-ports, r=pnkfelixbors-77/+123
Further followup on #7081. There still remains writeback.rs, but I want to wait to investigate that one because I've seen `make check` issues with it in the past.
2013-08-26auto merge of #8749 : gifnksm/rust/bigint-cfg, r=pnkfelixbors-232/+210
This also fixes #4393.
2013-08-26Support Win64 context switchingklutzy-16/+106
This patch saves and restores win64's nonvolatile registers. This patch also saves stack information of thread environment block (TEB), which is at %gs:0x08 and %gs:0x10.
2013-08-26rt: Support SEH/SJLJ personality routineklutzy-6/+16
2013-08-26rt: Make valgrind Win64-compatibleklutzy-6/+12
2013-08-26std: Add Win64 supportklutzy-3/+162
Some extern blobs are duplicated without "stdcall" abi, since Win64 does not use any calling convention. (Giving any abi to them causes llvm producing wrong bytecode.)
2013-08-26std: Bind write() on Win64klutzy-5/+15
2013-08-26std: Add Win64 typesklutzy-0/+166
2013-08-26Set main_name "WinMain" on Win64klutzy-1/+6
2013-08-26rt: Add {get,record}_sp_limit on Win64klutzy-0/+8
Uses ArbitraryUserPointer area at gs:0x28.
2013-08-26rt: Remove leading underscore on Win64klutzy-3/+6
Win64 convention does not use underscore.
2013-08-26auto merge of #8737 : blake2-ppc/rust/std-str-rsplit, r=huonwbors-73/+305
Make CharSplitIterator double-ended which is simple given that the operation is symmetric, once the split-N feature is factored out into its own adaptor. `.rsplitn_iter()` allows splitting `N` times from the back of a string, so it is a completely new feature. With the double-ended impl, `.split_iter()`, `.line_iter()`, `.word_iter()` all allow picking off elements from either end. `split_options_iter` is removed with the factoring of the split- and split-N- iterators, instead there is `split_terminator_iter`. --- Add benchmarks using `#[bench]` and tune CharSplitIterator a bit after Huon Wilson's suggestions Benchmarks 1-5 do the same split using different implementations of `CharEq`, all splitting an ascii string on ascii space. Benchmarks 6-7 split a unicode string on an ascii char. Before this PR test str::bench::split_iter_ascii ... bench: 166 ns/iter (+/- 2) test str::bench::split_iter_closure ... bench: 113 ns/iter (+/- 1) test str::bench::split_iter_extern_fn ... bench: 286 ns/iter (+/- 7) test str::bench::split_iter_not_ascii ... bench: 114 ns/iter (+/- 4) test str::bench::split_iter_slice ... bench: 220 ns/iter (+/- 12) test str::bench::split_iter_unicode_ascii ... bench: 217 ns/iter (+/- 3) test str::bench::split_iter_unicode_not_ascii ... bench: 248 ns/iter (+/- 3) PR, first commit test str::bench::split_iter_ascii ... bench: 331 ns/iter (+/- 9) test str::bench::split_iter_closure ... bench: 114 ns/iter (+/- 2) test str::bench::split_iter_extern_fn ... bench: 314 ns/iter (+/- 6) test str::bench::split_iter_not_ascii ... bench: 132 ns/iter (+/- 1) test str::bench::split_iter_slice ... bench: 157 ns/iter (+/- 3) test str::bench::split_iter_unicode_ascii ... bench: 502 ns/iter (+/- 64) test str::bench::split_iter_unicode_not_ascii ... bench: 250 ns/iter (+/- 3) PR, final version test str::bench::split_iter_ascii ... bench: 106 ns/iter (+/- 4) test str::bench::split_iter_closure ... bench: 107 ns/iter (+/- 1) test str::bench::split_iter_extern_fn ... bench: 267 ns/iter (+/- 6) test str::bench::split_iter_not_ascii ... bench: 108 ns/iter (+/- 1) test str::bench::split_iter_slice ... bench: 170 ns/iter (+/- 8) test str::bench::split_iter_unicode_ascii ... bench: 128 ns/iter (+/- 5) test str::bench::split_iter_unicode_not_ascii ... bench: 252 ns/iter (+/- 3) --- There are several ways to deal with `CharEq::only_ascii`. It is a performance optimization, so with that in mind, we allow passing bogus char (outside ascii) as long as they don't match. We use a byte value check to make sure we don't split on these (would split substrings in the middle of encoded char). (A more principled way would be to only pass the ascii codepoints to the CharEq when it indicates only_ascii, but that undoes some of the performance optimization.)
2013-08-26std::str: Tune CharSplitIterator after benchmarksblake2-ppc-55/+44
Implement Huon Wilson's suggestions (since the benchmarks agree!). Use `self.sep.matches(byte as char) && byte < 128u8` to match in the only_ascii case so that mistaken matches outside the ascii range can't create invalid substrings. Put the conditional on only_ascii outside the loop.
2013-08-26Placate `make tidy`.Felix S. Klock II-1/+2
2013-08-26bigint: fix wrong benchmark fn namegifnksm-1/+1
2013-08-26auto merge of #8744 : jld/rust/discr64, r=nikomatsakisbors-47/+79
This is in preparation for making discriminants not always be int (#1647), but it also makes compiles for a 64-bit target not behave differently — with respect to how many bits of discriminants are preserved — depending on the build host's word size, which is a nice property to have. We may want to standardize how to abbreviate "discriminant" in a followup change.
2013-08-26Port typeck/check/vtable.rs from oldvisit to <V:Visitor> trait API.Felix S. Klock II-10/+19
2013-08-26std::str: bench tests for .split_iter()blake2-ppc-0/+83
2013-08-26Port middle/stack_check.rs from oldvisit to <V:Visitor> trait API.Felix S. Klock II-20/+37
2013-08-26Port middle/moves.rs from oldvisit to <V:Visitor> trait API.Felix S. Klock II-29/+40
2013-08-26Remove occurrences of `oldvisit` text to improve grepping for old oldvisit.Felix S. Klock II-11/+11
2013-08-26Port creader.rs from oldvisit to <V:Visitor> trait API.Felix S. Klock II-7/+15
2013-08-25auto merge of #8750 : kballard/rust/str-opt-variant, r=thestingerbors-9/+108
Add _opt variants to from_bytes, from_bytes_owned, and from_bytes_slice. These variants return an Option instead of raising a condition/failing.
2013-08-25Revert "auto merge of #8745 : brson/rust/metadata, r=cmr"Brian Anderson-131/+89
This reverts commit 491bc3568c87dadaba4d342135bd308961c6e0ef, reversing changes made to 05f1bbba16912f63b562a7847801823872f89ec6.
2013-08-25Add _opt variants to str byte-conversion functionsKevin Ballard-9/+108
Add _opt variants to from_bytes, from_bytes_owned, and from_bytes_slice. These variants return an Option instead of raising a condition/failing.
2013-08-25auto merge of #8745 : brson/rust/metadata, r=cmrbors-89/+131
This does two things: 1) stops compressing metadata, 2) stops copying the metadata section, instead holding a reference to the buffer returned by the LLVM section iterator. Not compressing metadata requires something like 7x the storage space, but makes running tests about 9% faster. This has been a time improvement on all platforms I've tested, including windows. I considered leaving compression as an option but it doesn't seem to be worth the complexity since we don't currently have any use cases where we need to save that space. In order to avoid copying the metadata section I had to hack up extra::ebml a bit to support unsafe buffers. We should probably move it into librustc so that it can evolve to support the compiler without worrying about having a crummy interface. r? @graydon
2013-08-25auto merge of #8723 : anasazi/rust/temporary-unkillable-io, r=brsonbors-124/+165
Also added a home_for_io_with_sched variant to consolidate some cases. This is a temporary step to resolving #8674.
2013-08-26bigint: Add benchmarksgifnksm-0/+44
2013-08-25bigint: un-ignore test_shrgifnksm-73/+68
2013-08-25bigint: inlining small functionsgifnksm-97/+92
2013-08-25bigint: remove unnecessary method implementsgifnksm-42/+0
2013-08-25bigint: cfg(target_arch = ...) => cfg(target_word_size = ...)gifnksm-25/+11
2013-08-25auto merge of #8710 : pnkfelix/rust/fsk-issue5516-codepoint-fix, r=alexcrichtonbors-5/+32
...bytes. (removing previous note about eff-eye-ex'ing #5516 since it actually does not do so, it just gets us half-way.)
2013-08-25char_len is more succinct than count_chars.Felix S. Klock II-2/+1
2013-08-25std::str: Double-ended CharSplitIteratorblake2-ppc-68/+228
Add new methods `.rsplit_iter()` and `.rsplitn_iter()` for &str. Separate out CharSplitIterator and CharSplitNIterator, CharSplitIterator (`split_iter` and `rsplit_iter`) is made double-ended while `splitn_iter` and `rsplitn_iter` (limited to N splits) are not, since these don't have the same symmetry. With CharSplitIterator being double ended, derived iterators like `line_iter` and `word_iter` are too.
2013-08-24auto merge of #8736 : luqmana/rust/hf, r=yichoibors-39/+20
Fixes #8536.
2013-08-24Don't ever compress metadataBrian Anderson-45/+7
2013-08-24auto merge of #8701 : brson/rust/issue-8698, r=thestingerbors-8/+4
2013-08-24Add a test case for the preceding changes.Jed Davis-0/+25
This would have failed on 32-to-64-bit cross-compiles.
2013-08-24Don't truncate discriminants to host uint for C_uint's sake.Jed Davis-9/+13
2013-08-24Make enum discriminants u64 instead of the host uint.Jed Davis-46/+49
2013-08-24auto merge of #8637 : alexcrichton/rust/ifmt-less-hax, r=graydonbors-292/+409
Recent improvements to `&mut Trait` have made this work possible, and it solidifies that `ifmt` doesn't always have to return a string, but rather it's based around writers.
2013-08-24auto merge of #8607 : sfackler/rust/extensions, r=brsonbors-123/+122
The method names in std::rt::io::extensions::WriterByteConversions are the same as those in std::io::WriterUtils and a resolve error causes rustc to fail after trying to find an impl of io::Writer instead of trying to look for rt::io::Writer as well.
2013-08-24Introduce alternate forms of loggingAlex Crichton-24/+31
These new macros are all based on format! instead of fmt! and purely exist for bootstrapping purposes. After the next snapshot, all uses of logging will be migrated to these macros, and then after the next snapshot after that we can drop the `2` suffix on everything
2013-08-24auto merge of #8740 : brson/rust/rt-opt, r=thestingerbors-216/+238
See #8599
2013-08-24std::rt: Enforce sanity a while longerBrian Anderson-1/+2
I'm not comfortable turning off rtassert! yet
2013-08-24std: Make vec::push_all_move call reserve_at_leastBrian Anderson-1/+1
vec::unshift uses this to add elements, scheduler queues use unshift, and this was causing a lot of reallocation