about summary refs log tree commit diff
diff options
context:
space:
mode:
authorChris Morgan <me@chrismorgan.info>2014-02-27 12:16:18 +1100
committerChris Morgan <me@chrismorgan.info>2014-02-27 12:16:18 +1100
commite6b032a9efa4df2932bd6999c4c9dc7a74a12e24 (patch)
tree1c6233cfca75c3d2866a549862b12601785aa0b6
parentb4d923852e959e1bb79ebfa12e5951caee1a95b2 (diff)
downloadrust-e6b032a9efa4df2932bd6999c4c9dc7a74a12e24.tar.gz
rust-e6b032a9efa4df2932bd6999c4c9dc7a74a12e24.zip
Fix a pretty printer crash on `/***`.
The pretty printer was treating block comments with more than two
asterisks after the first slash (e.g. `/***`) as doc comments (which are
attributes), whereas in actual fact they are just regular comments.
-rw-r--r--src/libsyntax/parse/comments.rs2
-rw-r--r--src/test/pretty/block-comment-multiple-asterisks.rs14
2 files changed, 15 insertions, 1 deletions
diff --git a/src/libsyntax/parse/comments.rs b/src/libsyntax/parse/comments.rs
index e0ae9ce2812..bd1c4f9babb 100644
--- a/src/libsyntax/parse/comments.rs
+++ b/src/libsyntax/parse/comments.rs
@@ -260,7 +260,7 @@ fn read_block_comment(rdr: &StringReader,
     let mut curr_line = ~"/*";
 
     // doc-comments are not really comments, they are attributes
-    if rdr.curr_is('*') || rdr.curr_is('!') {
+    if (rdr.curr_is('*') && !nextch_is(rdr, '*')) || rdr.curr_is('!') {
         while !(rdr.curr_is('*') && nextch_is(rdr, '/')) && !is_eof(rdr) {
             curr_line.push_char(rdr.curr.get().unwrap());
             bump(rdr);
diff --git a/src/test/pretty/block-comment-multiple-asterisks.rs b/src/test/pretty/block-comment-multiple-asterisks.rs
new file mode 100644
index 00000000000..f9f657fa8e2
--- /dev/null
+++ b/src/test/pretty/block-comment-multiple-asterisks.rs
@@ -0,0 +1,14 @@
+// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+// pp-exact
+/***
+More than two asterisks means that it isn't a doc comment.
+*/