Mercurial > hg > graal-compiler
comparison src/share/vm/oops/constantPool.hpp @ 10151:15a99ca4ee34
8007037: JSR 292: the VM_RedefineClasses::append_entry() should do cross-checks with indy operands
Summary: References from operands to CP entries and back must be correct after CP merge
Reviewed-by: coleenp, twisti
Contributed-by: serguei.spitsyn@oracle.com
author | sspitsyn |
---|---|
date | Thu, 25 Apr 2013 03:58:53 -0700 |
parents | f16e75e0cf11 |
children | c115fac239eb |
comparison
equal
deleted
inserted
replaced
10150:d66a24adbe3f | 10151:15a99ca4ee34 |
---|---|
565 enum { | 565 enum { |
566 _indy_bsm_offset = 0, // CONSTANT_MethodHandle bsm | 566 _indy_bsm_offset = 0, // CONSTANT_MethodHandle bsm |
567 _indy_argc_offset = 1, // u2 argc | 567 _indy_argc_offset = 1, // u2 argc |
568 _indy_argv_offset = 2 // u2 argv[argc] | 568 _indy_argv_offset = 2 // u2 argv[argc] |
569 }; | 569 }; |
570 | |
571 // These functions are used in RedefineClasses for CP merge | |
572 | |
573 int operand_offset_at(int bootstrap_specifier_index) { | |
574 assert(0 <= bootstrap_specifier_index && | |
575 bootstrap_specifier_index < operand_array_length(operands()), | |
576 "Corrupted CP operands"); | |
577 return operand_offset_at(operands(), bootstrap_specifier_index); | |
578 } | |
579 int operand_bootstrap_method_ref_index_at(int bootstrap_specifier_index) { | |
580 int offset = operand_offset_at(bootstrap_specifier_index); | |
581 return operands()->at(offset + _indy_bsm_offset); | |
582 } | |
583 int operand_argument_count_at(int bootstrap_specifier_index) { | |
584 int offset = operand_offset_at(bootstrap_specifier_index); | |
585 int argc = operands()->at(offset + _indy_argc_offset); | |
586 return argc; | |
587 } | |
588 int operand_argument_index_at(int bootstrap_specifier_index, int j) { | |
589 int offset = operand_offset_at(bootstrap_specifier_index); | |
590 return operands()->at(offset + _indy_argv_offset + j); | |
591 } | |
592 int operand_next_offset_at(int bootstrap_specifier_index) { | |
593 int offset = operand_offset_at(bootstrap_specifier_index) + _indy_argv_offset | |
594 + operand_argument_count_at(bootstrap_specifier_index); | |
595 return offset; | |
596 } | |
597 // Compare a bootsrap specifier in the operands arrays | |
598 bool compare_operand_to(int bootstrap_specifier_index1, constantPoolHandle cp2, | |
599 int bootstrap_specifier_index2, TRAPS); | |
600 // Find a bootsrap specifier in the operands array | |
601 int find_matching_operand(int bootstrap_specifier_index, constantPoolHandle search_cp, | |
602 int operands_cur_len, TRAPS); | |
603 // Resize the operands array with delta_len and delta_size | |
604 void resize_operands(int delta_len, int delta_size, TRAPS); | |
605 // Extend the operands array with the length and size of the ext_cp operands | |
606 void extend_operands(constantPoolHandle ext_cp, TRAPS); | |
607 // Shrink the operands array to a smaller array with new_len length | |
608 void shrink_operands(int new_len, TRAPS); | |
609 | |
610 | |
570 int invoke_dynamic_bootstrap_method_ref_index_at(int which) { | 611 int invoke_dynamic_bootstrap_method_ref_index_at(int which) { |
571 assert(tag_at(which).is_invoke_dynamic(), "Corrupted constant pool"); | 612 assert(tag_at(which).is_invoke_dynamic(), "Corrupted constant pool"); |
572 int op_base = invoke_dynamic_operand_base(which); | 613 int op_base = invoke_dynamic_operand_base(which); |
573 return operands()->at(op_base + _indy_bsm_offset); | 614 return operands()->at(op_base + _indy_bsm_offset); |
574 } | 615 } |