1. 08 5月, 2014 9 次提交
    • A
      mk: Fix make install · 6aefce6f
      Alex Crichton 提交于
      Forgot to update the installation procedure with the knowledge that libcore is
      only available as an rlib, not as a dylib.
      
      Closes #14026
      6aefce6f
    • B
      auto merge of #13964 : alexcrichton/rust/more-buffers, r=brson · e0fcb4eb
      bors 提交于
      This will allow methods like read_line() on RefReader, LimitReader, etc.
      e0fcb4eb
    • B
      auto merge of #13751 : alexcrichton/rust/io-close-read, r=brson · ab22d99e
      bors 提交于
      Two new methods were added to TcpStream and UnixStream:
      
          fn close_read(&mut self) -> IoResult<()>;
          fn close_write(&mut self) -> IoResult<()>;
      
      These two methods map to shutdown()'s behavior (the system call on unix),
      closing the reading or writing half of a duplex stream. These methods are
      primarily added to allow waking up a pending read in another task. By closing
      the reading half of a connection, all pending readers will be woken up and will
      return with EndOfFile. The close_write() method was added for symmetry with
      close_read(), and I imagine that it will be quite useful at some point.
      
      Implementation-wise, librustuv got the short end of the stick this time. The
      native versions just delegate to the shutdown() syscall (easy). The uv versions
      can leverage uv_shutdown() for tcp/unix streams, but only for closing the
      writing half. Closing the reading half is done through some careful dancing to
      wake up a pending reader.
      
      As usual, windows likes to be different from unix. The windows implementation
      uses shutdown() for sockets, but shutdown() is not available for named pipes.
      Instead, CancelIoEx was used with same fancy synchronization to make sure
      everyone knows what's up.
      
      cc #11165
      ab22d99e
    • A
      std: Add close_{read,write}() methods to I/O · ec9ade93
      Alex Crichton 提交于
      Two new methods were added to TcpStream and UnixStream:
      
          fn close_read(&mut self) -> IoResult<()>;
          fn close_write(&mut self) -> IoResult<()>;
      
      These two methods map to shutdown()'s behavior (the system call on unix),
      closing the reading or writing half of a duplex stream. These methods are
      primarily added to allow waking up a pending read in another task. By closing
      the reading half of a connection, all pending readers will be woken up and will
      return with EndOfFile. The close_write() method was added for symmetry with
      close_read(), and I imagine that it will be quite useful at some point.
      
      Implementation-wise, librustuv got the short end of the stick this time. The
      native versions just delegate to the shutdown() syscall (easy). The uv versions
      can leverage uv_shutdown() for tcp/unix streams, but only for closing the
      writing half. Closing the reading half is done through some careful dancing to
      wake up a pending reader.
      
      As usual, windows likes to be different from unix. The windows implementation
      uses shutdown() for sockets, but shutdown() is not available for named pipes.
      Instead, CancelIoEx was used with same fancy synchronization to make sure
      everyone knows what's up.
      
      cc #11165
      ec9ade93
    • B
      auto merge of #14005 : alexcrichton/rust/extern-unsafe, r=pcwalton · c217a844
      bors 提交于
      Previously, the parser would not allow you to simultaneously implement a
      function with a different abi as well as being unsafe at the same time. This
      extends the parser to allow functions of the form:
      
          unsafe extern fn foo() {
              // ...
          }
      
      The closure type grammar was also changed to reflect this reversal, types
      previously written as "extern unsafe fn()" must now be written as
      "unsafe extern fn()". The parser currently has a hack which allows the old
      style, but this will go away once a snapshot has landed.
      
      Closes #10025
      
      [breaking-change]
      c217a844
    • B
      auto merge of #13726 : michaelwoerister/rust/lldb-autotests, r=alexcrichton · 828ffab6
      bors 提交于
      This pull request contains preparations for adding LLDB autotests:
      + the debuginfo tests are split into debuginfo-gdb and debuginfo-lldb
        + the `compiletest` tool is updated to support the debuginfo-lldb mode
        + tests.mk is modified to provide debuginfo-gdb and debuginfo-lldb make targets
        + GDB test cases are moved from `src/test/debug-info` to `src/test/debuginfo-gdb`
      + configure will now look for LLDB and set the appropriate CFG variables
      + the `lldb_batchmode.py` script is added to `src/etc`. It emulates GDB's batch mode
      
      The LLDB autotests themselves are not part of this PR. Those will probable require some manual work on the test bots to make them work for the first time. Better to get these unproblematic preliminaries out of the way in a separate step.
      828ffab6
    • B
      auto merge of #13901 : alexcrichton/rust/facade, r=brson · 87115fd0
      bors 提交于
      This is the second step in implementing #13851. This PR cannot currently land until a snapshot exists with #13892, but I imagine that this review will take longer.
      
      This PR refactors a large amount of functionality outside of the standard library into a new library, libcore. This new library has 0 dependencies (in theory). In practice, this library currently depends on these symbols being available:
      
      * `rust_begin_unwind` and `rust_fail_bounds_check` - These are the two entry points of failure in libcore. The symbols are provided by libstd currently. In the future (see the bullets on #13851) this will be officially supported with nice error mesages. Additionally, there will only be one failure entry point once `std::fmt` migrates to libcore.
      * `memcpy` - This is often generated by LLVM. This is also quite trivial to implement for any platform, so I'm not too worried about this.
      * `memcmp` - This is required for comparing strings. This function is quite common *everywhere*, so I don't feel to bad about relying on a consumer of libcore to define it.
      * `malloc` and `free` - This is quite unfortunate, and is a temporary stopgap until we deal with the `~` situation. More details can be found in the module `core::should_not_exist`
      * `fmod` and `fmodf` - These exist because the `Rem` trait is defined in libcore, so the `Rem` implementation for floats must also be defined in libcore. I imagine that any platform using floating-point modulus will have these symbols anyway, and otherwise they will be optimized out.
      * `fdim` and `fdimf` - Like `fmod`, these are from the `Signed` trait being defined in libcore. I don't expect this to be much of a problem
      
      These dependencies all "Just Work" for now because libcore only exists as an rlib, not as a dylib.
      
      The commits themselves are organized to show that the overall diff of this extraction is not all that large. Most modules were able to be moved with very few modifications. The primary module left out of this iteration is `std::fmt`. I plan on migrating the `fmt` module to libcore, but I chose to not do so at this time because it had implications on the `Writer` trait that I wanted to deal with in isolation. There are a few breaking changes in these commits, but they are fairly minor, and are all labeled with `[breaking-change]`.
      
      The nastiest parts of this movement come up with `~[T]` and `~str` being language-defined types today. I believe that much of this nastiness will get better over time as we migrate towards `Vec<T>` and `Str` (or whatever the types will be named). There will likely always be some extension traits, but the situation won't be as bad as it is today.
      
      Known deficiencies:
      
      * rustdoc will get worse in terms of readability. This is the next issue I will tackle as part of #13851. If others think that the rustdoc change should happen first, I can also table this to fix rustdoc first.
      * The compiler reveals that all these types are reexports via error messages like `core::option::Option`. This is filed as #13065, and I believe that issue would have a higher priority now. I do not currently plan on fixing that as part of #13851. If others believe that this issue should be fixed, I can also place it on the roadmap for #13851.
      
      I recommend viewing these changes on a commit-by-commit basis. The overall change is likely too overwhelming to take in.
      87115fd0
    • A
      Test fixes and rebase conflicts · 07caa224
      Alex Crichton 提交于
      07caa224
    • M
  2. 07 5月, 2014 31 次提交