Skip to content

Commit b096b0e

Browse files
bozgraydon
authored andcommitted
permit use before import. closes rust-lang#48
1 parent 6f5ef58 commit b096b0e

File tree

3 files changed

+42
-36
lines changed

3 files changed

+42
-36
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
*.toc
2525
*.tp
2626
*.vr
27+
*.swp
2728
.hg/
2829
.hgignore
2930
lexer.ml

src/boot/fe/item.ml

Lines changed: 23 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -879,9 +879,6 @@ and parse_mod_item (ps:pstate) : (Ast.ident * Ast.mod_item) =
879879
note_required_mod ps {lo=apos; hi=bpos} CONV_rust rlib item;
880880
(ident, item)
881881
end
882-
883-
884-
885882
| _ -> raise (unexpected ps)
886883

887884

@@ -890,24 +887,19 @@ and parse_mod_items_from_signature
890887
: (Ast.mod_view * Ast.mod_items) =
891888
let exports = Hashtbl.create 0 in
892889
let mis = Hashtbl.create 0 in
893-
let in_view = ref true in
894890
expect ps LBRACE;
895891
while not (peek ps = RBRACE)
896892
do
897-
if !in_view
898-
then
899-
match peek ps with
900-
EXPORT ->
901-
bump ps;
902-
parse_export ps exports;
903-
expect ps SEMI;
904-
| _ ->
905-
in_view := false
906-
else
907-
let (ident, mti) = ctxt "mod items from sig: mod item"
908-
parse_mod_item_from_signature ps
909-
in
910-
Hashtbl.add mis ident mti;
893+
match peek ps with
894+
EXPORT ->
895+
bump ps;
896+
parse_export ps exports;
897+
expect ps SEMI;
898+
| _ ->
899+
let (ident, mti) = ctxt "mod items from sig: mod item"
900+
parse_mod_item_from_signature ps
901+
in
902+
Hashtbl.add mis ident mti;
911903
done;
912904
if (Hashtbl.length exports) = 0
913905
then Hashtbl.add exports Ast.EXPORT_all_decls ();
@@ -1130,27 +1122,22 @@ and parse_mod_items
11301122
ps.pstate_depth <- ps.pstate_depth + 1;
11311123
let imports = Hashtbl.create 0 in
11321124
let exports = Hashtbl.create 0 in
1133-
let in_view = ref true in
11341125
let items = Hashtbl.create 4 in
11351126
while (not (peek ps = terminal))
11361127
do
1137-
if !in_view
1138-
then
1139-
match peek ps with
1140-
IMPORT ->
1141-
bump ps;
1142-
parse_import ps imports;
1143-
expect ps SEMI;
1144-
| EXPORT ->
1145-
bump ps;
1146-
parse_export ps exports;
1147-
expect ps SEMI;
1148-
| _ ->
1149-
in_view := false
1150-
else
1151-
let (ident, item) = parse_mod_item ps in
1152-
htab_put items ident item;
1153-
expand_tags_to_items ps item items;
1128+
match peek ps with
1129+
IMPORT ->
1130+
bump ps;
1131+
parse_import ps imports;
1132+
expect ps SEMI;
1133+
| EXPORT ->
1134+
bump ps;
1135+
parse_export ps exports;
1136+
expect ps SEMI;
1137+
| _ ->
1138+
let (ident, item) = parse_mod_item ps in
1139+
htab_put items ident item;
1140+
expand_tags_to_items ps item items;
11541141
done;
11551142
if (Hashtbl.length exports) = 0
11561143
then Hashtbl.add exports Ast.EXPORT_all_decls ();
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
2+
mod foo {
3+
export x;
4+
use std (ver="0.0.1");
5+
fn x() -> int { ret 1; }
6+
}
7+
8+
mod bar {
9+
use std (ver="0.0.1");
10+
export y;
11+
fn y() -> int { ret 1; }
12+
}
13+
14+
fn main() {
15+
foo.x();
16+
bar.y();
17+
}
18+

0 commit comments

Comments
 (0)