about summary refs log tree commit diff
path: root/src/libsyntax/print
diff options
context:
space:
mode:
authorJorge Aparicio <japaricious@gmail.com>2016-02-28 17:38:48 -0500
committerJorge Aparicio <japaricious@gmail.com>2016-03-07 14:39:39 -0500
commit210dd611aa1bd80ed2f4e663b3c4b87b3cea069a (patch)
treead6c6e804d47524cce05caaf60d22ac8d62d2935 /src/libsyntax/print
parentc116ae35cf49b55bd8d82e31f1ba030cf7e63867 (diff)
downloadrust-210dd611aa1bd80ed2f4e663b3c4b87b3cea069a.tar.gz
rust-210dd611aa1bd80ed2f4e663b3c4b87b3cea069a.zip
implement the `?` operator
The `?` postfix operator is sugar equivalent to the try! macro, but is more amenable to chaining:
`File::open("foo")?.metadata()?.is_dir()`.

`?` is accepted on any *expression* that can return a `Result`, e.g. `x()?`, `y!()?`, `{z}?`,
`(w)?`, etc. And binds more tightly than unary operators, e.g. `!x?` is parsed as `!(x?)`.

cc #31436
Diffstat (limited to 'src/libsyntax/print')
-rw-r--r--src/libsyntax/print/pprust.rs4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs
index 55c1af44cab..2cfed1f82f7 100644
--- a/src/libsyntax/print/pprust.rs
+++ b/src/libsyntax/print/pprust.rs
@@ -2277,6 +2277,10 @@ impl<'a> State<'a> {
                 try!(self.print_inner_attributes_inline(attrs));
                 try!(self.print_expr(&e));
                 try!(self.pclose());
+            },
+            ast::ExprKind::Try(ref e) => {
+                try!(self.print_expr(e));
+                try!(word(&mut self.s, "?"))
             }
         }
         try!(self.ann.post(self, NodeExpr(expr)));