anchor.diff:        let a2 = mk_term (App(a1, handler, Nothing)) r top.level in
         desugar_term_aq env a2
   
  -    | Match(e, branches) ->
  +    | Match(e, topt, branches) ->
         let desugar_branch (pat, wopt, b) =
           let env, pat = desugar_match_pat env pat in
           let wopt = match wopt with
  
positive.code:         desugar_disjunctive_pattern pat wopt b, aq
        in
        let e, aq = desugar_term_aq env e in
        let brs, aqs = List.map desugar_branch branches |> List.unzip |> (fun (x, y) -> (List.flatten x, y)) in
        mk <| Tm_match(e, brs), join_aqs (aq::aqs)
  
      | Ascribed(e, t, tac_opt) ->
        let annot, aq0 =
          if is_comp_type env t
          then let comp = desugar_comp t.range true env t in
               (Inr comp, [])
          else let tm, aq = desugar_term_aq env t in
               (Inl tm, aq)
        in
        let tac_opt = BU.map_opt tac_opt (desugar_term env) in
        let e, aq = desugar_term_aq env e in
        mk <| Tm_ascribed(e, (annot, tac_opt), None), aq0@aq
  
      | Record(_, []) ->
        raise_error (Errors.Fatal_UnexpectedEmptyRecord, "Unexpected empty record") top.range
  
negative.code:             let body = match sc_pat_opt with
              | Some (sc, pat) ->
                  let body = Subst.close (S.pat_bvs pat |> List.map S.mk_binder) body in
                  S.mk (Tm_match(sc, None, [(pat, None, body)])) body.pos
              | None -> body in
              setpos (no_annot_abs (List.rev bs) body), aq
  
  