about summary refs log tree commit diff
path: root/src/libsyntax
diff options
context:
space:
mode:
authorPaul Stansifer <paul.stansifer@gmail.com>2012-07-30 17:56:53 -0700
committerPaul Stansifer <paul.stansifer@gmail.com>2012-07-30 18:38:15 -0700
commite6af5eeaa2919abf94f805af488b44e68eea72c4 (patch)
tree3cad289ec7423052b8b1b47f396daf3f862e2a7b /src/libsyntax
parent3819b6b3d11c2ae8d9a368049d679d2a096569a0 (diff)
downloadrust-e6af5eeaa2919abf94f805af488b44e68eea72c4.tar.gz
rust-e6af5eeaa2919abf94f805af488b44e68eea72c4.zip
Fix pretty-printing of consecutive idents.
Diffstat (limited to 'src/libsyntax')
-rw-r--r--src/libsyntax/print/pp.rs6
-rw-r--r--src/libsyntax/print/pprust.rs12
2 files changed, 12 insertions, 6 deletions
diff --git a/src/libsyntax/print/pp.rs b/src/libsyntax/print/pp.rs
index d01a111364a..a2479ef1365 100644
--- a/src/libsyntax/print/pp.rs
+++ b/src/libsyntax/print/pp.rs
@@ -118,7 +118,8 @@ fn mk_printer(out: io::writer, linewidth: uint) -> printer {
                mut top: 0u,
                mut bottom: 0u,
                print_stack: dvec(),
-               mut pending_indentation: 0})
+               mut pending_indentation: 0,
+               mut token_tree_last_was_ident: false})
 }
 
 
@@ -223,7 +224,8 @@ type printer_ = {
     // stack of blocks-in-progress being flushed by print
     print_stack: dvec<print_stack_elt>,
     // buffered indentation to avoid writing trailing whitespace
-    mut pending_indentation: int
+    mut pending_indentation: int,
+    mut token_tree_last_was_ident: bool
 };
 
 enum printer {
diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs
index 3c1252d3ddc..cf97bd7c692 100644
--- a/src/libsyntax/print/pprust.rs
+++ b/src/libsyntax/print/pprust.rs
@@ -622,12 +622,14 @@ fn print_tt(s: ps, tt: ast::token_tree) {
         for tts.each() |tt_elt| { print_tt(s, tt_elt); }
       }
       ast::tt_tok(_, tk) {
-        word(s.s, parse::token::to_str(*s.intr, tk));
         alt tk {
-          // gotta keep them separated
-          parse::token::IDENT(*) { word(s.s, ~" ") }
-          _ {}
+          parse::token::IDENT(*) { // don't let idents run together
+            if s.s.token_tree_last_was_ident { word(s.s, ~" ") }
+            s.s.token_tree_last_was_ident = true;
+          }
+          _ { s.s.token_tree_last_was_ident = false; }
         }
+        word(s.s, parse::token::to_str(*s.intr, tk));
       }
       ast::tt_seq(_, tts, sep, zerok) {
         word(s.s, ~"$(");
@@ -638,9 +640,11 @@ fn print_tt(s: ps, tt: ast::token_tree) {
           none {}
         }
         word(s.s, if zerok { ~"*" } else { ~"+" });
+        s.s.token_tree_last_was_ident = false;
       }
       ast::tt_nonterminal(_, name) {
         word(s.s, ~"$" + *name);
+        s.s.token_tree_last_was_ident = true;
       }
     }
 }