Index: CodeStream.java =================================================================== RCS file: /usr/local/cvs/fd/org.eclipse.jdt.core/src/org/eclipse/jdt/internal/compiler/codegen/CodeStream.java,v retrieving revision 1.1 diff -u -r1.1 CodeStream.java --- CodeStream.java 18 Oct 2005 09:29:20 -0000 1.1 +++ CodeStream.java 18 Oct 2005 11:15:31 -0000 @@ -2172,87 +2172,206 @@ } } public void generateBoxingConversion(int unboxedTypeID) { - switch (unboxedTypeID) { - case T_byte : - // invokestatic: Byte.valueOf(byte) - this.invoke( - OPC_invokestatic, - 1, // argCount - 1, // return type size - ConstantPool.JavaLangByteConstantPoolName, - ConstantPool.ValueOf, - ConstantPool.byteByteSignature); //$NON-NLS-1$ - break; - case T_short : - // invokestatic: Short.valueOf(short) - this.invoke( - OPC_invokestatic, - 1, // argCount - 1, // return type size - ConstantPool.JavaLangShortConstantPoolName, - ConstantPool.ValueOf, - ConstantPool.shortShortSignature); //$NON-NLS-1$ - break; - case T_char : - // invokestatic: Character.valueOf(char) - this.invoke( - OPC_invokestatic, - 1, // argCount - 1, // return type size - ConstantPool.JavaLangCharacterConstantPoolName, - ConstantPool.ValueOf, - ConstantPool.charCharacterSignature); //$NON-NLS-1$ - break; - case T_int : - // invokestatic: Integer.valueOf(int) - this.invoke( - OPC_invokestatic, - 1, // argCount - 1, // return type size - ConstantPool.JavaLangIntegerConstantPoolName, - ConstantPool.ValueOf, - ConstantPool.IntIntegerSignature); //$NON-NLS-1$ - break; - case T_long : - // invokestatic: Long.valueOf(long) - this.invoke( - OPC_invokestatic, - 2, // argCount - 1, // return type size - ConstantPool.JavaLangLongConstantPoolName, - ConstantPool.ValueOf, - ConstantPool.longLongSignature); //$NON-NLS-1$ - break; - case T_float : - // invokestatic: Float.valueOf(float) - this.invoke( - OPC_invokestatic, - 1, // argCount - 1, // return type size - ConstantPool.JavaLangFloatConstantPoolName, - ConstantPool.ValueOf, - ConstantPool.floatFloatSignature); //$NON-NLS-1$ - break; - case T_double : - // invokestatic: Double.valueOf(double) - this.invoke( - OPC_invokestatic, - 2, // argCount - 1, // return type size - ConstantPool.JavaLangDoubleConstantPoolName, - ConstantPool.ValueOf, - ConstantPool.doubleDoubleSignature); //$NON-NLS-1$ - break; - case T_boolean : - // invokestatic: Boolean.valueOf(boolean) - this.invoke( - OPC_invokestatic, - 1, // argCount - 1, // return type size - ConstantPool.JavaLangBooleanConstantPoolName, - ConstantPool.ValueOf, - ConstantPool.booleanBooleanSignature); //$NON-NLS-1$ - } + switch (unboxedTypeID) { + case T_byte : + if ( this.targetLevel >= JDK1_5 ) { + // invokestatic: Byte.valueOf(byte) + this.invoke( + OPC_invokestatic, + 1, // argCount + 1, // return type size + ConstantPool.JavaLangByteConstantPoolName, + ConstantPool.ValueOf, + ConstantPool.byteByteSignature); //$NON-NLS-1$ + } else { + // new Byte( byte ) + newWrapperFor( unboxedTypeID ); + dup_x1(); + swap(); + + this.invoke( + OPC_invokespecial, + 1, // argCount + 0, // return type size + ConstantPool.JavaLangByteConstantPoolName, + ConstantPool.Init, + ConstantPool.ByteConstrSignature); //$NON-NLS-1$ + } + break; + case T_short : + if ( this.targetLevel >= JDK1_5 ) { + // invokestatic: Short.valueOf(short) + this.invoke( + OPC_invokestatic, + 1, // argCount + 1, // return type size + ConstantPool.JavaLangShortConstantPoolName, + ConstantPool.ValueOf, + ConstantPool.shortShortSignature); //$NON-NLS-1$ + } else { + // new Short(short) + newWrapperFor( unboxedTypeID ); + dup_x1(); + swap(); + this.invoke( + OPC_invokespecial, + 1, // argCount + 0, // return type size + ConstantPool.JavaLangShortConstantPoolName, + ConstantPool.Init, + ConstantPool.ShortConstrSignature); //$NON-NLS-1$ + } + break; + case T_char : + if ( this.targetLevel >= JDK1_5 ) { + // invokestatic: Character.valueOf(char) + this.invoke( + OPC_invokestatic, + 1, // argCount + 1, // return type size + ConstantPool.JavaLangCharacterConstantPoolName, + ConstantPool.ValueOf, + ConstantPool.charCharacterSignature); //$NON-NLS-1$ + } else { + // new Char( char ) + newWrapperFor( unboxedTypeID ); + dup_x1(); + swap(); + + this.invoke( + OPC_invokespecial, + 1, // argCount + 0, // return type size + ConstantPool.JavaLangCharacterConstantPoolName, + ConstantPool.Init, + ConstantPool.CharConstrSignature); //$NON-NLS-1$ + } + break; + case T_int : + if ( this.targetLevel >= JDK1_5 ) { + // invokestatic: Integer.valueOf(int) + this.invoke( + OPC_invokestatic, + 1, // argCount + 1, // return type size + ConstantPool.JavaLangIntegerConstantPoolName, + ConstantPool.ValueOf, + ConstantPool.IntIntegerSignature); //$NON-NLS-1$ + } else { + // new Integer(int) + newWrapperFor( unboxedTypeID ); + dup_x1(); + swap(); + this.invoke( + OPC_invokespecial, + 1, // argCount + 0, // return type size + ConstantPool.JavaLangIntegerConstantPoolName, + ConstantPool.Init, + ConstantPool.IntConstrSignature); //$NON-NLS-1$ + } + break; + case T_long : + if ( this.targetLevel >= JDK1_5 ) { + // invokestatic: Long.valueOf(long) + this.invoke( + OPC_invokestatic, + 2, // argCount + 1, // return type size + ConstantPool.JavaLangLongConstantPoolName, + ConstantPool.ValueOf, + ConstantPool.longLongSignature); //$NON-NLS-1$ + } else { + // new Long( long ) + newWrapperFor( unboxedTypeID ); + dup_x2(); + dup_x2(); + pop(); + + this.invoke( + OPC_invokespecial, + 2, // argCount + 0, // return type size + ConstantPool.JavaLangLongConstantPoolName, + ConstantPool.Init, + ConstantPool.LongConstrSignature); //$NON-NLS-1$ + } + break; + case T_float : + if ( this.targetLevel >= JDK1_5 ) { + // invokestatic: Float.valueOf(float) + this.invoke( + OPC_invokestatic, + 1, // argCount + 1, // return type size + ConstantPool.JavaLangFloatConstantPoolName, + ConstantPool.ValueOf, + ConstantPool.floatFloatSignature); //$NON-NLS-1$ + } else { + // new Float(float) + newWrapperFor( unboxedTypeID ); + dup_x1(); + swap(); + this.invoke( + OPC_invokespecial, + 1, // argCount + 0, // return type size + ConstantPool.JavaLangFloatConstantPoolName, + ConstantPool.Init, + ConstantPool.FloatConstrSignature); //$NON-NLS-1$ + } + break; + case T_double : + if ( this.targetLevel >= JDK1_5 ) { + // invokestatic: Double.valueOf(double) + this.invoke( + OPC_invokestatic, + 2, // argCount + 1, // return type size + ConstantPool.JavaLangDoubleConstantPoolName, + ConstantPool.ValueOf, + ConstantPool.doubleDoubleSignature); //$NON-NLS-1$ + } else { + // new Double( double ) + newWrapperFor( unboxedTypeID ); + dup_x2(); + dup_x2(); + pop(); + + this.invoke( + OPC_invokespecial, + 2, // argCount + 0, // return type size + ConstantPool.JavaLangDoubleConstantPoolName, + ConstantPool.Init, + ConstantPool.DoubleConstrSignature); //$NON-NLS-1$ + } + + break; + case T_boolean : + if ( this.targetLevel >= JDK1_5 ) { + // invokestatic: Boolean.valueOf(boolean) + this.invoke( + OPC_invokestatic, + 1, // argCount + 1, // return type size + ConstantPool.JavaLangBooleanConstantPoolName, + ConstantPool.ValueOf, + ConstantPool.booleanBooleanSignature); //$NON-NLS-1$ + } else { + // new Boolean(boolean) + newWrapperFor( unboxedTypeID ); + dup_x1(); + swap(); + this.invoke( + OPC_invokespecial, + 1, // argCount + 0, // return type size + ConstantPool.JavaLangBooleanConstantPoolName, + ConstantPool.Init, + ConstantPool.BooleanConstrSignature); //$NON-NLS-1$ + } + } } public void generateUnboxingConversion(int unboxedTypeID) { switch (unboxedTypeID) {