anchor.diff:      %% hack is only needed until we get proper union types.
       complex_test(Fail,
                    fun(FailVst) ->
  -                         case get_raw_type(Src, FailVst) of
  +                         case get_movable_term_type(Src, FailVst) of
                                #ms{} -> override_type(term, Src, FailVst);
                                _ -> FailVst
                            end
                    end,
                    fun(SuccVst0) ->
  -                         SuccVst1 = update_type(fun meet/2, binary, Src, SuccVst0),
  +                         SuccVst1 = update_type(fun meet/2, binary,
  +                                                Src, SuccVst0),
                            SuccVst = prune_x_regs(Live, SuccVst1),
                            extract_term(Type, bs_start_match, [Src], Dst,
                                         SuccVst, SuccVst0)
  
positive.code:     ok;
  verify_local_args(X, Lbl, CtxIds, Vst) ->
      Reg = {x, X},
      assert_movable(Reg, Vst),
      assert_not_fragile(Reg, Vst),
      case get_raw_type(Reg, Vst) of
          #ms{id=Id}=Type ->
              case CtxIds of
                  #{ Id := Other } ->
  
negative.code:     ok.
  
  bsm_get_context({Kind,_}=Reg, Vst) when Kind =:= x; Kind =:= y->
      case get_movable_term_type(Reg, Vst) of
          #ms{}=Ctx -> Ctx;
          _ -> error({no_bsm_context,Reg})
      end;
  