Skip to content

Commit 8f4d5bf

Browse files
committed
---
yaml --- r: 51196 b: refs/heads/try c: 78b5371 h: refs/heads/master v: v3
1 parent 8bb8bd5 commit 8f4d5bf

File tree

4 files changed

+109
-71
lines changed

4 files changed

+109
-71
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
refs/heads/master: 5f13e9ccc2e3328d4cd8ca49f84e6840dd998346
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: f7a2371c176663d59062ec5158f39faecba45768
5-
refs/heads/try: a20d1ad0cbcca13ee386fd819f33563b465f1185
5+
refs/heads/try: 78b53718a8e1c21b10390b925383ce5361000e0b
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
88
refs/heads/try2: 147ecfdd8221e4a4d4e090486829a06da1e0ca3c

branches/try/doc/rust.md

Lines changed: 99 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1420,13 +1420,111 @@ names are effectively reserved. Some significant attributes include:
14201420

14211421
* The `doc` attribute, for documenting code in-place.
14221422
* The `cfg` attribute, for conditional-compilation by build-configuration.
1423+
* The `lang` attribute, for custom definitions of traits and functions that are known to the Rust compiler (see [Language items](#language-items)).
14231424
* The `link` attribute, for describing linkage metadata for a crate.
14241425
* The `test` attribute, for marking functions as unit tests.
1425-
* The `allow`, `warn`, `forbid`, and `deny` attributes, for controling lint checks. Lint checks supported
1426+
* The `allow`, `warn`, `forbid`, and `deny` attributes, for controlling lint checks. Lint checks supported
14261427
by the compiler can be found via `rustc -W help`.
14271428

14281429
Other attributes may be added or removed during development of the language.
14291430

1431+
### Language items
1432+
1433+
Some primitive Rust operations are defined in Rust code,
1434+
rather than being implemented directly in C or assembly language.
1435+
The definitions of these operations have to be easy for the compiler to find.
1436+
The `lang` attribute makes it possible to declare these operations.
1437+
For example, the `str` module in the Rust core library defines the string equality function:
1438+
1439+
~~~ {.xfail-test}
1440+
#[lang="str_eq"]
1441+
pub fn eq_slice(a: &str, b: &str) -> bool {
1442+
// details elided
1443+
}
1444+
~~~
1445+
1446+
The name `str_eq` has a special meaning to the Rust compiler,
1447+
and the presence of this definition means that it will use this definition
1448+
when generating calls to the string equality function.
1449+
1450+
A complete list of the built-in language items follows:
1451+
1452+
#### Traits
1453+
1454+
`const`
1455+
: Cannot be mutated.
1456+
`copy`
1457+
: Can be implicitly copied.
1458+
`owned`
1459+
: Are uniquely owned.
1460+
`durable`
1461+
: Contain borrowed pointers.
1462+
`drop`
1463+
: Have finalizers.
1464+
`add`
1465+
: Elements can be added (for example, integers and floats).
1466+
`sub`
1467+
: Elements can be subtracted.
1468+
`mul`
1469+
: Elements can be multiplied.
1470+
`div`
1471+
: Elements can be divided.
1472+
`mod`
1473+
: Elements have a modulo operation.
1474+
`neg`
1475+
: Elements can be negated arithmetically.
1476+
`not`
1477+
: Elements can be negated logically.
1478+
`bitxor`
1479+
: Elements have an exclusive-or operation.
1480+
`bitand`
1481+
: Elements have a bitwise `and` operation.
1482+
`bitor`
1483+
: Elements have a bitwise `or` operation.
1484+
`shl`
1485+
: Elements have a left shift operation.
1486+
`shr`
1487+
: Elements have a right shift operation.
1488+
`index`
1489+
: Elements can be indexed.
1490+
`eq`
1491+
: Elements can be compared for equality.
1492+
`ord`
1493+
: Elements have a partial ordering.
1494+
1495+
#### Operations
1496+
1497+
`str_eq`
1498+
: Compare two strings for equality.
1499+
`uniq_str_eq`
1500+
: Compare two owned strings for equality.
1501+
`annihilate`
1502+
: Destroy a box before freeing it.
1503+
`log_type`
1504+
: Generically print a string representation of any type.
1505+
`fail_`
1506+
: Abort the program with an error.
1507+
`fail_bounds_check`
1508+
: Abort the program with a bounds check error.
1509+
`exchange_malloc`
1510+
: Allocate memory on the exchange heap.
1511+
`exchange_free`
1512+
: Free memory that was allocated on the exchange heap.
1513+
`malloc`
1514+
: Allocate memory on the managed heap.
1515+
`free`
1516+
: Free memory that was allocated on the managed heap.
1517+
`borrow_as_imm`
1518+
: Create an immutable borrowed pointer to a mutable value.
1519+
`return_to_mut`
1520+
: Release a borrowed pointer created with `return_to_mut`
1521+
`check_not_borrowed`
1522+
: Fail if a value has existing borrowed pointers to it.
1523+
`strdup_uniq`
1524+
: Return a new unique string containing a copy of the contents of a unique string.
1525+
1526+
> **Note:** This list is likely to become out of date. We should auto-generate it
1527+
> from `librustc/middle/lang_items.rs`.
14301528
14311529
# Statements and expressions
14321530

branches/try/src/libcore/io.rs

Lines changed: 8 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -49,89 +49,29 @@ pub mod rustrt {
4949

5050
// FIXME (#2004): This is all buffered. We might need an unbuffered variant
5151
// as well
52-
/**
53-
* The SeekStyle enum describes the relationship between the position
54-
* we'd like to seek to from our current position. It's used as an argument
55-
* to the `seek` method defined on the `Reader` trait.
56-
*
57-
* There are three seek styles:
58-
*
59-
* 1. `SeekSet` means that the new position should become our position.
60-
* 2. `SeekCur` means that we should seek from the current position.
61-
* 3. `SeekEnd` means that we should seek from the end.
62-
*
63-
* # Examples
64-
*
65-
* None right now.
66-
*/
6752
pub enum SeekStyle { SeekSet, SeekEnd, SeekCur, }
6853

6954

70-
/**
71-
* The core Reader trait. All readers must implement this trait.
72-
*
73-
* # Examples
74-
*
75-
* None right now.
76-
*/
55+
/// The raw underlying reader trait. All readers must implement this.
7756
pub trait Reader {
7857
// FIXME (#2004): Seekable really should be orthogonal.
7958

59+
/// Read up to len bytes (or EOF) and put them into bytes (which
60+
/// must be at least len bytes long). Return number of bytes read.
8061
// FIXME (#2982): This should probably return an error.
81-
/**
82-
* Reads bytes and puts them into `bytes`. Returns the number of
83-
* bytes read.
84-
*
85-
* The number of bytes to be read is `len` or the end of the file,
86-
* whichever comes first.
87-
*
88-
* The buffer must be at least `len` bytes long.
89-
*
90-
* # Examples
91-
*
92-
* None right now.
93-
*/
9462
fn read(&self, bytes: &mut [u8], len: uint) -> uint;
9563

96-
/**
97-
* Reads a single byte.
98-
*
99-
* In the case of an EOF or an error, returns a negative value.
100-
*
101-
* # Examples
102-
*
103-
* None right now.
104-
*/
64+
/// Read a single byte, returning a negative value for EOF or read error.
10565
fn read_byte(&self) -> int;
10666

107-
/**
108-
* Returns a boolean value: are we currently at EOF?
109-
*
110-
* # Examples
111-
*
112-
* None right now.
113-
*/
67+
/// Return whether the stream is currently at EOF position.
11468
fn eof(&self) -> bool;
11569

116-
/**
117-
* Seek to a given `position` in the stream.
118-
*
119-
* Takes an optional SeekStyle, which affects how we seek from the
120-
* position. See `SeekStyle` docs for more details.
121-
*
122-
* # Examples
123-
*
124-
* None right now.
125-
*/
70+
/// Move the current position within the stream. The second parameter
71+
/// determines the position that the first parameter is relative to.
12672
fn seek(&self, position: int, style: SeekStyle);
12773

128-
/**
129-
* Returns the current position within the stream.
130-
*
131-
* # Examples
132-
*
133-
* None right now.
134-
*/
74+
/// Return the current position within the stream.
13575
fn tell(&self) -> uint;
13676
}
13777

branches/try/src/libcore/rt/uv/net.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ pub impl StreamWatcher {
8181
return (*alloc_cb)(suggested_size as uint);
8282
}
8383

84-
extern fn read_cb(stream: *uvll::uv_stream_t, nread: ssize_t, ++buf: Buf) {
84+
extern fn read_cb(stream: *uvll::uv_stream_t, nread: ssize_t, buf: Buf) {
8585
rtdebug!("buf addr: %x", buf.base as uint);
8686
rtdebug!("buf len: %d", buf.len as int);
8787
let mut stream_watcher: StreamWatcher = NativeHandle::from_native_handle(stream);

0 commit comments

Comments
 (0)