Hex Artifact Content
Not logged in

Artifact 65d68cd677262bb12710c6dfcfcf3bb9c4f71925:

Unrecognized artifact
0000: 2f 2f 20 43 6f 70 79 72 69 67 68 74 20 32 30 31  // Copyright 201
0010: 35 20 54 68 65 20 52 75 73 74 20 50 72 6f 6a 65  5 The Rust Proje
0020: 63 74 20 44 65 76 65 6c 6f 70 65 72 73 2e 20 53  ct Developers. S
0030: 65 65 20 74 68 65 20 43 4f 50 59 52 49 47 48 54  ee the COPYRIGHT
0040: 0a 2f 2f 20 66 69 6c 65 20 61 74 20 74 68 65 20  .// file at the 
0050: 74 6f 70 2d 6c 65 76 65 6c 20 64 69 72 65 63 74  top-level direct
0060: 6f 72 79 20 6f 66 20 74 68 69 73 20 64 69 73 74  ory of this dist
0070: 72 69 62 75 74 69 6f 6e 20 61 6e 64 20 61 74 0a  ribution and at.
0080: 2f 2f 20 68 74 74 70 3a 2f 2f 72 75 73 74 2d 6c  // http://rust-l
0090: 61 6e 67 2e 6f 72 67 2f 43 4f 50 59 52 49 47 48  ang.org/COPYRIGH
00a0: 54 2e 0a 2f 2f 0a 2f 2f 20 4c 69 63 65 6e 73 65  T..//.// License
00b0: 64 20 75 6e 64 65 72 20 74 68 65 20 41 70 61 63  d under the Apac
00c0: 68 65 20 4c 69 63 65 6e 73 65 2c 20 56 65 72 73  he License, Vers
00d0: 69 6f 6e 20 32 2e 30 20 3c 4c 49 43 45 4e 53 45  ion 2.0 <LICENSE
00e0: 2d 41 50 41 43 48 45 20 6f 72 0a 2f 2f 20 68 74  -APACHE or.// ht
00f0: 74 70 3a 2f 2f 77 77 77 2e 61 70 61 63 68 65 2e  tp://www.apache.
0100: 6f 72 67 2f 6c 69 63 65 6e 73 65 73 2f 4c 49 43  org/licenses/LIC
0110: 45 4e 53 45 2d 32 2e 30 3e 20 6f 72 20 74 68 65  ENSE-2.0> or the
0120: 20 4d 49 54 20 6c 69 63 65 6e 73 65 0a 2f 2f 20   MIT license.// 
0130: 3c 4c 49 43 45 4e 53 45 2d 4d 49 54 20 6f 72 20  <LICENSE-MIT or 
0140: 68 74 74 70 3a 2f 2f 6f 70 65 6e 73 6f 75 72 63  http://opensourc
0150: 65 2e 6f 72 67 2f 6c 69 63 65 6e 73 65 73 2f 4d  e.org/licenses/M
0160: 49 54 3e 2c 20 61 74 20 79 6f 75 72 0a 2f 2f 20  IT>, at your.// 
0170: 6f 70 74 69 6f 6e 2e 20 54 68 69 73 20 66 69 6c  option. This fil
0180: 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 6f 70  e may not be cop
0190: 69 65 64 2c 20 6d 6f 64 69 66 69 65 64 2c 20 6f  ied, modified, o
01a0: 72 20 64 69 73 74 72 69 62 75 74 65 64 0a 2f 2f  r distributed.//
01b0: 20 65 78 63 65 70 74 20 61 63 63 6f 72 64 69 6e   except accordin
01c0: 67 20 74 6f 20 74 68 6f 73 65 20 74 65 72 6d 73  g to those terms
01d0: 2e 0a 0a 2f 2f 21 20 54 68 65 20 4d 49 52 20 69  ...//! The MIR i
01e0: 73 20 74 72 61 6e 73 6c 61 74 65 64 20 66 72 6f  s translated fro
01f0: 6d 20 73 6f 6d 65 20 68 69 67 68 2d 6c 65 76 65  m some high-leve
0200: 6c 20 61 62 73 74 72 61 63 74 20 49 52 0a 2f 2f  l abstract IR.//
0210: 21 20 28 48 41 49 52 29 2e 20 54 68 69 73 20 73  ! (HAIR). This s
0220: 65 63 74 69 6f 6e 20 64 65 66 69 6e 65 73 20 74  ection defines t
0230: 68 65 20 48 41 49 52 20 61 6c 6f 6e 67 20 77 69  he HAIR along wi
0240: 74 68 20 61 20 74 72 61 69 74 20 66 6f 72 0a 2f  th a trait for./
0250: 2f 21 20 61 63 63 65 73 73 69 6e 67 20 69 74 2e  /! accessing it.
0260: 20 54 68 65 20 69 6e 74 65 6e 74 69 6f 6e 20 69   The intention i
0270: 73 20 74 6f 20 61 6c 6c 6f 77 20 4d 49 52 20 63  s to allow MIR c
0280: 6f 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f 20 62  onstruction to b
0290: 65 0a 2f 2f 21 20 75 6e 69 74 2d 74 65 73 74 65  e.//! unit-teste
02a0: 64 20 61 6e 64 20 73 65 70 61 72 61 74 65 64 20  d and separated 
02b0: 66 72 6f 6d 20 74 68 65 20 52 75 73 74 20 73 6f  from the Rust so
02c0: 75 72 63 65 20 61 6e 64 20 63 6f 6d 70 69 6c 65  urce and compile
02d0: 72 20 64 61 74 61 0a 2f 2f 21 20 73 74 72 75 63  r data.//! struc
02e0: 74 75 72 65 73 2e 0a 0a 75 73 65 20 72 75 73 74  tures...use rust
02f0: 63 3a 3a 6d 69 72 3a 3a 7b 42 69 6e 4f 70 2c 20  c::mir::{BinOp, 
0300: 42 6f 72 72 6f 77 4b 69 6e 64 2c 20 46 69 65 6c  BorrowKind, Fiel
0310: 64 2c 20 4c 69 74 65 72 61 6c 2c 20 55 6e 4f 70  d, Literal, UnOp
0320: 7d 3b 0a 75 73 65 20 72 75 73 74 63 3a 3a 68 69  };.use rustc::hi
0330: 72 3a 3a 64 65 66 5f 69 64 3a 3a 44 65 66 49 64  r::def_id::DefId
0340: 3b 0a 75 73 65 20 72 75 73 74 63 3a 3a 6d 69 64  ;.use rustc::mid
0350: 64 6c 65 3a 3a 72 65 67 69 6f 6e 3b 0a 75 73 65  dle::region;.use
0360: 20 72 75 73 74 63 3a 3a 74 79 3a 3a 73 75 62 73   rustc::ty::subs
0370: 74 3a 3a 53 75 62 73 74 73 3b 0a 75 73 65 20 72  t::Substs;.use r
0380: 75 73 74 63 3a 3a 74 79 3a 3a 7b 41 64 74 44 65  ustc::ty::{AdtDe
0390: 66 2c 20 43 6c 6f 73 75 72 65 53 75 62 73 74 73  f, ClosureSubsts
03a0: 2c 20 52 65 67 69 6f 6e 2c 20 54 79 2c 20 47 65  , Region, Ty, Ge
03b0: 6e 65 72 61 74 6f 72 49 6e 74 65 72 69 6f 72 7d  neratorInterior}
03c0: 3b 0a 75 73 65 20 72 75 73 74 63 3a 3a 68 69 72  ;.use rustc::hir
03d0: 3b 0a 75 73 65 20 73 79 6e 74 61 78 3a 3a 61 73  ;.use syntax::as
03e0: 74 3b 0a 75 73 65 20 73 79 6e 74 61 78 5f 70 6f  t;.use syntax_po
03f0: 73 3a 3a 53 70 61 6e 3b 0a 75 73 65 20 73 65 6c  s::Span;.use sel
0400: 66 3a 3a 63 78 3a 3a 43 78 3b 0a 0a 70 75 62 20  f::cx::Cx;..pub 
0410: 6d 6f 64 20 63 78 3b 0a 0a 70 75 62 20 6d 6f 64  mod cx;..pub mod
0420: 20 70 61 74 74 65 72 6e 3b 0a 70 75 62 20 75 73   pattern;.pub us
0430: 65 20 73 65 6c 66 3a 3a 70 61 74 74 65 72 6e 3a  e self::pattern:
0440: 3a 7b 42 69 6e 64 69 6e 67 4d 6f 64 65 2c 20 50  :{BindingMode, P
0450: 61 74 74 65 72 6e 2c 20 50 61 74 74 65 72 6e 4b  attern, PatternK
0460: 69 6e 64 2c 20 46 69 65 6c 64 50 61 74 74 65 72  ind, FieldPatter
0470: 6e 7d 3b 0a 0a 23 5b 64 65 72 69 76 65 28 43 6f  n};..#[derive(Co
0480: 70 79 2c 20 43 6c 6f 6e 65 2c 20 44 65 62 75 67  py, Clone, Debug
0490: 29 5d 0a 70 75 62 20 65 6e 75 6d 20 4c 69 6e 74  )].pub enum Lint
04a0: 4c 65 76 65 6c 20 7b 0a 20 20 20 20 49 6e 68 65  Level {.    Inhe
04b0: 72 69 74 65 64 2c 0a 20 20 20 20 45 78 70 6c 69  rited,.    Expli
04c0: 63 69 74 28 61 73 74 3a 3a 4e 6f 64 65 49 64 29  cit(ast::NodeId)
04d0: 0a 7d 0a 0a 69 6d 70 6c 20 4c 69 6e 74 4c 65 76  .}..impl LintLev
04e0: 65 6c 20 7b 0a 20 20 20 20 70 75 62 20 66 6e 20  el {.    pub fn 
04f0: 69 73 5f 65 78 70 6c 69 63 69 74 28 73 65 6c 66  is_explicit(self
0500: 29 20 2d 3e 20 62 6f 6f 6c 20 7b 0a 20 20 20 20  ) -> bool {.    
0510: 20 20 20 20 6d 61 74 63 68 20 73 65 6c 66 20 7b      match self {
0520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 69 6e  .            Lin
0530: 74 4c 65 76 65 6c 3a 3a 49 6e 68 65 72 69 74 65  tLevel::Inherite
0540: 64 20 3d 3e 20 66 61 6c 73 65 2c 0a 20 20 20 20  d => false,.    
0550: 20 20 20 20 20 20 20 20 4c 69 6e 74 4c 65 76 65          LintLeve
0560: 6c 3a 3a 45 78 70 6c 69 63 69 74 28 5f 29 20 3d  l::Explicit(_) =
0570: 3e 20 74 72 75 65 0a 20 20 20 20 20 20 20 20 7d  > true.        }
0580: 0a 20 20 20 20 7d 0a 7d 0a 0a 23 5b 64 65 72 69  .    }.}..#[deri
0590: 76 65 28 43 6c 6f 6e 65 2c 20 44 65 62 75 67 29  ve(Clone, Debug)
05a0: 5d 0a 70 75 62 20 73 74 72 75 63 74 20 42 6c 6f  ].pub struct Blo
05b0: 63 6b 3c 27 74 63 78 3e 20 7b 0a 20 20 20 20 70  ck<'tcx> {.    p
05c0: 75 62 20 74 61 72 67 65 74 65 64 5f 62 79 5f 62  ub targeted_by_b
05d0: 72 65 61 6b 3a 20 62 6f 6f 6c 2c 0a 20 20 20 20  reak: bool,.    
05e0: 70 75 62 20 72 65 67 69 6f 6e 5f 73 63 6f 70 65  pub region_scope
05f0: 3a 20 72 65 67 69 6f 6e 3a 3a 53 63 6f 70 65 2c  : region::Scope,
0600: 0a 20 20 20 20 70 75 62 20 6f 70 74 5f 64 65 73  .    pub opt_des
0610: 74 72 75 63 74 69 6f 6e 5f 73 63 6f 70 65 3a 20  truction_scope: 
0620: 4f 70 74 69 6f 6e 3c 72 65 67 69 6f 6e 3a 3a 53  Option<region::S
0630: 63 6f 70 65 3e 2c 0a 20 20 20 20 70 75 62 20 73  cope>,.    pub s
0640: 70 61 6e 3a 20 53 70 61 6e 2c 0a 20 20 20 20 70  pan: Span,.    p
0650: 75 62 20 73 74 6d 74 73 3a 20 56 65 63 3c 53 74  ub stmts: Vec<St
0660: 6d 74 52 65 66 3c 27 74 63 78 3e 3e 2c 0a 20 20  mtRef<'tcx>>,.  
0670: 20 20 70 75 62 20 65 78 70 72 3a 20 4f 70 74 69    pub expr: Opti
0680: 6f 6e 3c 45 78 70 72 52 65 66 3c 27 74 63 78 3e  on<ExprRef<'tcx>
0690: 3e 2c 0a 20 20 20 20 70 75 62 20 73 61 66 65 74  >,.    pub safet
06a0: 79 5f 6d 6f 64 65 3a 20 42 6c 6f 63 6b 53 61 66  y_mode: BlockSaf
06b0: 65 74 79 2c 0a 7d 0a 0a 23 5b 64 65 72 69 76 65  ety,.}..#[derive
06c0: 28 43 6f 70 79 2c 20 43 6c 6f 6e 65 2c 20 44 65  (Copy, Clone, De
06d0: 62 75 67 29 5d 0a 70 75 62 20 65 6e 75 6d 20 42  bug)].pub enum B
06e0: 6c 6f 63 6b 53 61 66 65 74 79 20 7b 0a 20 20 20  lockSafety {.   
06f0: 20 53 61 66 65 2c 0a 20 20 20 20 45 78 70 6c 69   Safe,.    Expli
0700: 63 69 74 55 6e 73 61 66 65 28 61 73 74 3a 3a 4e  citUnsafe(ast::N
0710: 6f 64 65 49 64 29 2c 0a 20 20 20 20 50 75 73 68  odeId),.    Push
0720: 55 6e 73 61 66 65 2c 0a 20 20 20 20 50 6f 70 55  Unsafe,.    PopU
0730: 6e 73 61 66 65 0a 7d 0a 0a 23 5b 64 65 72 69 76  nsafe.}..#[deriv
0740: 65 28 43 6c 6f 6e 65 2c 20 44 65 62 75 67 29 5d  e(Clone, Debug)]
0750: 0a 70 75 62 20 65 6e 75 6d 20 53 74 6d 74 52 65  .pub enum StmtRe
0760: 66 3c 27 74 63 78 3e 20 7b 0a 20 20 20 20 4d 69  f<'tcx> {.    Mi
0770: 72 72 6f 72 28 42 6f 78 3c 53 74 6d 74 3c 27 74  rror(Box<Stmt<'t
0780: 63 78 3e 3e 29 2c 0a 7d 0a 0a 23 5b 64 65 72 69  cx>>),.}..#[deri
0790: 76 65 28 43 6c 6f 6e 65 2c 20 44 65 62 75 67 29  ve(Clone, Debug)
07a0: 5d 0a 70 75 62 20 73 74 72 75 63 74 20 53 74 6d  ].pub struct Stm
07b0: 74 3c 27 74 63 78 3e 20 7b 0a 20 20 20 20 70 75  t<'tcx> {.    pu
07c0: 62 20 6b 69 6e 64 3a 20 53 74 6d 74 4b 69 6e 64  b kind: StmtKind
07d0: 3c 27 74 63 78 3e 2c 0a 20 20 20 20 70 75 62 20  <'tcx>,.    pub 
07e0: 6f 70 74 5f 64 65 73 74 72 75 63 74 69 6f 6e 5f  opt_destruction_
07f0: 73 63 6f 70 65 3a 20 4f 70 74 69 6f 6e 3c 72 65  scope: Option<re
0800: 67 69 6f 6e 3a 3a 53 63 6f 70 65 3e 2c 0a 7d 0a  gion::Scope>,.}.
0810: 0a 23 5b 64 65 72 69 76 65 28 43 6c 6f 6e 65 2c  .#[derive(Clone,
0820: 20 44 65 62 75 67 29 5d 0a 70 75 62 20 65 6e 75   Debug)].pub enu
0830: 6d 20 53 74 6d 74 4b 69 6e 64 3c 27 74 63 78 3e  m StmtKind<'tcx>
0840: 20 7b 0a 20 20 20 20 45 78 70 72 20 7b 0a 20 20   {.    Expr {.  
0850: 20 20 20 20 20 20 2f 2f 2f 20 73 63 6f 70 65 20        /// scope 
0860: 66 6f 72 20 74 68 69 73 20 73 74 61 74 65 6d 65  for this stateme
0870: 6e 74 3b 20 6d 61 79 20 62 65 20 75 73 65 64 20  nt; may be used 
0880: 61 73 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74  as lifetime of t
0890: 65 6d 70 6f 72 61 72 69 65 73 0a 20 20 20 20 20  emporaries.     
08a0: 20 20 20 73 63 6f 70 65 3a 20 72 65 67 69 6f 6e     scope: region
08b0: 3a 3a 53 63 6f 70 65 2c 0a 0a 20 20 20 20 20 20  ::Scope,..      
08c0: 20 20 2f 2f 2f 20 65 78 70 72 65 73 73 69 6f 6e    /// expression
08d0: 20 62 65 69 6e 67 20 65 76 61 6c 75 61 74 65 64   being evaluated
08e0: 20 69 6e 20 74 68 69 73 20 73 74 61 74 65 6d 65   in this stateme
08f0: 6e 74 0a 20 20 20 20 20 20 20 20 65 78 70 72 3a  nt.        expr:
0900: 20 45 78 70 72 52 65 66 3c 27 74 63 78 3e 2c 0a   ExprRef<'tcx>,.
0910: 20 20 20 20 7d 2c 0a 0a 20 20 20 20 4c 65 74 20      },..    Let 
0920: 7b 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 63  {.        /// sc
0930: 6f 70 65 20 66 6f 72 20 76 61 72 69 61 62 6c 65  ope for variable
0940: 73 20 62 6f 75 6e 64 20 69 6e 20 74 68 69 73 20  s bound in this 
0950: 6c 65 74 3b 20 63 6f 76 65 72 73 20 74 68 69 73  let; covers this
0960: 20 61 6e 64 0a 20 20 20 20 20 20 20 20 2f 2f 2f   and.        ///
0970: 20 72 65 6d 61 69 6e 69 6e 67 20 73 74 61 74 65   remaining state
0980: 6d 65 6e 74 73 20 69 6e 20 62 6c 6f 63 6b 0a 20  ments in block. 
0990: 20 20 20 20 20 20 20 72 65 6d 61 69 6e 64 65 72         remainder
09a0: 5f 73 63 6f 70 65 3a 20 72 65 67 69 6f 6e 3a 3a  _scope: region::
09b0: 53 63 6f 70 65 2c 0a 0a 20 20 20 20 20 20 20 20  Scope,..        
09c0: 2f 2f 2f 20 73 63 6f 70 65 20 66 6f 72 20 74 68  /// scope for th
09d0: 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
09e0: 20 69 74 73 65 6c 66 3b 20 6d 69 67 68 74 20 62   itself; might b
09f0: 65 20 75 73 65 64 20 61 73 0a 20 20 20 20 20 20  e used as.      
0a00: 20 20 2f 2f 2f 20 6c 69 66 65 74 69 6d 65 20 6f    /// lifetime o
0a10: 66 20 74 65 6d 70 6f 72 61 72 69 65 73 0a 20 20  f temporaries.  
0a20: 20 20 20 20 20 20 69 6e 69 74 5f 73 63 6f 70 65        init_scope
0a30: 3a 20 72 65 67 69 6f 6e 3a 3a 53 63 6f 70 65 2c  : region::Scope,
0a40: 0a 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 65  ..        /// le
0a50: 74 20 3c 50 41 54 3e 3a 20 74 79 20 3d 20 2e 2e  t <PAT>: ty = ..
0a60: 2e 0a 20 20 20 20 20 20 20 20 70 61 74 74 65 72  ..        patter
0a70: 6e 3a 20 50 61 74 74 65 72 6e 3c 27 74 63 78 3e  n: Pattern<'tcx>
0a80: 2c 0a 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c  ,..        /// l
0a90: 65 74 20 70 61 74 3a 20 3c 54 59 3e 20 3d 20 69  et pat: <TY> = i
0aa0: 6e 69 74 20 2e 2e 2e 0a 20 20 20 20 20 20 20 20  nit ....        
0ab0: 74 79 3a 20 4f 70 74 69 6f 6e 3c 68 69 72 3a 3a  ty: Option<hir::
0ac0: 48 69 72 49 64 3e 2c 0a 0a 20 20 20 20 20 20 20  HirId>,..       
0ad0: 20 2f 2f 2f 20 6c 65 74 20 70 61 74 3a 20 74 79   /// let pat: ty
0ae0: 20 3d 20 3c 49 4e 49 54 3e 20 2e 2e 2e 0a 20 20   = <INIT> ....  
0af0: 20 20 20 20 20 20 69 6e 69 74 69 61 6c 69 7a 65        initialize
0b00: 72 3a 20 4f 70 74 69 6f 6e 3c 45 78 70 72 52 65  r: Option<ExprRe
0b10: 66 3c 27 74 63 78 3e 3e 2c 0a 0a 20 20 20 20 20  f<'tcx>>,..     
0b20: 20 20 20 2f 2f 2f 20 74 68 65 20 6c 69 6e 74 20     /// the lint 
0b30: 6c 65 76 65 6c 20 66 6f 72 20 74 68 69 73 20 6c  level for this l
0b40: 65 74 2d 73 74 61 74 65 6d 65 6e 74 0a 20 20 20  et-statement.   
0b50: 20 20 20 20 20 6c 69 6e 74 5f 6c 65 76 65 6c 3a       lint_level:
0b60: 20 4c 69 6e 74 4c 65 76 65 6c 2c 0a 20 20 20 20   LintLevel,.    
0b70: 7d 2c 0a 7d 0a 0a 2f 2f 2f 20 54 68 65 20 48 61  },.}../// The Ha
0b80: 69 72 20 74 72 61 69 74 20 69 6d 70 6c 65 6d 65  ir trait impleme
0b90: 6e 74 6f 72 20 74 72 61 6e 73 6c 61 74 65 73 20  ntor translates 
0ba0: 74 68 65 69 72 20 65 78 70 72 65 73 73 69 6f 6e  their expression
0bb0: 73 20 28 60 26 27 74 63 78 20 48 3a 3a 45 78 70  s (`&'tcx H::Exp
0bc0: 72 60 29 0a 2f 2f 2f 20 69 6e 74 6f 20 69 6e 73  r`)./// into ins
0bd0: 74 61 6e 63 65 73 20 6f 66 20 74 68 69 73 20 60  tances of this `
0be0: 45 78 70 72 60 20 65 6e 75 6d 2e 20 54 68 69 73  Expr` enum. This
0bf0: 20 74 72 61 6e 73 6c 61 74 69 6f 6e 20 63 61 6e   translation can
0c00: 20 62 65 20 64 6f 6e 65 0a 2f 2f 2f 20 62 61 73   be done./// bas
0c10: 69 63 61 6c 6c 79 20 61 73 20 6c 61 7a 69 6c 79  ically as lazily
0c20: 20 6f 72 20 61 73 20 65 61 67 65 72 6c 79 20 61   or as eagerly a
0c30: 73 20 64 65 73 69 72 65 64 3a 20 65 76 65 72 79  s desired: every
0c40: 20 72 65 63 75 72 73 69 76 65 0a 2f 2f 2f 20 72   recursive./// r
0c50: 65 66 65 72 65 6e 63 65 20 74 6f 20 61 6e 20 65  eference to an e
0c60: 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 69  xpression in thi
0c70: 73 20 65 6e 75 6d 20 69 73 20 61 6e 20 60 45 78  s enum is an `Ex
0c80: 70 72 52 65 66 3c 27 74 63 78 3e 60 2c 20 77 68  prRef<'tcx>`, wh
0c90: 69 63 68 0a 2f 2f 2f 20 6d 61 79 20 69 6e 20 74  ich./// may in t
0ca0: 75 72 6e 20 62 65 20 61 6e 6f 74 68 65 72 20 69  urn be another i
0cb0: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
0cc0: 65 6e 75 6d 20 28 62 6f 78 65 64 29 2c 20 6f 72  enum (boxed), or
0cd0: 20 65 6c 73 65 20 61 6e 0a 2f 2f 2f 20 75 6e 74   else an./// unt
0ce0: 72 61 6e 73 6c 61 74 65 64 20 60 26 27 74 63 78  ranslated `&'tcx
0cf0: 20 48 3a 3a 45 78 70 72 60 2e 20 4e 6f 74 65 20   H::Expr`. Note 
0d00: 74 68 61 74 20 69 6e 73 74 61 6e 63 65 73 20 6f  that instances o
0d10: 66 20 60 45 78 70 72 60 20 61 72 65 20 76 65 72  f `Expr` are ver
0d20: 79 0a 2f 2f 2f 20 73 68 6f 72 74 6c 69 76 65 64  y./// shortlived
0d30: 2e 20 54 68 65 79 20 61 72 65 20 63 72 65 61 74  . They are creat
0d40: 65 64 20 62 79 20 60 48 61 69 72 3a 3a 74 6f 5f  ed by `Hair::to_
0d50: 65 78 70 72 60 2c 20 61 6e 61 6c 79 7a 65 64 20  expr`, analyzed 
0d60: 61 6e 64 0a 2f 2f 2f 20 63 6f 6e 76 65 72 74 65  and./// converte
0d70: 64 20 69 6e 74 6f 20 4d 49 52 2c 20 61 6e 64 20  d into MIR, and 
0d80: 74 68 65 6e 20 64 69 73 63 61 72 64 65 64 2e 0a  then discarded..
0d90: 2f 2f 2f 0a 2f 2f 2f 20 49 66 20 79 6f 75 20 63  ///./// If you c
0da0: 6f 6d 70 61 72 65 20 60 45 78 70 72 60 20 74 6f  ompare `Expr` to
0db0: 20 74 68 65 20 66 75 6c 6c 20 63 6f 6d 70 69 6c   the full compil
0dc0: 65 72 20 41 53 54 2c 20 79 6f 75 20 77 69 6c 6c  er AST, you will
0dd0: 20 73 65 65 20 69 74 20 69 73 0a 2f 2f 2f 20 61   see it is./// a
0de0: 20 67 6f 6f 64 20 62 69 74 20 73 69 6d 70 6c 65   good bit simple
0df0: 72 2e 20 49 6e 20 66 61 63 74 2c 20 61 20 6e 75  r. In fact, a nu
0e00: 6d 62 65 72 20 6f 66 20 74 68 65 20 6d 6f 72 65  mber of the more
0e10: 20 73 74 72 61 69 67 68 74 2d 66 6f 72 77 61 72   straight-forwar
0e20: 64 0a 2f 2f 2f 20 4d 49 52 20 73 69 6d 70 6c 69  d./// MIR simpli
0e30: 66 69 63 61 74 69 6f 6e 73 20 61 72 65 20 61 6c  fications are al
0e40: 72 65 61 64 79 20 64 6f 6e 65 20 69 6e 20 74 68  ready done in th
0e50: 65 20 69 6d 70 6c 20 6f 66 20 60 48 61 69 72 60  e impl of `Hair`
0e60: 2e 20 46 6f 72 0a 2f 2f 2f 20 65 78 61 6d 70 6c  . For./// exampl
0e70: 65 2c 20 6d 65 74 68 6f 64 20 63 61 6c 6c 73 20  e, method calls 
0e80: 61 6e 64 20 6f 76 65 72 6c 6f 61 64 65 64 20 6f  and overloaded o
0e90: 70 65 72 61 74 6f 72 73 20 61 72 65 20 61 62 73  perators are abs
0ea0: 65 6e 74 3a 20 74 68 65 79 20 61 72 65 0a 2f 2f  ent: they are.//
0eb0: 2f 20 65 78 70 65 63 74 65 64 20 74 6f 20 62 65  / expected to be
0ec0: 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
0ed0: 60 45 78 70 72 3a 3a 43 61 6c 6c 60 20 69 6e 73  `Expr::Call` ins
0ee0: 74 61 6e 63 65 73 2e 0a 23 5b 64 65 72 69 76 65  tances..#[derive
0ef0: 28 43 6c 6f 6e 65 2c 20 44 65 62 75 67 29 5d 0a  (Clone, Debug)].
0f00: 70 75 62 20 73 74 72 75 63 74 20 45 78 70 72 3c  pub struct Expr<
0f10: 27 74 63 78 3e 20 7b 0a 20 20 20 20 2f 2f 2f 20  'tcx> {.    /// 
0f20: 74 79 70 65 20 6f 66 20 74 68 69 73 20 65 78 70  type of this exp
0f30: 72 65 73 73 69 6f 6e 0a 20 20 20 20 70 75 62 20  ression.    pub 
0f40: 74 79 3a 20 54 79 3c 27 74 63 78 3e 2c 0a 0a 20  ty: Ty<'tcx>,.. 
0f50: 20 20 20 2f 2f 2f 20 6c 69 66 65 74 69 6d 65 20     /// lifetime 
0f60: 6f 66 20 74 68 69 73 20 65 78 70 72 65 73 73 69  of this expressi
0f70: 6f 6e 20 69 66 20 69 74 20 73 68 6f 75 6c 64 20  on if it should 
0f80: 62 65 20 73 70 69 6c 6c 65 64 20 69 6e 74 6f 20  be spilled into 
0f90: 61 0a 20 20 20 20 2f 2f 2f 20 74 65 6d 70 6f 72  a.    /// tempor
0fa0: 61 72 79 3b 20 73 68 6f 75 6c 64 20 62 65 20 4e  ary; should be N
0fb0: 6f 6e 65 20 6f 6e 6c 79 20 69 66 20 69 6e 20 61  one only if in a
0fc0: 20 63 6f 6e 73 74 61 6e 74 20 63 6f 6e 74 65 78   constant contex
0fd0: 74 0a 20 20 20 20 70 75 62 20 74 65 6d 70 5f 6c  t.    pub temp_l
0fe0: 69 66 65 74 69 6d 65 3a 20 4f 70 74 69 6f 6e 3c  ifetime: Option<
0ff0: 72 65 67 69 6f 6e 3a 3a 53 63 6f 70 65 3e 2c 0a  region::Scope>,.
1000: 0a 20 20 20 20 2f 2f 2f 20 73 70 61 6e 20 6f 66  .    /// span of
1010: 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
1020: 69 6e 20 74 68 65 20 73 6f 75 72 63 65 0a 20 20  in the source.  
1030: 20 20 70 75 62 20 73 70 61 6e 3a 20 53 70 61 6e    pub span: Span
1040: 2c 0a 0a 20 20 20 20 2f 2f 2f 20 6b 69 6e 64 20  ,..    /// kind 
1050: 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 0a 20 20  of expression.  
1060: 20 20 70 75 62 20 6b 69 6e 64 3a 20 45 78 70 72    pub kind: Expr
1070: 4b 69 6e 64 3c 27 74 63 78 3e 2c 0a 7d 0a 0a 23  Kind<'tcx>,.}..#
1080: 5b 64 65 72 69 76 65 28 43 6c 6f 6e 65 2c 20 44  [derive(Clone, D
1090: 65 62 75 67 29 5d 0a 70 75 62 20 65 6e 75 6d 20  ebug)].pub enum 
10a0: 45 78 70 72 4b 69 6e 64 3c 27 74 63 78 3e 20 7b  ExprKind<'tcx> {
10b0: 0a 20 20 20 20 53 63 6f 70 65 20 7b 0a 20 20 20  .    Scope {.   
10c0: 20 20 20 20 20 72 65 67 69 6f 6e 5f 73 63 6f 70       region_scop
10d0: 65 3a 20 72 65 67 69 6f 6e 3a 3a 53 63 6f 70 65  e: region::Scope
10e0: 2c 0a 20 20 20 20 20 20 20 20 6c 69 6e 74 5f 6c  ,.        lint_l
10f0: 65 76 65 6c 3a 20 4c 69 6e 74 4c 65 76 65 6c 2c  evel: LintLevel,
1100: 0a 20 20 20 20 20 20 20 20 76 61 6c 75 65 3a 20  .        value: 
1110: 45 78 70 72 52 65 66 3c 27 74 63 78 3e 2c 0a 20  ExprRef<'tcx>,. 
1120: 20 20 20 7d 2c 0a 20 20 20 20 42 6f 78 20 7b 0a     },.    Box {.
1130: 20 20 20 20 20 20 20 20 76 61 6c 75 65 3a 20 45          value: E
1140: 78 70 72 52 65 66 3c 27 74 63 78 3e 2c 0a 20 20  xprRef<'tcx>,.  
1150: 20 20 7d 2c 0a 20 20 20 20 43 61 6c 6c 20 7b 0a    },.    Call {.
1160: 20 20 20 20 20 20 20 20 74 79 3a 20 54 79 3c 27          ty: Ty<'
1170: 74 63 78 3e 2c 0a 20 20 20 20 20 20 20 20 66 75  tcx>,.        fu
1180: 6e 3a 20 45 78 70 72 52 65 66 3c 27 74 63 78 3e  n: ExprRef<'tcx>
1190: 2c 0a 20 20 20 20 20 20 20 20 61 72 67 73 3a 20  ,.        args: 
11a0: 56 65 63 3c 45 78 70 72 52 65 66 3c 27 74 63 78  Vec<ExprRef<'tcx
11b0: 3e 3e 2c 0a 20 20 20 20 7d 2c 0a 20 20 20 20 44  >>,.    },.    D
11c0: 65 72 65 66 20 7b 0a 20 20 20 20 20 20 20 20 61  eref {.        a
11d0: 72 67 3a 20 45 78 70 72 52 65 66 3c 27 74 63 78  rg: ExprRef<'tcx
11e0: 3e 2c 0a 20 20 20 20 7d 2c 20 2f 2f 20 4e 4f 54  >,.    }, // NOT
11f0: 20 6f 76 65 72 6c 6f 61 64 65 64 21 0a 20 20 20   overloaded!.   
1200: 20 42 69 6e 61 72 79 20 7b 0a 20 20 20 20 20 20   Binary {.      
1210: 20 20 6f 70 3a 20 42 69 6e 4f 70 2c 0a 20 20 20    op: BinOp,.   
1220: 20 20 20 20 20 6c 68 73 3a 20 45 78 70 72 52 65       lhs: ExprRe
1230: 66 3c 27 74 63 78 3e 2c 0a 20 20 20 20 20 20 20  f<'tcx>,.       
1240: 20 72 68 73 3a 20 45 78 70 72 52 65 66 3c 27 74   rhs: ExprRef<'t
1250: 63 78 3e 2c 0a 20 20 20 20 7d 2c 20 2f 2f 20 4e  cx>,.    }, // N
1260: 4f 54 20 6f 76 65 72 6c 6f 61 64 65 64 21 0a 20  OT overloaded!. 
1270: 20 20 20 4c 6f 67 69 63 61 6c 4f 70 20 7b 0a 20     LogicalOp {. 
1280: 20 20 20 20 20 20 20 6f 70 3a 20 4c 6f 67 69 63         op: Logic
1290: 61 6c 4f 70 2c 0a 20 20 20 20 20 20 20 20 6c 68  alOp,.        lh
12a0: 73 3a 20 45 78 70 72 52 65 66 3c 27 74 63 78 3e  s: ExprRef<'tcx>
12b0: 2c 0a 20 20 20 20 20 20 20 20 72 68 73 3a 20 45  ,.        rhs: E
12c0: 78 70 72 52 65 66 3c 27 74 63 78 3e 2c 0a 20 20  xprRef<'tcx>,.  
12d0: 20 20 7d 2c 20 2f 2f 20 4e 4f 54 20 6f 76 65 72    }, // NOT over
12e0: 6c 6f 61 64 65 64 21 0a 20 20 20 20 20 20 20 2f  loaded!.       /
12f0: 2f 20 4c 6f 67 69 63 61 6c 4f 70 20 69 73 20 64  / LogicalOp is d
1300: 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 42 69 6e  istinct from Bin
1310: 61 72 79 4f 70 20 62 65 63 61 75 73 65 20 6f 66  aryOp because of
1320: 20 6c 61 7a 79 20 65 76 61 6c 75 61 74 69 6f 6e   lazy evaluation
1330: 20 6f 66 20 74 68 65 20 6f 70 65 72 61 6e 64 73   of the operands
1340: 2e 0a 20 20 20 20 55 6e 61 72 79 20 7b 0a 20 20  ..    Unary {.  
1350: 20 20 20 20 20 20 6f 70 3a 20 55 6e 4f 70 2c 0a        op: UnOp,.
1360: 20 20 20 20 20 20 20 20 61 72 67 3a 20 45 78 70          arg: Exp
1370: 72 52 65 66 3c 27 74 63 78 3e 2c 0a 20 20 20 20  rRef<'tcx>,.    
1380: 7d 2c 20 2f 2f 20 4e 4f 54 20 6f 76 65 72 6c 6f  }, // NOT overlo
1390: 61 64 65 64 21 0a 20 20 20 20 43 61 73 74 20 7b  aded!.    Cast {
13a0: 0a 20 20 20 20 20 20 20 20 73 6f 75 72 63 65 3a  .        source:
13b0: 20 45 78 70 72 52 65 66 3c 27 74 63 78 3e 2c 0a   ExprRef<'tcx>,.
13c0: 20 20 20 20 7d 2c 0a 20 20 20 20 55 73 65 20 7b      },.    Use {
13d0: 0a 20 20 20 20 20 20 20 20 73 6f 75 72 63 65 3a  .        source:
13e0: 20 45 78 70 72 52 65 66 3c 27 74 63 78 3e 2c 0a   ExprRef<'tcx>,.
13f0: 20 20 20 20 7d 2c 20 2f 2f 20 55 73 65 20 61 20      }, // Use a 
1400: 6c 65 78 70 72 20 74 6f 20 67 65 74 20 61 20 76  lexpr to get a v
1410: 65 78 70 72 2e 0a 20 20 20 20 4e 65 76 65 72 54  expr..    NeverT
1420: 6f 41 6e 79 20 7b 0a 20 20 20 20 20 20 20 20 73  oAny {.        s
1430: 6f 75 72 63 65 3a 20 45 78 70 72 52 65 66 3c 27  ource: ExprRef<'
1440: 74 63 78 3e 2c 0a 20 20 20 20 7d 2c 0a 20 20 20  tcx>,.    },.   
1450: 20 52 65 69 66 79 46 6e 50 6f 69 6e 74 65 72 20   ReifyFnPointer 
1460: 7b 0a 20 20 20 20 20 20 20 20 73 6f 75 72 63 65  {.        source
1470: 3a 20 45 78 70 72 52 65 66 3c 27 74 63 78 3e 2c  : ExprRef<'tcx>,
1480: 0a 20 20 20 20 7d 2c 0a 20 20 20 20 43 6c 6f 73  .    },.    Clos
1490: 75 72 65 46 6e 50 6f 69 6e 74 65 72 20 7b 0a 20  ureFnPointer {. 
14a0: 20 20 20 20 20 20 20 73 6f 75 72 63 65 3a 20 45         source: E
14b0: 78 70 72 52 65 66 3c 27 74 63 78 3e 2c 0a 20 20  xprRef<'tcx>,.  
14c0: 20 20 7d 2c 0a 20 20 20 20 55 6e 73 61 66 65 46    },.    UnsafeF
14d0: 6e 50 6f 69 6e 74 65 72 20 7b 0a 20 20 20 20 20  nPointer {.     
14e0: 20 20 20 73 6f 75 72 63 65 3a 20 45 78 70 72 52     source: ExprR
14f0: 65 66 3c 27 74 63 78 3e 2c 0a 20 20 20 20 7d 2c  ef<'tcx>,.    },
1500: 0a 20 20 20 20 55 6e 73 69 7a 65 20 7b 0a 20 20  .    Unsize {.  
1510: 20 20 20 20 20 20 73 6f 75 72 63 65 3a 20 45 78        source: Ex
1520: 70 72 52 65 66 3c 27 74 63 78 3e 2c 0a 20 20 20  prRef<'tcx>,.   
1530: 20 7d 2c 0a 20 20 20 20 49 66 20 7b 0a 20 20 20   },.    If {.   
1540: 20 20 20 20 20 63 6f 6e 64 69 74 69 6f 6e 3a 20       condition: 
1550: 45 78 70 72 52 65 66 3c 27 74 63 78 3e 2c 0a 20  ExprRef<'tcx>,. 
1560: 20 20 20 20 20 20 20 74 68 65 6e 3a 20 45 78 70         then: Exp
1570: 72 52 65 66 3c 27 74 63 78 3e 2c 0a 20 20 20 20  rRef<'tcx>,.    
1580: 20 20 20 20 6f 74 68 65 72 77 69 73 65 3a 20 4f      otherwise: O
1590: 70 74 69 6f 6e 3c 45 78 70 72 52 65 66 3c 27 74  ption<ExprRef<'t
15a0: 63 78 3e 3e 2c 0a 20 20 20 20 7d 2c 0a 20 20 20  cx>>,.    },.   
15b0: 20 4c 6f 6f 70 20 7b 0a 20 20 20 20 20 20 20 20   Loop {.        
15c0: 63 6f 6e 64 69 74 69 6f 6e 3a 20 4f 70 74 69 6f  condition: Optio
15d0: 6e 3c 45 78 70 72 52 65 66 3c 27 74 63 78 3e 3e  n<ExprRef<'tcx>>
15e0: 2c 0a 20 20 20 20 20 20 20 20 62 6f 64 79 3a 20  ,.        body: 
15f0: 45 78 70 72 52 65 66 3c 27 74 63 78 3e 2c 0a 20  ExprRef<'tcx>,. 
1600: 20 20 20 7d 2c 0a 20 20 20 20 4d 61 74 63 68 20     },.    Match 
1610: 7b 0a 20 20 20 20 20 20 20 20 64 69 73 63 72 69  {.        discri
1620: 6d 69 6e 61 6e 74 3a 20 45 78 70 72 52 65 66 3c  minant: ExprRef<
1630: 27 74 63 78 3e 2c 0a 20 20 20 20 20 20 20 20 61  'tcx>,.        a
1640: 72 6d 73 3a 20 56 65 63 3c 41 72 6d 3c 27 74 63  rms: Vec<Arm<'tc
1650: 78 3e 3e 2c 0a 20 20 20 20 7d 2c 0a 20 20 20 20  x>>,.    },.    
1660: 42 6c 6f 63 6b 20 7b 0a 20 20 20 20 20 20 20 20  Block {.        
1670: 62 6f 64 79 3a 20 26 27 74 63 78 20 68 69 72 3a  body: &'tcx hir:
1680: 3a 42 6c 6f 63 6b 2c 0a 20 20 20 20 7d 2c 0a 20  :Block,.    },. 
1690: 20 20 20 41 73 73 69 67 6e 20 7b 0a 20 20 20 20     Assign {.    
16a0: 20 20 20 20 6c 68 73 3a 20 45 78 70 72 52 65 66      lhs: ExprRef
16b0: 3c 27 74 63 78 3e 2c 0a 20 20 20 20 20 20 20 20  <'tcx>,.        
16c0: 72 68 73 3a 20 45 78 70 72 52 65 66 3c 27 74 63  rhs: ExprRef<'tc
16d0: 78 3e 2c 0a 20 20 20 20 7d 2c 0a 20 20 20 20 41  x>,.    },.    A
16e0: 73 73 69 67 6e 4f 70 20 7b 0a 20 20 20 20 20 20  ssignOp {.      
16f0: 20 20 6f 70 3a 20 42 69 6e 4f 70 2c 0a 20 20 20    op: BinOp,.   
1700: 20 20 20 20 20 6c 68 73 3a 20 45 78 70 72 52 65       lhs: ExprRe
1710: 66 3c 27 74 63 78 3e 2c 0a 20 20 20 20 20 20 20  f<'tcx>,.       
1720: 20 72 68 73 3a 20 45 78 70 72 52 65 66 3c 27 74   rhs: ExprRef<'t
1730: 63 78 3e 2c 0a 20 20 20 20 7d 2c 0a 20 20 20 20  cx>,.    },.    
1740: 46 69 65 6c 64 20 7b 0a 20 20 20 20 20 20 20 20  Field {.        
1750: 6c 68 73 3a 20 45 78 70 72 52 65 66 3c 27 74 63  lhs: ExprRef<'tc
1760: 78 3e 2c 0a 20 20 20 20 20 20 20 20 6e 61 6d 65  x>,.        name
1770: 3a 20 46 69 65 6c 64 2c 0a 20 20 20 20 7d 2c 0a  : Field,.    },.
1780: 20 20 20 20 49 6e 64 65 78 20 7b 0a 20 20 20 20      Index {.    
1790: 20 20 20 20 6c 68 73 3a 20 45 78 70 72 52 65 66      lhs: ExprRef
17a0: 3c 27 74 63 78 3e 2c 0a 20 20 20 20 20 20 20 20  <'tcx>,.        
17b0: 69 6e 64 65 78 3a 20 45 78 70 72 52 65 66 3c 27  index: ExprRef<'
17c0: 74 63 78 3e 2c 0a 20 20 20 20 7d 2c 0a 20 20 20  tcx>,.    },.   
17d0: 20 56 61 72 52 65 66 20 7b 0a 20 20 20 20 20 20   VarRef {.      
17e0: 20 20 69 64 3a 20 61 73 74 3a 3a 4e 6f 64 65 49    id: ast::NodeI
17f0: 64 2c 0a 20 20 20 20 7d 2c 0a 20 20 20 20 2f 2f  d,.    },.    //
1800: 2f 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  / first argument
1810: 2c 20 75 73 65 64 20 66 6f 72 20 73 65 6c 66 20  , used for self 
1820: 69 6e 20 61 20 63 6c 6f 73 75 72 65 0a 20 20 20  in a closure.   
1830: 20 53 65 6c 66 52 65 66 2c 0a 20 20 20 20 53 74   SelfRef,.    St
1840: 61 74 69 63 52 65 66 20 7b 0a 20 20 20 20 20 20  aticRef {.      
1850: 20 20 69 64 3a 20 44 65 66 49 64 2c 0a 20 20 20    id: DefId,.   
1860: 20 7d 2c 0a 20 20 20 20 42 6f 72 72 6f 77 20 7b   },.    Borrow {
1870: 0a 20 20 20 20 20 20 20 20 72 65 67 69 6f 6e 3a  .        region:
1880: 20 52 65 67 69 6f 6e 3c 27 74 63 78 3e 2c 0a 20   Region<'tcx>,. 
1890: 20 20 20 20 20 20 20 62 6f 72 72 6f 77 5f 6b 69         borrow_ki
18a0: 6e 64 3a 20 42 6f 72 72 6f 77 4b 69 6e 64 2c 0a  nd: BorrowKind,.
18b0: 20 20 20 20 20 20 20 20 61 72 67 3a 20 45 78 70          arg: Exp
18c0: 72 52 65 66 3c 27 74 63 78 3e 2c 0a 20 20 20 20  rRef<'tcx>,.    
18d0: 7d 2c 0a 20 20 20 20 42 72 65 61 6b 20 7b 0a 20  },.    Break {. 
18e0: 20 20 20 20 20 20 20 6c 61 62 65 6c 3a 20 72 65         label: re
18f0: 67 69 6f 6e 3a 3a 53 63 6f 70 65 2c 0a 20 20 20  gion::Scope,.   
1900: 20 20 20 20 20 76 61 6c 75 65 3a 20 4f 70 74 69       value: Opti
1910: 6f 6e 3c 45 78 70 72 52 65 66 3c 27 74 63 78 3e  on<ExprRef<'tcx>
1920: 3e 2c 0a 20 20 20 20 7d 2c 0a 20 20 20 20 43 6f  >,.    },.    Co
1930: 6e 74 69 6e 75 65 20 7b 0a 20 20 20 20 20 20 20  ntinue {.       
1940: 20 6c 61 62 65 6c 3a 20 72 65 67 69 6f 6e 3a 3a   label: region::
1950: 53 63 6f 70 65 2c 0a 20 20 20 20 7d 2c 0a 20 20  Scope,.    },.  
1960: 20 20 52 65 74 75 72 6e 20 7b 0a 20 20 20 20 20    Return {.     
1970: 20 20 20 76 61 6c 75 65 3a 20 4f 70 74 69 6f 6e     value: Option
1980: 3c 45 78 70 72 52 65 66 3c 27 74 63 78 3e 3e 2c  <ExprRef<'tcx>>,
1990: 0a 20 20 20 20 7d 2c 0a 20 20 20 20 52 65 70 65  .    },.    Repe
19a0: 61 74 20 7b 0a 20 20 20 20 20 20 20 20 76 61 6c  at {.        val
19b0: 75 65 3a 20 45 78 70 72 52 65 66 3c 27 74 63 78  ue: ExprRef<'tcx
19c0: 3e 2c 0a 20 20 20 20 20 20 20 20 63 6f 75 6e 74  >,.        count
19d0: 3a 20 75 36 34 2c 0a 20 20 20 20 7d 2c 0a 20 20  : u64,.    },.  
19e0: 20 20 41 72 72 61 79 20 7b 0a 20 20 20 20 20 20    Array {.      
19f0: 20 20 66 69 65 6c 64 73 3a 20 56 65 63 3c 45 78    fields: Vec<Ex
1a00: 70 72 52 65 66 3c 27 74 63 78 3e 3e 2c 0a 20 20  prRef<'tcx>>,.  
1a10: 20 20 7d 2c 0a 20 20 20 20 54 75 70 6c 65 20 7b    },.    Tuple {
1a20: 0a 20 20 20 20 20 20 20 20 66 69 65 6c 64 73 3a  .        fields:
1a30: 20 56 65 63 3c 45 78 70 72 52 65 66 3c 27 74 63   Vec<ExprRef<'tc
1a40: 78 3e 3e 2c 0a 20 20 20 20 7d 2c 0a 20 20 20 20  x>>,.    },.    
1a50: 41 64 74 20 7b 0a 20 20 20 20 20 20 20 20 61 64  Adt {.        ad
1a60: 74 5f 64 65 66 3a 20 26 27 74 63 78 20 41 64 74  t_def: &'tcx Adt
1a70: 44 65 66 2c 0a 20 20 20 20 20 20 20 20 76 61 72  Def,.        var
1a80: 69 61 6e 74 5f 69 6e 64 65 78 3a 20 75 73 69 7a  iant_index: usiz
1a90: 65 2c 0a 20 20 20 20 20 20 20 20 73 75 62 73 74  e,.        subst
1aa0: 73 3a 20 26 27 74 63 78 20 53 75 62 73 74 73 3c  s: &'tcx Substs<
1ab0: 27 74 63 78 3e 2c 0a 20 20 20 20 20 20 20 20 66  'tcx>,.        f
1ac0: 69 65 6c 64 73 3a 20 56 65 63 3c 46 69 65 6c 64  ields: Vec<Field
1ad0: 45 78 70 72 52 65 66 3c 27 74 63 78 3e 3e 2c 0a  ExprRef<'tcx>>,.
1ae0: 20 20 20 20 20 20 20 20 62 61 73 65 3a 20 4f 70          base: Op
1af0: 74 69 6f 6e 3c 46 72 75 49 6e 66 6f 3c 27 74 63  tion<FruInfo<'tc
1b00: 78 3e 3e 0a 20 20 20 20 7d 2c 0a 20 20 20 20 43  x>>.    },.    C
1b10: 6c 6f 73 75 72 65 20 7b 0a 20 20 20 20 20 20 20  losure {.       
1b20: 20 63 6c 6f 73 75 72 65 5f 69 64 3a 20 44 65 66   closure_id: Def
1b30: 49 64 2c 0a 20 20 20 20 20 20 20 20 73 75 62 73  Id,.        subs
1b40: 74 73 3a 20 43 6c 6f 73 75 72 65 53 75 62 73 74  ts: ClosureSubst
1b50: 73 3c 27 74 63 78 3e 2c 0a 20 20 20 20 20 20 20  s<'tcx>,.       
1b60: 20 75 70 76 61 72 73 3a 20 56 65 63 3c 45 78 70   upvars: Vec<Exp
1b70: 72 52 65 66 3c 27 74 63 78 3e 3e 2c 0a 20 20 20  rRef<'tcx>>,.   
1b80: 20 20 20 20 20 69 6e 74 65 72 69 6f 72 3a 20 4f       interior: O
1b90: 70 74 69 6f 6e 3c 47 65 6e 65 72 61 74 6f 72 49  ption<GeneratorI
1ba0: 6e 74 65 72 69 6f 72 3c 27 74 63 78 3e 3e 2c 0a  nterior<'tcx>>,.
1bb0: 20 20 20 20 7d 2c 0a 20 20 20 20 4c 69 74 65 72      },.    Liter
1bc0: 61 6c 20 7b 0a 20 20 20 20 20 20 20 20 6c 69 74  al {.        lit
1bd0: 65 72 61 6c 3a 20 4c 69 74 65 72 61 6c 3c 27 74  eral: Literal<'t
1be0: 63 78 3e 2c 0a 20 20 20 20 7d 2c 0a 20 20 20 20  cx>,.    },.    
1bf0: 49 6e 6c 69 6e 65 41 73 6d 20 7b 0a 20 20 20 20  InlineAsm {.    
1c00: 20 20 20 20 61 73 6d 3a 20 26 27 74 63 78 20 68      asm: &'tcx h
1c10: 69 72 3a 3a 49 6e 6c 69 6e 65 41 73 6d 2c 0a 20  ir::InlineAsm,. 
1c20: 20 20 20 20 20 20 20 6f 75 74 70 75 74 73 3a 20         outputs: 
1c30: 56 65 63 3c 45 78 70 72 52 65 66 3c 27 74 63 78  Vec<ExprRef<'tcx
1c40: 3e 3e 2c 0a 20 20 20 20 20 20 20 20 69 6e 70 75  >>,.        inpu
1c50: 74 73 3a 20 56 65 63 3c 45 78 70 72 52 65 66 3c  ts: Vec<ExprRef<
1c60: 27 74 63 78 3e 3e 0a 20 20 20 20 7d 2c 0a 20 20  'tcx>>.    },.  
1c70: 20 20 59 69 65 6c 64 20 7b 0a 20 20 20 20 20 20    Yield {.      
1c80: 20 20 76 61 6c 75 65 3a 20 45 78 70 72 52 65 66    value: ExprRef
1c90: 3c 27 74 63 78 3e 2c 0a 20 20 20 20 7d 2c 0a 7d  <'tcx>,.    },.}
1ca0: 0a 0a 23 5b 64 65 72 69 76 65 28 43 6c 6f 6e 65  ..#[derive(Clone
1cb0: 2c 20 44 65 62 75 67 29 5d 0a 70 75 62 20 65 6e  , Debug)].pub en
1cc0: 75 6d 20 45 78 70 72 52 65 66 3c 27 74 63 78 3e  um ExprRef<'tcx>
1cd0: 20 7b 0a 20 20 20 20 48 61 69 72 28 26 27 74 63   {.    Hair(&'tc
1ce0: 78 20 68 69 72 3a 3a 45 78 70 72 29 2c 0a 20 20  x hir::Expr),.  
1cf0: 20 20 4d 69 72 72 6f 72 28 42 6f 78 3c 45 78 70    Mirror(Box<Exp
1d00: 72 3c 27 74 63 78 3e 3e 29 2c 0a 7d 0a 0a 23 5b  r<'tcx>>),.}..#[
1d10: 64 65 72 69 76 65 28 43 6c 6f 6e 65 2c 20 44 65  derive(Clone, De
1d20: 62 75 67 29 5d 0a 70 75 62 20 73 74 72 75 63 74  bug)].pub struct
1d30: 20 46 69 65 6c 64 45 78 70 72 52 65 66 3c 27 74   FieldExprRef<'t
1d40: 63 78 3e 20 7b 0a 20 20 20 20 70 75 62 20 6e 61  cx> {.    pub na
1d50: 6d 65 3a 20 46 69 65 6c 64 2c 0a 20 20 20 20 70  me: Field,.    p
1d60: 75 62 20 65 78 70 72 3a 20 45 78 70 72 52 65 66  ub expr: ExprRef
1d70: 3c 27 74 63 78 3e 2c 0a 7d 0a 0a 23 5b 64 65 72  <'tcx>,.}..#[der
1d80: 69 76 65 28 43 6c 6f 6e 65 2c 20 44 65 62 75 67  ive(Clone, Debug
1d90: 29 5d 0a 70 75 62 20 73 74 72 75 63 74 20 46 72  )].pub struct Fr
1da0: 75 49 6e 66 6f 3c 27 74 63 78 3e 20 7b 0a 20 20  uInfo<'tcx> {.  
1db0: 20 20 70 75 62 20 62 61 73 65 3a 20 45 78 70 72    pub base: Expr
1dc0: 52 65 66 3c 27 74 63 78 3e 2c 0a 20 20 20 20 70  Ref<'tcx>,.    p
1dd0: 75 62 20 66 69 65 6c 64 5f 74 79 70 65 73 3a 20  ub field_types: 
1de0: 56 65 63 3c 54 79 3c 27 74 63 78 3e 3e 0a 7d 0a  Vec<Ty<'tcx>>.}.
1df0: 0a 23 5b 64 65 72 69 76 65 28 43 6c 6f 6e 65 2c  .#[derive(Clone,
1e00: 20 44 65 62 75 67 29 5d 0a 70 75 62 20 73 74 72   Debug)].pub str
1e10: 75 63 74 20 41 72 6d 3c 27 74 63 78 3e 20 7b 0a  uct Arm<'tcx> {.
1e20: 20 20 20 20 70 75 62 20 70 61 74 74 65 72 6e 73      pub patterns
1e30: 3a 20 56 65 63 3c 50 61 74 74 65 72 6e 3c 27 74  : Vec<Pattern<'t
1e40: 63 78 3e 3e 2c 0a 20 20 20 20 70 75 62 20 67 75  cx>>,.    pub gu
1e50: 61 72 64 3a 20 4f 70 74 69 6f 6e 3c 45 78 70 72  ard: Option<Expr
1e60: 52 65 66 3c 27 74 63 78 3e 3e 2c 0a 20 20 20 20  Ref<'tcx>>,.    
1e70: 70 75 62 20 62 6f 64 79 3a 20 45 78 70 72 52 65  pub body: ExprRe
1e80: 66 3c 27 74 63 78 3e 2c 0a 20 20 20 20 70 75 62  f<'tcx>,.    pub
1e90: 20 6c 69 6e 74 5f 6c 65 76 65 6c 3a 20 4c 69 6e   lint_level: Lin
1ea0: 74 4c 65 76 65 6c 2c 0a 7d 0a 0a 23 5b 64 65 72  tLevel,.}..#[der
1eb0: 69 76 65 28 43 6f 70 79 2c 20 43 6c 6f 6e 65 2c  ive(Copy, Clone,
1ec0: 20 44 65 62 75 67 29 5d 0a 70 75 62 20 65 6e 75   Debug)].pub enu
1ed0: 6d 20 4c 6f 67 69 63 61 6c 4f 70 20 7b 0a 20 20  m LogicalOp {.  
1ee0: 20 20 41 6e 64 2c 0a 20 20 20 20 4f 72 2c 0a 7d    And,.    Or,.}
1ef0: 0a 0a 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..//////////////
1f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 2f 2f  /////////////.//
1f40: 20 54 68 65 20 4d 69 72 72 6f 72 20 74 72 61 69   The Mirror trai
1f50: 74 0a 0a 2f 2f 2f 20 22 4d 69 72 72 6f 72 69 6e  t../// "Mirrorin
1f60: 67 22 20 69 73 20 74 68 65 20 70 72 6f 63 65 73  g" is the proces
1f70: 73 20 6f 66 20 63 6f 6e 76 65 72 74 69 6e 67 20  s of converting 
1f80: 66 72 6f 6d 20 61 20 48 49 52 20 74 79 70 65 20  from a HIR type 
1f90: 69 6e 74 6f 20 6f 6e 65 0a 2f 2f 2f 20 6f 66 20  into one./// of 
1fa0: 74 68 65 20 48 41 49 52 20 74 79 70 65 73 20 64  the HAIR types d
1fb0: 65 66 69 6e 65 64 20 69 6e 20 74 68 69 73 20 66  efined in this f
1fc0: 69 6c 65 2e 20 54 68 69 73 20 69 73 20 62 61 73  ile. This is bas
1fd0: 69 63 61 6c 6c 79 20 61 20 22 6f 6e 0a 2f 2f 2f  ically a "on.///
1fe0: 20 74 68 65 20 66 6c 79 22 20 64 65 73 75 67 61   the fly" desuga
1ff0: 72 69 6e 67 20 73 74 65 70 20 74 68 61 74 20 68  ring step that h
2000: 69 64 65 73 20 61 20 6c 6f 74 20 6f 66 20 74 68  ides a lot of th
2010: 65 20 6d 65 73 73 69 6e 65 73 73 20 69 6e 20 74  e messiness in t
2020: 68 65 0a 2f 2f 2f 20 74 63 78 2e 20 46 6f 72 20  he./// tcx. For 
2030: 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 6d 69 72  example, the mir
2040: 72 6f 72 20 6f 66 20 61 20 60 26 27 74 63 78 20  ror of a `&'tcx 
2050: 68 69 72 3a 3a 45 78 70 72 60 20 69 73 20 61 6e  hir::Expr` is an
2060: 0a 2f 2f 2f 20 60 45 78 70 72 3c 27 74 63 78 3e  ./// `Expr<'tcx>
2070: 60 2e 0a 2f 2f 2f 0a 2f 2f 2f 20 4d 69 72 72 6f  `..///./// Mirro
2080: 72 69 6e 67 20 69 73 20 67 72 61 64 75 61 6c 3a  ring is gradual:
2090: 20 77 68 65 6e 20 79 6f 75 20 6d 69 72 72 6f 72   when you mirror
20a0: 20 61 6e 20 6f 75 74 65 72 20 65 78 70 72 65 73   an outer expres
20b0: 73 69 6f 6e 20 6c 69 6b 65 20 60 65 31 0a 2f 2f  sion like `e1.//
20c0: 2f 20 2b 20 65 32 60 2c 20 74 68 65 20 72 65 66  / + e2`, the ref
20d0: 65 72 65 6e 63 65 73 20 74 6f 20 74 68 65 20 69  erences to the i
20e0: 6e 6e 65 72 20 65 78 70 72 65 73 73 69 6f 6e 73  nner expressions
20f0: 20 60 65 31 60 20 61 6e 64 20 60 65 32 60 20 61   `e1` and `e2` a
2100: 72 65 0a 2f 2f 2f 20 60 45 78 70 72 52 65 66 3c  re./// `ExprRef<
2110: 27 74 63 78 3e 60 20 69 6e 73 74 61 6e 63 65 73  'tcx>` instances
2120: 2c 20 61 6e 64 20 74 68 65 79 20 6d 61 79 20 6f  , and they may o
2130: 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 65 61 67  r may not be eag
2140: 65 72 6c 79 0a 2f 2f 2f 20 6d 69 72 72 6f 72 65  erly./// mirrore
2150: 64 2e 20 20 54 68 69 73 20 61 6c 6c 6f 77 73 20  d.  This allows 
2160: 61 20 73 69 6e 67 6c 65 20 41 53 54 20 6e 6f 64  a single AST nod
2170: 65 20 66 72 6f 6d 20 74 68 65 20 63 6f 6d 70 69  e from the compi
2180: 6c 65 72 20 74 6f 0a 2f 2f 2f 20 65 78 70 61 6e  ler to./// expan
2190: 64 20 69 6e 74 6f 20 6f 6e 65 20 6f 72 20 6d 6f  d into one or mo
21a0: 72 65 20 48 61 69 72 20 6e 6f 64 65 73 2c 20 77  re Hair nodes, w
21b0: 68 69 63 68 20 6c 65 74 73 20 74 68 65 20 48 61  hich lets the Ha
21c0: 69 72 20 6e 6f 64 65 73 20 62 65 0a 2f 2f 2f 20  ir nodes be./// 
21d0: 73 69 6d 70 6c 65 72 2e 0a 70 75 62 20 74 72 61  simpler..pub tra
21e0: 69 74 20 4d 69 72 72 6f 72 3c 27 74 63 78 3e 20  it Mirror<'tcx> 
21f0: 7b 0a 20 20 20 20 74 79 70 65 20 4f 75 74 70 75  {.    type Outpu
2200: 74 3b 0a 0a 20 20 20 20 66 6e 20 6d 61 6b 65 5f  t;..    fn make_
2210: 6d 69 72 72 6f 72 3c 27 61 2c 20 27 67 63 78 3e  mirror<'a, 'gcx>
2220: 28 73 65 6c 66 2c 20 63 78 3a 20 26 6d 75 74 20  (self, cx: &mut 
2230: 43 78 3c 27 61 2c 20 27 67 63 78 2c 20 27 74 63  Cx<'a, 'gcx, 'tc
2240: 78 3e 29 20 2d 3e 20 53 65 6c 66 3a 3a 4f 75 74  x>) -> Self::Out
2250: 70 75 74 3b 0a 7d 0a 0a 69 6d 70 6c 3c 27 74 63  put;.}..impl<'tc
2260: 78 3e 20 4d 69 72 72 6f 72 3c 27 74 63 78 3e 20  x> Mirror<'tcx> 
2270: 66 6f 72 20 45 78 70 72 3c 27 74 63 78 3e 20 7b  for Expr<'tcx> {
2280: 0a 20 20 20 20 74 79 70 65 20 4f 75 74 70 75 74  .    type Output
2290: 20 3d 20 45 78 70 72 3c 27 74 63 78 3e 3b 0a 0a   = Expr<'tcx>;..
22a0: 20 20 20 20 66 6e 20 6d 61 6b 65 5f 6d 69 72 72      fn make_mirr
22b0: 6f 72 3c 27 61 2c 20 27 67 63 78 3e 28 73 65 6c  or<'a, 'gcx>(sel
22c0: 66 2c 20 5f 3a 20 26 6d 75 74 20 43 78 3c 27 61  f, _: &mut Cx<'a
22d0: 2c 20 27 67 63 78 2c 20 27 74 63 78 3e 29 20 2d  , 'gcx, 'tcx>) -
22e0: 3e 20 45 78 70 72 3c 27 74 63 78 3e 20 7b 0a 20  > Expr<'tcx> {. 
22f0: 20 20 20 20 20 20 20 73 65 6c 66 0a 20 20 20 20         self.    
2300: 7d 0a 7d 0a 0a 69 6d 70 6c 3c 27 74 63 78 3e 20  }.}..impl<'tcx> 
2310: 4d 69 72 72 6f 72 3c 27 74 63 78 3e 20 66 6f 72  Mirror<'tcx> for
2320: 20 45 78 70 72 52 65 66 3c 27 74 63 78 3e 20 7b   ExprRef<'tcx> {
2330: 0a 20 20 20 20 74 79 70 65 20 4f 75 74 70 75 74  .    type Output
2340: 20 3d 20 45 78 70 72 3c 27 74 63 78 3e 3b 0a 0a   = Expr<'tcx>;..
2350: 20 20 20 20 66 6e 20 6d 61 6b 65 5f 6d 69 72 72      fn make_mirr
2360: 6f 72 3c 27 61 2c 20 27 67 63 78 3e 28 73 65 6c  or<'a, 'gcx>(sel
2370: 66 2c 20 68 69 72 3a 20 26 6d 75 74 20 43 78 3c  f, hir: &mut Cx<
2380: 27 61 2c 20 27 67 63 78 2c 20 27 74 63 78 3e 29  'a, 'gcx, 'tcx>)
2390: 20 2d 3e 20 45 78 70 72 3c 27 74 63 78 3e 20 7b   -> Expr<'tcx> {
23a0: 0a 20 20 20 20 20 20 20 20 6d 61 74 63 68 20 73  .        match s
23b0: 65 6c 66 20 7b 0a 20 20 20 20 20 20 20 20 20 20  elf {.          
23c0: 20 20 45 78 70 72 52 65 66 3a 3a 48 61 69 72 28    ExprRef::Hair(
23d0: 68 29 20 3d 3e 20 68 2e 6d 61 6b 65 5f 6d 69 72  h) => h.make_mir
23e0: 72 6f 72 28 68 69 72 29 2c 0a 20 20 20 20 20 20  ror(hir),.      
23f0: 20 20 20 20 20 20 45 78 70 72 52 65 66 3a 3a 4d        ExprRef::M
2400: 69 72 72 6f 72 28 6d 29 20 3d 3e 20 2a 6d 2c 0a  irror(m) => *m,.
2410: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a          }.    }.
2420: 7d 0a 0a 69 6d 70 6c 3c 27 74 63 78 3e 20 4d 69  }..impl<'tcx> Mi
2430: 72 72 6f 72 3c 27 74 63 78 3e 20 66 6f 72 20 53  rror<'tcx> for S
2440: 74 6d 74 3c 27 74 63 78 3e 20 7b 0a 20 20 20 20  tmt<'tcx> {.    
2450: 74 79 70 65 20 4f 75 74 70 75 74 20 3d 20 53 74  type Output = St
2460: 6d 74 3c 27 74 63 78 3e 3b 0a 0a 20 20 20 20 66  mt<'tcx>;..    f
2470: 6e 20 6d 61 6b 65 5f 6d 69 72 72 6f 72 3c 27 61  n make_mirror<'a
2480: 2c 20 27 67 63 78 3e 28 73 65 6c 66 2c 20 5f 3a  , 'gcx>(self, _:
2490: 20 26 6d 75 74 20 43 78 3c 27 61 2c 20 27 67 63   &mut Cx<'a, 'gc
24a0: 78 2c 20 27 74 63 78 3e 29 20 2d 3e 20 53 74 6d  x, 'tcx>) -> Stm
24b0: 74 3c 27 74 63 78 3e 20 7b 0a 20 20 20 20 20 20  t<'tcx> {.      
24c0: 20 20 73 65 6c 66 0a 20 20 20 20 7d 0a 7d 0a 0a    self.    }.}..
24d0: 69 6d 70 6c 3c 27 74 63 78 3e 20 4d 69 72 72 6f  impl<'tcx> Mirro
24e0: 72 3c 27 74 63 78 3e 20 66 6f 72 20 53 74 6d 74  r<'tcx> for Stmt
24f0: 52 65 66 3c 27 74 63 78 3e 20 7b 0a 20 20 20 20  Ref<'tcx> {.    
2500: 74 79 70 65 20 4f 75 74 70 75 74 20 3d 20 53 74  type Output = St
2510: 6d 74 3c 27 74 63 78 3e 3b 0a 0a 20 20 20 20 66  mt<'tcx>;..    f
2520: 6e 20 6d 61 6b 65 5f 6d 69 72 72 6f 72 3c 27 61  n make_mirror<'a
2530: 2c 20 27 67 63 78 3e 28 73 65 6c 66 2c 20 5f 3a  , 'gcx>(self, _:
2540: 20 26 6d 75 74 20 43 78 3c 27 61 2c 20 27 67 63   &mut Cx<'a, 'gc
2550: 78 2c 20 27 74 63 78 3e 29 20 2d 3e 20 53 74 6d  x, 'tcx>) -> Stm
2560: 74 3c 27 74 63 78 3e 20 7b 0a 20 20 20 20 20 20  t<'tcx> {.      
2570: 20 20 6d 61 74 63 68 20 73 65 6c 66 20 7b 0a 20    match self {. 
2580: 20 20 20 20 20 20 20 20 20 20 20 53 74 6d 74 52             StmtR
2590: 65 66 3a 3a 4d 69 72 72 6f 72 28 6d 29 20 3d 3e  ef::Mirror(m) =>
25a0: 20 2a 6d 2c 0a 20 20 20 20 20 20 20 20 7d 0a 20   *m,.        }. 
25b0: 20 20 20 7d 0a 7d 0a 0a 69 6d 70 6c 3c 27 74 63     }.}..impl<'tc
25c0: 78 3e 20 4d 69 72 72 6f 72 3c 27 74 63 78 3e 20  x> Mirror<'tcx> 
25d0: 66 6f 72 20 42 6c 6f 63 6b 3c 27 74 63 78 3e 20  for Block<'tcx> 
25e0: 7b 0a 20 20 20 20 74 79 70 65 20 4f 75 74 70 75  {.    type Outpu
25f0: 74 20 3d 20 42 6c 6f 63 6b 3c 27 74 63 78 3e 3b  t = Block<'tcx>;
2600: 0a 0a 20 20 20 20 66 6e 20 6d 61 6b 65 5f 6d 69  ..    fn make_mi
2610: 72 72 6f 72 3c 27 61 2c 20 27 67 63 78 3e 28 73  rror<'a, 'gcx>(s
2620: 65 6c 66 2c 20 5f 3a 20 26 6d 75 74 20 43 78 3c  elf, _: &mut Cx<
2630: 27 61 2c 20 27 67 63 78 2c 20 27 74 63 78 3e 29  'a, 'gcx, 'tcx>)
2640: 20 2d 3e 20 42 6c 6f 63 6b 3c 27 74 63 78 3e 20   -> Block<'tcx> 
2650: 7b 0a 20 20 20 20 20 20 20 20 73 65 6c 66 0a 20  {.        self. 
2660: 20 20 20 7d 0a 7d 0a                                }.}.