src/java.base/share/classes/java/lang/invoke/LambdaFormBuffer.java
Print this page
rev 17771 : 8184777: species logic for BoundMethodHandle doesn't scale, needs refactor
*** 25,34 ****
--- 25,36 ----
package java.lang.invoke;
import java.util.ArrayList;
import java.util.Arrays;
+ import java.util.List;
+
import static java.lang.invoke.LambdaForm.*;
import static java.lang.invoke.LambdaForm.BasicType.*;
/** Working storage for an LF that is being transformed.
* Similarly to a StringBuffer, the editing can take place in multiple steps.
*** 323,341 ****
/** Replace any Name whose function is in oldFns with a copy
* whose function is in the corresponding position in newFns.
* Only do this if the arguments are exactly equal to the given.
*/
! LambdaFormBuffer replaceFunctions(NamedFunction[] oldFns, NamedFunction[] newFns,
Object... forArguments) {
assert(inTrans());
! if (oldFns.length == 0) return this;
for (int i = arity; i < length; i++) {
Name n = names[i];
! int nfi = indexOf(n.function, oldFns);
if (nfi >= 0 && Arrays.equals(n.arguments, forArguments)) {
! changeName(i, new Name(newFns[nfi], n.arguments));
}
}
return this;
}
--- 325,343 ----
/** Replace any Name whose function is in oldFns with a copy
* whose function is in the corresponding position in newFns.
* Only do this if the arguments are exactly equal to the given.
*/
! LambdaFormBuffer replaceFunctions(List<NamedFunction> oldFns, List<NamedFunction> newFns,
Object... forArguments) {
assert(inTrans());
! if (oldFns.size() == 0) return this;
for (int i = arity; i < length; i++) {
Name n = names[i];
! int nfi = oldFns.indexOf(n.function);
if (nfi >= 0 && Arrays.equals(n.arguments, forArguments)) {
! changeName(i, new Name(newFns.get(nfi), n.arguments));
}
}
return this;
}