< prev index next >

src/java.base/share/classes/java/lang/invoke/GenerateJLIClassesHelper.java

Print this page
rev 49208 : 8199471: Enable generation of callSiteForms at link time
Reviewed-by: psandoz

*** 131,162 **** names.toArray(new String[0]), forms.toArray(new LambdaForm[0])); } static byte[] generateInvokersHolderClassBytes(String className, ! MethodType[] methodTypes) { HashSet<MethodType> dedupSet = new HashSet<>(); ArrayList<LambdaForm> forms = new ArrayList<>(); ArrayList<String> names = new ArrayList<>(); int[] types = { MethodTypeForm.LF_EX_LINKER, MethodTypeForm.LF_EX_INVOKER, MethodTypeForm.LF_GEN_LINKER, MethodTypeForm.LF_GEN_INVOKER }; ! for (int i = 0; i < methodTypes.length; i++) { // generate methods representing invokers of the specified type ! if (dedupSet.add(methodTypes[i])) { for (int type : types) { ! LambdaForm invokerForm = Invokers.invokeHandleForm(methodTypes[i], /*customized*/false, type); forms.add(invokerForm); names.add(invokerForm.kind.defaultLambdaName); } } } return generateCodeBytesForLFs(className, names.toArray(new String[0]), forms.toArray(new LambdaForm[0])); } --- 131,178 ---- names.toArray(new String[0]), forms.toArray(new LambdaForm[0])); } static byte[] generateInvokersHolderClassBytes(String className, ! MethodType[] invokerMethodTypes, MethodType[] callSiteMethodTypes) { HashSet<MethodType> dedupSet = new HashSet<>(); ArrayList<LambdaForm> forms = new ArrayList<>(); ArrayList<String> names = new ArrayList<>(); int[] types = { MethodTypeForm.LF_EX_LINKER, MethodTypeForm.LF_EX_INVOKER, MethodTypeForm.LF_GEN_LINKER, MethodTypeForm.LF_GEN_INVOKER }; ! ! for (int i = 0; i < invokerMethodTypes.length; i++) { // generate methods representing invokers of the specified type ! if (dedupSet.add(invokerMethodTypes[i])) { for (int type : types) { ! LambdaForm invokerForm = Invokers.invokeHandleForm(invokerMethodTypes[i], /*customized*/false, type); forms.add(invokerForm); names.add(invokerForm.kind.defaultLambdaName); } } } + + dedupSet = new HashSet<>(); + for (int i = 0; i < callSiteMethodTypes.length; i++) { + // generate methods representing invokers of the specified type + if (dedupSet.add(callSiteMethodTypes[i])) { + LambdaForm callSiteForm = Invokers.callSiteForm(callSiteMethodTypes[i], true); + forms.add(callSiteForm); + names.add(callSiteForm.kind.defaultLambdaName); + + LambdaForm methodHandleForm = Invokers.callSiteForm(callSiteMethodTypes[i], false); + forms.add(methodHandleForm); + names.add(methodHandleForm.kind.defaultLambdaName); + } + } + return generateCodeBytesForLFs(className, names.toArray(new String[0]), forms.toArray(new LambdaForm[0])); }
< prev index next >