Skip to content

Commit 2088d21

Browse files
committed
---
yaml --- r: 144311 b: refs/heads/try2 c: 5e5e2c7 h: refs/heads/master i: 144309: 3a32d84 144307: 6b64e7a 144303: 48df8ab v: v3
1 parent 28af01e commit 2088d21

File tree

206 files changed

+8755
-2797
lines changed

Some content is hidden

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

206 files changed

+8755
-2797
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: 0081961c57494162d9f2d19265175af95fbdd8d7
8+
refs/heads/try2: 5e5e2c71e403371ff8a5d5430e7696654214a438
99
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/try2/configure

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -739,7 +739,9 @@ do
739739
make_dir $h/test/doc-tutorial-ffi
740740
make_dir $h/test/doc-tutorial-macros
741741
make_dir $h/test/doc-tutorial-borrowed-ptr
742+
make_dir $h/test/doc-tutorial-container
742743
make_dir $h/test/doc-tutorial-tasks
744+
make_dir $h/test/doc-tutorial-conditions
743745
make_dir $h/test/doc-rust
744746
done
745747

branches/try2/doc/rust.md

Lines changed: 58 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -788,7 +788,7 @@ extern mod complicated_mod = "some-file/in/the-rust/path";
788788
##### Use declarations
789789

790790
~~~~~~~~ {.ebnf .gram}
791-
use_decl : "pub"? "use" ident [ '=' path
791+
use_decl : "pub" ? "use" ident [ '=' path
792792
| "::" path_glob ] ;
793793
794794
path_glob : ident [ "::" path_glob ] ?
@@ -851,6 +851,38 @@ In this example, the module `quux` re-exports all of the public names defined in
851851

852852
Also note that the paths contained in `use` items are relative to the crate root.
853853
So, in the previous example, the `use` refers to `quux::foo::*`, and not simply to `foo::*`.
854+
This also means that top-level module declarations should be at the crate root if direct usage
855+
of the declared modules within `use` items is desired. It is also possible to use `self` and `super`
856+
at the beginning of a `use` item to refer to the current and direct parent modules respectively.
857+
All rules regarding accessing declared modules in `use` declarations applies to both module declarations
858+
and `extern mod` declarations.
859+
860+
An example of what will and will not work for `use` items:
861+
~~~~
862+
# #[allow(unused_imports)];
863+
use foo::extra; // good: foo is at the root of the crate
864+
use foo::baz::foobaz; // good: foo is at the root of the crate
865+
866+
mod foo {
867+
extern mod extra;
868+
869+
use foo::extra::list; // good: foo is at crate root
870+
// use extra::*; // bad: extra is not at the crate root
871+
use self::baz::foobaz; // good: self refers to module 'foo'
872+
use foo::bar::foobar; // good: foo is at crate root
873+
874+
pub mod bar {
875+
pub fn foobar() { }
876+
}
877+
878+
pub mod baz {
879+
use super::bar::foobar; // good: super refers to module 'foo'
880+
pub fn foobaz() { }
881+
}
882+
}
883+
884+
fn main() {}
885+
~~~~
854886

855887
### Functions
856888

@@ -1006,20 +1038,25 @@ code_. They are defined in the same way as any other Rust function,
10061038
except that they have the `extern` modifier.
10071039

10081040
~~~
1041+
// Declares an extern fn, the ABI defaults to "C"
10091042
extern fn new_vec() -> ~[int] { ~[] }
1043+
1044+
// Declares an extern fn with "stdcall" ABI
1045+
extern "stdcall" fn new_vec_stdcall() -> ~[int] { ~[] }
10101046
~~~
10111047

1012-
Extern functions may not be called from Rust code,
1013-
but Rust code may take their value as a raw `u8` pointer.
1048+
Unlike normal functions, extern fns have an `extern "ABI" fn()`.
1049+
This is the same type as the functions declared in an extern
1050+
block.
10141051

10151052
~~~
10161053
# extern fn new_vec() -> ~[int] { ~[] }
1017-
let fptr: *u8 = new_vec;
1054+
let fptr: extern "C" fn() -> ~[int] = new_vec;
10181055
~~~
10191056

1020-
The primary motivation for extern functions is
1021-
to create callbacks for foreign functions that expect to receive function
1022-
pointers.
1057+
Extern functions may be called from Rust code, but
1058+
caution must be taken with respect to the size of the stack
1059+
segment, just as when calling an extern function normally.
10231060

10241061
### Type definitions
10251062

@@ -1384,14 +1421,13 @@ between the Rust ABI and the foreign ABI.
13841421
A number of [attributes](#attributes) control the behavior of external
13851422
blocks.
13861423

1387-
By default external blocks assume
1388-
that the library they are calling uses the standard C "cdecl" ABI.
1389-
Other ABIs may be specified using the `abi` attribute as in
1424+
By default external blocks assume that the library they are calling
1425+
uses the standard C "cdecl" ABI. Other ABIs may be specified using
1426+
an `abi` string, as shown here:
13901427

13911428
~~~{.xfail-test}
13921429
// Interface to the Windows API
1393-
#[abi = "stdcall"]
1394-
extern { }
1430+
extern "stdcall" { }
13951431
~~~
13961432

13971433
The `link_name` attribute allows the name of the library to be specified.
@@ -1407,6 +1443,12 @@ This is particularly useful for creating external blocks for libc,
14071443
which tends to not follow standard library naming conventions
14081444
and is linked to all Rust programs anyway.
14091445

1446+
The type of a function
1447+
declared in an extern block
1448+
is `extern "abi" fn(A1, ..., An) -> R`,
1449+
where `A1...An` are the declared types of its arguments
1450+
and `R` is the decalred return type.
1451+
14101452
## Attributes
14111453

14121454
~~~~~~~~{.ebnf .gram}
@@ -1920,7 +1962,7 @@ it is automatically dereferenced to make the field access possible.
19201962
### Vector expressions
19211963

19221964
~~~~~~~~{.ebnf .gram}
1923-
vec_expr : '[' "mut"? vec_elems? ']'
1965+
vec_expr : '[' "mut" ? vec_elems? ']'
19241966
19251967
vec_elems : [expr [',' expr]*] | [expr ',' ".." expr]
19261968
~~~~~~~~
@@ -2864,17 +2906,16 @@ the vtable pointer for the `T` implementation of `R`, and the pointer value of `
28642906
An example of an object type:
28652907

28662908
~~~~~~~~
2867-
# use std::int;
28682909
trait Printable {
2869-
fn to_str(&self) -> ~str;
2910+
fn to_string(&self) -> ~str;
28702911
}
28712912
28722913
impl Printable for int {
2873-
fn to_str(&self) -> ~str { int::to_str(*self) }
2914+
fn to_string(&self) -> ~str { self.to_str() }
28742915
}
28752916
28762917
fn print(a: @Printable) {
2877-
println(a.to_str());
2918+
println(a.to_string());
28782919
}
28792920
28802921
fn main() {

0 commit comments

Comments
 (0)