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