Skip to content

Commit

Permalink
permit use before import. closes #48
Browse files Browse the repository at this point in the history
  • Loading branch information
boz authored and graydon committed Jul 15, 2010
1 parent 6f5ef58 commit b096b0e
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 36 deletions.
1 change: 1 addition & 0 deletions .gitignore
Expand Up @@ -24,6 +24,7 @@
*.toc
*.tp
*.vr
*.swp
.hg/
.hgignore
lexer.ml
Expand Down
59 changes: 23 additions & 36 deletions src/boot/fe/item.ml
Expand Up @@ -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;
(ident, item)
end



| _ -> raise (unexpected ps)


Expand All @@ -890,24 +887,19 @@ and parse_mod_items_from_signature
: (Ast.mod_view * Ast.mod_items) =
let exports = Hashtbl.create 0 in
let mis = Hashtbl.create 0 in
let in_view = ref true in
expect ps LBRACE;
while not (peek ps = RBRACE)
do
if !in_view
then
match peek ps with
EXPORT ->
bump ps;
parse_export ps exports;
expect ps SEMI;
| _ ->
in_view := false
else
let (ident, mti) = ctxt "mod items from sig: mod item"
parse_mod_item_from_signature ps
in
Hashtbl.add mis ident mti;
match peek ps with
EXPORT ->
bump ps;
parse_export ps exports;
expect ps SEMI;
| _ ->
let (ident, mti) = ctxt "mod items from sig: mod item"
parse_mod_item_from_signature ps
in
Hashtbl.add mis ident mti;
done;
if (Hashtbl.length exports) = 0
then Hashtbl.add exports Ast.EXPORT_all_decls ();
Expand Down Expand Up @@ -1130,27 +1122,22 @@ and parse_mod_items
ps.pstate_depth <- ps.pstate_depth + 1;
let imports = Hashtbl.create 0 in
let exports = Hashtbl.create 0 in
let in_view = ref true in
let items = Hashtbl.create 4 in
while (not (peek ps = terminal))
do
if !in_view
then
match peek ps with
IMPORT ->
bump ps;
parse_import ps imports;
expect ps SEMI;
| EXPORT ->
bump ps;
parse_export ps exports;
expect ps SEMI;
| _ ->
in_view := false
else
let (ident, item) = parse_mod_item ps in
htab_put items ident item;
expand_tags_to_items ps item items;
match peek ps with
IMPORT ->
bump ps;
parse_import ps imports;
expect ps SEMI;
| EXPORT ->
bump ps;
parse_export ps exports;
expect ps SEMI;
| _ ->
let (ident, item) = parse_mod_item ps in
htab_put items ident item;
expand_tags_to_items ps item items;
done;
if (Hashtbl.length exports) = 0
then Hashtbl.add exports Ast.EXPORT_all_decls ();
Expand Down
18 changes: 18 additions & 0 deletions src/test/run-pass/use-import-export.rs
@@ -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();
}

0 comments on commit b096b0e

Please sign in to comment.