Parse 'import' directives in rustc.

This commit is contained in:
Rafael Ávila de Espíndola
2010-12-24 23:25:02 -05:00
committed by Graydon Hoare
parent 8d2fdac93b
commit f900792fa3
2 changed files with 51 additions and 0 deletions
+44
View File
@@ -1562,6 +1562,45 @@ fn stmt_ends_with_semi(@ast.stmt stmt) -> bool {
}
}
impure fn parse_rest_import_name(parser p, ast.ident id) {
while (p.peek() != token.SEMI) {
expect(p, token.DOT);
parse_ident(p);
}
}
impure fn parse_full_import_name(parser p) {
alt (p.peek()) {
case (token.IDENT(?ident)) {
p.bump();
parse_rest_import_name(p, ident);
}
case (_) {
p.err("expecting an identifier");
}
}
}
impure fn parse_import(parser p) {
alt (p.peek()) {
case (token.IDENT(?ident)) {
p.bump();
alt (p.peek()) {
case (token.EQ) {
p.bump();
parse_full_import_name(p);
}
case (_) {
parse_rest_import_name(p, ident);
}
}
}
case (_) {
p.err("expecting an identifier");
}
}
}
impure fn parse_use_and_imports(parser p) {
while (true) {
alt (p.peek()) {
@@ -1571,6 +1610,11 @@ fn stmt_ends_with_semi(@ast.stmt stmt) -> bool {
parse_optional_meta(p);
expect(p, token.SEMI);
}
case (token.IMPORT) {
p.bump();
parse_import(p);
expect(p, token.SEMI);
}
case (_) {
ret;
}
+7
View File
@@ -3,11 +3,18 @@
use zed(name = "std");
use bar(name = "std", ver = "0.0.1");
import std._str;
import x = std._str;
mod baz {
use std;
use libc();
use zed(name = "std");
use bar(name = "std", ver = "0.0.1");
import std._str;
import x = std._str;
}
fn main() {