comparison test/compiler/stable/TestStableByte.java @ 18004:ee1c924763d2

8043546: C1 optimizes @Stable instance fields with default values Reviewed-by: kvn, jrose
author vlivanov
date Thu, 10 Jul 2014 12:04:43 -0700
parents 248ff38d2950
children
comparison
equal deleted inserted replaced
18003:dda2ae6f9557 18004:ee1c924763d2
24 */ 24 */
25 25
26 /* 26 /*
27 * @test TestStableByte 27 * @test TestStableByte
28 * @summary tests on stable fields and arrays 28 * @summary tests on stable fields and arrays
29 * @library /testlibrary 29 * @library /testlibrary /testlibrary/whitebox
30 * @compile -XDignore.symbol.file TestStableByte.java 30 * @build TestStableByte StableConfiguration sun.hotspot.WhiteBox
31 * @run main ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission
31 * @run main ClassFileInstaller 32 * @run main ClassFileInstaller
33 * java/lang/invoke/StableConfiguration
32 * java/lang/invoke/TestStableByte 34 * java/lang/invoke/TestStableByte
33 * java/lang/invoke/TestStableByte$ByteStable 35 * java/lang/invoke/TestStableByte$ByteStable
34 * java/lang/invoke/TestStableByte$StaticByteStable 36 * java/lang/invoke/TestStableByte$StaticByteStable
35 * java/lang/invoke/TestStableByte$VolatileByteStable 37 * java/lang/invoke/TestStableByte$VolatileByteStable
36 * java/lang/invoke/TestStableByte$ByteArrayDim1 38 * java/lang/invoke/TestStableByte$ByteArrayDim1
46 * java/lang/invoke/TestStableByte$NestedStableField2 48 * java/lang/invoke/TestStableByte$NestedStableField2
47 * java/lang/invoke/TestStableByte$NestedStableField2$A 49 * java/lang/invoke/TestStableByte$NestedStableField2$A
48 * java/lang/invoke/TestStableByte$NestedStableField3 50 * java/lang/invoke/TestStableByte$NestedStableField3
49 * java/lang/invoke/TestStableByte$NestedStableField3$A 51 * java/lang/invoke/TestStableByte$NestedStableField3$A
50 * java/lang/invoke/TestStableByte$DefaultValue 52 * java/lang/invoke/TestStableByte$DefaultValue
53 * java/lang/invoke/TestStableByte$DefaultStaticValue
51 * java/lang/invoke/TestStableByte$ObjectArrayLowerDim2 54 * java/lang/invoke/TestStableByte$ObjectArrayLowerDim2
52 * 55 *
53 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions 56 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
54 * -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:+UseCompressedOop 57 * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
55 * -server -XX:-TieredCompilation -Xcomp 58 * -server -XX:-TieredCompilation
59 * -XX:+FoldStableValues
60 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
61 * java.lang.invoke.TestStableByte
62 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
63 * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
64 * -server -XX:-TieredCompilation
65 * -XX:-FoldStableValues
56 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 66 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
57 * java.lang.invoke.TestStableByte 67 * java.lang.invoke.TestStableByte
58 * 68 *
59 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions 69 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
60 * -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:-UseCompressedOop 70 * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
61 * -server -XX:-TieredCompilation -Xcomp 71 * -server -XX:+TieredCompilation -XX:TieredStopAtLevel=1
72 * -XX:+FoldStableValues
73 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
74 * java.lang.invoke.TestStableByte
75 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
76 * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
77 * -server -XX:+TieredCompilation -XX:TieredStopAtLevel=1
78 * -XX:-FoldStableValues
62 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 79 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
63 * java.lang.invoke.TestStableByte 80 * java.lang.invoke.TestStableByte
64 * 81 *
65 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions 82 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
66 * -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:+UseCompressedOop 83 * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
67 * -server -XX:-TieredCompilation -Xcomp 84 * -client -XX:-TieredCompilation
85 * -XX:+FoldStableValues
68 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 86 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
69 * java.lang.invoke.TestStableByte 87 * java.lang.invoke.TestStableByte
70 *
71 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions 88 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
72 * -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:-UseCompressedOop 89 * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
73 * -server -XX:-TieredCompilation -Xcomp 90 * -client -XX:-TieredCompilation
91 * -XX:-FoldStableValues
74 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 92 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
75 * java.lang.invoke.TestStableByte 93 * java.lang.invoke.TestStableByte
76 */ 94 */
77 package java.lang.invoke; 95 package java.lang.invoke;
78 96
79 import com.sun.management.HotSpotDiagnosticMXBean;
80 import com.sun.management.VMOption;
81 import sun.management.ManagementFactoryHelper;
82 import java.lang.reflect.InvocationTargetException; 97 import java.lang.reflect.InvocationTargetException;
83 98
84 public class TestStableByte { 99 public class TestStableByte {
100 static final boolean isStableEnabled = StableConfiguration.isStableEnabled;
101 static final boolean isServerWithStable = StableConfiguration.isServerWithStable;
102
85 public static void main(String[] args) throws Exception { 103 public static void main(String[] args) throws Exception {
86 System.out.println("@Stable enabled: "+isStableEnabled);
87 System.out.println();
88
89 run(DefaultValue.class); 104 run(DefaultValue.class);
90 run(ByteStable.class); 105 run(ByteStable.class);
106 run(DefaultStaticValue.class);
91 run(StaticByteStable.class); 107 run(StaticByteStable.class);
92 run(VolatileByteStable.class); 108 run(VolatileByteStable.class);
93 109
94 // @Stable arrays: Dim 1-4 110 // @Stable arrays: Dim 1-4
95 run(ByteArrayDim1.class); 111 run(ByteArrayDim1.class);
143 } 159 }
144 } 160 }
145 161
146 /* ==================================================== */ 162 /* ==================================================== */
147 163
164 static class DefaultStaticValue {
165 public static @Stable byte v;
166
167 public static final DefaultStaticValue c = new DefaultStaticValue();
168 public static byte get() { return c.v; }
169 public static void test() throws Exception {
170 byte val1 = get();
171 c.v = 1; byte val2 = get();
172 assertEquals(val1, 0);
173 assertEquals(val2, 1);
174 }
175 }
176
177 /* ==================================================== */
178
148 static class StaticByteStable { 179 static class StaticByteStable {
149 public static @Stable byte v; 180 public static @Stable byte v;
150 181
151 public static final StaticByteStable c = new StaticByteStable(); 182 public static final StaticByteStable c = new StaticByteStable();
152 public static byte get() { return c.v; } 183 public static byte get() { return c.v; }
186 public static void test() throws Exception { 217 public static void test() throws Exception {
187 { 218 {
188 c.v = new byte[1]; c.v[0] = 1; byte val1 = get(); 219 c.v = new byte[1]; c.v[0] = 1; byte val1 = get();
189 c.v[0] = 2; byte val2 = get(); 220 c.v[0] = 2; byte val2 = get();
190 assertEquals(val1, 1); 221 assertEquals(val1, 1);
191 assertEquals(val2, (isStableEnabled ? 1 : 2)); 222 assertEquals(val2, (isServerWithStable ? 1 : 2));
192 223
193 c.v = new byte[1]; c.v[0] = 3; byte val3 = get(); 224 c.v = new byte[1]; c.v[0] = 3; byte val3 = get();
194 assertEquals(val3, (isStableEnabled ? 1 : 3)); 225 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2)
226 : 3));
195 } 227 }
196 228
197 { 229 {
198 c.v = new byte[20]; c.v[10] = 1; byte val1 = get1(); 230 c.v = new byte[20]; c.v[10] = 1; byte val1 = get1();
199 c.v[10] = 2; byte val2 = get1(); 231 c.v[10] = 2; byte val2 = get1();
200 assertEquals(val1, 1); 232 assertEquals(val1, 1);
201 assertEquals(val2, (isStableEnabled ? 1 : 2)); 233 assertEquals(val2, (isServerWithStable ? 1 : 2));
202 234
203 c.v = new byte[20]; c.v[10] = 3; byte val3 = get1(); 235 c.v = new byte[20]; c.v[10] = 3; byte val3 = get1();
204 assertEquals(val3, (isStableEnabled ? 1 : 3)); 236 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2)
237 : 3));
205 } 238 }
206 239
207 { 240 {
208 c.v = new byte[1]; byte[] val1 = get2(); 241 c.v = new byte[1]; byte[] val1 = get2();
209 c.v = new byte[1]; byte[] val2 = get2(); 242 c.v = new byte[1]; byte[] val2 = get2();
224 public static void test() throws Exception { 257 public static void test() throws Exception {
225 { 258 {
226 c.v = new byte[1][1]; c.v[0][0] = 1; byte val1 = get(); 259 c.v = new byte[1][1]; c.v[0][0] = 1; byte val1 = get();
227 c.v[0][0] = 2; byte val2 = get(); 260 c.v[0][0] = 2; byte val2 = get();
228 assertEquals(val1, 1); 261 assertEquals(val1, 1);
229 assertEquals(val2, (isStableEnabled ? 1 : 2)); 262 assertEquals(val2, (isServerWithStable ? 1 : 2));
230 263
231 c.v = new byte[1][1]; c.v[0][0] = 3; byte val3 = get(); 264 c.v = new byte[1][1]; c.v[0][0] = 3; byte val3 = get();
232 assertEquals(val3, (isStableEnabled ? 1 : 3)); 265 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2)
266 : 3));
233 267
234 c.v[0] = new byte[1]; c.v[0][0] = 4; byte val4 = get(); 268 c.v[0] = new byte[1]; c.v[0][0] = 4; byte val4 = get();
235 assertEquals(val4, (isStableEnabled ? 1 : 4)); 269 assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1 : 2)
270 : 4));
236 } 271 }
237 272
238 { 273 {
239 c.v = new byte[1][1]; byte[] val1 = get1(); 274 c.v = new byte[1][1]; byte[] val1 = get1();
240 c.v[0] = new byte[1]; byte[] val2 = get1(); 275 c.v[0] = new byte[1]; byte[] val2 = get1();
241 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); 276 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
242 } 277 }
243 278
244 { 279 {
245 c.v = new byte[1][1]; byte[][] val1 = get2(); 280 c.v = new byte[1][1]; byte[][] val1 = get2();
246 c.v = new byte[1][1]; byte[][] val2 = get2(); 281 c.v = new byte[1][1]; byte[][] val2 = get2();
262 public static void test() throws Exception { 297 public static void test() throws Exception {
263 { 298 {
264 c.v = new byte[1][1][1]; c.v[0][0][0] = 1; byte val1 = get(); 299 c.v = new byte[1][1][1]; c.v[0][0][0] = 1; byte val1 = get();
265 c.v[0][0][0] = 2; byte val2 = get(); 300 c.v[0][0][0] = 2; byte val2 = get();
266 assertEquals(val1, 1); 301 assertEquals(val1, 1);
267 assertEquals(val2, (isStableEnabled ? 1 : 2)); 302 assertEquals(val2, (isServerWithStable ? 1 : 2));
268 303
269 c.v = new byte[1][1][1]; c.v[0][0][0] = 3; byte val3 = get(); 304 c.v = new byte[1][1][1]; c.v[0][0][0] = 3; byte val3 = get();
270 assertEquals(val3, (isStableEnabled ? 1 : 3)); 305 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2)
306 : 3));
271 307
272 c.v[0] = new byte[1][1]; c.v[0][0][0] = 4; byte val4 = get(); 308 c.v[0] = new byte[1][1]; c.v[0][0][0] = 4; byte val4 = get();
273 assertEquals(val4, (isStableEnabled ? 1 : 4)); 309 assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1 : 2)
310 : 4));
274 311
275 c.v[0][0] = new byte[1]; c.v[0][0][0] = 5; byte val5 = get(); 312 c.v[0][0] = new byte[1]; c.v[0][0][0] = 5; byte val5 = get();
276 assertEquals(val5, (isStableEnabled ? 1 : 5)); 313 assertEquals(val5, (isStableEnabled ? (isServerWithStable ? 1 : 2)
314 : 5));
277 } 315 }
278 316
279 { 317 {
280 c.v = new byte[1][1][1]; byte[] val1 = get1(); 318 c.v = new byte[1][1][1]; byte[] val1 = get1();
281 c.v[0][0] = new byte[1]; byte[] val2 = get1(); 319 c.v[0][0] = new byte[1]; byte[] val2 = get1();
282 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); 320 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
283 } 321 }
284 322
285 { 323 {
286 c.v = new byte[1][1][1]; byte[][] val1 = get2(); 324 c.v = new byte[1][1][1]; byte[][] val1 = get2();
287 c.v[0] = new byte[1][1]; byte[][] val2 = get2(); 325 c.v[0] = new byte[1][1]; byte[][] val2 = get2();
288 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); 326 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
289 } 327 }
290 328
291 { 329 {
292 c.v = new byte[1][1][1]; byte[][][] val1 = get3(); 330 c.v = new byte[1][1][1]; byte[][][] val1 = get3();
293 c.v = new byte[1][1][1]; byte[][][] val2 = get3(); 331 c.v = new byte[1][1][1]; byte[][][] val2 = get3();
310 public static void test() throws Exception { 348 public static void test() throws Exception {
311 { 349 {
312 c.v = new byte[1][1][1][1]; c.v[0][0][0][0] = 1; byte val1 = get(); 350 c.v = new byte[1][1][1][1]; c.v[0][0][0][0] = 1; byte val1 = get();
313 c.v[0][0][0][0] = 2; byte val2 = get(); 351 c.v[0][0][0][0] = 2; byte val2 = get();
314 assertEquals(val1, 1); 352 assertEquals(val1, 1);
315 assertEquals(val2, (isStableEnabled ? 1 : 2)); 353 assertEquals(val2, (isServerWithStable ? 1 : 2));
316 354
317 c.v = new byte[1][1][1][1]; c.v[0][0][0][0] = 3; byte val3 = get(); 355 c.v = new byte[1][1][1][1]; c.v[0][0][0][0] = 3; byte val3 = get();
318 assertEquals(val3, (isStableEnabled ? 1 : 3)); 356 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2)
357 : 3));
319 358
320 c.v[0] = new byte[1][1][1]; c.v[0][0][0][0] = 4; byte val4 = get(); 359 c.v[0] = new byte[1][1][1]; c.v[0][0][0][0] = 4; byte val4 = get();
321 assertEquals(val4, (isStableEnabled ? 1 : 4)); 360 assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1 : 2)
361 : 4));
322 362
323 c.v[0][0] = new byte[1][1]; c.v[0][0][0][0] = 5; byte val5 = get(); 363 c.v[0][0] = new byte[1][1]; c.v[0][0][0][0] = 5; byte val5 = get();
324 assertEquals(val5, (isStableEnabled ? 1 : 5)); 364 assertEquals(val5, (isStableEnabled ? (isServerWithStable ? 1 : 2)
365 : 5));
325 366
326 c.v[0][0][0] = new byte[1]; c.v[0][0][0][0] = 6; byte val6 = get(); 367 c.v[0][0][0] = new byte[1]; c.v[0][0][0][0] = 6; byte val6 = get();
327 assertEquals(val6, (isStableEnabled ? 1 : 6)); 368 assertEquals(val6, (isStableEnabled ? (isServerWithStable ? 1 : 2)
369 : 6));
328 } 370 }
329 371
330 { 372 {
331 c.v = new byte[1][1][1][1]; byte[] val1 = get1(); 373 c.v = new byte[1][1][1][1]; byte[] val1 = get1();
332 c.v[0][0][0] = new byte[1]; byte[] val2 = get1(); 374 c.v[0][0][0] = new byte[1]; byte[] val2 = get1();
333 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); 375 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
334 } 376 }
335 377
336 { 378 {
337 c.v = new byte[1][1][1][1]; byte[][] val1 = get2(); 379 c.v = new byte[1][1][1][1]; byte[][] val1 = get2();
338 c.v[0][0] = new byte[1][1]; byte[][] val2 = get2(); 380 c.v[0][0] = new byte[1][1]; byte[][] val2 = get2();
339 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); 381 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
340 } 382 }
341 383
342 { 384 {
343 c.v = new byte[1][1][1][1]; byte[][][] val1 = get3(); 385 c.v = new byte[1][1][1][1]; byte[][][] val1 = get3();
344 c.v[0] = new byte[1][1][1]; byte[][][] val2 = get3(); 386 c.v[0] = new byte[1][1][1]; byte[][][] val2 = get3();
345 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); 387 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
346 } 388 }
347 389
348 { 390 {
349 c.v = new byte[1][1][1][1]; byte[][][][] val1 = get4(); 391 c.v = new byte[1][1][1][1]; byte[][][][] val1 = get4();
350 c.v = new byte[1][1][1][1]; byte[][][][] val2 = get4(); 392 c.v = new byte[1][1][1][1]; byte[][][][] val2 = get4();
402 444
403 { 445 {
404 c.v = new byte[1][1]; c.v[0] = new byte[0]; byte[] val1 = get1(); 446 c.v = new byte[1][1]; c.v[0] = new byte[0]; byte[] val1 = get1();
405 c.v[0] = new byte[0]; byte[] val2 = get1(); 447 c.v[0] = new byte[0]; byte[] val2 = get1();
406 448
407 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); 449 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
408 } 450 }
409 451
410 { 452 {
411 c.v = new byte[0][0]; Object[] val1 = get2(); 453 c.v = new byte[0][0]; Object[] val1 = get2();
412 c.v = new byte[0][0]; Object[] val2 = get2(); 454 c.v = new byte[0][0]; Object[] val2 = get2();
438 480
439 { 481 {
440 c.v = new byte[1][1][1]; c.v[0][0] = new byte[0]; byte[] val1 = get1(); 482 c.v = new byte[1][1][1]; c.v[0][0] = new byte[0]; byte[] val1 = get1();
441 c.v[0][0] = new byte[0]; byte[] val2 = get1(); 483 c.v[0][0] = new byte[0]; byte[] val2 = get1();
442 484
443 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); 485 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
444 } 486 }
445 487
446 { 488 {
447 c.v = new byte[1][1][1]; c.v[0] = new byte[0][0]; byte[][] val1 = get2(); 489 c.v = new byte[1][1][1]; c.v[0] = new byte[0][0]; byte[][] val1 = get2();
448 c.v[0] = new byte[0][0]; byte[][] val2 = get2(); 490 c.v[0] = new byte[0][0]; byte[][] val2 = get2();
449 491
450 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); 492 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
451 } 493 }
452 494
453 { 495 {
454 c.v = new byte[0][0][0]; Object[][] val1 = get3(); 496 c.v = new byte[0][0][0]; Object[][] val1 = get3();
455 c.v = new byte[0][0][0]; Object[][] val2 = get3(); 497 c.v = new byte[0][0][0]; Object[][] val2 = get3();
580 c.v = new A[] { elem, elem }; c.v[0].left = c.v[0].right = c.v; 622 c.v = new A[] { elem, elem }; c.v[0].left = c.v[0].right = c.v;
581 elem.a = 1; byte val1 = get(); byte val2 = get1(); 623 elem.a = 1; byte val1 = get(); byte val2 = get1();
582 elem.a = 2; byte val3 = get(); byte val4 = get1(); 624 elem.a = 2; byte val3 = get(); byte val4 = get1();
583 625
584 assertEquals(val1, 1); 626 assertEquals(val1, 1);
585 assertEquals(val3, (isStableEnabled ? 1 : 2)); 627 assertEquals(val3, (isServerWithStable ? 1 : 2));
586 628
587 assertEquals(val2, 1); 629 assertEquals(val2, 1);
588 assertEquals(val4, 2); 630 assertEquals(val4, 2);
589 } 631 }
590 } 632 }
614 System.out.println("FAILED"); 656 System.out.println("FAILED");
615 ex.printStackTrace(System.out); 657 ex.printStackTrace(System.out);
616 } 658 }
617 } 659 }
618 } 660 }
619
620 static final boolean isStableEnabled;
621 static {
622 HotSpotDiagnosticMXBean diagnostic
623 = ManagementFactoryHelper.getDiagnosticMXBean();
624 VMOption tmp;
625 try {
626 tmp = diagnostic.getVMOption("FoldStableValues");
627 } catch (IllegalArgumentException e) {
628 tmp = null;
629 }
630 isStableEnabled = (tmp == null ? false : Boolean.parseBoolean(tmp.getValue()));
631 }
632 } 661 }