about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-11-19 13:59:59 -0800
committerBrian Anderson <banderson@mozilla.com>2012-11-19 14:00:39 -0800
commit9bed0ddb0e782f7227d4ffcfa5eddeb8b13bf52a (patch)
treed1cd374c507eeae77856d2593dd726cacbe1f9b2
parent371be3c6c4c9be74ee224f74f41006fefa3dda1b (diff)
Fix parsing of interpolated paths
-rw-r--r--src/libsyntax/parse/parser.rs3
-rw-r--r--src/test/run-pass/macro-path.rs16
2 files changed, 18 insertions, 1 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index f49447215fe..3e8f0840883 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -566,7 +566,8 @@ impl Parser {
             self.parse_borrowed_pointee()
         } else if self.token_is_fn_keyword(self.token) {
             self.parse_ty_fn(None, None)
-        } else if self.token == token::MOD_SEP || is_ident(self.token) {
+        } else if self.token == token::MOD_SEP
+            || is_ident_or_path(self.token) {
             let path = self.parse_path_with_tps(colons_before_params);
             ty_path(path, self.get_id())
         } else { self.fatal(~"expected type"); };
diff --git a/src/test/run-pass/macro-path.rs b/src/test/run-pass/macro-path.rs
new file mode 100644
index 00000000000..6c5a944ee29
--- /dev/null
+++ b/src/test/run-pass/macro-path.rs
@@ -0,0 +1,16 @@
+mod m {
+    pub type t = int;
+}
+
+fn macros() {
+    macro_rules! foo {
+        ($p:path) => {
+            fn f() -> $p { 10 }
+            f()
+        }
+    }
+}
+
+fn main() {
+    assert foo!(m::t) == 10;
+}