#!/bin/bash javac -d . ../../../../../../make/jdk/src/classes/build/tools/spp/Spp.java SPP=build.tools.spp.Spp # Generates variable handle tests for objects and all primitive types # This is likely to be a temporary testing approach as it may be more # desirable to generate code using ASM which will allow more flexibility # in the kinds of tests that are generated. for type in boolean byte short char int long float double String do Type="$(tr '[:lower:]' '[:upper:]' <<< ${type:0:1})${type:1}" args="-K$type -Dtype=$type -DType=$Type" args="$args -KCAS" case $type in byte|short|char|int|long|float|double) args="$args -KAtomicAdd" ;; esac case $type in boolean|byte|short|char|int|long) args="$args -KBitwise" ;; esac wrong_primitive_type=boolean case $type in boolean) value1=true value2=false value3=false wrong_primitive_type=int ;; byte) value1=(byte)0x01 value2=(byte)0x23 value3=(byte)0x45 ;; short) value1=(short)0x0123 value2=(short)0x4567 value3=(short)0x89AB ;; char) value1=\'\\\\u0123\' value2=\'\\\\u4567\' value3=\'\\\\u89AB\' ;; int) value1=0x01234567 value2=0x89ABCDEF value3=0xCAFEBABE ;; long) value1=0x0123456789ABCDEFL value2=0xCAFEBABECAFEBABEL value3=0xDEADBEEFDEADBEEFL ;; float) value1=1.0f value2=2.0f value3=3.0f ;; double) value1=1.0d value2=2.0d value3=3.0d ;; String) value1=\"foo\" value2=\"bar\" value3=\"baz\" ;; esac args="$args -Dvalue1=$value1 -Dvalue2=$value2 -Dvalue3=$value3 -Dwrong_primitive_type=$wrong_primitive_type" echo $args out=VarHandleTestAccess${Type}.java rm -f $out java $SPP -nel $args -iX-VarHandleTestAccess.java.template -o$out out=VarHandleTestMethodHandleAccess${Type}.java rm -f $out java $SPP -nel $args -iX-VarHandleTestMethodHandleAccess.java.template -o$out out=VarHandleTestMethodType${Type}.java rm -f $out java $SPP -nel $args -iX-VarHandleTestMethodType.java.template -o$out done for type in short char int long float double do Type="$(tr '[:lower:]' '[:upper:]' <<< ${type:0:1})${type:1}" args="-K$type -Dtype=$type -DType=$Type" BoxType=$Type case $type in char) BoxType=Character ;; int) BoxType=Integer ;; esac args="$args -DBoxType=$BoxType" case $type in int|long|float|double) args="$args -KCAS" ;; esac case $type in int|long) args="$args -KAtomicAdd" ;; esac case $type in int|long) args="$args -KBitwise" ;; esac # The value of `value3` is chosen such that when added to `value1` or `value2` # it will result in carrying of bits over to the next byte, thereby detecting # possible errors in endianness conversion e.g. if say for atomic addition the # augend is incorrectly processed case $type in short) value1=(short)0x0102 value2=(short)0x1112 value3=(short)0xFFFE ;; char) value1=(char)0x0102 value2=(char)0x1112 value3=(char)0xFFFE ;; int) value1=0x01020304 value2=0x11121314 value3=0xFFFEFDFC ;; long) value1=0x0102030405060708L value2=0x1112131415161718L value3=0xFFFEFDFCFBFAF9F8L ;; float) value1=0x01020304 value2=0x11121314 value3=0xFFFEFDFC ;; double) value1=0x0102030405060708L value2=0x1112131415161718L value3=0xFFFEFDFCFBFAF9F8L ;; esac args="$args -Dvalue1=$value1 -Dvalue2=$value2 -Dvalue3=$value3" echo $args out=VarHandleTestByteArrayAs${Type}.java rm -f $out java $SPP -nel $args -iX-VarHandleTestByteArrayView.java.template -o$out done rm -fr build