about summary refs log tree commit diff
path: root/src/libstd/path
AgeCommit message (Collapse)AuthorLines
2014-03-23use TotalEq for HashMapDaniel Micay-2/+6
Closes #5283
2014-03-20rename std::vec -> std::sliceDaniel Micay-14/+14
Closes #12702
2014-03-12std: allow io::File* structs to be hashableErick Tryzelaar-6/+6
2014-03-12Use generic impls for `Hash`Erick Tryzelaar-8/+8
2014-03-08Removed DeepClone. Issue #12698.Michael Darakananda-3/+3
2014-02-28std: Change assert_eq!() to use {} instead of {:?}Alex Crichton-65/+65
Formatting via reflection has been a little questionable for some time now, and it's a little unfortunate that one of the standard macros will silently use reflection when you weren't expecting it. This adds small bits of code bloat to libraries, as well as not always being necessary. In light of this information, this commit switches assert_eq!() to using {} in the error message instead of {:?}. In updating existing code, there were a few error cases that I encountered: * It's impossible to define Show for [T, ..N]. I think DST will alleviate this because we can define Show for [T]. * A few types here and there just needed a #[deriving(Show)] * Type parameters needed a Show bound, I often moved this to `assert!(a == b)` * `Path` doesn't implement `Show`, so assert_eq!() cannot be used on two paths. I don't think this is much of a regression though because {:?} on paths looks awful (it's a byte array). Concretely speaking, this shaved 10K off a 656K binary. Not a lot, but sometime significant for smaller binaries.
2014-02-27path: Implement windows::make_non_verbatim()Kevin Ballard-0/+66
make_non_verbatim() takes a WindowsPath and returns a new one that does not use the \\?\ verbatim prefix, if possible.
2014-02-27path: clean up some lint warnings and an obsolete commentKevin Ballard-2/+1
Get rid of the unnecessary parenthesies that crept into some macros. Remove a FIXME that was already fixed. Fix a comment that wasn't rendering correctly in rustdoc.
2014-02-27std: Small cleanup and test improvementAlex Crichton-4/+4
This weeds out a bunch of warnings building stdtest on windows, and it also adds a check! macro to the io::fs tests to help diagnose errors that are cropping up on windows platforms as well. cc #12516
2014-02-23Remove all ToStr impls, add Show implsAlex Crichton-11/+0
This commit changes the ToStr trait to: impl<T: fmt::Show> ToStr for T { fn to_str(&self) -> ~str { format!("{}", *self) } } The ToStr trait has been on the chopping block for quite awhile now, and this is the final nail in its coffin. The trait and the corresponding method are not being removed as part of this commit, but rather any implementations of the `ToStr` trait are being forbidden because of the generic impl. The new way to get the `to_str()` method to work is to implement `fmt::Show`. Formatting into a `&mut Writer` (as `format!` does) is much more efficient than `ToStr` when building up large strings. The `ToStr` trait forces many intermediate allocations to be made while the `fmt::Show` trait allows incremental buildup in the same heap allocated buffer. Additionally, the `fmt::Show` trait is much more extensible in terms of interoperation with other `Writer` instances and in more situations. By design the `ToStr` trait requires at least one allocation whereas the `fmt::Show` trait does not require any allocations. Closes #8242 Closes #9806
2014-02-24Transition to new `Hash`, removing IterBytes and std::to_bytes.Huon Wilson-8/+8
2014-02-20move extra::test to libtestLiigo Zhuang-1/+2
2014-02-14Add c_str::CString.as_bytes_no_nul()Kevin Ballard-2/+1
2014-02-07Rewrite path::Display to reduce unnecessary allocationKevin Ballard-44/+20
2014-02-07Implement BytesContainer for MaybeOwnedKevin Ballard-0/+17
2014-02-07Tweak from_utf8_lossy to return a new MaybeOwned enumKevin Ballard-2/+2
MaybeOwned allows from_utf8_lossy to avoid allocation if there are no invalid bytes in the input.
2014-02-08std::fmt: convert the formatting traits to a proper self.Huon Wilson-2/+2
Poly and String have polymorphic `impl`s and so require different method names.
2014-02-07auto merge of #12062 : kballard/rust/from_utf8_lossy, r=huonwbors-25/+2
`from_utf8_lossy()` takes a byte vector and produces a `~str`, converting any invalid UTF-8 sequence into the U+FFFD REPLACEMENT CHARACTER. The replacement follows the guidelines in §5.22 Best Practice for U+FFFD Substitution from the Unicode Standard (Version 6.2)[1], which also matches the WHATWG rules for utf-8 decoding[2]. [1]: http://www.unicode.org/versions/Unicode6.2.0/ch05.pdf [2]: http://encoding.spec.whatwg.org/#utf-8 Closes #9516.
2014-02-06Hoist path::Display on top of from_utf8_lossy()Kevin Ballard-25/+2
2014-02-06Remove std::conditionAlex Crichton-211/+48
This has been a long time coming. Conditions in rust were initially envisioned as being a good alternative to error code return pattern. The idea is that all errors are fatal-by-default, and you can opt-in to handling the error by registering an error handler. While sounding nice, conditions ended up having some unforseen shortcomings: * Actually handling an error has some very awkward syntax: let mut result = None; let mut answer = None; io::io_error::cond.trap(|e| { result = Some(e) }).inside(|| { answer = Some(some_io_operation()); }); match result { Some(err) => { /* hit an I/O error */ } None => { let answer = answer.unwrap(); /* deal with the result of I/O */ } } This pattern can certainly use functions like io::result, but at its core actually handling conditions is fairly difficult * The "zero value" of a function is often confusing. One of the main ideas behind using conditions was to change the signature of I/O functions. Instead of read_be_u32() returning a result, it returned a u32. Errors were notified via a condition, and if you caught the condition you understood that the "zero value" returned is actually a garbage value. These zero values are often difficult to understand, however. One case of this is the read_bytes() function. The function takes an integer length of the amount of bytes to read, and returns an array of that size. The array may actually be shorter, however, if an error occurred. Another case is fs::stat(). The theoretical "zero value" is a blank stat struct, but it's a little awkward to create and return a zero'd out stat struct on a call to stat(). In general, the return value of functions that can raise error are much more natural when using a Result as opposed to an always-usable zero-value. * Conditions impose a necessary runtime requirement on *all* I/O. In theory I/O is as simple as calling read() and write(), but using conditions imposed the restriction that a rust local task was required if you wanted to catch errors with I/O. While certainly an surmountable difficulty, this was always a bit of a thorn in the side of conditions. * Functions raising conditions are not always clear that they are raising conditions. This suffers a similar problem to exceptions where you don't actually know whether a function raises a condition or not. The documentation likely explains, but if someone retroactively adds a condition to a function there's nothing forcing upstream users to acknowledge a new point of task failure. * Libaries using I/O are not guaranteed to correctly raise on conditions when an error occurs. In developing various I/O libraries, it's much easier to just return `None` from a read rather than raising an error. The silent contract of "don't raise on EOF" was a little difficult to understand and threw a wrench into the answer of the question "when do I raise a condition?" Many of these difficulties can be overcome through documentation, examples, and general practice. In the end, all of these difficulties added together ended up being too overwhelming and improving various aspects didn't end up helping that much. A result-based I/O error handling strategy also has shortcomings, but the cognitive burden is much smaller. The tooling necessary to make this strategy as usable as conditions were is much smaller than the tooling necessary for conditions. Perhaps conditions may manifest themselves as a future entity, but for now we're going to remove them from the standard library. Closes #9795 Closes #8968
2014-02-03Fixing remaining warnings and errors throughoutAlex Crichton-1/+1
2014-02-03std: Remove io::io_errorAlex Crichton-1/+1
* All I/O now returns IoResult<T> = Result<T, IoError> * All formatting traits now return fmt::Result = IoResult<()> * The if_ok!() macro was added to libstd
2014-02-02std: rename fmt::Default to `Show`.Huon Wilson-3/+3
This is a better name with which to have a #[deriving] mode. Decision in: https://github.com/mozilla/rust/wiki/Meeting-weekly-2014-01-28
2014-02-02std,extra: remove use of & support for @[].Huon Wilson-23/+0
2014-02-02libextra: Remove `@str` from all the librariesPatrick Walton-17/+0
2014-01-29auto merge of #11893 : Armavica/rust/copyable-cloneable, r=huonwbors-4/+4
I found awkward to have `MutableCloneableVector` and `CloneableIterator` on the one hand, and `CopyableVector` etc. on the other hand. The concerned traits are: * `CopyableVector` --> `CloneableVector` * `OwnedCopyableVector` --> `OwnedCloneableVector` * `ImmutableCopyableVector` --> `ImmutableCloneableVector` * `CopyableTuple` --> `CloneableTuple`
2014-01-29Removing do keyword from libstd and librustcScott Lawrence-4/+4
2014-01-28Rename OwnedCopyableVector to OwnedCloneableVectorVirgile Andreani-2/+2
2014-01-28Rename CopyableVector to CloneableVectorVirgile Andreani-3/+3
2014-01-23Update flip() to be rev().Sean Chalmers-5/+5
Consensus leaned in favour of using rev instead of flip.
2014-01-23Rename Invert to Flip - Issue 10632Sean Chalmers-5/+5
Renamed the invert() function in iter.rs to flip(). Also renamed the Invert<T> type to Flip<T>. Some related code comments changed. Documentation that I could find has been updated, and all the instances I could locate where the function/type were called have been updated as well.
2014-01-21[std::str] Remove the now unused not_utf8 condition.Simon Sapin-3/+3
2014-01-21[std::str] Rename from_utf8_opt() to from_utf8(), drop the old from_utf8() ↵Simon Sapin-9/+9
behavior
2014-01-21[std::path] Rename .container_as_str_opt() to .container_as_str(), drop the ↵Simon Sapin-40/+11
old .container_as_str() behavior
2014-01-21[std::vec] Rename .pop_opt() to .pop(), drop the old .pop() behaviorSimon Sapin-2/+2
2014-01-20auto merge of #11673 : omasanori/rust/sep-doc, r=alexcrichtonbors-2/+2
2014-01-19auto merge of #11643 : kballard/rust/path-root-path, r=ericktbors-4/+7
2014-01-20Fix misuse of character/byte in std::path.OGINO Masanori-2/+2
Signed-off-by: OGINO Masanori <masanori.ogino@gmail.com>
2014-01-18Expose platform independent path separatorsErick Tryzelaar-41/+62
2014-01-18auto merge of #11605 : alexcrichton/rust/issue-9582, r=brsonbors-2/+2
Closes #9582
2014-01-17Make WindowsPath::new("C:foo").root_path() return Some("C:")Kevin Ballard-4/+7
2014-01-18Rename iterators for consistencyPalmer Cox-32/+32
Rename existing iterators to get rid of the Iterator suffix and to give them names that better describe the things being iterated over.
2014-01-17auto merge of #11585 : nikomatsakis/rust/issue-3511-rvalue-lifetimes, r=pcwaltonbors-7/+20
Major changes: - Define temporary scopes in a syntax-based way that basically defaults to the innermost statement or conditional block, except for in a `let` initializer, where we default to the innermost block. Rules are documented in the code, but not in the manual (yet). See new test run-pass/cleanup-value-scopes.rs for examples. - Refactors Datum to better define cleanup roles. - Refactor cleanup scopes to not be tied to basic blocks, permitting us to have a very large number of scopes (one per AST node). - Introduce nascent documentation in trans/doc.rs covering datums and cleanup in a more comprehensive way. r? @pcwalton
2014-01-16Forbid coercing unsafe functions to closuresAlex Crichton-2/+2
Closes #9582
2014-01-15Issue #3511 - Rationalize temporary lifetimes.Niko Matsakis-7/+20
Major changes: - Define temporary scopes in a syntax-based way that basically defaults to the innermost statement or conditional block, except for in a `let` initializer, where we default to the innermost block. Rules are documented in the code, but not in the manual (yet). See new test run-pass/cleanup-value-scopes.rs for examples. - Refactors Datum to better define cleanup roles. - Refactor cleanup scopes to not be tied to basic blocks, permitting us to have a very large number of scopes (one per AST node). - Introduce nascent documentation in trans/doc.rs covering datums and cleanup in a more comprehensive way.
2014-01-15path: Fix joining Windows path when the receiver is "C:"Kevin Ballard-2/+9
WindowsPath::new("C:").join("a") produces r"C:\a". This is incorrect. It should produce "C:a".
2014-01-07stdtest: Fix all leaked trait importsAlex Crichton-6/+4
2014-01-07std: Fill in all missing importsAlex Crichton-3/+6
Fallout from the previous commits
2014-01-08Renamed Option::map_default and mutate_default to map_or and mutate_or_setMarvin Löbel-1/+1
2013-12-30Add more benchmark tests to path/posixg3xzh-0/+41
Benchmark testing `is_ancestor_of` and `path_relative_from`