RFR (L) 8037210: Get rid of char-based descriptions 'J' of basic types

Vladimir Ivanov vladimir.x.ivanov at oracle.com
Tue Apr 1 13:57:35 UTC 2014


Paul, thanks for review.

Updated webrev:
http://cr.openjdk.java.net/~vlivanov/8037210/webrev.04/

Best regards,
Vladimir Ivanov

On 4/1/14 1:44 PM, Paul Sandoz wrote:
> Hi Vladimir,
>
> This looks good. Minor stuff below.
>
> I too prefer *_TYPE instead of Int/Float/Void etc as those are not v. friendly for static imports.
>
> Paul.
>
> LambaForm:
> --
>
>      private static int fixResult(int result, Name[] names) {
>          if (result == LAST_RESULT)
>              result = names.length - 1;  // might still be void
>          if (result >= 0 && names[result].type == V_TYPE)
>              result = -1;
>          return result;
>      }
>
> change to "result = -1" to:
>
>    result = VOID_RESULT;
>
> ?
Done.

>
>
> Change:
>
>      LambdaForm addArguments(int pos, List<Class<?>> types) {
>          BasicType[] basicTypes = new BasicType[types.size()];
>          for (int i = 0; i < basicTypes.length; i++)
>              basicTypes[i] = basicType(types.get(i));
>          return addArguments(pos, basicTypes);
>      }
>
> to:
>
>      LambdaForm addArguments(int pos, List<Class<?>> types) {
>          return addArguments(pos, basicTypes(types));
>      }
>
> ?
Done.

>
>
> Methods not used, i cannot tell which may be there for future code or are referenced indirectly:
>
>          String basicTypeSignature() {
>              //return LambdaForm.basicTypeSignature(resolvedHandle.type());
>              return LambdaForm.basicTypeSignature(methodType());
>          }
>
>      void resolve() {
>          for (Name n : names) n.resolve();
>      }
>
>      static LambdaForm identityForm(BasicType type) {
>          return LF_identityForm[type.ordinal()];
>      }
>      static LambdaForm zeroForm(BasicType type) {
>          return LF_zeroForm[type.ordinal()];
>      }
>
Removed.

>
>
> BoundMethodHandle:
> --
>
> Methods not used:
>
>          SpeciesData extendWith(Class<?> type) {
>              return extendWith(basicType(type));
>          }
>
>          SpeciesData extendWithChar(char type) {
>              return extendWith(basicType(type));
>          }
>
>      static void initStatics() {}
>      static { SpeciesData.initStatics(); }
Removed.

>
>
> Deprecated method in ASM (there are also a few others):
>
>              mv.visitMethodInsn(INVOKESPECIAL, className, "<init>", makeSignature(types, true));
>
> I think you need to append false as the last parameter.
Fixed.

>
>
> Unused first parameter "cbmhClass":
>
>          static NamedFunction[] makeNominalGetters(Class<?> cbmhClass, String types, NamedFunction[] nfs, MethodHandle[] getters) {
Removed.

> InvokerByteCodeGenerator
> --
>
>      private int loadInsnOpcode(BasicType type) throws InternalError {
>          int opcode;
>          switch (type) {
>          case I_TYPE:  opcode = Opcodes.ILOAD;  break;
>          case J_TYPE:  opcode = Opcodes.LLOAD;  break;
>          case F_TYPE:  opcode = Opcodes.FLOAD;  break;
>          case D_TYPE:  opcode = Opcodes.DLOAD;  break;
>          case L_TYPE:  opcode = Opcodes.ALOAD;  break;
>          default:
>              throw new InternalError("unknown type: " + type);
>          }
>          return opcode;
>      }
>
> Could just do:
>
>    case I_TYPE:  return Opcodes.ILOAD;
>
> etc. Same for "storeInsnOpcode" method.
Changed as you suggest.

>
>
> Unused?
>
>      static int nfi = 0;
Removed.

> MethodHandle
> --
>
> Unused?
>
>      /*non-public*/
>      MethodHandle bindImmediate(int pos, BasicType basicType, Object value) {
>          // Bind an immediate value to a position in the arguments.
>          // This means, elide the respective argument,
>          // and replace all references to it in NamedFunction args with the specified value.
>
>          // CURRENT RESTRICTIONS
>          // * only for pos 0 and UNSAFE (position is adjusted in MHImpl to make API usable for others)
>          assert pos == 0 && basicType == L_TYPE && value instanceof Unsafe;
>          MethodType type2 = type.dropParameterTypes(pos, pos + 1); // adjustment: ignore receiver!
>          LambdaForm form2 = form.bindImmediate(pos + 1, basicType, value); // adjust pos to form-relative pos
>          return copyWith(type2, form2);
>      }
Removed.

Best regards,
Vladimir Ivanov

>
>
> On Mar 24, 2014, at 5:29 PM, Vladimir Ivanov <vladimir.x.ivanov at oracle.com> wrote:
>
>> Updated version:
>> http://cr.openjdk.java.net/~vlivanov/8037210/webrev.03/
>>
>> - changed the way how arrays of types are created:
>>         static final BasicType[] ALL_TYPES = BasicType.values();
>>         static final BasicType[] ARG_TYPES = Arrays.copyOf(ALL_TYPES, ALL_TYPES.length-1);
>>
>> - added a test for BasicType (LambdaFormTest.testBasicType).
>>
>> Best regards,
>> Vladimir Ivanov
>
>
>
> _______________________________________________
> mlvm-dev mailing list
> mlvm-dev at openjdk.java.net
> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
>


More information about the mlvm-dev mailing list