anchor.diff:  		    case lists:keysearch(def,1,Ann) of 
   			{value, {def, DefinePos}} ->
   			    [{DefinePos, AppP}];
  -			_ -> throw(non_match)
  +			_ -> throw(no_more_match)   %% this should not happen;
   		    end;
  -		_ -> throw(non_match)
  +		underscore ->
  +		    [];
  +		_ when LastClause ->
  +		    [refac_util:reset_attrs(refac_syntax:match_expr(DefP, AppP))];
  +		_ ->case T2 of 
  +			variable -> throw(no_more_match);  %% stop here; no more further match needed.
  +			_ -> throw(no_match) 
  +		    end
   	    end;
   	true -> case refac_syntax:is_literal(DefP) andalso refac_syntax:is_literal(AppP) of
   		    true ->
   			case refac_syntax:concrete(DefP)==refac_syntax:concrete(AppP) of 
   			    true ->
   				[];
  -			    _ -> throw(non_match)
  +			    _ -> throw(no_match)   %% should continue matching the next clause;
   			end;
   		    false ->
   			case T1 of 
  
positive.code: 		    end,
      VarsToRename1 ++ VarsToRename2.
  
  
  new_fun(VarName, BdsInFunToInline, Bds, Envs) ->
      VarsToRename1 = case lists:member(VarName, Bds) of
  		      true ->
  			  [{Name, Loc} || {Name, Loc} <- BdsInFunToInline,
  					  lists:member(Name, Envs)];
  		      _ -> []
  		    end,
      VarsToRename1.
  
  do_rename_var(Node, [], _UsedVarNames) ->  
      Node;
  do_rename_var(Node, [V|Vs], UsedVarNames) ->
  
negative.code: 				  case refac_syntax:block_expr_body(B) of 
  				      BlockBody ->
  					  Last = lists:last(BlockBody),
  					  NewLast = make_match_expr([refac_util:reset_attrs(P)||P<-Ps], Last),
  					  lists:sublist(BlockBody, length(BlockBody)-1)++[NewLast];
  				      _ -> [E]
  				  end;
  