Version 1 (modified by manualwiki, 10 years ago) (diff) |
---|
Duplicate Code Elimination
The “ Duplicate Code Elimination” transformation eliminates a duplicate code group. This transformation needs a duplicate code group found with the filtered_suffix_tree algorithm, with max_invalid_seq length parameter set to 0. If the members of the group are found in different modules the transformation asks the user to enter a module name where the extracted function should be placed, and exported. Every occurrence of the group will be replaced with a function call to the extracted function. The transformation asks the user to enter the extracted function's name.
Eliminate a clone gorup:
-module(clone). -export([f/0, g/0]). f() -> A = 5, B = A + A, case A of 5 -> io:format("~p~n",[A]); _ -> io:format("Function f") end. g() -> C = 6, case C of 6 -> io:format("~p~n",[C]); _ -> io:format("Function g") end.
Result:
-module(clone). -export([f/0, g/0]). f() -> A = 5, B = A + A, new_fun(A, 5, "Function f"). g() -> C = 6, new_fun(C, 6, "Function g"). new_fun(NewVar1, NewVar2, NewVar3) -> case NewVar1 of NewVar2 -> io:format("~p~n",[NewVar1]); _ -> io:format(NewVar3) end.
Side conditions
- The extracted function name should not conflict with an already used function name.
Transformation steps and compensations
- Given the clone name, clone group, the transformation analyses the group and finds the variables which will be extracted.
- Calls the extract_funcion transformation to create a new function, and replaces the group members to a call to the extracted function.