8164525: Re-examine zero form link time pre-generation
Reviewed-by: vlivanov, forax
This commit is contained in:
parent
4d94193435
commit
86a27697b7
jdk/src/java.base/share/classes/java/lang/invoke
@ -43,8 +43,16 @@ class GenerateJLIClassesHelper {
|
||||
ArrayList<String> names = new ArrayList<>();
|
||||
HashSet<String> dedupSet = new HashSet<>();
|
||||
for (LambdaForm.BasicType type : LambdaForm.BasicType.values()) {
|
||||
LambdaForm zero = LambdaForm.zeroForm(type);
|
||||
String name = zero.kind.defaultLambdaName
|
||||
+ "_" + zero.returnType().basicTypeChar();
|
||||
if (dedupSet.add(name)) {
|
||||
names.add(name);
|
||||
forms.add(zero);
|
||||
}
|
||||
|
||||
LambdaForm identity = LambdaForm.identityForm(type);
|
||||
String name = identity.kind.defaultLambdaName
|
||||
name = identity.kind.defaultLambdaName
|
||||
+ "_" + identity.returnType().basicTypeChar();
|
||||
if (dedupSet.add(name)) {
|
||||
names.add(name);
|
||||
|
@ -624,6 +624,7 @@ class InvokerBytecodeGenerator {
|
||||
return resolveFrom(name, invokerType, DelegatingMethodHandle.Holder.class);
|
||||
}
|
||||
case DELEGATE: return resolveFrom(name, invokerType, DelegatingMethodHandle.Holder.class);
|
||||
case ZERO: // fall-through
|
||||
case IDENTITY: {
|
||||
name = name + "_" + form.returnType().basicTypeChar();
|
||||
return resolveFrom(name, invokerType, LambdaForm.Holder.class);
|
||||
|
@ -1860,13 +1860,15 @@ class LambdaForm {
|
||||
Name[] idNames = new Name[] { argument(0, L_TYPE), argument(1, type) };
|
||||
idForm = new LambdaForm(idMem.getName(), 2, idNames, 1, Kind.IDENTITY);
|
||||
idForm.compileToBytecode();
|
||||
idFun = new NamedFunction(idMem, SimpleMethodHandle.make(idMem.getInvocationType(), idForm));
|
||||
idFun = new NamedFunction(idMem, MethodHandleImpl.makeIntrinsic(
|
||||
idMem.getInvocationType(), idForm, MethodHandleImpl.Intrinsic.IDENTITY));
|
||||
|
||||
Object zeValue = Wrapper.forBasicType(btChar).zero();
|
||||
Name[] zeNames = new Name[] { argument(0, L_TYPE), new Name(idFun, zeValue) };
|
||||
zeForm = new LambdaForm(zeMem.getName(), 1, zeNames, 1, Kind.ZERO);
|
||||
zeForm.compileToBytecode();
|
||||
zeFun = new NamedFunction(zeMem, SimpleMethodHandle.make(zeMem.getInvocationType(), zeForm));
|
||||
zeFun = new NamedFunction(zeMem, MethodHandleImpl.makeIntrinsic(
|
||||
zeMem.getInvocationType(), zeForm, MethodHandleImpl.Intrinsic.ZERO));
|
||||
}
|
||||
|
||||
LF_zero[ord] = zeForm;
|
||||
|
Loading…
x
Reference in New Issue
Block a user