Skip to content

Commit

Permalink
Fix Q types in lambda signature generation
Browse files Browse the repository at this point in the history
Correctly generate method signatures for lambda
functions that take Q type arguments

For eclipse-openj9#13182 (fixes error in WithFieldAccessorTest)

Signed-off-by: Ehren Julien-Neitzert <[email protected]>
  • Loading branch information
Ehren Julien-Neitzert committed Mar 10, 2023
1 parent bfe3610 commit e8ffceb
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 5 deletions.
6 changes: 3 additions & 3 deletions jcl/src/java.base/share/classes/java/lang/Access.java
Original file line number Diff line number Diff line change
Expand Up @@ -386,7 +386,7 @@ public String newStringUTF8NoRepl(byte[] bytes, int offset, int length) {
/*[IF JAVA_SPEC_VERSION < 17]*/
return StringCoding.newStringUTF8NoRepl(bytes, offset, length);
/*[ELSE] JAVA_SPEC_VERSION < 17 */
/*[IF JAVA_SPEC_VERSION < 21]*/
/*[IF (JAVA_SPEC_VERSION < 21) | INLINE-TYPES]*/
return String.newStringUTF8NoRepl(bytes, offset, length);
/*[ELSE] JAVA_SPEC_VERSION < 21 */
return String.newStringUTF8NoRepl(bytes, offset, length, true);
Expand Down Expand Up @@ -696,7 +696,7 @@ public <T> void setCarrierThreadLocal(CarrierThreadLocal<T> carrierThreadlocal,
}
/*[ENDIF] JAVA_SPEC_VERSION >= 19 */

/*[IF JAVA_SPEC_VERSION >= 21]*/
/*[IF (JAVA_SPEC_VERSION >= 21) & !INLINE-TYPES]*/
@Override
public String getLoaderNameID(ClassLoader loader) {
StringBuilder buffer = new StringBuilder();
Expand All @@ -714,7 +714,7 @@ public String getLoaderNameID(ClassLoader loader) {

return buffer.toString();
}
/*[ENDIF] JAVA_SPEC_VERSION >= 21 */
/*[ENDIF] (JAVA_SPEC_VERSION >= 21) & !INLINE-TYPES */

/*[IF INLINE-TYPES]*/
@Override
Expand Down
12 changes: 10 additions & 2 deletions runtime/jcl/common/java_lang_invoke_MethodHandleNatives.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,11 @@ getClassSignature(J9VMThread *currentThread, J9Class * clazz)
if (J9ROMCLASS_IS_ARRAY(clazz->romClass)) {
vm->internalVMFunctions->copyStringToUTF8Helper(currentThread, sigString, J9_STR_NULL_TERMINATE_RESULT | J9_STR_XLAT, 0, J9VMJAVALANGSTRING_LENGTH(currentThread, sigString), (U_8*)sig, utfLength);
} else {
sig[0] = 'L';
if (J9_IS_J9CLASS_PRIMITIVE_VALUETYPE(clazz)) {
sig[0] = 'Q';
} else {
sig[0] = 'L';
}
vm->internalVMFunctions->copyStringToUTF8Helper(currentThread, sigString, J9_STR_XLAT, 0, J9VMJAVALANGSTRING_LENGTH(currentThread, sigString), (U_8*)(sig + 1), utfLength - 1);
sig[utfLength - 2] = ';';
sig[utfLength - 1] = '\0';
Expand Down Expand Up @@ -306,7 +310,11 @@ getClassSignature(J9VMThread *currentThread, J9Class * clazz)
}

if (*name != '[') {
sig[i++] = 'L';
if (J9_IS_J9CLASS_PRIMITIVE_VALUETYPE(myClass)) {
sig[i++] = 'Q';
} else {
sig[i++] = 'L';
}
}

memcpy(sig+i, name, nameLength);
Expand Down

0 comments on commit e8ffceb

Please sign in to comment.