< prev index next >

src/jdk/nashorn/internal/codegen/ObjectClassGenerator.java

Print this page

        

*** 39,49 **** import static jdk.nashorn.internal.runtime.JSType.CONVERT_OBJECT; import static jdk.nashorn.internal.runtime.JSType.CONVERT_OBJECT_OPTIMISTIC; import static jdk.nashorn.internal.runtime.JSType.GET_UNDEFINED; import static jdk.nashorn.internal.runtime.JSType.TYPE_DOUBLE_INDEX; import static jdk.nashorn.internal.runtime.JSType.TYPE_INT_INDEX; - import static jdk.nashorn.internal.runtime.JSType.TYPE_LONG_INDEX; import static jdk.nashorn.internal.runtime.JSType.TYPE_OBJECT_INDEX; import static jdk.nashorn.internal.runtime.JSType.TYPE_UNDEFINED_INDEX; import static jdk.nashorn.internal.runtime.JSType.getAccessorTypeIndex; import static jdk.nashorn.internal.runtime.UnwarrantedOptimismException.isValid; --- 39,48 ----
*** 533,544 **** private static MethodHandle getterForType(final Class<?> forType, final MethodHandle primitiveGetter, final MethodHandle objectGetter) { switch (getAccessorTypeIndex(forType)) { case TYPE_INT_INDEX: return MH.explicitCastArguments(primitiveGetter, primitiveGetter.type().changeReturnType(int.class)); - case TYPE_LONG_INDEX: - return primitiveGetter; case TYPE_DOUBLE_INDEX: return MH.filterReturnValue(primitiveGetter, UNPACK_DOUBLE); case TYPE_OBJECT_INDEX: return objectGetter; default: --- 532,541 ----
*** 621,631 **** objectGetter.type().changeReturnType(type)); } } assert !isOptimistic; ! //freely coerce the result to whatever you asked for, this is e.g. Object->int for a & b final MethodHandle tgetter = getterForType(forType, primitiveGetter, objectGetter); if (fti == TYPE_OBJECT_INDEX) { if (fti != ti) { return MH.filterReturnValue(tgetter, CONVERT_OBJECT.get(ti)); } --- 618,628 ---- objectGetter.type().changeReturnType(type)); } } assert !isOptimistic; ! // freely coerce the result to whatever you asked for, this is e.g. Object->int for a & b final MethodHandle tgetter = getterForType(forType, primitiveGetter, objectGetter); if (fti == TYPE_OBJECT_INDEX) { if (fti != ti) { return MH.filterReturnValue(tgetter, CONVERT_OBJECT.get(ti)); }
*** 636,661 **** final MethodType tgetterType = tgetter.type(); switch (fti) { case TYPE_INT_INDEX: { return MH.asType(tgetter, tgetterType.changeReturnType(type)); } - case TYPE_LONG_INDEX: - switch (ti) { - case TYPE_INT_INDEX: - //get int while an int, truncating cast of long value - return MH.filterReturnValue(tgetter, JSType.TO_INT32_L.methodHandle); - case TYPE_LONG_INDEX: - return primitiveGetter; - default: - return MH.asType(tgetter, tgetterType.changeReturnType(type)); - } case TYPE_DOUBLE_INDEX: switch (ti) { case TYPE_INT_INDEX: return MH.filterReturnValue(tgetter, JSType.TO_INT32_D.methodHandle); - case TYPE_LONG_INDEX: - return MH.explicitCastArguments(tgetter, tgetterType.changeReturnType(type)); case TYPE_DOUBLE_INDEX: assert tgetterType.returnType() == double.class; return tgetter; default: return MH.asType(tgetter, tgetterType.changeReturnType(Object.class)); --- 633,646 ----
*** 732,747 **** final MethodType pmt = primitiveSetter.type(); switch (fti) { case TYPE_INT_INDEX: - case TYPE_LONG_INDEX: switch (ti) { case TYPE_INT_INDEX: return MH.asType(primitiveSetter, pmt.changeParameterType(1, int.class)); - case TYPE_LONG_INDEX: - return primitiveSetter; case TYPE_DOUBLE_INDEX: return MH.filterArguments(primitiveSetter, 1, PACK_DOUBLE); default: return objectSetter; } --- 717,729 ----
< prev index next >