1 #!/bin/bash
  2 
  3 javac -d . ../../../../../../make/jdk/src/classes/build/tools/spp/Spp.java
  4 
  5 SPP=build.tools.spp.Spp
  6 
  7 # Generates variable handle tests for objects and all primitive types
  8 # This is likely to be a temporary testing approach as it may be more
  9 # desirable to generate code using ASM which will allow more flexibility
 10 # in the kinds of tests that are generated.
 11 
 12 for type in boolean byte short char int long float double String
 13 do
 14   Type="$(tr '[:lower:]' '[:upper:]' <<< ${type:0:1})${type:1}"
 15   args="-K$type -Dtype=$type -DType=$Type"
 16 
 17   args="$args -KCAS"
 18 
 19   case $type in
 20     byte|short|char|int|long|float|double)
 21       args="$args -KAtomicAdd"
 22       ;;
 23   esac
 24 
 25   case $type in
 26     boolean|byte|short|char|int|long)
 27       args="$args -KBitwise"
 28       ;;
 29   esac
 30 
 31   wrong_primitive_type=boolean
 32 
 33   case $type in
 34     boolean)
 35       value1=true
 36       value2=false
 37       value3=false
 38       wrong_primitive_type=int
 39       ;;
 40     byte)
 41       value1=(byte)0x01
 42       value2=(byte)0x23
 43       value3=(byte)0x45
 44       ;;
 45     short)
 46       value1=(short)0x0123
 47       value2=(short)0x4567
 48       value3=(short)0x89AB
 49       ;;
 50     char)
 51       value1=\'\\\\u0123\'
 52       value2=\'\\\\u4567\'
 53       value3=\'\\\\u89AB\'
 54       ;;
 55     int)
 56       value1=0x01234567
 57       value2=0x89ABCDEF
 58       value3=0xCAFEBABE
 59       ;;
 60     long)
 61       value1=0x0123456789ABCDEFL
 62       value2=0xCAFEBABECAFEBABEL
 63       value3=0xDEADBEEFDEADBEEFL
 64       ;;
 65     float)
 66       value1=1.0f
 67       value2=2.0f
 68       value3=3.0f
 69       ;;
 70     double)
 71       value1=1.0d
 72       value2=2.0d
 73       value3=3.0d
 74       ;;
 75     String)
 76       value1=\"foo\"
 77       value2=\"bar\"
 78       value3=\"baz\"
 79       ;;
 80   esac
 81 
 82   args="$args -Dvalue1=$value1 -Dvalue2=$value2 -Dvalue3=$value3 -Dwrong_primitive_type=$wrong_primitive_type"
 83 
 84   echo $args
 85   out=VarHandleTestAccess${Type}.java
 86   rm -f $out
 87   java $SPP -nel $args -iX-VarHandleTestAccess.java.template -o$out
 88   out=VarHandleTestMethodHandleAccess${Type}.java
 89   rm -f $out
 90   java $SPP -nel $args -iX-VarHandleTestMethodHandleAccess.java.template -o$out
 91   out=VarHandleTestMethodType${Type}.java
 92   rm -f $out
 93   java $SPP -nel $args -iX-VarHandleTestMethodType.java.template -o$out
 94 done
 95 
 96 for type in short char int long float double
 97 do
 98   Type="$(tr '[:lower:]' '[:upper:]' <<< ${type:0:1})${type:1}"
 99   args="-K$type -Dtype=$type -DType=$Type"
100 
101   BoxType=$Type
102   case $type in
103     char)
104       BoxType=Character
105       ;;
106     int)
107       BoxType=Integer
108       ;;
109   esac
110   args="$args -DBoxType=$BoxType"
111 
112   case $type in
113     int|long|float|double)
114       args="$args -KCAS"
115       ;;
116   esac
117 
118   case $type in
119     int|long)
120       args="$args -KAtomicAdd"
121       ;;
122   esac
123 
124   case $type in
125     int|long)
126       args="$args -KBitwise"
127       ;;
128   esac
129 
130   # The value of `value3` is chosen such that when added to `value1` or `value2`
131   # it will result in carrying of bits over to the next byte, thereby detecting
132   # possible errors in endianness conversion e.g. if say for atomic addition the
133   # augend is incorrectly processed
134   case $type in
135     short)
136       value1=(short)0x0102
137       value2=(short)0x1112
138       value3=(short)0xFFFE
139       ;;
140     char)
141       value1=(char)0x0102
142       value2=(char)0x1112
143       value3=(char)0xFFFE
144       ;;
145     int)
146       value1=0x01020304
147       value2=0x11121314
148       value3=0xFFFEFDFC
149       ;;
150     long)
151       value1=0x0102030405060708L
152       value2=0x1112131415161718L
153       value3=0xFFFEFDFCFBFAF9F8L
154       ;;
155     float)
156       value1=0x01020304
157       value2=0x11121314
158       value3=0xFFFEFDFC
159       ;;
160     double)
161       value1=0x0102030405060708L
162       value2=0x1112131415161718L
163       value3=0xFFFEFDFCFBFAF9F8L
164       ;;
165   esac
166 
167   args="$args -Dvalue1=$value1 -Dvalue2=$value2 -Dvalue3=$value3"
168 
169   echo $args
170   out=VarHandleTestByteArrayAs${Type}.java
171   rm -f $out
172   java $SPP -nel $args -iX-VarHandleTestByteArrayView.java.template -o$out
173 done
174 
175 rm -fr build