1.1 --- a/src/share/vm/prims/methodHandleWalk.cpp Fri May 06 12:12:29 2011 -0700 1.2 +++ b/src/share/vm/prims/methodHandleWalk.cpp Fri May 06 16:33:13 2011 -0700 1.3 @@ -409,6 +409,11 @@ 1.4 break; 1.5 } 1.6 1.7 + case java_lang_invoke_AdapterMethodHandle::OP_FOLD_ARGS: { //NYI, may GC 1.8 + lose("unimplemented", CHECK_(empty)); 1.9 + break; 1.10 + } 1.11 + 1.12 case java_lang_invoke_AdapterMethodHandle::OP_SPREAD_ARGS: { 1.13 klassOop array_klass_oop = NULL; 1.14 BasicType array_type = java_lang_Class::as_BasicType(chain().adapter_arg_oop(), 1.15 @@ -452,9 +457,18 @@ 1.16 Bytecodes::_invokestatic, false, 3, &arglist[0], CHECK_(empty)); 1.17 1.18 // Spread out the array elements. 1.19 - Bytecodes::Code aload_op = Bytecodes::_aaload; 1.20 - if (element_type != T_OBJECT) { 1.21 - lose("primitive array NYI", CHECK_(empty)); 1.22 + Bytecodes::Code aload_op = Bytecodes::_nop; 1.23 + switch (element_type) { 1.24 + case T_INT: aload_op = Bytecodes::_iaload; break; 1.25 + case T_LONG: aload_op = Bytecodes::_laload; break; 1.26 + case T_FLOAT: aload_op = Bytecodes::_faload; break; 1.27 + case T_DOUBLE: aload_op = Bytecodes::_daload; break; 1.28 + case T_OBJECT: aload_op = Bytecodes::_aaload; break; 1.29 + case T_BOOLEAN: // fall through: 1.30 + case T_BYTE: aload_op = Bytecodes::_baload; break; 1.31 + case T_CHAR: aload_op = Bytecodes::_caload; break; 1.32 + case T_SHORT: aload_op = Bytecodes::_saload; break; 1.33 + default: lose("primitive array NYI", CHECK_(empty)); 1.34 } 1.35 int ap = arg_slot; 1.36 for (int i = 0; i < spread_length; i++) { 1.37 @@ -467,11 +481,6 @@ 1.38 break; 1.39 } 1.40 1.41 - case java_lang_invoke_AdapterMethodHandle::OP_FLYBY: //NYI, runs Java code 1.42 - case java_lang_invoke_AdapterMethodHandle::OP_RICOCHET: //NYI, runs Java code 1.43 - lose("unimplemented", CHECK_(empty)); 1.44 - break; 1.45 - 1.46 default: 1.47 lose("bad adapter conversion", CHECK_(empty)); 1.48 break;