Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

libsyntax: Implement the new `box` syntax for unique pointers.

  • Loading branch information...
commit 775ccadd255a034745e2b741434bd6a159a10869 1 parent a87786e
Patrick Walton pcwalton authored
16 src/libsyntax/parse/parser.rs
View
@@ -2326,6 +2326,22 @@ impl Parser {
_ => self.mk_unary(UnUniq, e)
};
}
+ token::IDENT(_, _) if self.is_keyword(keywords::Box) => {
+ self.bump();
+
+ let subexpression = self.parse_prefix_expr();
+ hi = subexpression.span.hi;
+ // HACK: turn `box [...]` into a boxed-evec
+ ex = match subexpression.node {
+ ExprVec(..) |
+ ExprLit(@codemap::Spanned {
+ node: lit_str(..),
+ span: _
+ }) |
+ ExprRepeat(..) => ExprVstore(subexpression, ExprVstoreUniq),
+ _ => self.mk_unary(UnUniq, subexpression)
+ };
+ }
_ => return self.parse_dot_or_call_expr()
}
return self.mk_expr(lo, hi, ex);
16 src/libsyntax/parse/token.rs
View
@@ -465,15 +465,17 @@ declare_special_idents_and_keywords! {
(45, While, "while");
(46, Continue, "continue");
(47, Proc, "proc");
+ (48, Box, "box");
'reserved:
- (48, Alignof, "alignof");
- (49, Be, "be");
- (50, Offsetof, "offsetof");
- (51, Pure, "pure");
- (52, Sizeof, "sizeof");
- (53, Typeof, "typeof");
- (54, Yield, "yield");
+ (49, Alignof, "alignof");
+ (50, Be, "be");
+ (51, Offsetof, "offsetof");
+ (52, Pure, "pure");
+ (53, Sizeof, "sizeof");
+ (54, Typeof, "typeof");
+ (55, Unsized, "unsized");
+ (56, Yield, "yield");
}
}
8 src/test/run-pass/new-box-syntax.rs
View
@@ -0,0 +1,8 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+fn main() {
+ let x: ~int = box 3;
+ println!("{}", *x);
+}
+
Please sign in to comment.
Something went wrong with that request. Please try again.