diff options
| author | Rafael Ávila de Espíndola <[email protected]> | 2011-01-25 18:15:19 -0500 |
|---|---|---|
| committer | Rafael Ávila de Espíndola <[email protected]> | 2011-01-25 18:16:52 -0500 |
| commit | 1b82060c5e40e0b4e996bcd30deccd2a523c7590 (patch) | |
| tree | 13eb7356df6235fb560be3a8e5d5310c71b774d4 /src | |
| parent | Small first step in expr_path. Call find_final_def just to detect (diff) | |
| download | rust-1b82060c5e40e0b4e996bcd30deccd2a523c7590.tar.xz rust-1b82060c5e40e0b4e996bcd30deccd2a523c7590.zip | |
Print an error if we try to refer to a module in an expr_path.
Diffstat (limited to 'src')
| -rw-r--r-- | src/Makefile | 1 | ||||
| -rw-r--r-- | src/comp/middle/resolve.rs | 12 | ||||
| -rw-r--r-- | src/test/compile-fail/bad-expr-path2.rs | 10 |
3 files changed, 22 insertions, 1 deletions
diff --git a/src/Makefile b/src/Makefile index 5da27170..8ad5c4bc 100644 --- a/src/Makefile +++ b/src/Makefile @@ -504,6 +504,7 @@ TEST_XFAILS_RUSTC := $(filter-out \ arg-count-mismatch.rs \ arg-type-mismatch.rs \ bad-expr-path.rs \ + bad-expr-path2.rs \ import.rs \ import2.rs \ import3.rs \ diff --git a/src/comp/middle/resolve.rs b/src/comp/middle/resolve.rs index 1f609dd5..f372e3d7 100644 --- a/src/comp/middle/resolve.rs +++ b/src/comp/middle/resolve.rs @@ -444,7 +444,17 @@ fn fold_expr_path(&env e, &span sp, &ast.path p, &option.t[def] d, // the expr_field(expr_field(...(expr_path(...)))) we should return. auto index = new_def_hash[def_wrap](); - find_final_def(e, index, sp, p.node.idents, none[ast.def_id]); + auto d = find_final_def(e, index, sp, p.node.idents, none[ast.def_id]); + alt (d) { + case (def_wrap_expr_field(_)) { + } + case (def_wrap_other(_)) { + } + case (def_wrap_mod(?m)) { + e.sess.span_err(sp, + "can't refer to a module as a first-class value"); + } + } auto p_ = rec(node=rec(idents = vec(id0) with p.node) with p); auto ex = @fold.respan[ast.expr_](sp, ast.expr_path(p_, d_, a)); diff --git a/src/test/compile-fail/bad-expr-path2.rs b/src/test/compile-fail/bad-expr-path2.rs new file mode 100644 index 00000000..a2f58f8e --- /dev/null +++ b/src/test/compile-fail/bad-expr-path2.rs @@ -0,0 +1,10 @@ +// error-pattern: can't refer to a module as a first-class value + +mod m1 { + mod a { + } +} + +fn main(vec[str] args) { + log m1.a; +} |