anchor.diff:      Vst;
   bsm_restore(Reg, SavePoint, Vst) ->
       case bsm_get_context(Reg, Vst) of
  -	{match_context,Bits,Slots} when SavePoint < Slots ->
  +	#ms{valid=Bits,slots=Slots} when SavePoint < Slots ->
   	    case Bits band (1 bsl SavePoint) of
   		0 -> error({illegal_restore,SavePoint,not_set});
   		_ -> Vst
  
positive.code:     merge_bool(A);
  merge_types({atom,A}, bool) ->
      merge_bool(A);
  merge_types({match_context,B0,Slots},{match_context,B1,Slots}) ->
      {match_context,B0 bor B1,Slots};
  merge_types({match_context,_,_}=M, _) ->
      M;
  merge_types(_, {match_context,_,_}=M) ->
      M;
  merge_types(T1, T2) when T1 =/= T2 ->
      %% Too different. All we know is that the type is a 'term'.
  
negative.code: 	 labels=gb_sets:empty()    :: label_set(),	%All defined labels
  	 ft=gb_trees:empty()       :: ft_tab()          %Some other functions
  	 		% in the module (those that start with bs_start_match2).
  	}).
  
  %% Match state.
  -record(ms,
  	{valid=0 :: non_neg_integer(),		%Valid slots
  	 slots=0 :: non_neg_integer()		%Number of slots
  	}).
  
  validate_1(Is, Name, Arity, Entry, Ft) ->
  