mirror of
https://github.com/rust-lang/rust
synced 2024-09-15 22:50:55 +00:00
permit use before import. closes #48
This commit is contained in:
parent
6f5ef5815b
commit
b096b0e308
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -24,6 +24,7 @@
|
||||||
*.toc
|
*.toc
|
||||||
*.tp
|
*.tp
|
||||||
*.vr
|
*.vr
|
||||||
|
*.swp
|
||||||
.hg/
|
.hg/
|
||||||
.hgignore
|
.hgignore
|
||||||
lexer.ml
|
lexer.ml
|
||||||
|
|
|
@ -879,9 +879,6 @@ and parse_mod_item (ps:pstate) : (Ast.ident * Ast.mod_item) =
|
||||||
note_required_mod ps {lo=apos; hi=bpos} CONV_rust rlib item;
|
note_required_mod ps {lo=apos; hi=bpos} CONV_rust rlib item;
|
||||||
(ident, item)
|
(ident, item)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
| _ -> raise (unexpected ps)
|
| _ -> raise (unexpected ps)
|
||||||
|
|
||||||
|
|
||||||
|
@ -890,24 +887,19 @@ and parse_mod_items_from_signature
|
||||||
: (Ast.mod_view * Ast.mod_items) =
|
: (Ast.mod_view * Ast.mod_items) =
|
||||||
let exports = Hashtbl.create 0 in
|
let exports = Hashtbl.create 0 in
|
||||||
let mis = Hashtbl.create 0 in
|
let mis = Hashtbl.create 0 in
|
||||||
let in_view = ref true in
|
|
||||||
expect ps LBRACE;
|
expect ps LBRACE;
|
||||||
while not (peek ps = RBRACE)
|
while not (peek ps = RBRACE)
|
||||||
do
|
do
|
||||||
if !in_view
|
match peek ps with
|
||||||
then
|
EXPORT ->
|
||||||
match peek ps with
|
bump ps;
|
||||||
EXPORT ->
|
parse_export ps exports;
|
||||||
bump ps;
|
expect ps SEMI;
|
||||||
parse_export ps exports;
|
| _ ->
|
||||||
expect ps SEMI;
|
let (ident, mti) = ctxt "mod items from sig: mod item"
|
||||||
| _ ->
|
parse_mod_item_from_signature ps
|
||||||
in_view := false
|
in
|
||||||
else
|
Hashtbl.add mis ident mti;
|
||||||
let (ident, mti) = ctxt "mod items from sig: mod item"
|
|
||||||
parse_mod_item_from_signature ps
|
|
||||||
in
|
|
||||||
Hashtbl.add mis ident mti;
|
|
||||||
done;
|
done;
|
||||||
if (Hashtbl.length exports) = 0
|
if (Hashtbl.length exports) = 0
|
||||||
then Hashtbl.add exports Ast.EXPORT_all_decls ();
|
then Hashtbl.add exports Ast.EXPORT_all_decls ();
|
||||||
|
@ -1130,27 +1122,22 @@ and parse_mod_items
|
||||||
ps.pstate_depth <- ps.pstate_depth + 1;
|
ps.pstate_depth <- ps.pstate_depth + 1;
|
||||||
let imports = Hashtbl.create 0 in
|
let imports = Hashtbl.create 0 in
|
||||||
let exports = Hashtbl.create 0 in
|
let exports = Hashtbl.create 0 in
|
||||||
let in_view = ref true in
|
|
||||||
let items = Hashtbl.create 4 in
|
let items = Hashtbl.create 4 in
|
||||||
while (not (peek ps = terminal))
|
while (not (peek ps = terminal))
|
||||||
do
|
do
|
||||||
if !in_view
|
match peek ps with
|
||||||
then
|
IMPORT ->
|
||||||
match peek ps with
|
bump ps;
|
||||||
IMPORT ->
|
parse_import ps imports;
|
||||||
bump ps;
|
expect ps SEMI;
|
||||||
parse_import ps imports;
|
| EXPORT ->
|
||||||
expect ps SEMI;
|
bump ps;
|
||||||
| EXPORT ->
|
parse_export ps exports;
|
||||||
bump ps;
|
expect ps SEMI;
|
||||||
parse_export ps exports;
|
| _ ->
|
||||||
expect ps SEMI;
|
let (ident, item) = parse_mod_item ps in
|
||||||
| _ ->
|
htab_put items ident item;
|
||||||
in_view := false
|
expand_tags_to_items ps item items;
|
||||||
else
|
|
||||||
let (ident, item) = parse_mod_item ps in
|
|
||||||
htab_put items ident item;
|
|
||||||
expand_tags_to_items ps item items;
|
|
||||||
done;
|
done;
|
||||||
if (Hashtbl.length exports) = 0
|
if (Hashtbl.length exports) = 0
|
||||||
then Hashtbl.add exports Ast.EXPORT_all_decls ();
|
then Hashtbl.add exports Ast.EXPORT_all_decls ();
|
||||||
|
|
18
src/test/run-pass/use-import-export.rs
Normal file
18
src/test/run-pass/use-import-export.rs
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
|
||||||
|
mod foo {
|
||||||
|
export x;
|
||||||
|
use std (ver="0.0.1");
|
||||||
|
fn x() -> int { ret 1; }
|
||||||
|
}
|
||||||
|
|
||||||
|
mod bar {
|
||||||
|
use std (ver="0.0.1");
|
||||||
|
export y;
|
||||||
|
fn y() -> int { ret 1; }
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
foo.x();
|
||||||
|
bar.y();
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue