Skip to content

Commit ee83449

Browse files
committed
---
yaml --- r: 140926 b: refs/heads/try2 c: 48b6262 h: refs/heads/master v: v3
1 parent 70e6467 commit ee83449

File tree

763 files changed

+16796
-32971
lines changed

Some content is hidden

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

763 files changed

+16796
-32971
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: 2d28d645422c1617be58c8ca7ad9a457264ca850
8+
refs/heads/try2: 48b6262b383365b7319ef76fa9c6d2c63c4d70e1
99
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/try2/.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
*.diff
4040
*.rej
4141
*.swp
42-
*.swo
4342
*.tmp
4443
*.pyc
4544
*.elc

branches/try2/Makefile.in

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ endif
101101

102102
ifdef CFG_ENABLE_DEBUG
103103
$(info cfg: enabling more debugging (CFG_ENABLE_DEBUG))
104-
CFG_RUSTC_FLAGS += --cfg debug
104+
CFG_RUSTC_FLAGS +=
105105
CFG_GCCISH_CFLAGS += -DRUST_DEBUG
106106
else
107107
CFG_GCCISH_CFLAGS += -DRUST_NDEBUG
@@ -110,9 +110,6 @@ endif
110110
ifdef SAVE_TEMPS
111111
CFG_RUSTC_FLAGS += --save-temps
112112
endif
113-
ifdef ASM_COMMENTS
114-
CFG_RUSTC_FLAGS += -z asm-comments
115-
endif
116113
ifdef TIME_PASSES
117114
CFG_RUSTC_FLAGS += -Z time-passes
118115
endif

branches/try2/configure

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -439,10 +439,6 @@ then
439439
probe CFG_ZCAT zcat
440440
fi
441441

