1 /* 2 * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 * 23 */ 24 25 // This file contains multiple illegal value type classes that should cause 26 // ClassFormatError exceptions when attempted to be loaded. 27 // 28 // The .jcod classes were originally generated from this Java file and then 29 // modified to cause ClassFormatError or ClassCircularityError exceptions. The 30 // '(bad)' comments in most of the tests show where the modifications were made. 31 // 32 // final __ByValue class Value { 33 // static final Value VT = makeValue(0x01234567); 34 // final int int_v; 35 // Value() { 36 // int_v = 1; 37 // } 38 // static Value makeValue(int x) { 39 // Value v = __MakeDefault Value(); 40 // v = __WithField(v.int_v, x); 41 // return v; 42 // } 43 // } 44 45 46 // Test that class modifiers cannot have both ACC_VALUE and ACC_ABSTRATCT set. 47 // 48 class ValueAbstract { 49 0xCAFEBABE; 50 0; // minor version 51 55; // version 52 [28] { // Constant Pool 53 ; // first element is empty 54 Method #7 #23; // #1 at 0x0A 55 Field #3 #24; // #2 at 0x0F 56 class #9; // #3 at 0x14 57 int 0x01234567; // #4 at 0x17 58 Method #3 #25; // #5 at 0x1C 59 Field #3 #26; // #6 at 0x21 60 class #27; // #7 at 0x26 61 Utf8 "VT"; // #8 at 0x29 62 Utf8 "ValueAbstract"; // #9 at 0x2E 63 Utf8 "ValueTypes"; // #10 at 0x36 64 Utf8 "LValueAbstract;"; // #11 at 0x43 65 Utf8 "int_v"; // #12 at 0x4D 66 Utf8 "I"; // #13 at 0x55 67 Utf8 "<init>"; // #14 at 0x59 68 Utf8 "()V"; // #15 at 0x62 69 Utf8 "Code"; // #16 at 0x68 70 Utf8 "LineNumberTable"; // #17 at 0x6F 71 Utf8 "makeValueAbstract"; // #18 at 0x81 72 Utf8 "(I)LValueAbstract;"; // #19 at 0x8D 73 Utf8 "<clinit>"; // #20 at 0x9A 74 Utf8 "SourceFile"; // #21 at 0xA5 75 Utf8 "ValueAbstract.java"; // #22 at 0xB2 76 NameAndType #14 #15; // #23 at 0xBF 77 NameAndType #12 #13; // #24 at 0xC4 78 NameAndType #18 #19; // #25 at 0xC9 79 NameAndType #8 #11; // #26 at 0xCE 80 Utf8 "java/lang/Object"; // #27 at 0xD3 81 } // Constant Pool 82 83 0x0530; // access [ ACC_VALUE ACC_ABSTRACT(bad) ACC_SUPER ACC_FINAL ] 84 #3;// this_cpx 85 #7;// super_cpx 86 87 [0] { // Interfaces 88 } // Interfaces 89 90 [2] { // fields 91 { // Member at 0xF0 92 0x0118; // access 93 #8; // name_cpx 94 #11; // sig_cpx 95 [0] { // Attributes 96 } // Attributes 97 } // Member 98 ; 99 { // Member at 0xF8 100 0x0010; // access 101 #12; // name_cpx 102 #13; // sig_cpx 103 [0] { // Attributes 104 } // Attributes 105 } // Member 106 } // fields 107 108 [3] { // methods 109 { // Member at 0x0102 110 0x0000; // access 111 #14; // name_cpx 112 #15; // sig_cpx 113 [1] { // Attributes 114 Attr(#16, 42) { // Code at 0x010A 115 2; // max_stack 116 1; // max_locals 117 Bytes[10]{ 118 0x2AB700012A04B500; 119 0x02B1; 120 }; 121 [0] { // Traps 122 } // end Traps 123 [1] { // Attributes 124 Attr(#17, 14) { // LineNumberTable at 0x0126 125 [3] { // LineNumberTable 126 0 4; // at 0x0132 127 4 5; // at 0x0136 128 9 6; // at 0x013A 129 } 130 } // end LineNumberTable 131 } // Attributes 132 } // end Code 133 } // Attributes 134 } // Member 135 ; 136 { // Member at 0x013A 137 0x0008; // access 138 #18; // name_cpx 139 #19; // sig_cpx 140 [1] { // Attributes 141 Attr(#16, 44) { // Code at 0x0142 142 2; // max_stack 143 2; // max_locals 144 Bytes[12]{ 145 0xCB00034C2B1ACC00; 146 0x024C2BB0; 147 }; 148 [0] { // Traps 149 } // end Traps 150 [1] { // Attributes 151 Attr(#17, 14) { // LineNumberTable at 0x0160 152 [3] { // LineNumberTable 153 0 8; // at 0x016C 154 4 9; // at 0x0170 155 10 10; // at 0x0174 156 } 157 } // end LineNumberTable 158 } // Attributes 159 } // end Code 160 } // Attributes 161 } // Member 162 ; 163 { // Member at 0x0174 164 0x0008; // access 165 #20; // name_cpx 166 #15; // sig_cpx 167 [1] { // Attributes 168 Attr(#16, 33) { // Code at 0x017C 169 1; // max_stack 170 0; // max_locals 171 Bytes[9]{ 172 0x1204B80005B30006; 173 0xB1; 174 }; 175 [0] { // Traps 176 } // end Traps 177 [1] { // Attributes 178 Attr(#17, 6) { // LineNumberTable at 0x0197 179 [1] { // LineNumberTable 180 0 2; // at 0x01A3 181 } 182 } // end LineNumberTable 183 } // Attributes 184 } // end Code 185 } // Attributes 186 } // Member 187 } // methods 188 189 [2] { // Attributes 190 Attr(#21, 2) { // SourceFile at 0x01A5 191 #22; 192 } // end SourceFile 193 ; 194 Attr(#10, 4) { // ValueTypes at 0x01AD 195 0x00010003; 196 } // end ValueTypes 197 } // Attributes 198 } // end class ValueAbstract 199 200 ////////////////////////////////////////////////////////////////////// 201 202 // Test that class modifiers cannot have both ACC_VALUE and ACC_ENUM set. 203 // 204 class ValueEnum { 205 0xCAFEBABE; 206 0; // minor version 207 55; // version 208 [28] { // Constant Pool 209 ; // first element is empty 210 Method #7 #23; // #1 at 0x0A 211 Field #3 #24; // #2 at 0x0F 212 class #9; // #3 at 0x14 213 int 0x01234567; // #4 at 0x17 214 Method #3 #25; // #5 at 0x1C 215 Field #3 #26; // #6 at 0x21 216 class #27; // #7 at 0x26 217 Utf8 "VT"; // #8 at 0x29 218 Utf8 "ValueEnum"; // #9 at 0x2E 219 Utf8 "ValueTypes"; // #10 at 0x36 220 Utf8 "LValueEnum;"; // #11 at 0x43 221 Utf8 "int_v"; // #12 at 0x4D 222 Utf8 "I"; // #13 at 0x55 223 Utf8 "<init>"; // #14 at 0x59 224 Utf8 "()V"; // #15 at 0x62 225 Utf8 "Code"; // #16 at 0x68 226 Utf8 "LineNumberTable"; // #17 at 0x6F 227 Utf8 "makeValueEnum"; // #18 at 0x81 228 Utf8 "(I)LValueEnum;"; // #19 at 0x8D 229 Utf8 "<clinit>"; // #20 at 0x9A 230 Utf8 "SourceFile"; // #21 at 0xA5 231 Utf8 "ValueEnum.java"; // #22 at 0xB2 232 NameAndType #14 #15; // #23 at 0xBF 233 NameAndType #12 #13; // #24 at 0xC4 234 NameAndType #18 #19; // #25 at 0xC9 235 NameAndType #8 #11; // #26 at 0xCE 236 Utf8 "java/lang/Object"; // #27 at 0xD3 237 } // Constant Pool 238 239 0x04130; // access [ ACC_VALUE ACC_ENUM(bad) ACC_SUPER ACC_FINAL ] 240 #3;// this_cpx 241 #7;// super_cpx 242 243 [0] { // Interfaces 244 } // Interfaces 245 246 [2] { // fields 247 { // Member at 0xF0 248 0x0118; // access 249 #8; // name_cpx 250 #11; // sig_cpx 251 [0] { // Attributes 252 } // Attributes 253 } // Member 254 ; 255 { // Member at 0xF8 256 0x0010; // access 257 #12; // name_cpx 258 #13; // sig_cpx 259 [0] { // Attributes 260 } // Attributes 261 } // Member 262 } // fields 263 264 [3] { // methods 265 { // Member at 0x0102 266 0x0000; // access 267 #14; // name_cpx 268 #15; // sig_cpx 269 [1] { // Attributes 270 Attr(#16, 42) { // Code at 0x010A 271 2; // max_stack 272 1; // max_locals 273 Bytes[10]{ 274 0x2AB700012A04B500; 275 0x02B1; 276 }; 277 [0] { // Traps 278 } // end Traps 279 [1] { // Attributes 280 Attr(#17, 14) { // LineNumberTable at 0x0126 281 [3] { // LineNumberTable 282 0 4; // at 0x0132 283 4 5; // at 0x0136 284 9 6; // at 0x013A 285 } 286 } // end LineNumberTable 287 } // Attributes 288 } // end Code 289 } // Attributes 290 } // Member 291 ; 292 { // Member at 0x013A 293 0x0008; // access 294 #18; // name_cpx 295 #19; // sig_cpx 296 [1] { // Attributes 297 Attr(#16, 44) { // Code at 0x0142 298 2; // max_stack 299 2; // max_locals 300 Bytes[12]{ 301 0xCB00034C2B1ACC00; 302 0x024C2BB0; 303 }; 304 [0] { // Traps 305 } // end Traps 306 [1] { // Attributes 307 Attr(#17, 14) { // LineNumberTable at 0x0160 308 [3] { // LineNumberTable 309 0 8; // at 0x016C 310 4 9; // at 0x0170 311 10 10; // at 0x0174 312 } 313 } // end LineNumberTable 314 } // Attributes 315 } // end Code 316 } // Attributes 317 } // Member 318 ; 319 { // Member at 0x0174 320 0x0008; // access 321 #20; // name_cpx 322 #15; // sig_cpx 323 [1] { // Attributes 324 Attr(#16, 33) { // Code at 0x017C 325 1; // max_stack 326 0; // max_locals 327 Bytes[9]{ 328 0x1204B80005B30006; 329 0xB1; 330 }; 331 [0] { // Traps 332 } // end Traps 333 [1] { // Attributes 334 Attr(#17, 6) { // LineNumberTable at 0x0197 335 [1] { // LineNumberTable 336 0 2; // at 0x01A3 337 } 338 } // end LineNumberTable 339 } // Attributes 340 } // end Code 341 } // Attributes 342 } // Member 343 } // methods 344 345 [2] { // Attributes 346 Attr(#21, 2) { // SourceFile at 0x01A5 347 #22; 348 } // end SourceFile 349 ; 350 Attr(#10, 4) { // ValueTypes at 0x01AD 351 0x00010003; 352 } // end ValueTypes 353 } // Attributes 354 } // end class ValueEnum 355 356 ////////////////////////////////////////////////////////////////////// 357 358 // Test that value type fields must be final. 359 // 360 class ValueFieldNotFinal { 361 0xCAFEBABE; 362 0; // minor version 363 55; // version 364 [28] { // Constant Pool 365 ; // first element is empty 366 Method #7 #23; // #1 at 0x0A 367 Field #3 #24; // #2 at 0x0F 368 class #9; // #3 at 0x14 369 int 0x01234567; // #4 at 0x17 370 Method #3 #25; // #5 at 0x1C 371 Field #3 #26; // #6 at 0x21 372 class #27; // #7 at 0x26 373 Utf8 "VT"; // #8 at 0x29 374 Utf8 "ValueFieldNotFinal"; // #9 at 0x2E 375 Utf8 "ValueTypes"; // #10 at 0x36 376 Utf8 "LValueFieldNotFinal;"; // #11 at 0x43 377 Utf8 "int_v"; // #12 at 0x4D 378 Utf8 "I"; // #13 at 0x55 379 Utf8 "<init>"; // #14 at 0x59 380 Utf8 "()V"; // #15 at 0x62 381 Utf8 "Code"; // #16 at 0x68 382 Utf8 "LineNumberTable"; // #17 at 0x6F 383 Utf8 "makeValueFieldNotFinal"; // #18 at 0x81 384 Utf8 "(I)LValueFieldNotFinal;"; // #19 at 0x8D 385 Utf8 "<clinit>"; // #20 at 0x9A 386 Utf8 "SourceFile"; // #21 at 0xA5 387 Utf8 "ValueFieldNotFinal.java"; // #22 at 0xB2 388 NameAndType #14 #15; // #23 at 0xBF 389 NameAndType #12 #13; // #24 at 0xC4 390 NameAndType #18 #19; // #25 at 0xC9 391 NameAndType #8 #11; // #26 at 0xCE 392 Utf8 "java/lang/Object"; // #27 at 0xD3 393 } // Constant Pool 394 395 0x0130; // access [ ACC_VALUE ACC_SUPER ACC_FINAL ] 396 #3;// this_cpx 397 #7;// super_cpx 398 399 [0] { // Interfaces 400 } // Interfaces 401 402 [2] { // fields 403 { // Member at 0xF0 404 0x0118; // access 405 #8; // name_cpx 406 #11; // sig_cpx 407 [0] { // Attributes 408 } // Attributes 409 } // Member 410 ; 411 { // Member at 0xF8 412 0x0000; // access [ Field not ACC_FINAL(bad) ] 413 #12; // name_cpx 414 #13; // sig_cpx 415 [0] { // Attributes 416 } // Attributes 417 } // Member 418 } // fields 419 420 [3] { // methods 421 { // Member at 0x0102 422 0x0000; // access 423 #14; // name_cpx 424 #15; // sig_cpx 425 [1] { // Attributes 426 Attr(#16, 42) { // Code at 0x010A 427 2; // max_stack 428 1; // max_locals 429 Bytes[10]{ 430 0x2AB700012A04B500; 431 0x02B1; 432 }; 433 [0] { // Traps 434 } // end Traps 435 [1] { // Attributes 436 Attr(#17, 14) { // LineNumberTable at 0x0126 437 [3] { // LineNumberTable 438 0 4; // at 0x0132 439 4 5; // at 0x0136 440 9 6; // at 0x013A 441 } 442 } // end LineNumberTable 443 } // Attributes 444 } // end Code 445 } // Attributes 446 } // Member 447 ; 448 { // Member at 0x013A 449 0x0008; // access 450 #18; // name_cpx 451 #19; // sig_cpx 452 [1] { // Attributes 453 Attr(#16, 44) { // Code at 0x0142 454 2; // max_stack 455 2; // max_locals 456 Bytes[12]{ 457 0xCB00034C2B1ACC00; 458 0x024C2BB0; 459 }; 460 [0] { // Traps 461 } // end Traps 462 [1] { // Attributes 463 Attr(#17, 14) { // LineNumberTable at 0x0160 464 [3] { // LineNumberTable 465 0 8; // at 0x016C 466 4 9; // at 0x0170 467 10 10; // at 0x0174 468 } 469 } // end LineNumberTable 470 } // Attributes 471 } // end Code 472 } // Attributes 473 } // Member 474 ; 475 { // Member at 0x0174 476 0x0008; // access 477 #20; // name_cpx 478 #15; // sig_cpx 479 [1] { // Attributes 480 Attr(#16, 33) { // Code at 0x017C 481 1; // max_stack 482 0; // max_locals 483 Bytes[9]{ 484 0x1204B80005B30006; 485 0xB1; 486 }; 487 [0] { // Traps 488 } // end Traps 489 [1] { // Attributes 490 Attr(#17, 6) { // LineNumberTable at 0x0197 491 [1] { // LineNumberTable 492 0 2; // at 0x01A3 493 } 494 } // end LineNumberTable 495 } // Attributes 496 } // end Code 497 } // Attributes 498 } // Member 499 } // methods 500 501 [2] { // Attributes 502 Attr(#21, 2) { // SourceFile at 0x01A5 503 #22; 504 } // end SourceFile 505 ; 506 Attr(#10, 4) { // ValueTypes at 0x01AD 507 0x00010003; 508 } // end ValueTypes 509 } // Attributes 510 } // end class ValueFieldNotFinal 511 512 ////////////////////////////////////////////////////////////////////// 513 514 // Test that arrays cannot have ACC_FLATTENABLE set. 515 // 516 class ValueFlatArray { 517 0xCAFEBABE; 518 0; // minor version 519 55; // version 520 [32] { // Constant Pool 521 ; // first element is empty 522 Method #8 #26; // #1 at 0x0A 523 Field #4 #27; // #2 at 0x0F 524 Field #4 #28; // #3 at 0x14 525 class #10; // #4 at 0x19 526 int 0x01234567; // #5 at 0x1C 527 Method #4 #29; // #6 at 0x21 528 Field #4 #30; // #7 at 0x26 529 class #31; // #8 at 0x2B 530 Utf8 "VT"; // #9 at 0x2E 531 Utf8 "ValueFlatArray"; // #10 at 0x33 532 Utf8 "ValueTypes"; // #11 at 0x40 533 Utf8 "LValueFlatArray;"; // #12 at 0x4D 534 Utf8 "int_v"; // #13 at 0x5C 535 Utf8 "I"; // #14 at 0x64 536 Utf8 "int_a"; // #15 at 0x68 537 Utf8 "[I"; // #16 at 0x70 538 Utf8 "<init>"; // #17 at 0x75 539 Utf8 "()V"; // #18 at 0x7E 540 Utf8 "Code"; // #19 at 0x84 541 Utf8 "LineNumberTable"; // #20 at 0x8B 542 Utf8 "makeValueFlatArray"; // #21 at 0x9D 543 Utf8 "(I)LValueFlatArray;"; // #22 at 0xAE 544 Utf8 "<clinit>"; // #23 at 0xC0 545 Utf8 "SourceFile"; // #24 at 0xCB 546 Utf8 "ValueFlatArray.java"; // #25 at 0xD8 547 NameAndType #17 #18; // #26 at 0xEA 548 NameAndType #13 #14; // #27 at 0xEF 549 NameAndType #15 #16; // #28 at 0xF4 550 NameAndType #21 #22; // #29 at 0xF9 551 NameAndType #9 #12; // #30 at 0xFE 552 Utf8 "java/lang/Object"; // #31 at 0x0103 553 } // Constant Pool 554 555 0x0130; // access [ ACC_VALUE ACC_SUPER ACC_FINAL ] 556 #4;// this_cpx 557 #8;// super_cpx 558 559 [0] { // Interfaces 560 } // Interfaces 561 562 [3] { // fields 563 { // Member at 0x0120 564 0x0118; // access 565 #9; // name_cpx 566 #12; // sig_cpx 567 [0] { // Attributes 568 } // Attributes 569 } // Member 570 ; 571 { // Member at 0x0128 572 0x0010; // access 573 #13; // name_cpx 574 #14; // sig_cpx 575 [0] { // Attributes 576 } // Attributes 577 } // Member 578 ; 579 { // Member at 0x0130 580 0x0110; // access // access [ ACC_FINAL ACC_FLATTENABLE(bad) ] 581 #15; // name_cpx 582 #16; // sig_cpx 583 [0] { // Attributes 584 } // Attributes 585 } // Member 586 } // fields 587 588 [3] { // methods 589 { // Member at 0x013A 590 0x0000; // access 591 #17; // name_cpx 592 #18; // sig_cpx 593 [1] { // Attributes 594 Attr(#19, 51) { // Code at 0x0142 595 2; // max_stack 596 1; // max_locals 597 Bytes[15]{ 598 0x2AB700012A04B500; 599 0x022A01B50003B1; 600 }; 601 [0] { // Traps 602 } // end Traps 603 [1] { // Attributes 604 Attr(#20, 18) { // LineNumberTable at 0x0163 605 [4] { // LineNumberTable 606 0 5; // at 0x016F 607 4 6; // at 0x0173 608 9 7; // at 0x0177 609 14 8; // at 0x017B 610 } 611 } // end LineNumberTable 612 } // Attributes 613 } // end Code 614 } // Attributes 615 } // Member 616 ; 617 { // Member at 0x017B 618 0x0008; // access 619 #21; // name_cpx 620 #22; // sig_cpx 621 [1] { // Attributes 622 Attr(#19, 44) { // Code at 0x0183 623 2; // max_stack 624 2; // max_locals 625 Bytes[12]{ 626 0xCB00044C2B1ACC00; 627 0x024C2BB0; 628 }; 629 [0] { // Traps 630 } // end Traps 631 [1] { // Attributes 632 Attr(#20, 14) { // LineNumberTable at 0x01A1 633 [3] { // LineNumberTable 634 0 10; // at 0x01AD 635 4 11; // at 0x01B1 636 10 12; // at 0x01B5 637 } 638 } // end LineNumberTable 639 } // Attributes 640 } // end Code 641 } // Attributes 642 } // Member 643 ; 644 { // Member at 0x01B5 645 0x0008; // access 646 #23; // name_cpx 647 #18; // sig_cpx 648 [1] { // Attributes 649 Attr(#19, 33) { // Code at 0x01BD 650 1; // max_stack 651 0; // max_locals 652 Bytes[9]{ 653 0x1205B80006B30007; 654 0xB1; 655 }; 656 [0] { // Traps 657 } // end Traps 658 [1] { // Attributes 659 Attr(#20, 6) { // LineNumberTable at 0x01D8 660 [1] { // LineNumberTable 661 0 2; // at 0x01E4 662 } 663 } // end LineNumberTable 664 } // Attributes 665 } // end Code 666 } // Attributes 667 } // Member 668 } // methods 669 670 [2] { // Attributes 671 Attr(#24, 2) { // SourceFile at 0x01E6 672 #25; 673 } // end SourceFile 674 ; 675 Attr(#11, 4) { // ValueTypes at 0x01EE 676 0x00010004; 677 } // end ValueTypes 678 } // Attributes 679 } // end class ValueFlatArray 680 681 ////////////////////////////////////////////////////////////////////// 682 683 // Test that a value type cannot have a method named <init>. 684 // 685 class ValueInitMethod { 686 0xCAFEBABE; 687 0; // minor version 688 55; // version 689 [28] { // Constant Pool 690 ; // first element is empty 691 Method #7 #23; // #1 at 0x0A 692 Field #3 #24; // #2 at 0x0F 693 class #9; // #3 at 0x14 694 int 0x01234567; // #4 at 0x17 695 Method #3 #25; // #5 at 0x1C 696 Field #3 #26; // #6 at 0x21 697 class #27; // #7 at 0x26 698 Utf8 "VT"; // #8 at 0x29 699 Utf8 "ValueInitMethod"; // #9 at 0x2E 700 Utf8 "ValueTypes"; // #10 at 0x36 701 Utf8 "LValueInitMethod;"; // #11 at 0x43 702 Utf8 "int_v"; // #12 at 0x4D 703 Utf8 "I"; // #13 at 0x55 704 Utf8 "<init>"; // #14 at 0x59 705 Utf8 "()V"; // #15 at 0x62 706 Utf8 "Code"; // #16 at 0x68 707 Utf8 "LineNumberTable"; // #17 at 0x6F 708 Utf8 "makeValueInitMethod"; // #18 at 0x81 709 Utf8 "(I)LValueInitMethod;"; // #19 at 0x8D 710 Utf8 "<clinit>"; // #20 at 0x9A 711 Utf8 "SourceFile"; // #21 at 0xA5 712 Utf8 "ValueInitMethod.java"; // #22 at 0xB2 713 NameAndType #14 #15; // #23 at 0xBF 714 NameAndType #12 #13; // #24 at 0xC4 715 NameAndType #18 #19; // #25 at 0xC9 716 NameAndType #8 #11; // #26 at 0xCE 717 Utf8 "java/lang/Object"; // #27 at 0xD3 718 } // Constant Pool 719 720 0x0130; // access [ ACC_VALUE ACC_SUPER ACC_FINAL ] 721 #3;// this_cpx 722 #7;// super_cpx 723 724 [0] { // Interfaces 725 } // Interfaces 726 727 [2] { // fields 728 { // Member at 0xF0 729 0x0118; // access 730 #8; // name_cpx 731 #11; // sig_cpx 732 [0] { // Attributes 733 } // Attributes 734 } // Member 735 ; 736 { // Member at 0xF8 737 0x0010; // access 738 #12; // name_cpx 739 #13; // sig_cpx 740 [0] { // Attributes 741 } // Attributes 742 } // Member 743 } // fields 744 745 [3] { // methods 746 { // Member at 0x0102 747 0x0000; // access 748 #14; // name_cpx (bad) <init> 749 #15; // sig_cpx 750 [1] { // Attributes 751 Attr(#16, 42) { // Code at 0x010A 752 2; // max_stack 753 1; // max_locals 754 Bytes[10]{ 755 0x2AB700012A04B500; 756 0x02B1; 757 }; 758 [0] { // Traps 759 } // end Traps 760 [1] { // Attributes 761 Attr(#17, 14) { // LineNumberTable at 0x0126 762 [3] { // LineNumberTable 763 0 4; // at 0x0132 764 4 5; // at 0x0136 765 9 6; // at 0x013A 766 } 767 } // end LineNumberTable 768 } // Attributes 769 } // end Code 770 } // Attributes 771 } // Member 772 ; 773 { // Member at 0x013A 774 0x0008; // access 775 #18; // name_cpx 776 #19; // sig_cpx 777 [1] { // Attributes 778 Attr(#16, 44) { // Code at 0x0142 779 2; // max_stack 780 2; // max_locals 781 Bytes[12]{ 782 0xCB00034C2B1ACC00; 783 0x024C2BB0; 784 }; 785 [0] { // Traps 786 } // end Traps 787 [1] { // Attributes 788 Attr(#17, 14) { // LineNumberTable at 0x0160 789 [3] { // LineNumberTable 790 0 8; // at 0x016C 791 4 9; // at 0x0170 792 10 10; // at 0x0174 793 } 794 } // end LineNumberTable 795 } // Attributes 796 } // end Code 797 } // Attributes 798 } // Member 799 ; 800 { // Member at 0x0174 801 0x0008; // access 802 #20; // name_cpx 803 #15; // sig_cpx 804 [1] { // Attributes 805 Attr(#16, 33) { // Code at 0x017C 806 1; // max_stack 807 0; // max_locals 808 Bytes[9]{ 809 0x1204B80005B30006; 810 0xB1; 811 }; 812 [0] { // Traps 813 } // end Traps 814 [1] { // Attributes 815 Attr(#17, 6) { // LineNumberTable at 0x0197 816 [1] { // LineNumberTable 817 0 2; // at 0x01A3 818 } 819 } // end LineNumberTable 820 } // Attributes 821 } // end Code 822 } // Attributes 823 } // Member 824 } // methods 825 826 [2] { // Attributes 827 Attr(#21, 2) { // SourceFile at 0x01A5 828 #22; 829 } // end SourceFile 830 ; 831 Attr(#10, 4) { // ValueTypes at 0x01AD 832 0x00010003; 833 } // end ValueTypes 834 } // Attributes 835 } // end class ValueInitMethod 836 837 ////////////////////////////////////////////////////////////////////// 838 839 // Test that class modifiers cannot have both ACC_VALUE and ACC_INTERFACE set. 840 // 841 class ValueInterface { 842 0xCAFEBABE; 843 0; // minor version 844 55; // version 845 [27] { // Constant Pool 846 ; // first element is empty 847 Method #7 #21; // #1 at 0x0A 848 Field #3 #22; // #2 at 0x0F 849 class #23; // #3 at 0x14 850 int 0x01234567; // #4 at 0x17 851 Method #3 #24; // #5 at 0x1C 852 Field #3 #25; // #6 at 0x21 853 class #26; // #7 at 0x26 854 Utf8 "VT"; // #8 at 0x29 855 Utf8 "LValueInterface;"; // #9 at 0x2E 856 Utf8 "int_v"; // #10 at 0x3C 857 Utf8 "I"; // #11 at 0x44 858 Utf8 "<init>"; // #12 at 0x48 859 Utf8 "()V"; // #13 at 0x51 860 Utf8 "Code"; // #14 at 0x57 861 Utf8 "LineNumberTable"; // #15 at 0x5E 862 Utf8 "makeValueInterface"; // #16 at 0x70 863 Utf8 "(I)LValueInterface;"; // #17 at 0x80 864 Utf8 "<clinit>"; // #18 at 0x91 865 Utf8 "SourceFile"; // #19 at 0x9C 866 Utf8 "ValueInterface.java"; // #20 at 0xA9 867 NameAndType #12 #13; // #21 at 0xBA 868 NameAndType #10 #11; // #22 at 0xBF 869 Utf8 "ValueInterface"; // #23 at 0xC4 870 NameAndType #16 #17; // #24 at 0xD0 871 NameAndType #8 #9; // #25 at 0xD5 872 Utf8 "java/lang/Object"; // #26 at 0xDA 873 } // Constant Pool 874 875 0x0330; // access [ ACC_VALUE ACC_INTERFACE(bad) ACC_SUPER ACC_FINAL ] 876 #3;// this_cpx 877 #7;// super_cpx 878 879 [0] { // Interfaces 880 } // Interfaces 881 882 [2] { // fields 883 { // Member at 0xF7 884 0x0018; // access 885 #8; // name_cpx 886 #9; // sig_cpx 887 [0] { // Attributes 888 } // Attributes 889 } // Member 890 ; 891 { // Member at 0xFF 892 0x0010; // access 893 #10; // name_cpx 894 #11; // sig_cpx 895 [0] { // Attributes 896 } // Attributes 897 } // Member 898 } // fields 899 900 [1] { // methods 901 { // Member at 0x0141 902 0x0008; // access 903 #16; // name_cpx 904 #17; // sig_cpx 905 [1] { // Attributes 906 Attr(#14, 44) { // Code at 0x0149 907 2; // max_stack 908 2; // max_locals 909 Bytes[12]{ 910 0xCB00034C2B1ACC00; 911 0x024C2BB0; 912 }; 913 [0] { // Traps 914 } // end Traps 915 [1] { // Attributes 916 Attr(#15, 14) { // LineNumberTable at 0x0167 917 [3] { // LineNumberTable 918 0 8; // at 0x0173 919 4 9; // at 0x0177 920 10 10; // at 0x017B 921 } 922 } // end LineNumberTable 923 } // Attributes 924 } // end Code 925 } // Attributes 926 } // Member 927 } // methods 928 929 [1] { // Attributes 930 Attr(#19, 2) { // SourceFile at 0x01AC 931 #20; 932 } // end SourceFile 933 } // Attributes 934 } // end class ValueInterface 935 936 ////////////////////////////////////////////////////////////////////// 937 938 // Test that value type instance methods cannot be synchronized. 939 // 940 class ValueMethodSynch { 941 0xCAFEBABE; 942 0; // minor version 943 55; // version 944 [29] { // Constant Pool 945 ; // first element is empty 946 Method #7 #24; // #1 at 0x0A 947 Field #3 #25; // #2 at 0x0F 948 class #9; // #3 at 0x14 949 int 0x01234567; // #4 at 0x17 950 Method #3 #26; // #5 at 0x1C 951 Field #3 #27; // #6 at 0x21 952 class #28; // #7 at 0x26 953 Utf8 "VT"; // #8 at 0x29 954 Utf8 "ValueMethodSynch"; // #9 at 0x2E 955 Utf8 "ValueTypes"; // #10 at 0x41 956 Utf8 "LValueMethodSynch;"; // #11 at 0x4E 957 Utf8 "int_v"; // #12 at 0x63 958 Utf8 "I"; // #13 at 0x6B 959 Utf8 "<init>"; // #14 at 0x6F 960 Utf8 "()V"; // #15 at 0x78 961 Utf8 "Code"; // #16 at 0x7E 962 Utf8 "LineNumberTable"; // #17 at 0x85 963 Utf8 "instanceMethod"; // #18 at 0x97 964 Utf8 "makeValueMethodSynch"; // #19 at 0xA8 965 Utf8 "(I)LValueMethodSynch;"; // #20 at 0xBF 966 Utf8 "<clinit>"; // #21 at 0xD7 967 Utf8 "SourceFile"; // #22 at 0xE2 968 Utf8 "ValueMethodSynch.java"; // #23 at 0xEF 969 NameAndType #14 #15; // #24 at 0x0107 970 NameAndType #12 #13; // #25 at 0x010C 971 NameAndType #19 #20; // #26 at 0x0111 972 NameAndType #8 #11; // #27 at 0x0116 973 Utf8 "java/lang/Object"; // #28 at 0x011B 974 } // Constant Pool 975 976 0x0130; // access [ ACC_VALUE ACC_SUPER ACC_FINAL ] 977 #3;// this_cpx 978 #7;// super_cpx 979 980 [0] { // Interfaces 981 } // Interfaces 982 983 [2] { // fields 984 { // Member at 0x0138 985 0x0118; // access 986 #8; // name_cpx 987 #11; // sig_cpx 988 [0] { // Attributes 989 } // Attributes 990 } // Member 991 ; 992 { // Member at 0x0140 993 0x0010; // access 994 #12; // name_cpx 995 #13; // sig_cpx 996 [0] { // Attributes 997 } // Attributes 998 } // Member 999 } // fields 1000 1001 [4] { // methods 1002 { // Member at 0x014A 1003 0x0000; // access 1004 #14; // name_cpx 1005 #15; // sig_cpx 1006 [1] { // Attributes 1007 Attr(#16, 42) { // Code at 0x0152 1008 2; // max_stack 1009 1; // max_locals 1010 Bytes[10]{ 1011 0x2AB700012A04B500; 1012 0x02B1; 1013 }; 1014 [0] { // Traps 1015 } // end Traps 1016 [1] { // Attributes 1017 Attr(#17, 14) { // LineNumberTable at 0x016E 1018 [3] { // LineNumberTable 1019 0 4; // at 0x017A 1020 4 5; // at 0x017E 1021 9 6; // at 0x0182 1022 } 1023 } // end LineNumberTable 1024 } // Attributes 1025 } // end Code 1026 } // Attributes 1027 } // Member 1028 ; 1029 { // Member at 0x0182 1030 0x0020; // access [ ACC_SYNCHRONIZED(bad) ] 1031 #18; // name_cpx 1032 #15; // sig_cpx 1033 [1] { // Attributes 1034 Attr(#16, 25) { // Code at 0x018A 1035 0; // max_stack 1036 1; // max_locals 1037 Bytes[1]{ 1038 0xB1; 1039 }; 1040 [0] { // Traps 1041 } // end Traps 1042 [1] { // Attributes 1043 Attr(#17, 6) { // LineNumberTable at 0x019D 1044 [1] { // LineNumberTable 1045 0 8; // at 0x01A9 1046 } 1047 } // end LineNumberTable 1048 } // Attributes 1049 } // end Code 1050 } // Attributes 1051 } // Member 1052 ; 1053 { // Member at 0x01A9 1054 0x0008; // access 1055 #19; // name_cpx 1056 #20; // sig_cpx 1057 [1] { // Attributes 1058 Attr(#16, 44) { // Code at 0x01B1 1059 2; // max_stack 1060 2; // max_locals 1061 Bytes[12]{ 1062 0xCB00034C2B1ACC00; 1063 0x024C2BB0; 1064 }; 1065 [0] { // Traps 1066 } // end Traps 1067 [1] { // Attributes 1068 Attr(#17, 14) { // LineNumberTable at 0x01CF 1069 [3] { // LineNumberTable 1070 0 11; // at 0x01DB 1071 4 12; // at 0x01DF 1072 10 13; // at 0x01E3 1073 } 1074 } // end LineNumberTable 1075 } // Attributes 1076 } // end Code 1077 } // Attributes 1078 } // Member 1079 ; 1080 { // Member at 0x01E3 1081 0x0008; // access 1082 #21; // name_cpx 1083 #15; // sig_cpx 1084 [1] { // Attributes 1085 Attr(#16, 33) { // Code at 0x01EB 1086 1; // max_stack 1087 0; // max_locals 1088 Bytes[9]{ 1089 0x1204B80005B30006; 1090 0xB1; 1091 }; 1092 [0] { // Traps 1093 } // end Traps 1094 [1] { // Attributes 1095 Attr(#17, 6) { // LineNumberTable at 0x0206 1096 [1] { // LineNumberTable 1097 0 2; // at 0x0212 1098 } 1099 } // end LineNumberTable 1100 } // Attributes 1101 } // end Code 1102 } // Attributes 1103 } // Member 1104 } // methods 1105 1106 [2] { // Attributes 1107 Attr(#22, 2) { // SourceFile at 0x0214 1108 #23; 1109 } // end SourceFile 1110 ; 1111 Attr(#10, 4) { // ValueTypes at 0x021C 1112 0x00010003; 1113 } // end ValueTypes 1114 } // Attributes 1115 } // end class ValueMethodSynch 1116 1117 ////////////////////////////////////////////////////////////////////// 1118 1119 // Test that a value type's super class must be java.lang.Object. 1120 // 1121 class ValueSuperClass { 1122 0xCAFEBABE; 1123 0; // minor version 1124 55; // version 1125 [30] { // Constant Pool 1126 ; // first element is empty 1127 Method #7 #23; // #1 at 0x0A 1128 Field #3 #24; // #2 at 0x0F 1129 class #9; // #3 at 0x14 1130 int 0x01234567; // #4 at 0x17 1131 Method #3 #25; // #5 at 0x1C 1132 Field #3 #26; // #6 at 0x21 1133 class #27; // #7 at 0x26 1134 Utf8 "VT"; // #8 at 0x29 1135 Utf8 "ValueSuperClass"; // #9 at 0x2E 1136 Utf8 "ValueTypes"; // #10 at 0x36 1137 Utf8 "LValueSuperClass;"; // #11 at 0x43 1138 Utf8 "int_v"; // #12 at 0x4D 1139 Utf8 "I"; // #13 at 0x55 1140 Utf8 "<init>"; // #14 at 0x59 1141 Utf8 "()V"; // #15 at 0x62 1142 Utf8 "Code"; // #16 at 0x68 1143 Utf8 "LineNumberTable"; // #17 at 0x6F 1144 Utf8 "makeValueSuperClass"; // #18 at 0x81 1145 Utf8 "(I)LValueSuperClass;"; // #19 at 0x8D 1146 Utf8 "<clinit>"; // #20 at 0x9A 1147 Utf8 "SourceFile"; // #21 at 0xA5 1148 Utf8 "ValueSuperClass.java"; // #22 at 0xB2 1149 NameAndType #14 #15; // #23 at 0xBF 1150 NameAndType #12 #13; // #24 at 0xC4 1151 NameAndType #18 #19; // #25 at 0xC9 1152 NameAndType #8 #11; // #26 at 0xCE 1153 Utf8 "java/lang/Object"; // #27 at 0xD3 1154 class #29; // #28 1155 Utf8 "java/lang/Throwable"; // #29 1156 } // Constant Pool 1157 1158 0x0130; // access [ ACC_SUPER ACC_FINAL ] 1159 #3;// this_cpx 1160 #28;// super_cpx 1161 1162 [0] { // Interfaces 1163 } // Interfaces 1164 1165 [2] { // fields 1166 { // Member at 0xF0 1167 0x0118; // access 1168 #8; // name_cpx 1169 #11; // sig_cpx 1170 [0] { // Attributes 1171 } // Attributes 1172 } // Member 1173 ; 1174 { // Member at 0xF8 1175 0x0010; // access 1176 #12; // name_cpx 1177 #13; // sig_cpx 1178 [0] { // Attributes 1179 } // Attributes 1180 } // Member 1181 } // fields 1182 1183 [3] { // methods 1184 { // Member at 0x0102 1185 0x0000; // access 1186 #14; // name_cpx 1187 #15; // sig_cpx 1188 [1] { // Attributes 1189 Attr(#16, 42) { // Code at 0x010A 1190 2; // max_stack 1191 1; // max_locals 1192 Bytes[10]{ 1193 0x2AB700012A04B500; 1194 0x02B1; 1195 }; 1196 [0] { // Traps 1197 } // end Traps 1198 [1] { // Attributes 1199 Attr(#17, 14) { // LineNumberTable at 0x0126 1200 [3] { // LineNumberTable 1201 0 4; // at 0x0132 1202 4 5; // at 0x0136 1203 9 6; // at 0x013A 1204 } 1205 } // end LineNumberTable 1206 } // Attributes 1207 } // end Code 1208 } // Attributes 1209 } // Member 1210 ; 1211 { // Member at 0x013A 1212 0x0008; // access 1213 #18; // name_cpx 1214 #19; // sig_cpx 1215 [1] { // Attributes 1216 Attr(#16, 44) { // Code at 0x0142 1217 2; // max_stack 1218 2; // max_locals 1219 Bytes[12]{ 1220 0xCB00034C2B1ACC00; 1221 0x024C2BB0; 1222 }; 1223 [0] { // Traps 1224 } // end Traps 1225 [1] { // Attributes 1226 Attr(#17, 14) { // LineNumberTable at 0x0160 1227 [3] { // LineNumberTable 1228 0 8; // at 0x016C 1229 4 9; // at 0x0170 1230 10 10; // at 0x0174 1231 } 1232 } // end LineNumberTable 1233 } // Attributes 1234 } // end Code 1235 } // Attributes 1236 } // Member 1237 ; 1238 { // Member at 0x0174 1239 0x0008; // access 1240 #20; // name_cpx 1241 #15; // sig_cpx 1242 [1] { // Attributes 1243 Attr(#16, 33) { // Code at 0x017C 1244 1; // max_stack 1245 0; // max_locals 1246 Bytes[9]{ 1247 0x1204B80005B30006; 1248 0xB1; 1249 }; 1250 [0] { // Traps 1251 } // end Traps 1252 [1] { // Attributes 1253 Attr(#17, 6) { // LineNumberTable at 0x0197 1254 [1] { // LineNumberTable 1255 0 2; // at 0x01A3 1256 } 1257 } // end LineNumberTable 1258 } // Attributes 1259 } // end Code 1260 } // Attributes 1261 } // Member 1262 } // methods 1263 1264 [2] { // Attributes 1265 Attr(#21, 2) { // SourceFile at 0x01A5 1266 #22; 1267 } // end SourceFile 1268 ; 1269 Attr(#10, 4) { // ValueTypes at 0x01AD 1270 0x00010003; 1271 } // end ValueTypes 1272 } // Attributes 1273 } // end class ValueSuperClass 1274 1275 ////////////////////////////////////////////////////////////////////// 1276 1277 // Value types Circ and Circ2 have fields of each other's type. This should 1278 // cause a ClassCircularityError exception when one of them is being loaded. 1279 // 1280 // The value types are based on these two Java classes: 1281 // 1282 // final __ByValue class Circ { 1283 // static final Circ VT = makeCirc(0x01234567); 1284 // final int int_v; 1285 // __Flattenable final Circ2 v2; 1286 // Circ() { 1287 // int_v = 1; 1288 // v2 = __MakeDefault Circ2(); 1289 // } 1290 // static Circ makeCirc(int x) { 1291 // Circ v = __MakeDefault Circ(); 1292 // v = __WithField(v.int_v, x); 1293 // return v; 1294 // } 1295 // } 1296 //---------------------------------------------------------------- 1297 // final __ByValue class Circ2 { 1298 // static final Circ2 VT = makeCirc2('\u0123'); 1299 // final char char_v; 1300 // __Flattenable final Circ vv; 1301 // Circ2() { 1302 // char_v = 'z'; 1303 // vv = __MakeDefault Circ(); 1304 // } 1305 // static Circ2 makeCirc2(char c) { 1306 // Circ2 v = __MakeDefault Circ2(); 1307 // v = __WithField(v.char_v, c); 1308 // return v; 1309 // } 1310 // } 1311 1312 class Circ { 1313 0xCAFEBABE; 1314 0; // minor version 1315 55; // version 1316 [34] { // Constant Pool 1317 ; // first element is empty 1318 Method #9 #28; // #1 at 0x0A 1319 Field #5 #29; // #2 at 0x0F 1320 class #17; // #3 at 0x14 1321 Field #5 #30; // #4 at 0x17 1322 class #11; // #5 at 0x1C 1323 int 0x01234567; // #6 at 0x1F 1324 Method #5 #31; // #7 at 0x24 1325 Field #5 #32; // #8 at 0x29 1326 class #33; // #9 at 0x2E 1327 Utf8 "VT"; // #10 at 0x31 1328 Utf8 "Circ"; // #11 at 0x36 1329 Utf8 "ValueTypes"; // #12 at 0x3D 1330 Utf8 "LCirc;"; // #13 at 0x4A 1331 Utf8 "int_v"; // #14 at 0x53 1332 Utf8 "I"; // #15 at 0x5B 1333 Utf8 "v2"; // #16 at 0x5F 1334 Utf8 "Circ2"; // #17 at 0x64 1335 Utf8 "LCirc2;"; // #18 at 0x6C 1336 Utf8 "<init>"; // #19 at 0x76 1337 Utf8 "()V"; // #20 at 0x7F 1338 Utf8 "Code"; // #21 at 0x85 1339 Utf8 "LineNumberTable"; // #22 at 0x8C 1340 Utf8 "makeCirc"; // #23 at 0x9E 1341 Utf8 "(I)LCirc;"; // #24 at 0xA9 1342 Utf8 "<clinit>"; // #25 at 0xB5 1343 Utf8 "SourceFile"; // #26 at 0xC0 1344 Utf8 "Circ.java"; // #27 at 0xCD 1345 NameAndType #19 #20; // #28 at 0xD9 1346 NameAndType #14 #15; // #29 at 0xDE 1347 NameAndType #16 #18; // #30 at 0xE3 1348 NameAndType #23 #24; // #31 at 0xE8 1349 NameAndType #10 #13; // #32 at 0xED 1350 Utf8 "java/lang/Object"; // #33 at 0xF2 1351 } // Constant Pool 1352 1353 0x0130; // access [ ACC_SUPER ACC_FINAL ] 1354 #5;// this_cpx 1355 #9;// super_cpx 1356 1357 [0] { // Interfaces 1358 } // Interfaces 1359 1360 [3] { // fields 1361 { // Member at 0x010F 1362 0x0118; // access 1363 #10; // name_cpx 1364 #13; // sig_cpx 1365 [0] { // Attributes 1366 } // Attributes 1367 } // Member 1368 ; 1369 { // Member at 0x0117 1370 0x0010; // access 1371 #14; // name_cpx 1372 #15; // sig_cpx 1373 [0] { // Attributes 1374 } // Attributes 1375 } // Member 1376 ; 1377 { // Member at 0x011F 1378 0x0110; // access 1379 #16; // name_cpx 1380 #18; // sig_cpx 1381 [0] { // Attributes 1382 } // Attributes 1383 } // Member 1384 } // fields 1385 1386 [3] { // methods 1387 { // Member at 0x0129 1388 0x0000; // access 1389 #19; // name_cpx 1390 #20; // sig_cpx 1391 [1] { // Attributes 1392 Attr(#21, 53) { // Code at 0x0131 1393 2; // max_stack 1394 1; // max_locals 1395 Bytes[17]{ 1396 0x2AB700012A04B500; 1397 0x022ACB0003B50004; 1398 0xB1; 1399 }; 1400 [0] { // Traps 1401 } // end Traps 1402 [1] { // Attributes 1403 Attr(#22, 18) { // LineNumberTable at 0x0154 1404 [4] { // LineNumberTable 1405 0 5; // at 0x0160 1406 4 6; // at 0x0164 1407 9 7; // at 0x0168 1408 16 8; // at 0x016C 1409 } 1410 } // end LineNumberTable 1411 } // Attributes 1412 } // end Code 1413 } // Attributes 1414 } // Member 1415 ; 1416 { // Member at 0x016C 1417 0x0008; // access 1418 #23; // name_cpx 1419 #24; // sig_cpx 1420 [1] { // Attributes 1421 Attr(#21, 44) { // Code at 0x0174 1422 2; // max_stack 1423 2; // max_locals 1424 Bytes[12]{ 1425 0xCB00054C2B1ACC00; 1426 0x024C2BB0; 1427 }; 1428 [0] { // Traps 1429 } // end Traps 1430 [1] { // Attributes 1431 Attr(#22, 14) { // LineNumberTable at 0x0192 1432 [3] { // LineNumberTable 1433 0 10; // at 0x019E 1434 4 11; // at 0x01A2 1435 10 12; // at 0x01A6 1436 } 1437 } // end LineNumberTable 1438 } // Attributes 1439 } // end Code 1440 } // Attributes 1441 } // Member 1442 ; 1443 { // Member at 0x01A6 1444 0x0008; // access 1445 #25; // name_cpx 1446 #20; // sig_cpx 1447 [1] { // Attributes 1448 Attr(#21, 33) { // Code at 0x01AE 1449 1; // max_stack 1450 0; // max_locals 1451 Bytes[9]{ 1452 0x1206B80007B30008; 1453 0xB1; 1454 }; 1455 [0] { // Traps 1456 } // end Traps 1457 [1] { // Attributes 1458 Attr(#22, 6) { // LineNumberTable at 0x01C9 1459 [1] { // LineNumberTable 1460 0 2; // at 0x01D5 1461 } 1462 } // end LineNumberTable 1463 } // Attributes 1464 } // end Code 1465 } // Attributes 1466 } // Member 1467 } // methods 1468 1469 [2] { // Attributes 1470 Attr(#26, 2) { // SourceFile at 0x01D7 1471 #27; 1472 } // end SourceFile 1473 ; 1474 Attr(#12, 6) { // ValueTypes at 0x01DF 1475 0x000200050003; 1476 } // end ValueTypes 1477 } // Attributes 1478 } // end class Circ 1479 1480 class Circ2 { 1481 0xCAFEBABE; 1482 0; // minor version 1483 55; // version 1484 [33] { // Constant Pool 1485 ; // first element is empty 1486 Method #8 #27; // #1 at 0x0A 1487 Field #5 #28; // #2 at 0x0F 1488 class #16; // #3 at 0x14 1489 Field #5 #29; // #4 at 0x17 1490 class #10; // #5 at 0x1C 1491 Method #5 #30; // #6 at 0x1F 1492 Field #5 #31; // #7 at 0x24 1493 class #32; // #8 at 0x29 1494 Utf8 "VT"; // #9 at 0x2C 1495 Utf8 "Circ2"; // #10 at 0x31 1496 Utf8 "ValueTypes"; // #11 at 0x39 1497 Utf8 "LCirc2;"; // #12 at 0x46 1498 Utf8 "char_v"; // #13 at 0x50 1499 Utf8 "C"; // #14 at 0x59 1500 Utf8 "vv"; // #15 at 0x5D 1501 Utf8 "Circ"; // #16 at 0x62 1502 Utf8 "LCirc;"; // #17 at 0x69 1503 Utf8 "<init>"; // #18 at 0x72 1504 Utf8 "()V"; // #19 at 0x7B 1505 Utf8 "Code"; // #20 at 0x81 1506 Utf8 "LineNumberTable"; // #21 at 0x88 1507 Utf8 "makeCirc2"; // #22 at 0x9A 1508 Utf8 "(C)LCirc2;"; // #23 at 0xA6 1509 Utf8 "<clinit>"; // #24 at 0xB3 1510 Utf8 "SourceFile"; // #25 at 0xBE 1511 Utf8 "Circ2.java"; // #26 at 0xCB 1512 NameAndType #18 #19; // #27 at 0xD8 1513 NameAndType #13 #14; // #28 at 0xDD 1514 NameAndType #15 #17; // #29 at 0xE2 1515 NameAndType #22 #23; // #30 at 0xE7 1516 NameAndType #9 #12; // #31 at 0xEC 1517 Utf8 "java/lang/Object"; // #32 at 0xF1 1518 } // Constant Pool 1519 1520 0x0130; // access [ ACC_SUPER ACC_FINAL ] 1521 #5;// this_cpx 1522 #8;// super_cpx 1523 1524 [0] { // Interfaces 1525 } // Interfaces 1526 1527 [3] { // fields 1528 { // Member at 0x010E 1529 0x0118; // access 1530 #9; // name_cpx 1531 #12; // sig_cpx 1532 [0] { // Attributes 1533 } // Attributes 1534 } // Member 1535 ; 1536 { // Member at 0x0116 1537 0x0010; // access 1538 #13; // name_cpx 1539 #14; // sig_cpx 1540 [0] { // Attributes 1541 } // Attributes 1542 } // Member 1543 ; 1544 { // Member at 0x011E 1545 0x0110; // access 1546 #15; // name_cpx 1547 #17; // sig_cpx 1548 [0] { // Attributes 1549 } // Attributes 1550 } // Member 1551 } // fields 1552 1553 [3] { // methods 1554 { // Member at 0x0128 1555 0x0000; // access 1556 #18; // name_cpx 1557 #19; // sig_cpx 1558 [1] { // Attributes 1559 Attr(#20, 54) { // Code at 0x0130 1560 2; // max_stack 1561 1; // max_locals 1562 Bytes[18]{ 1563 0x2AB700012A107AB5; 1564 0x00022ACB0003B500; 1565 0x04B1; 1566 }; 1567 [0] { // Traps 1568 } // end Traps 1569 [1] { // Attributes 1570 Attr(#21, 18) { // LineNumberTable at 0x0154 1571 [4] { // LineNumberTable 1572 0 5; // at 0x0160 1573 4 6; // at 0x0164 1574 10 7; // at 0x0168 1575 17 8; // at 0x016C 1576 } 1577 } // end LineNumberTable 1578 } // Attributes 1579 } // end Code 1580 } // Attributes 1581 } // Member 1582 ; 1583 { // Member at 0x016C 1584 0x0008; // access 1585 #22; // name_cpx 1586 #23; // sig_cpx 1587 [1] { // Attributes 1588 Attr(#20, 44) { // Code at 0x0174 1589 2; // max_stack 1590 2; // max_locals 1591 Bytes[12]{ 1592 0xCB00054C2B1ACC00; 1593 0x024C2BB0; 1594 }; 1595 [0] { // Traps 1596 } // end Traps 1597 [1] { // Attributes 1598 Attr(#21, 14) { // LineNumberTable at 0x0192 1599 [3] { // LineNumberTable 1600 0 10; // at 0x019E 1601 4 11; // at 0x01A2 1602 10 12; // at 0x01A6 1603 } 1604 } // end LineNumberTable 1605 } // Attributes 1606 } // end Code 1607 } // Attributes 1608 } // Member 1609 ; 1610 { // Member at 0x01A6 1611 0x0008; // access 1612 #24; // name_cpx 1613 #19; // sig_cpx 1614 [1] { // Attributes 1615 Attr(#20, 34) { // Code at 0x01AE 1616 1; // max_stack 1617 0; // max_locals 1618 Bytes[10]{ 1619 0x110123B80006B300; 1620 0x07B1; 1621 }; 1622 [0] { // Traps 1623 } // end Traps 1624 [1] { // Attributes 1625 Attr(#21, 6) { // LineNumberTable at 0x01CA 1626 [1] { // LineNumberTable 1627 0 2; // at 0x01D6 1628 } 1629 } // end LineNumberTable 1630 } // Attributes 1631 } // end Code 1632 } // Attributes 1633 } // Member 1634 } // methods 1635 1636 [2] { // Attributes 1637 Attr(#25, 2) { // SourceFile at 0x01D8 1638 #26; 1639 } // end SourceFile 1640 ; 1641 Attr(#11, 6) { // ValueTypes at 0x01E0 1642 0x000200030005; 1643 } // end ValueTypes 1644 } // Attributes 1645 } // end class Circ2 1646 1647 ////////////////////////////////////////////////////////////////////// 1648 1649 // Value types CircStaticA and CircStaticB have static fields of each other's 1650 // type. This should cause a ClassCircularityError exception when one of them 1651 // is being loaded. 1652 // 1653 // The value types are based on these two Java classes: 1654 // 1655 // final __ByValue class CircStaticA { 1656 // static final CircStaticA VT = makeCircStaticA(0x01234567); 1657 // final int int_v; 1658 // __Flattenable static final CircStaticB v2 = __MakeDefault CircStaticB(); 1659 // CircStaticA() { 1660 // int_v = 1; 1661 // } 1662 // static CircStaticA makeCircStaticA(int x) { 1663 // CircStaticA v = __MakeDefault CircStaticA(); 1664 // v = __WithField(v.int_v, x); 1665 // return v; 1666 // } 1667 // } 1668 //---------------------------------------------------------------- 1669 // final __ByValue class CircStaticB { 1670 // static final CircStaticB VT = makeCircStaticB(0x01234567); 1671 // final int int_v; 1672 // __Flattenable static final CircStaticA v2 = __MakeDefault CircStaticA(); 1673 // CircStaticB() { 1674 // int_v = 1; 1675 // } 1676 // static CircStaticB makeCircStaticB(int x) { 1677 // CircStaticB v = __MakeDefault CircStaticB(); 1678 // v = __WithField(v.int_v, x); 1679 // return v; 1680 // } 1681 // } 1682 1683 class CircStaticA { 1684 0xCAFEBABE; 1685 0; // minor version 1686 55; // version 1687 [34] { // Constant Pool 1688 ; // first element is empty 1689 Method #9 #28; // #1 at 0x0A 1690 Field #3 #29; // #2 at 0x0F 1691 class #11; // #3 at 0x14 1692 int 0x01234567; // #4 at 0x17 1693 Method #3 #30; // #5 at 0x1C 1694 Field #3 #31; // #6 at 0x21 1695 class #17; // #7 at 0x26 1696 Field #3 #32; // #8 at 0x29 1697 class #33; // #9 at 0x2E 1698 Utf8 "VT"; // #10 at 0x31 1699 Utf8 "CircStaticA"; // #11 at 0x36 1700 Utf8 "ValueTypes"; // #12 at 0x44 1701 Utf8 "LCircStaticA;"; // #13 at 0x51 1702 Utf8 "int_v"; // #14 at 0x61 1703 Utf8 "I"; // #15 at 0x69 1704 Utf8 "v2"; // #16 at 0x6D 1705 Utf8 "CircStaticB"; // #17 at 0x72 1706 Utf8 "LCircStaticB;"; // #18 at 0x80 1707 Utf8 "<init>"; // #19 at 0x90 1708 Utf8 "()V"; // #20 at 0x99 1709 Utf8 "Code"; // #21 at 0x9F 1710 Utf8 "LineNumberTable"; // #22 at 0xA6 1711 Utf8 "makeCircStaticA"; // #23 at 0xB8 1712 Utf8 "(I)LCircStaticA;"; // #24 at 0xCA 1713 Utf8 "<clinit>"; // #25 at 0xDD 1714 Utf8 "SourceFile"; // #26 at 0xE8 1715 Utf8 "CircStaticA.java"; // #27 at 0xF5 1716 NameAndType #19 #20; // #28 at 0x0108 1717 NameAndType #14 #15; // #29 at 0x010D 1718 NameAndType #23 #24; // #30 at 0x0112 1719 NameAndType #10 #13; // #31 at 0x0117 1720 NameAndType #16 #18; // #32 at 0x011C 1721 Utf8 "java/lang/Object"; // #33 at 0x0121 1722 } // Constant Pool 1723 1724 0x0130; // access [ ACC_SUPER ACC_FINAL ] 1725 #3;// this_cpx 1726 #9;// super_cpx 1727 1728 [0] { // Interfaces 1729 } // Interfaces 1730 1731 [3] { // fields 1732 { // Member at 0x013E 1733 0x0118; // access 1734 #10; // name_cpx 1735 #13; // sig_cpx 1736 [0] { // Attributes 1737 } // Attributes 1738 } // Member 1739 ; 1740 { // Member at 0x0146 1741 0x0010; // access 1742 #14; // name_cpx 1743 #15; // sig_cpx 1744 [0] { // Attributes 1745 } // Attributes 1746 } // Member 1747 ; 1748 { // Member at 0x014E 1749 0x0118; // access 1750 #16; // name_cpx 1751 #18; // sig_cpx 1752 [0] { // Attributes 1753 } // Attributes 1754 } // Member 1755 } // fields 1756 1757 [3] { // methods 1758 { // Member at 0x0158 1759 0x0000; // access 1760 #19; // name_cpx 1761 #20; // sig_cpx 1762 [1] { // Attributes 1763 Attr(#21, 42) { // Code at 0x0160 1764 2; // max_stack 1765 1; // max_locals 1766 Bytes[10]{ 1767 0x2AB700012A04B500; 1768 0x02B1; 1769 }; 1770 [0] { // Traps 1771 } // end Traps 1772 [1] { // Attributes 1773 Attr(#22, 14) { // LineNumberTable at 0x017C 1774 [3] { // LineNumberTable 1775 0 5; // at 0x0188 1776 4 6; // at 0x018C 1777 9 7; // at 0x0190 1778 } 1779 } // end LineNumberTable 1780 } // Attributes 1781 } // end Code 1782 } // Attributes 1783 } // Member 1784 ; 1785 { // Member at 0x0190 1786 0x0008; // access 1787 #23; // name_cpx 1788 #24; // sig_cpx 1789 [1] { // Attributes 1790 Attr(#21, 44) { // Code at 0x0198 1791 2; // max_stack 1792 2; // max_locals 1793 Bytes[12]{ 1794 0xCB00034C2B1ACC00; 1795 0x024C2BB0; 1796 }; 1797 [0] { // Traps 1798 } // end Traps 1799 [1] { // Attributes 1800 Attr(#22, 14) { // LineNumberTable at 0x01B6 1801 [3] { // LineNumberTable 1802 0 9; // at 0x01C2 1803 4 10; // at 0x01C6 1804 10 11; // at 0x01CA 1805 } 1806 } // end LineNumberTable 1807 } // Attributes 1808 } // end Code 1809 } // Attributes 1810 } // Member 1811 ; 1812 { // Member at 0x01CA 1813 0x0008; // access 1814 #25; // name_cpx 1815 #20; // sig_cpx 1816 [1] { // Attributes 1817 Attr(#21, 43) { // Code at 0x01D2 1818 1; // max_stack 1819 0; // max_locals 1820 Bytes[15]{ 1821 0x1204B80005B30006; 1822 0xCB0007B30008B1; 1823 }; 1824 [0] { // Traps 1825 } // end Traps 1826 [1] { // Attributes 1827 Attr(#22, 10) { // LineNumberTable at 0x01F3 1828 [2] { // LineNumberTable 1829 0 2; // at 0x01FF 1830 8 4; // at 0x0203 1831 } 1832 } // end LineNumberTable 1833 } // Attributes 1834 } // end Code 1835 } // Attributes 1836 } // Member 1837 } // methods 1838 1839 [2] { // Attributes 1840 Attr(#26, 2) { // SourceFile at 0x0205 1841 #27; 1842 } // end SourceFile 1843 ; 1844 Attr(#12, 6) { // ValueTypes at 0x020D 1845 0x000200030007; 1846 } // end ValueTypes 1847 } // Attributes 1848 } // end class CircStaticA 1849 1850 class CircStaticB { 1851 0xCAFEBABE; 1852 0; // minor version 1853 55; // version 1854 [34] { // Constant Pool 1855 ; // first element is empty 1856 Method #9 #28; // #1 at 0x0A 1857 Field #3 #29; // #2 at 0x0F 1858 class #11; // #3 at 0x14 1859 int 0x01234567; // #4 at 0x17 1860 Method #3 #30; // #5 at 0x1C 1861 Field #3 #31; // #6 at 0x21 1862 class #17; // #7 at 0x26 1863 Field #3 #32; // #8 at 0x29 1864 class #33; // #9 at 0x2E 1865 Utf8 "VT"; // #10 at 0x31 1866 Utf8 "CircStaticB"; // #11 at 0x36 1867 Utf8 "ValueTypes"; // #12 at 0x44 1868 Utf8 "LCircStaticB;"; // #13 at 0x51 1869 Utf8 "int_v"; // #14 at 0x61 1870 Utf8 "I"; // #15 at 0x69 1871 Utf8 "v2"; // #16 at 0x6D 1872 Utf8 "CircStaticA"; // #17 at 0x72 1873 Utf8 "LCircStaticA;"; // #18 at 0x80 1874 Utf8 "<init>"; // #19 at 0x90 1875 Utf8 "()V"; // #20 at 0x99 1876 Utf8 "Code"; // #21 at 0x9F 1877 Utf8 "LineNumberTable"; // #22 at 0xA6 1878 Utf8 "makeCircStaticB"; // #23 at 0xB8 1879 Utf8 "(I)LCircStaticB;"; // #24 at 0xCA 1880 Utf8 "<clinit>"; // #25 at 0xDD 1881 Utf8 "SourceFile"; // #26 at 0xE8 1882 Utf8 "CircStaticB.java"; // #27 at 0xF5 1883 NameAndType #19 #20; // #28 at 0x0108 1884 NameAndType #14 #15; // #29 at 0x010D 1885 NameAndType #23 #24; // #30 at 0x0112 1886 NameAndType #10 #13; // #31 at 0x0117 1887 NameAndType #16 #18; // #32 at 0x011C 1888 Utf8 "java/lang/Object"; // #33 at 0x0121 1889 } // Constant Pool 1890 1891 0x0130; // access [ ACC_SUPER ACC_FINAL ] 1892 #3;// this_cpx 1893 #9;// super_cpx 1894 1895 [0] { // Interfaces 1896 } // Interfaces 1897 1898 [3] { // fields 1899 { // Member at 0x013E 1900 0x0118; // access 1901 #10; // name_cpx 1902 #13; // sig_cpx 1903 [0] { // Attributes 1904 } // Attributes 1905 } // Member 1906 ; 1907 { // Member at 0x0146 1908 0x0010; // access 1909 #14; // name_cpx 1910 #15; // sig_cpx 1911 [0] { // Attributes 1912 } // Attributes 1913 } // Member 1914 ; 1915 { // Member at 0x014E 1916 0x0118; // access 1917 #16; // name_cpx 1918 #18; // sig_cpx 1919 [0] { // Attributes 1920 } // Attributes 1921 } // Member 1922 } // fields 1923 1924 [3] { // methods 1925 { // Member at 0x0158 1926 0x0000; // access 1927 #19; // name_cpx 1928 #20; // sig_cpx 1929 [1] { // Attributes 1930 Attr(#21, 42) { // Code at 0x0160 1931 2; // max_stack 1932 1; // max_locals 1933 Bytes[10]{ 1934 0x2AB700012A04B500; 1935 0x02B1; 1936 }; 1937 [0] { // Traps 1938 } // end Traps 1939 [1] { // Attributes 1940 Attr(#22, 14) { // LineNumberTable at 0x017C 1941 [3] { // LineNumberTable 1942 0 5; // at 0x0188 1943 4 6; // at 0x018C 1944 9 7; // at 0x0190 1945 } 1946 } // end LineNumberTable 1947 } // Attributes 1948 } // end Code 1949 } // Attributes 1950 } // Member 1951 ; 1952 { // Member at 0x0190 1953 0x0008; // access 1954 #23; // name_cpx 1955 #24; // sig_cpx 1956 [1] { // Attributes 1957 Attr(#21, 44) { // Code at 0x0198 1958 2; // max_stack 1959 2; // max_locals 1960 Bytes[12]{ 1961 0xCB00034C2B1ACC00; 1962 0x024C2BB0; 1963 }; 1964 [0] { // Traps 1965 } // end Traps 1966 [1] { // Attributes 1967 Attr(#22, 14) { // LineNumberTable at 0x01B6 1968 [3] { // LineNumberTable 1969 0 9; // at 0x01C2 1970 4 10; // at 0x01C6 1971 10 11; // at 0x01CA 1972 } 1973 } // end LineNumberTable 1974 } // Attributes 1975 } // end Code 1976 } // Attributes 1977 } // Member 1978 ; 1979 { // Member at 0x01CA 1980 0x0008; // access 1981 #25; // name_cpx 1982 #20; // sig_cpx 1983 [1] { // Attributes 1984 Attr(#21, 43) { // Code at 0x01D2 1985 1; // max_stack 1986 0; // max_locals 1987 Bytes[15]{ 1988 0x1204B80005B30006; 1989 0xCB0007B30008B1; 1990 }; 1991 [0] { // Traps 1992 } // end Traps 1993 [1] { // Attributes 1994 Attr(#22, 10) { // LineNumberTable at 0x01F3 1995 [2] { // LineNumberTable 1996 0 2; // at 0x01FF 1997 8 4; // at 0x0203 1998 } 1999 } // end LineNumberTable 2000 } // Attributes 2001 } // end Code 2002 } // Attributes 2003 } // Member 2004 } // methods 2005 2006 [2] { // Attributes 2007 Attr(#26, 2) { // SourceFile at 0x0205 2008 #27; 2009 } // end SourceFile 2010 ; 2011 Attr(#12, 6) { // ValueTypes at 0x020D 2012 0x000200070003; 2013 } // end ValueTypes 2014 } // Attributes 2015 } // end class CircStaticB 2016 2017 ////////////////////////////////////////////////////////////////////// 2018 2019 // Test that a value type cannot be Cloneable. 2020 // 2021 // final __ByValue class ValueCloneable implements Cloneable { 2022 // final int field; 2023 // private ValueCloneable() { field = 0; } 2024 //} 2025 2026 class ValueCloneable { 2027 0xCAFEBABE; 2028 0; // minor version 2029 55; // version 2030 [20] { // Constant Pool 2031 ; // first element is empty 2032 Method #4 #14; // #1 at 0x0A 2033 Field #3 #15; // #2 at 0x0F 2034 class #16; // #3 at 0x14 2035 class #18; // #4 at 0x17 2036 class #19; // #5 at 0x1A 2037 Utf8 "field"; // #6 at 0x1D 2038 Utf8 "I"; // #7 at 0x25 2039 Utf8 "<init>"; // #8 at 0x29 2040 Utf8 "()V"; // #9 at 0x32 2041 Utf8 "Code"; // #10 at 0x38 2042 Utf8 "LineNumberTable"; // #11 at 0x3F 2043 Utf8 "SourceFile"; // #12 at 0x51 2044 Utf8 "ValueCloneable.java"; // #13 at 0x5E 2045 NameAndType #8 #9; // #14 at 0x74 2046 NameAndType #6 #7; // #15 at 0x79 2047 Utf8 "ValueCloneable"; // #16 at 0x7E 2048 Utf8 "ValueTypes"; // #17 at 0x8F 2049 Utf8 "java/lang/Object"; // #18 at 0x9C 2050 Utf8 "java/lang/Cloneable"; // #19 at 0xAF 2051 } // Constant Pool 2052 2053 0x0130; // access [ ACC_SUPER ACC_FINAL ] 2054 #3;// this_cpx 2055 #4;// super_cpx 2056 2057 [1] { // Interfaces 2058 #5; 2059 } // Interfaces 2060 2061 [1] { // fields 2062 { // Member at 0xD1 2063 0x0010; // access 2064 #6; // name_cpx 2065 #7; // sig_cpx 2066 [0] { // Attributes 2067 } // Attributes 2068 } // Member 2069 } // fields 2070 2071 [1] { // methods 2072 { // Member at 0xDB 2073 0x0002; // access 2074 #8; // name_cpx 2075 #9; // sig_cpx 2076 [1] { // Attributes 2077 Attr(#10, 34) { // Code at 0xE3 2078 2; // max_stack 2079 1; // max_locals 2080 Bytes[10]{ 2081 0x2AB700012A03B500; 2082 0x02B1; 2083 }; 2084 [0] { // Traps 2085 } // end Traps 2086 [1] { // Attributes 2087 Attr(#11, 6) { // LineNumberTable at 0xFF 2088 [1] { // LineNumberTable 2089 0 3; // at 0x010B 2090 } 2091 } // end LineNumberTable 2092 } // Attributes 2093 } // end Code 2094 } // Attributes 2095 } // Member 2096 } // methods 2097 2098 [2] { // Attributes 2099 Attr(#12, 2) { // SourceFile at 0x010D 2100 #13; 2101 } // end SourceFile 2102 ; 2103 Attr(#17, 4) { // ValueTypes at 0x0115 2104 0x00010003; 2105 } // end ValueTypes 2106 } // Attributes 2107 } // end class ValueCloneable --- EOF ---