@@ -7096,9 +7096,9 @@ TR_ResolvedJ9Method::makeParameterList(TR::ResolvedMethodSymbol *methodSym)
7096
7096
}
7097
7097
7098
7098
// Walk to the end of the class name, if this is a class name
7099
- if (*end == 'L')
7099
+ if (*end == 'L' || *end == 'Q' )
7100
7100
{
7101
- // Assume the form is L<classname>; where <classname> is
7101
+ // Assume the form is L<classname> or Q<classname> ; where <classname> is
7102
7102
// at least 1 char and therefore skip the first 2 chars
7103
7103
end += 2;
7104
7104
end = (char *)memchr(end, ';', sigEnd - end);
@@ -7277,71 +7277,72 @@ TR_J9MethodParameterIterator::TR_J9MethodParameterIterator(TR_J9MethodBase &j9Me
7277
7277
7278
7278
TR::DataType TR_J9MethodParameterIterator::getDataType()
7279
7279
{
7280
- if (*_sig == 'L' || *_sig == '[')
7280
+ if (*_sig == 'L' || *_sig == '[' || *_sig == 'Q' )
7281
7281
{
7282
7282
_nextIncrBy = 0;
7283
7283
while (_sig[_nextIncrBy] == '[')
7284
- {
7285
- ++_nextIncrBy;
7286
- }
7287
- if (_sig[_nextIncrBy] != 'L')
7288
- {
7289
- // Primitive array
7290
- ++_nextIncrBy;
7291
- }
7284
+ {
7285
+ ++_nextIncrBy;
7286
+ }
7287
+
7288
+ if (_sig[_nextIncrBy] != 'L' && _sig[_nextIncrBy] != 'Q')
7289
+ {
7290
+ // Primitive array
7291
+ ++_nextIncrBy;
7292
+ }
7292
7293
else
7293
- {
7294
- while (_sig[_nextIncrBy++] != ';') ;
7295
- }
7294
+ {
7295
+ while (_sig[_nextIncrBy++] != ';') ;
7296
+ }
7296
7297
return TR::Aggregate;
7297
7298
}
7298
7299
else
7299
7300
{
7300
7301
_nextIncrBy = 1;
7301
7302
if (*_sig == 'Z')
7302
- {
7303
- return TR::Int8;
7304
- }
7303
+ {
7304
+ return TR::Int8;
7305
+ }
7305
7306
else if (*_sig == 'B')
7306
- {
7307
- return TR::Int8;
7308
- }
7307
+ {
7308
+ return TR::Int8;
7309
+ }
7309
7310
else if (*_sig == 'C')
7310
- {
7311
- return TR::Int16;
7312
- }
7311
+ {
7312
+ return TR::Int16;
7313
+ }
7313
7314
else if (*_sig == 'S')
7314
- {
7315
- return TR::Int16;
7316
- }
7315
+ {
7316
+ return TR::Int16;
7317
+ }
7317
7318
else if (*_sig == 'I')
7318
- {
7319
- return TR::Int32;
7320
- }
7319
+ {
7320
+ return TR::Int32;
7321
+ }
7321
7322
else if (*_sig == 'J')
7322
- {
7323
- return TR::Int64;
7324
- }
7323
+ {
7324
+ return TR::Int64;
7325
+ }
7325
7326
else if (*_sig == 'F')
7326
- {
7327
- return TR::Float;
7328
- }
7327
+ {
7328
+ return TR::Float;
7329
+ }
7329
7330
else if (*_sig == 'D')
7330
- {
7331
- return TR::Double;
7332
- }
7331
+ {
7332
+ return TR::Double;
7333
+ }
7333
7334
else
7334
- {
7335
- TR_ASSERT(0, "Unknown character in Java signature.");
7336
- return TR::NoType;
7337
- }
7335
+ {
7336
+ TR_ASSERT(0, "Unknown character in Java signature.");
7337
+ return TR::NoType;
7338
+ }
7338
7339
}
7339
7340
}
7340
7341
7341
7342
TR_OpaqueClassBlock * TR_J9MethodParameterIterator::getOpaqueClass()
7342
7343
{
7343
7344
TR_J9VMBase *fej9 = (TR_J9VMBase *)(_comp.fe());
7344
- TR_ASSERT(*_sig == '[' || *_sig == 'L', "Asked for class of incorrect Java parameter.");
7345
+ TR_ASSERT(*_sig == '[' || *_sig == 'L' || *_sig == 'Q' , "Asked for class of incorrect Java parameter.");
7345
7346
if (_nextIncrBy == 0) getDataType();
7346
7347
return _resolvedMethod == NULL ? NULL :
7347
7348
fej9->getClassFromSignature(_sig, _nextIncrBy, _resolvedMethod);
@@ -7360,7 +7361,7 @@ bool TR_J9MethodParameterIterator::isArray()
7360
7361
7361
7362
bool TR_J9MethodParameterIterator::isClass()
7362
7363
{
7363
- return (*_sig == 'L');
7364
+ return (*_sig == 'L' || *_sig == 'Q' );
7364
7365
}
7365
7366
7366
7367
bool TR_J9MethodParameterIterator::atEnd()
@@ -7410,6 +7411,7 @@ static TR::DataType typeFromSig(char sig)
7410
7411
{
7411
7412
case 'L':
7412
7413
case '[':
7414
+ case 'Q':
7413
7415
return TR::Address;
7414
7416
case 'I':
7415
7417
case 'Z':
@@ -7663,7 +7665,7 @@ TR_J9ByteCodeIlGenerator::runFEMacro(TR::SymbolReference *symRef)
7663
7665
if (strcmp(sourceType, targetType))
7664
7666
{
7665
7667
char methodName[30], methodSignature[50];
7666
- if (sourceType[0] == 'L' && isExplicit)
7668
+ if (( sourceType[0] == 'L' || sourceType[0] == 'Q') && isExplicit)
7667
7669
sprintf(methodName, "explicitObject2%s", targetName);
7668
7670
else
7669
7671
sprintf(methodName, "%s2%s", sourceName, targetName);
@@ -7684,7 +7686,7 @@ TR_J9ByteCodeIlGenerator::runFEMacro(TR::SymbolReference *symRef)
7684
7686
7685
7687
// Address conversions need a downcast after the call
7686
7688
//
7687
- if (targetType[0] == 'L')
7689
+ if (targetType[0] == 'L' || targetType[0] == 'Q' )
7688
7690
{
7689
7691
uintptr_t methodHandle;
7690
7692
uintptr_t sourceArguments;
@@ -7851,6 +7853,7 @@ TR_J9ByteCodeIlGenerator::runFEMacro(TR::SymbolReference *symRef)
7851
7853
break;
7852
7854
case 'L':
7853
7855
case '[':
7856
+ case 'Q':
7854
7857
callOp = TR::acalli;
7855
7858
break;
7856
7859
case 'V':
@@ -7987,6 +7990,7 @@ TR_J9ByteCodeIlGenerator::runFEMacro(TR::SymbolReference *symRef)
7987
7990
{
7988
7991
case 'L':
7989
7992
case '[':
7993
+ case 'Q':
7990
7994
sprintf(extraName, "extra_L");
7991
7995
extraSignature = artificialSignature(stackAlloc, "(L" JSR292_ArgumentMoverHandle ";I)Ljava/lang/Object;");
7992
7996
break;
@@ -8070,6 +8074,7 @@ TR_J9ByteCodeIlGenerator::runFEMacro(TR::SymbolReference *symRef)
8070
8074
{
8071
8075
case 'L':
8072
8076
case '[':
8077
+ case 'Q':
8073
8078
sprintf(extraName, "extra_L");
8074
8079
extraSignature = artificialSignature(stackAlloc, "(L" JSR292_ArgumentMoverHandle ";I)Ljava/lang/Object;");
8075
8080
break;
0 commit comments