| Version 1 (modified by manualwiki, 11 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.
