]> git.lizzy.rs Git - rust.git/commitdiff
syntax: Don't parameterize the the pretty printer
authorAlex Crichton <alex@alexcrichton.com>
Tue, 18 Mar 2014 05:27:37 +0000 (22:27 -0700)
committerAlex Crichton <alex@alexcrichton.com>
Tue, 18 Mar 2014 20:48:03 +0000 (13:48 -0700)
The pretty printer constitues an enormous amount of code, there's no reason for
it to be generic. This just least to a huge amount of metadata which isn't
necessary. Instead, this change migrates the pretty printer to using a trait
object instead.

Closes #12985

src/librustc/driver/driver.rs
src/librustc/middle/dataflow.rs
src/libsyntax/fold.rs
src/libsyntax/print/pprust.rs

index 5926f535ad8985a4837427d13a5ae08589d03dbe..94965e7e0dc3f1d8d7009dd5cf51e17ce614caa9 100644 (file)
@@ -596,7 +596,7 @@ pub fn compile_input(sess: Session, cfg: ast::CrateConfig, input: &Input,
 
 impl pprust::PpAnn for IdentifiedAnnotation {
     fn pre(&self,
-           s: &mut pprust::State<IdentifiedAnnotation>,
+           s: &mut pprust::State,
            node: pprust::AnnNode) -> io::IoResult<()> {
         match node {
             pprust::NodeExpr(_) => s.popen(),
@@ -604,7 +604,7 @@ fn pre(&self,
         }
     }
     fn post(&self,
-            s: &mut pprust::State<IdentifiedAnnotation>,
+            s: &mut pprust::State,
             node: pprust::AnnNode) -> io::IoResult<()> {
         match node {
             pprust::NodeItem(item) => {
@@ -634,7 +634,7 @@ struct TypedAnnotation {
 
 impl pprust::PpAnn for TypedAnnotation {
     fn pre(&self,
-           s: &mut pprust::State<TypedAnnotation>,
+           s: &mut pprust::State,
            node: pprust::AnnNode) -> io::IoResult<()> {
         match node {
             pprust::NodeExpr(_) => s.popen(),
@@ -642,7 +642,7 @@ fn pre(&self,
         }
     }
     fn post(&self,
-            s: &mut pprust::State<TypedAnnotation>,
+            s: &mut pprust::State,
             node: pprust::AnnNode) -> io::IoResult<()> {
         let tcx = &self.analysis.ty_cx;
         match node {
index 4253f90ef794a2d8ebdeb35f73a8084f32f38701..be49784cba1891438b5f491dd1e5640b4cee9dfb 100644 (file)
@@ -85,7 +85,7 @@ struct LoopScope<'a> {
 
 impl<'a, O:DataFlowOperator> pprust::PpAnn for DataFlowContext<'a, O> {
     fn pre(&self,
-           ps: &mut pprust::State<DataFlowContext<'a, O>>,
+           ps: &mut pprust::State,
            node: pprust::AnnNode) -> io::IoResult<()> {
         let id = match node {
             pprust::NodeExpr(expr) => expr.id,
index 973682ea7436906280f2296eda754dfb4367d96a..d9510ddad4b16cfcc9fbddf82c3eeb00ee82b09c 100644 (file)
@@ -880,8 +880,8 @@ mod test {
     use super::*;
 
     // this version doesn't care about getting comments or docstrings in.
-    fn fake_print_crate<A: pprust::PpAnn>(s: &mut pprust::State<A>,
-                                          krate: &ast::Crate) -> io::IoResult<()> {
+    fn fake_print_crate(s: &mut pprust::State,
+                        krate: &ast::Crate) -> io::IoResult<()> {
         s.print_mod(&krate.module, krate.attrs.as_slice())
     }
 
index a35bdc307c0801d9597b98b4799f478ba2348c79..2f96a71cc0fdb5ef3ffaa54fe715996775665074 100644 (file)
@@ -43,8 +43,8 @@ pub enum AnnNode<'a> {
 }
 
 pub trait PpAnn {
-    fn pre(&self, _state: &mut State<Self>, _node: AnnNode) -> IoResult<()> { Ok(()) }
-    fn post(&self, _state: &mut State<Self>, _node: AnnNode) -> IoResult<()> { Ok(()) }
+    fn pre(&self, _state: &mut State, _node: AnnNode) -> IoResult<()> { Ok(()) }
+    fn post(&self, _state: &mut State, _node: AnnNode) -> IoResult<()> { Ok(()) }
 }
 
 pub struct NoAnn;
@@ -56,7 +56,7 @@ pub struct CurrentCommentAndLiteral {
     cur_lit: uint,
 }
 
-pub struct State<'a, A> {
+pub struct State<'a> {
     s: pp::Printer,
     cm: Option<&'a CodeMap>,
     intr: @token::IdentInterner,
@@ -64,15 +64,16 @@ pub struct State<'a, A> {
     literals: Option<Vec<comments::Literal> >,
     cur_cmnt_and_lit: CurrentCommentAndLiteral,
     boxes: RefCell<Vec<pp::Breaks> >,
-    ann: &'a A
+    ann: &'a PpAnn
 }
 
-pub fn rust_printer(writer: ~io::Writer) -> State<'static, NoAnn> {
+pub fn rust_printer(writer: ~io::Writer) -> State<'static> {
     static NO_ANN: NoAnn = NoAnn;
     rust_printer_annotated(writer, &NO_ANN)
 }
 
-pub fn rust_printer_annotated<'a, A: PpAnn>(writer: ~io::Writer, ann: &'a A) -> State<'a, A> {
+pub fn rust_printer_annotated<'a>(writer: ~io::Writer,
+                                  ann: &'a PpAnn) -> State<'a> {
     State {
         s: pp::mk_printer(writer, default_columns),
         cm: None,
@@ -95,14 +96,14 @@ pub fn rust_printer_annotated<'a, A: PpAnn>(writer: ~io::Writer, ann: &'a A) ->
 // Requires you to pass an input filename and reader so that
 // it can scan the input text for comments and literals to
 // copy forward.
-pub fn print_crate<'a, A: PpAnn>(cm: &'a CodeMap,
-                                 span_diagnostic: &diagnostic::SpanHandler,
-                                 krate: &ast::Crate,
-                                 filename: ~str,
-                                 input: &mut io::Reader,
-                                 out: ~io::Writer,
-                                 ann: &'a A,
-                                 is_expanded: bool) -> IoResult<()> {
+pub fn print_crate<'a>(cm: &'a CodeMap,
+                       span_diagnostic: &diagnostic::SpanHandler,
+                       krate: &ast::Crate,
+                       filename: ~str,
+                       input: &mut io::Reader,
+                       out: ~io::Writer,
+                       ann: &'a PpAnn,
+                       is_expanded: bool) -> IoResult<()> {
     let (cmnts, lits) = comments::gather_comments_and_literals(
         span_diagnostic,
         filename,
@@ -133,7 +134,7 @@ pub fn print_crate<'a, A: PpAnn>(cm: &'a CodeMap,
     eof(&mut s.s)
 }
 
-pub fn to_str(f: |&mut State<NoAnn>| -> IoResult<()>) -> ~str {
+pub fn to_str(f: |&mut State| -> IoResult<()>) -> ~str {
     let mut s = rust_printer(~MemWriter::new());
     f(&mut s).unwrap();
     eof(&mut s.s).unwrap();
@@ -237,7 +238,7 @@ pub fn visibility_qualified(vis: ast::Visibility, s: &str) -> ~str {
     }
 }
 
-impl<'a, A: PpAnn> State<'a, A> {
+impl<'a> State<'a> {
     pub fn ibox(&mut self, u: uint) -> IoResult<()> {
         self.boxes.borrow_mut().get().push(pp::Inconsistent);
         pp::ibox(&mut self.s, u)
@@ -365,7 +366,7 @@ pub fn synth_comment(&mut self, text: ~str) -> IoResult<()> {
     }
 
     pub fn commasep<T>(&mut self, b: Breaks, elts: &[T],
-                       op: |&mut State<A>, &T| -> IoResult<()>)
+                       op: |&mut State, &T| -> IoResult<()>)
         -> IoResult<()> {
         try!(self.rbox(0u, b));
         let mut first = true;
@@ -381,7 +382,7 @@ pub fn commasep_cmnt<T>(
                          &mut self,
                          b: Breaks,
                          elts: &[T],
-                         op: |&mut State<A>, &T| -> IoResult<()>,
+                         op: |&mut State, &T| -> IoResult<()>,
                          get_span: |&T| -> codemap::Span) -> IoResult<()> {
         try!(self.rbox(0u, b));
         let len = elts.len();