libsyntax: Implement the new box
syntax for unique pointers.
This commit is contained in:
parent
a87786e3e9
commit
775ccadd25
@ -2326,6 +2326,22 @@ pub fn parse_prefix_expr(&self) -> @Expr {
|
||||
_ => 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);
|
||||
|
@ -465,15 +465,17 @@ pub mod 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
Normal file
8
src/test/run-pass/new-box-syntax.rs
Normal file
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user