提交 c1e1645c 编写于 作者: K kshefov

8058695: [TESTBUG] Reinvokers with arity >253 can't be cached

Reviewed-by: vlivanov, psandoz
上级 9aa11cac
...@@ -44,7 +44,7 @@ public enum TestMethods { ...@@ -44,7 +44,7 @@ public enum TestMethods {
@Override @Override
public Map<String, Object> getTestCaseData() { public Map<String, Object> getTestCaseData() {
Map<String, Object> data = new HashMap<>(); Map<String, Object> data = new HashMap<>();
int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); int desiredArity = Helper.RNG.nextInt(super.maxArity);
MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
data.put("mtTarget", mtTarget); data.put("mtTarget", mtTarget);
// Arity after reducing because of long and double take 2 slots. // Arity after reducing because of long and double take 2 slots.
...@@ -83,7 +83,7 @@ public enum TestMethods { ...@@ -83,7 +83,7 @@ public enum TestMethods {
@Override @Override
public Map<String, Object> getTestCaseData() { public Map<String, Object> getTestCaseData() {
Map<String, Object> data = new HashMap<>(); Map<String, Object> data = new HashMap<>();
int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); int desiredArity = Helper.RNG.nextInt(super.maxArity);
MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
data.put("mtTarget", mtTarget); data.put("mtTarget", mtTarget);
// Arity after reducing because of long and double take 2 slots. // Arity after reducing because of long and double take 2 slots.
...@@ -91,7 +91,7 @@ public enum TestMethods { ...@@ -91,7 +91,7 @@ public enum TestMethods {
int dropArgsPos = Helper.RNG.nextInt(realArity + 1); int dropArgsPos = Helper.RNG.nextInt(realArity + 1);
data.put("dropArgsPos", dropArgsPos); data.put("dropArgsPos", dropArgsPos);
MethodType mtDropArgs = TestMethods.randomMethodTypeGenerator( MethodType mtDropArgs = TestMethods.randomMethodTypeGenerator(
Helper.RNG.nextInt(Helper.MAX_ARITY - realArity)); Helper.RNG.nextInt(super.maxArity - realArity));
data.put("mtDropArgs", mtDropArgs); data.put("mtDropArgs", mtDropArgs);
return data; return data;
} }
...@@ -106,20 +106,20 @@ public enum TestMethods { ...@@ -106,20 +106,20 @@ public enum TestMethods {
int mtTgtSlotsCount = TestMethods.argSlotsCount(mtTarget); int mtTgtSlotsCount = TestMethods.argSlotsCount(mtTarget);
int mtDASlotsCount = TestMethods.argSlotsCount(mtDropArgs); int mtDASlotsCount = TestMethods.argSlotsCount(mtDropArgs);
List<Class<?>> fakeParList; List<Class<?>> fakeParList;
if (mtTgtSlotsCount + mtDASlotsCount > Helper.MAX_ARITY - 1) { if (mtTgtSlotsCount + mtDASlotsCount > super.maxArity - 1) {
fakeParList = TestMethods.reduceArgListToSlotsCount(mtDropArgs.parameterList(), fakeParList = TestMethods.reduceArgListToSlotsCount(mtDropArgs.parameterList(),
Helper.MAX_ARITY - mtTgtSlotsCount - 1); super.maxArity - mtTgtSlotsCount - 1);
} else { } else {
fakeParList = mtDropArgs.parameterList(); fakeParList = mtDropArgs.parameterList();
} }
return MethodHandles.dropArguments(target, dropArgsPos, fakeParList); return MethodHandles.dropArguments(target, dropArgsPos, fakeParList);
} }
}, },
EXPLICIT_CAST_ARGUMENTS("explicitCastArguments") { EXPLICIT_CAST_ARGUMENTS("explicitCastArguments", Helper.MAX_ARITY / 2) {
@Override @Override
public Map<String, Object> getTestCaseData() { public Map<String, Object> getTestCaseData() {
Map<String, Object> data = new HashMap<>(); Map<String, Object> data = new HashMap<>();
int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY / 2); int desiredArity = Helper.RNG.nextInt(super.maxArity);
MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
data.put("mtTarget", mtTarget); data.put("mtTarget", mtTarget);
// Arity after reducing because of long and double take 2 slots. // Arity after reducing because of long and double take 2 slots.
...@@ -146,11 +146,11 @@ public enum TestMethods { ...@@ -146,11 +146,11 @@ public enum TestMethods {
return MethodHandles.explicitCastArguments(target, mtExcplCastArgs); return MethodHandles.explicitCastArguments(target, mtExcplCastArgs);
} }
}, },
FILTER_ARGUMENTS("filterArguments") { FILTER_ARGUMENTS("filterArguments", Helper.MAX_ARITY / 2) {
@Override @Override
public Map<String, Object> getTestCaseData() { public Map<String, Object> getTestCaseData() {
Map<String, Object> data = new HashMap<>(); Map<String, Object> data = new HashMap<>();
int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY / 2); int desiredArity = Helper.RNG.nextInt(super.maxArity);
MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
data.put("mtTarget", mtTarget); data.put("mtTarget", mtTarget);
// Arity after reducing because of long and double take 2 slots. // Arity after reducing because of long and double take 2 slots.
...@@ -184,7 +184,7 @@ public enum TestMethods { ...@@ -184,7 +184,7 @@ public enum TestMethods {
@Override @Override
public Map<String, Object> getTestCaseData() { public Map<String, Object> getTestCaseData() {
Map<String, Object> data = new HashMap<>(); Map<String, Object> data = new HashMap<>();
int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); int desiredArity = Helper.RNG.nextInt(super.maxArity);
MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
data.put("mtTarget", mtTarget); data.put("mtTarget", mtTarget);
// Arity after reducing because of long and double take 2 slots. // Arity after reducing because of long and double take 2 slots.
...@@ -211,7 +211,7 @@ public enum TestMethods { ...@@ -211,7 +211,7 @@ public enum TestMethods {
@Override @Override
public Map<String, Object> getTestCaseData() { public Map<String, Object> getTestCaseData() {
Map<String, Object> data = new HashMap<>(); Map<String, Object> data = new HashMap<>();
int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); int desiredArity = Helper.RNG.nextInt(super.maxArity);
MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
data.put("mtTarget", mtTarget); data.put("mtTarget", mtTarget);
// Arity after reducing because of long and double take 2 slots. // Arity after reducing because of long and double take 2 slots.
...@@ -236,18 +236,18 @@ public enum TestMethods { ...@@ -236,18 +236,18 @@ public enum TestMethods {
return MethodHandles.insertArguments(target, insertArgsPos, insertList); return MethodHandles.insertArguments(target, insertArgsPos, insertList);
} }
}, },
PERMUTE_ARGUMENTS("permuteArguments") { PERMUTE_ARGUMENTS("permuteArguments", Helper.MAX_ARITY / 2) {
@Override @Override
public Map<String, Object> getTestCaseData() { public Map<String, Object> getTestCaseData() {
Map<String, Object> data = new HashMap<>(); Map<String, Object> data = new HashMap<>();
int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY / 2); int desiredArity = Helper.RNG.nextInt(super.maxArity);
MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
// Arity after reducing because of long and double take 2 slots. // Arity after reducing because of long and double take 2 slots.
int realArity = mtTarget.parameterCount(); int realArity = mtTarget.parameterCount();
int[] permuteArgsReorderArray = new int[realArity]; int[] permuteArgsReorderArray = new int[realArity];
int mtParmuteArgsNum = Helper.RNG.nextInt(Helper.MAX_ARITY); int mtPermuteArgsNum = Helper.RNG.nextInt(Helper.MAX_ARITY);
mtParmuteArgsNum = mtParmuteArgsNum == 0 ? 1 : mtParmuteArgsNum; mtPermuteArgsNum = mtPermuteArgsNum == 0 ? 1 : mtPermuteArgsNum;
MethodType mtPermuteArgs = TestMethods.randomMethodTypeGenerator(mtParmuteArgsNum); MethodType mtPermuteArgs = TestMethods.randomMethodTypeGenerator(mtPermuteArgsNum);
mtTarget = mtTarget.changeReturnType(mtPermuteArgs.returnType()); mtTarget = mtTarget.changeReturnType(mtPermuteArgs.returnType());
for (int i = 0; i < realArity; i++) { for (int i = 0; i < realArity; i++) {
int mtPermuteArgsParNum = Helper.RNG.nextInt(mtPermuteArgs.parameterCount()); int mtPermuteArgsParNum = Helper.RNG.nextInt(mtPermuteArgs.parameterCount());
...@@ -275,7 +275,7 @@ public enum TestMethods { ...@@ -275,7 +275,7 @@ public enum TestMethods {
@Override @Override
public Map<String, Object> getTestCaseData() { public Map<String, Object> getTestCaseData() {
Map<String, Object> data = new HashMap<>(); Map<String, Object> data = new HashMap<>();
int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); int desiredArity = Helper.RNG.nextInt(super.maxArity);
MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
data.put("mtTarget", mtTarget); data.put("mtTarget", mtTarget);
return data; return data;
...@@ -293,7 +293,7 @@ public enum TestMethods { ...@@ -293,7 +293,7 @@ public enum TestMethods {
@Override @Override
public Map<String, Object> getTestCaseData() { public Map<String, Object> getTestCaseData() {
Map<String, Object> data = new HashMap<>(); Map<String, Object> data = new HashMap<>();
int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); int desiredArity = Helper.RNG.nextInt(super.maxArity);
MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
data.put("mtTarget", mtTarget); data.put("mtTarget", mtTarget);
// Arity after reducing because of long and double take 2 slots. // Arity after reducing because of long and double take 2 slots.
...@@ -329,7 +329,7 @@ public enum TestMethods { ...@@ -329,7 +329,7 @@ public enum TestMethods {
@Override @Override
public Map<String, Object> getTestCaseData() { public Map<String, Object> getTestCaseData() {
Map<String, Object> data = new HashMap<>(); Map<String, Object> data = new HashMap<>();
int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); int desiredArity = Helper.RNG.nextInt(super.maxArity);
MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
data.put("mtTarget", mtTarget); data.put("mtTarget", mtTarget);
// Arity after reducing because of long and double take 2 slots. // Arity after reducing because of long and double take 2 slots.
...@@ -359,11 +359,11 @@ public enum TestMethods { ...@@ -359,11 +359,11 @@ public enum TestMethods {
return MethodHandles.catchException(target, Exception.class, handler); return MethodHandles.catchException(target, Exception.class, handler);
} }
}, },
INVOKER("invoker") { INVOKER("invoker", Helper.MAX_ARITY - 1) {
@Override @Override
public Map<String, Object> getTestCaseData() { public Map<String, Object> getTestCaseData() {
Map<String, Object> data = new HashMap<>(); Map<String, Object> data = new HashMap<>();
int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); int desiredArity = Helper.RNG.nextInt(super.maxArity);
MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
data.put("mtTarget", mtTarget); data.put("mtTarget", mtTarget);
return data; return data;
...@@ -375,11 +375,11 @@ public enum TestMethods { ...@@ -375,11 +375,11 @@ public enum TestMethods {
return MethodHandles.invoker(mtTarget); return MethodHandles.invoker(mtTarget);
} }
}, },
EXACT_INVOKER("exactInvoker") { EXACT_INVOKER("exactInvoker", Helper.MAX_ARITY - 1) {
@Override @Override
public Map<String, Object> getTestCaseData() { public Map<String, Object> getTestCaseData() {
Map<String, Object> data = new HashMap<>(); Map<String, Object> data = new HashMap<>();
int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); int desiredArity = Helper.RNG.nextInt(super.maxArity);
MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
data.put("mtTarget", mtTarget); data.put("mtTarget", mtTarget);
return data; return data;
...@@ -391,11 +391,11 @@ public enum TestMethods { ...@@ -391,11 +391,11 @@ public enum TestMethods {
return MethodHandles.exactInvoker(mtTarget); return MethodHandles.exactInvoker(mtTarget);
} }
}, },
SPREAD_INVOKER("spreadInvoker") { SPREAD_INVOKER("spreadInvoker", Helper.MAX_ARITY - 1) {
@Override @Override
public Map<String, Object> getTestCaseData() { public Map<String, Object> getTestCaseData() {
Map<String, Object> data = new HashMap<>(); Map<String, Object> data = new HashMap<>();
int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); int desiredArity = Helper.RNG.nextInt(super.maxArity);
MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
data.put("mtTarget", mtTarget); data.put("mtTarget", mtTarget);
// Arity after reducing because of long and double take 2 slots. // Arity after reducing because of long and double take 2 slots.
...@@ -416,7 +416,7 @@ public enum TestMethods { ...@@ -416,7 +416,7 @@ public enum TestMethods {
@Override @Override
public Map<String, Object> getTestCaseData() { public Map<String, Object> getTestCaseData() {
Map<String, Object> data = new HashMap<>(); Map<String, Object> data = new HashMap<>();
int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); int desiredArity = Helper.RNG.nextInt(super.maxArity);
MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
data.put("mtTarget", mtTarget); data.put("mtTarget", mtTarget);
return data; return data;
...@@ -436,7 +436,7 @@ public enum TestMethods { ...@@ -436,7 +436,7 @@ public enum TestMethods {
@Override @Override
public Map<String, Object> getTestCaseData() { public Map<String, Object> getTestCaseData() {
Map<String, Object> data = new HashMap<>(); Map<String, Object> data = new HashMap<>();
int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); int desiredArity = Helper.RNG.nextInt(super.maxArity);
MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
data.put("mtTarget", mtTarget); data.put("mtTarget", mtTarget);
return data; return data;
...@@ -456,7 +456,7 @@ public enum TestMethods { ...@@ -456,7 +456,7 @@ public enum TestMethods {
@Override @Override
public Map<String, Object> getTestCaseData() { public Map<String, Object> getTestCaseData() {
Map<String, Object> data = new HashMap<>(); Map<String, Object> data = new HashMap<>();
int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); int desiredArity = Helper.RNG.nextInt(super.maxArity);
MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
data.put("mtTarget", mtTarget); data.put("mtTarget", mtTarget);
return data; return data;
...@@ -481,7 +481,7 @@ public enum TestMethods { ...@@ -481,7 +481,7 @@ public enum TestMethods {
@Override @Override
public Map<String, Object> getTestCaseData() { public Map<String, Object> getTestCaseData() {
Map<String, Object> data = new HashMap<>(); Map<String, Object> data = new HashMap<>();
int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); int desiredArity = Helper.RNG.nextInt(super.maxArity);
MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
data.put("mtTarget", mtTarget); data.put("mtTarget", mtTarget);
return data; return data;
...@@ -503,8 +503,15 @@ public enum TestMethods { ...@@ -503,8 +503,15 @@ public enum TestMethods {
*/ */
public final String name; public final String name;
private TestMethods(String name) { private final int maxArity;
private TestMethods(String name, int maxArity) {
this.name = name; this.name = name;
this.maxArity = maxArity;
}
private TestMethods(String name) {
this(name, Helper.MAX_ARITY);
} }
protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) throws NoSuchMethodException, IllegalAccessException { protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) throws NoSuchMethodException, IllegalAccessException {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册