442-
step_msg "looking for target specific programs"
443-
444-
probe CFG_ADB adb
445-
446442
if [ ! -z "$CFG_PANDOC" ]
447443
then
448444
PV_MAJOR_MINOR=$(pandoc --version | grep '^pandoc ' |
@@ -695,9 +691,6 @@ do
695691
# host lib dir
696692
make_dir $h/stage$i/$CFG_LIBDIR
697693

698-
# host test dir
699-
make_dir $h/stage$i/test
700-
701694
# target bin dir
702695
make_dir $h/stage$i/$CFG_LIBDIR/rustc/$t/bin
703696

branches/try2/doc/rust.md

Lines changed: 73 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -618,7 +618,7 @@ each of which may have some number of [attributes](#attributes) attached to it.
618618

619619
~~~~~~~~ {.ebnf .gram}
620620
item : mod_item | fn_item | type_item | struct_item | enum_item
621-
| static_item | trait_item | impl_item | extern_block ;
621+
| static_item | trait_item | impl_item | foreign_mod_item ;
622622
~~~~~~~~
623623

624624
An _item_ is a component of a crate; some module items can be defined in crate
@@ -752,11 +752,10 @@ link_attr : ident '=' literal ;
752752
~~~~~~~~
753753

754754
An _`extern mod` declaration_ specifies a dependency on an external crate.
755-
The external crate is then bound into the declaring scope
756-
as the `ident` provided in the `extern_mod_decl`.
755+
The external crate is then bound into the declaring scope as the `ident` provided in the `extern_mod_decl`.
757756

758-
The external crate is resolved to a specific `soname` at compile time,
759-
and a runtime linkage requirement to that `soname` is passed to the linker for
757+
The external crate is resolved to a specific `soname` at compile time, and a
758+
runtime linkage requirement to that `soname` is passed to the linker for
760759
loading at runtime. The `soname` is resolved at compile time by scanning the
761760
compiler's library path and matching the `link_attrs` provided in the
762761
`use_decl` against any `#link` attributes that were declared on the external
@@ -993,10 +992,10 @@ Thus the return type on `f` only needs to reflect the `if` branch of the conditi
993992
#### Extern functions
994993

995994
Extern functions are part of Rust's foreign function interface,
996-
providing the opposite functionality to [external blocks](#external-blocks).
997-
Whereas external blocks allow Rust code to call foreign code,
998-
extern functions with bodies defined in Rust code _can be called by foreign
999-
code_. They are defined in the same way as any other Rust function,
995+
providing the opposite functionality to [foreign modules](#foreign-modules).
996+
Whereas foreign modules allow Rust code to call foreign code,
997+
extern functions with bodies defined in Rust code _can be called by foreign code_.
998+
They are defined in the same way as any other Rust function,
1000999
except that they have the `extern` modifier.
10011000

10021001
~~~
@@ -1012,8 +1011,7 @@ let fptr: *u8 = new_vec;
10121011
~~~
10131012

10141013
The primary motivation for extern functions is
1015-
to create callbacks for foreign functions that expect to receive function
1016-
pointers.
1014+
to create callbacks for foreign functions that expect to receive function pointers.
10171015

10181016
### Type definitions
10191017

@@ -1310,61 +1308,64 @@ impl Seq<bool> for u32 {
13101308
}
13111309
~~~~
13121310

1313-
### External blocks
1311+
### Foreign modules
13141312

13151313
~~~ {.ebnf .gram}
1316-
extern_block_item : "extern" '{' extern_block '} ;
1317-
extern_block : [ foreign_fn ] * ;
1314+
foreign_mod_item : "extern mod" ident '{' foreign_mod '} ;
1315+
foreign_mod : [ foreign_fn ] * ;
13181316
~~~
13191317

1320-
External blocks form the basis for Rust's foreign function interface.
1321-
Declarations in an external block describe symbols
1322-
in external, non-Rust libraries.
1323-
1324-
Functions within external blocks
1325-
are declared in the same way as other Rust functions,
1326-
with the exception that they may not have a body
1327-
and are instead terminated by a semicolon.
1318+
Foreign modules form the basis for Rust's foreign function interface. A
1319+
foreign module describes functions in external, non-Rust
1320+
libraries.
1321+
Functions within foreign modules are declared in the same way as other Rust functions,
1322+
with the exception that they may not have a body and are instead terminated by a semicolon.
13281323

13291324
~~~
13301325
# use core::libc::{c_char, FILE};
13311326
# #[nolink]
13321327
1333-
extern {
1328+
extern mod c {
13341329
fn fopen(filename: *c_char, mode: *c_char) -> *FILE;
13351330
}
13361331
~~~
13371332

1338-
Functions within external blocks may be called by Rust code,
1339-
just like functions defined in Rust.
1340-
The Rust compiler automatically translates
1341-
between the Rust ABI and the foreign ABI.
1333+
Functions within foreign modules may be called by Rust code, just like functions defined in Rust.
1334+
The Rust compiler automatically translates between the Rust ABI and the foreign ABI.
1335+
1336+
The name of the foreign module has special meaning to the Rust compiler in
1337+
that it will treat the module name as the name of a library to link to,
1338+
performing the linking as appropriate for the target platform. The name
1339+
given for the foreign module will be transformed in a platform-specific way
1340+
to determine the name of the library. For example, on Linux the name of the
1341+
foreign module is prefixed with 'lib' and suffixed with '.so', so the
1342+
foreign mod 'rustrt' would be linked to a library named 'librustrt.so'.
13421343

1343-
A number of [attributes](#attributes) control the behavior of external
1344-
blocks.
1344+
A number of [attributes](#attributes) control the behavior of foreign
1345+
modules.
13451346

1346-
By default external blocks assume
1347-
that the library they are calling uses the standard C "cdecl" ABI.
1348-
Other ABIs may be specified using the `abi` attribute as in
1347+
By default foreign modules assume that the library they are calling use the
1348+
standard C "cdecl" ABI. Other ABIs may be specified using the `abi`
1349+
attribute as in
13491350

13501351
~~~{.xfail-test}
13511352
// Interface to the Windows API
13521353
#[abi = "stdcall"]
1353-
extern { }
1354+
extern mod kernel32 { }
13541355
~~~
13551356

1356-
The `link_name` attribute allows the name of the library to be specified.
1357+
The `link_name` attribute allows the default library naming behavior to
1358+
be overridden by explicitly specifying the name of the library.
13571359

13581360
~~~{.xfail-test}
13591361
#[link_name = "crypto"]
1360-
extern { }
1362+
extern mod mycrypto { }
13611363
~~~
13621364

1363-
The `nolink` attribute tells the Rust compiler
1364-
not to do any linking for the external block.
1365-
This is particularly useful for creating external blocks for libc,
1366-
which tends to not follow standard library naming conventions
1367-
and is linked to all Rust programs anyway.
1365+
The `nolink` attribute tells the Rust compiler not to do any linking for the foreign module.
1366+
This is particularly useful for creating foreign
1367+
modules for libc, which tends to not follow standard library naming
1368+
conventions and is linked to all Rust programs anyway.
13681369

13691370
## Attributes
13701371

@@ -1424,8 +1425,6 @@ names are effectively reserved. Some significant attributes include:
14241425
* The `test` attribute, for marking functions as unit tests.
14251426
* 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`.
1427-
* The `deriving` attribute, for automatically generating
1428-
implementations of certain traits.
14291428

14301429
Other attributes may be added or removed during development of the language.
14311430

@@ -1527,47 +1526,6 @@ A complete list of the built-in language items follows:
15271526
> **Note:** This list is likely to become out of date. We should auto-generate it
15281527
> from `librustc/middle/lang_items.rs`.
15291528
1530-
### Deriving
1531-
1532-
The `deriving` attribute allows certain traits to be automatically
1533-
implemented for data structures. For example, the following will
1534-
create an `impl` for the `Eq` and `Clone` traits for `Foo`, the type
1535-
parameter `T` will be given the `Eq` or `Clone` constraints for the
1536-
appropriate `impl`:
1537-
1538-
~~~
1539-
#[deriving(Eq, Clone)]
1540-
struct Foo<T> {
1541-
a: int,
1542-
b: T
1543-
}
1544-
~~~
1545-
1546-
The generated `impl` for `Eq` is equivalent to
1547-
1548-
~~~
1549-
# struct Foo<T> { a: int, b: T }
1550-
impl<T: Eq> Eq for Foo<T> {
1551-
fn eq(&self, other: &Foo<T>) -> bool {
1552-
self.a == other.a && self.b == other.b
1553-
}
1554-
1555-
fn ne(&self, other: &Foo<T>) -> bool {
1556-
self.a != other.a || self.b != other.b
1557-
}
1558-
}
1559-
~~~
1560-
1561-
Supported traits for `deriving` are:
1562-
1563-
* Comparison traits: `Eq`, `TotalEq`, `Ord`, `TotalOrd`.
1564-
* Serialization: `Encodable`, `Decodable`. These require `std`.
1565-
* `Clone` and `DeepClone`, to perform (deep) copies.
1566-
* `IterBytes`, to iterate over the bytes in a data type.
1567-
* `Rand`, to create a random instance of a data type.
1568-
* `ToStr`, to convert to a string. For a type with this instance,
1569-
`obj.to_str()` has the same output as `fmt!("%?", obj)`.
1570-
15711529
# Statements and expressions
15721530

15731531
Rust is _primarily_ an expression language. This means that most forms of
@@ -1988,6 +1946,35 @@ fn avg(v: &[float]) -> float {
19881946
}
19891947
~~~~
19901948

1949+
#### Swap expressions
1950+
1951+
A _swap expression_ consists of an [lvalue](#lvalues-rvalues-and-temporaries) followed by a bi-directional arrow (`<->`) and another [lvalue](#lvalues-rvalues-and-temporaries).
1952+
1953+
Evaluating a swap expression causes, as a side effect, the values held in the left-hand-side and right-hand-side [lvalues](#lvalues-rvalues-and-temporaries) to be exchanged indivisibly.
1954+
1955+
Evaluating a swap expression neither changes reference counts,
1956+
nor deeply copies any owned structure pointed to by the moved [rvalue](#lvalues-rvalues-and-temporaries).
1957+
Instead, the swap expression represents an indivisible *exchange of ownership*,
1958+
between the right-hand-side and the left-hand-side of the expression.
1959+
No allocation or destruction is entailed.
1960+
1961+
An example of three different swap expressions:
1962+
1963+
~~~~~~~~
1964+
# let mut x = &mut [0];
1965+
# let mut a = &mut [0];
1966+
# let i = 0;
1967+
# struct S1 { z: int };
1968+
# struct S2 { c: int };
1969+
# let mut y = S1{z: 0};
1970+
# let mut b = S2{c: 0};
1971+
1972+
x <-> a;
1973+
x[i] <-> a[i];
1974+
y.z <-> b.c;
1975+
~~~~~~~~
1976+
1977+
19911978
#### Assignment expressions
19921979

19931980
An _assignment expression_ consists of an [lvalue](#lvalues-rvalues-and-temporaries) expression followed by an
@@ -2028,7 +2015,7 @@ as
20282015
== !=
20292016
&&
20302017
||
2031-
=
2018+
= <->
20322019
~~~~
20332020

20342021
Operators at the same precedence level are evaluated left-to-right.
@@ -2386,9 +2373,9 @@ enum List<X> { Nil, Cons(X, @List<X>) }
23862373
let x: List<int> = Cons(10, @Cons(11, @Nil));
23872374
23882375
match x {
2389-
Cons(_, @Nil) => fail!("singleton list"),
2376+
Cons(_, @Nil) => fail!(~"singleton list"),
23902377
Cons(*) => return,
2391-
Nil => fail!("empty list")
2378+
Nil => fail!(~"empty list")
23922379
}
23932380
~~~~
23942381

0 commit comments

Comments
 (0)