diff options
| author | Eduard Burtescu <edy.burt@gmail.com> | 2015-01-13 06:02:56 +0200 |
|---|---|---|
| committer | Eduard Burtescu <edy.burt@gmail.com> | 2015-01-15 18:51:14 +0200 |
| commit | 2cdc86c180296ff2c929ec55fcf33a0f6b391b3a (patch) | |
| tree | 1d9e7cc7086adb4c17ba82171d3696ac633a8648 /src/librustc | |
| parent | 1c78ad937b4da9dd872b0a865025f3e2e885f90d (diff) | |
syntax: add fully qualified UFCS expressions.
Diffstat (limited to 'src/librustc')
| -rw-r--r-- | src/librustc/lint/builtin.rs | 2 | ||||
| -rw-r--r-- | src/librustc/middle/cfg/construct.rs | 3 | ||||
| -rw-r--r-- | src/librustc/middle/check_const.rs | 2 | ||||
| -rw-r--r-- | src/librustc/middle/check_static.rs | 2 | ||||
| -rw-r--r-- | src/librustc/middle/check_static_recursion.rs | 2 | ||||
| -rw-r--r-- | src/librustc/middle/const_eval.rs | 11 | ||||
| -rw-r--r-- | src/librustc/middle/effect.rs | 2 | ||||
| -rw-r--r-- | src/librustc/middle/expr_use_visitor.rs | 2 | ||||
| -rw-r--r-- | src/librustc/middle/liveness.rs | 14 | ||||
| -rw-r--r-- | src/librustc/middle/mem_categorization.rs | 2 | ||||
| -rw-r--r-- | src/librustc/middle/privacy.rs | 2 | ||||
| -rw-r--r-- | src/librustc/middle/reachable.rs | 2 | ||||
| -rw-r--r-- | src/librustc/middle/ty.rs | 2 |
13 files changed, 29 insertions, 19 deletions
diff --git a/src/librustc/lint/builtin.rs b/src/librustc/lint/builtin.rs index d95000ece5a..59808b302f4 100644 --- a/src/librustc/lint/builtin.rs +++ b/src/librustc/lint/builtin.rs @@ -1731,7 +1731,7 @@ impl LintPass for Stability { let mut span = e.span; let id = match e.node { - ast::ExprPath(..) | ast::ExprStruct(..) => { + ast::ExprPath(..) | ast::ExprQPath(..) | ast::ExprStruct(..) => { match cx.tcx.def_map.borrow().get(&e.id) { Some(&def) => def.def_id(), None => return diff --git a/src/librustc/middle/cfg/construct.rs b/src/librustc/middle/cfg/construct.rs index b601ea59486..07b520e5865 100644 --- a/src/librustc/middle/cfg/construct.rs +++ b/src/librustc/middle/cfg/construct.rs @@ -495,7 +495,8 @@ impl<'a, 'tcx> CFGBuilder<'a, 'tcx> { ast::ExprMac(..) | ast::ExprClosure(..) | ast::ExprLit(..) | - ast::ExprPath(..) => { + ast::ExprPath(..) | + ast::ExprQPath(..) => { self.straightline(expr, pred, None::<ast::Expr>.iter()) } } diff --git a/src/librustc/middle/check_const.rs b/src/librustc/middle/check_const.rs index 621d7274b3f..202020a9033 100644 --- a/src/librustc/middle/check_const.rs +++ b/src/librustc/middle/check_const.rs @@ -111,7 +111,7 @@ fn check_expr(v: &mut CheckCrateVisitor, e: &ast::Expr) { expression"); } } - ast::ExprPath(_) => { + ast::ExprPath(_) | ast::ExprQPath(_) => { match v.tcx.def_map.borrow()[e.id] { DefStatic(..) | DefConst(..) | DefFn(..) | DefStaticMethod(..) | DefMethod(..) | diff --git a/src/librustc/middle/check_static.rs b/src/librustc/middle/check_static.rs index 154272d2deb..026aa3c5ccf 100644 --- a/src/librustc/middle/check_static.rs +++ b/src/librustc/middle/check_static.rs @@ -228,7 +228,7 @@ impl<'a, 'tcx, 'v> Visitor<'v> for CheckStaticVisitor<'a, 'tcx> { "{} are not allowed to have custom pointers", self.msg()); } - ast::ExprPath(..) => { + ast::ExprPath(_) | ast::ExprQPath(_) => { match ty::resolve_expr(self.tcx, e) { def::DefStatic(..) if self.mode == InConstant => { let msg = "constants cannot refer to other statics, \ diff --git a/src/librustc/middle/check_static_recursion.rs b/src/librustc/middle/check_static_recursion.rs index e2a0738def1..86a58dae45a 100644 --- a/src/librustc/middle/check_static_recursion.rs +++ b/src/librustc/middle/check_static_recursion.rs @@ -93,7 +93,7 @@ impl<'a, 'ast, 'v> Visitor<'v> for CheckItemRecursionVisitor<'a, 'ast> { fn visit_expr(&mut self, e: &ast::Expr) { match e.node { - ast::ExprPath(..) => { + ast::ExprPath(_) | ast::ExprQPath(_) => { match self.def_map.borrow().get(&e.id) { Some(&DefStatic(def_id, _)) | Some(&DefConst(def_id)) if diff --git a/src/librustc/middle/const_eval.rs b/src/librustc/middle/const_eval.rs index 52352e920ce..c998d178c22 100644 --- a/src/librustc/middle/const_eval.rs +++ b/src/librustc/middle/const_eval.rs @@ -244,7 +244,7 @@ impl<'a, 'tcx> ConstEvalVisitor<'a, 'tcx> { // FIXME: (#3728) we can probably do something CCI-ish // surrounding nonlocal constants. But we don't yet. - ast::ExprPath(_) => self.lookup_constness(e), + ast::ExprPath(_) | ast::ExprQPath(_) => self.lookup_constness(e), ast::ExprRepeat(..) => general_const, @@ -356,6 +356,13 @@ pub fn const_expr_to_pat(tcx: &ty::ctxt, expr: &Expr) -> P<ast::Pat> { } } + ast::ExprQPath(_) => { + match lookup_const(tcx, expr) { + Some(actual) => return const_expr_to_pat(tcx, actual), + _ => unreachable!() + } + } + _ => ast::PatLit(P(expr.clone())) }; P(ast::Pat { id: expr.id, node: pat, span: expr.span }) @@ -542,7 +549,7 @@ pub fn eval_const_expr_partial(tcx: &ty::ctxt, e: &Expr) -> Result<const_val, St ty::ty_float(ast::TyF64) => (f64, const_float, f64) })) } - ast::ExprPath(_) => { + ast::ExprPath(_) | ast::ExprQPath(_) => { match lookup_const(tcx, e) { Some(actual_e) => eval_const_expr_partial(tcx, &*actual_e), None => Err("non-constant path in constant expr".to_string()) diff --git a/src/librustc/middle/effect.rs b/src/librustc/middle/effect.rs index f7eea6e5cb7..abb8f35f662 100644 --- a/src/librustc/middle/effect.rs +++ b/src/librustc/middle/effect.rs @@ -175,7 +175,7 @@ impl<'a, 'tcx, 'v> Visitor<'v> for EffectCheckVisitor<'a, 'tcx> { ast::ExprInlineAsm(..) => { self.require_unsafe(expr.span, "use of inline assembly"); } - ast::ExprPath(..) => { + ast::ExprPath(_) | ast::ExprQPath(_) => { if let def::DefStatic(_, true) = ty::resolve_expr(self.tcx, expr) { self.require_unsafe(expr.span, "use of mutable static"); } diff --git a/src/librustc/middle/expr_use_visitor.rs b/src/librustc/middle/expr_use_visitor.rs index e5eb439d42c..a5f2dc398e9 100644 --- a/src/librustc/middle/expr_use_visitor.rs +++ b/src/librustc/middle/expr_use_visitor.rs @@ -424,7 +424,7 @@ impl<'d,'t,'tcx,TYPER:mc::Typer<'tcx>> ExprUseVisitor<'d,'t,'tcx,TYPER> { self.walk_expr(&**subexpr) } - ast::ExprPath(..) => { } + ast::ExprPath(_) | ast::ExprQPath(_) => { } ast::ExprUnary(ast::UnDeref, ref base) => { // *base if !self.walk_overloaded_operator(expr, &**base, Vec::new(), PassArgs::ByRef) { diff --git a/src/librustc/middle/liveness.rs b/src/librustc/middle/liveness.rs index 1b1dca00422..6b9e5b2ceea 100644 --- a/src/librustc/middle/liveness.rs +++ b/src/librustc/middle/liveness.rs @@ -447,7 +447,7 @@ fn visit_arm(ir: &mut IrMaps, arm: &ast::Arm) { fn visit_expr(ir: &mut IrMaps, expr: &Expr) { match expr.node { // live nodes required for uses or definitions of variables: - ast::ExprPath(_) => { + ast::ExprPath(_) | ast::ExprQPath(_) => { let def = ir.tcx.def_map.borrow()[expr.id].clone(); debug!("expr {}: path that leads to {:?}", expr.id, def); if let DefLocal(..) = def { @@ -960,7 +960,7 @@ impl<'a, 'tcx> Liveness<'a, 'tcx> { match expr.node { // Interesting cases with control flow or which gen/kill - ast::ExprPath(_) => { + ast::ExprPath(_) | ast::ExprQPath(_) => { self.access_path(expr, succ, ACC_READ | ACC_USE) } @@ -1289,7 +1289,7 @@ impl<'a, 'tcx> Liveness<'a, 'tcx> { // just ignore such cases and treat them as reads. match expr.node { - ast::ExprPath(_) => succ, + ast::ExprPath(_) | ast::ExprQPath(_) => succ, ast::ExprField(ref e, _) => self.propagate_through_expr(&**e, succ), ast::ExprTupField(ref e, _) => self.propagate_through_expr(&**e, succ), _ => self.propagate_through_expr(expr, succ) @@ -1300,7 +1300,9 @@ impl<'a, 'tcx> Liveness<'a, 'tcx> { fn write_lvalue(&mut self, expr: &Expr, succ: LiveNode, acc: uint) -> LiveNode { match expr.node { - ast::ExprPath(_) => self.access_path(expr, succ, acc), + ast::ExprPath(_) | ast::ExprQPath(_) => { + self.access_path(expr, succ, acc) + } // We do not track other lvalues, so just propagate through // to their subcomponents. Also, it may happen that @@ -1492,7 +1494,7 @@ fn check_expr(this: &mut Liveness, expr: &Expr) { ast::ExprBlock(..) | ast::ExprMac(..) | ast::ExprAddrOf(..) | ast::ExprStruct(..) | ast::ExprRepeat(..) | ast::ExprParen(..) | ast::ExprClosure(..) | ast::ExprPath(..) | ast::ExprBox(..) | - ast::ExprRange(..) => { + ast::ExprRange(..) | ast::ExprQPath(..) => { visit::walk_expr(this, expr); } ast::ExprIfLet(..) => { @@ -1583,7 +1585,7 @@ impl<'a, 'tcx> Liveness<'a, 'tcx> { fn check_lvalue(&mut self, expr: &Expr) { match expr.node { - ast::ExprPath(_) => { + ast::ExprPath(_) | ast::ExprQPath(_) => { if let DefLocal(nid) = self.ir.tcx.def_map.borrow()[expr.id].clone() { // Assignment to an immutable variable or argument: only legal // if there is no later assignment. If this local is actually diff --git a/src/librustc/middle/mem_categorization.rs b/src/librustc/middle/mem_categorization.rs index 51ec7528432..90fe6b49911 100644 --- a/src/librustc/middle/mem_categorization.rs +++ b/src/librustc/middle/mem_categorization.rs @@ -520,7 +520,7 @@ impl<'t,'tcx,TYPER:Typer<'tcx>> MemCategorizationContext<'t,TYPER> { } } - ast::ExprPath(_) => { + ast::ExprPath(_) | ast::ExprQPath(_) => { let def = (*self.tcx().def_map.borrow())[expr.id]; self.cat_def(expr.id, expr.span, expr_ty, def) } diff --git a/src/librustc/middle/privacy.rs b/src/librustc/middle/privacy.rs index aa37c2fe348..b92870cfa42 100644 --- a/src/librustc/middle/privacy.rs +++ b/src/librustc/middle/privacy.rs @@ -920,7 +920,7 @@ impl<'a, 'tcx, 'v> Visitor<'v> for PrivacyVisitor<'a, 'tcx> { struct type?!"), } } - ast::ExprPath(..) => { + ast::ExprPath(_) | ast::ExprQPath(_) => { let guard = |&: did: ast::DefId| { let fields = ty::lookup_struct_fields(self.tcx, did); let any_priv = fields.iter().any(|f| { diff --git a/src/librustc/middle/reachable.rs b/src/librustc/middle/reachable.rs index 906607ddc5b..b7e6da8c5f6 100644 --- a/src/librustc/middle/reachable.rs +++ b/src/librustc/middle/reachable.rs @@ -104,7 +104,7 @@ impl<'a, 'tcx, 'v> Visitor<'v> for ReachableContext<'a, 'tcx> { fn visit_expr(&mut self, expr: &ast::Expr) { match expr.node { - ast::ExprPath(_) => { + ast::ExprPath(_) | ast::ExprQPath(_) => { let def = match self.tcx.def_map.borrow().get(&expr.id) { Some(&def) => def, None => { diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index 755983c71bb..525fe86cf24 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -4515,7 +4515,7 @@ pub fn expr_kind(tcx: &ctxt, expr: &ast::Expr) -> ExprKind { } match expr.node { - ast::ExprPath(..) => { + ast::ExprPath(_) | ast::ExprQPath(_) => { match resolve_expr(tcx, expr) { def::DefVariant(tid, vid, _) => { let variant_info = enum_variant_with_id(tcx, tid, vid); |
