comparison src/share/vm/oops/constantPool.cpp @ 6934:4735d2c84362

7200776: Implement default methods in interfaces Summary: Add generic type analysis and default method selection algorithms Reviewed-by: coleenp, acorn
author kamg
date Thu, 11 Oct 2012 12:25:42 -0400
parents 6e5a59a8e4a7
children 18fb7da42534
comparison
equal deleted inserted replaced
6921:a1b8cf9cf970 6934:4735d2c84362
1141 } 1141 }
1142 1142
1143 int from_oplen = operand_array_length(from_cp->operands()); 1143 int from_oplen = operand_array_length(from_cp->operands());
1144 int old_oplen = operand_array_length(to_cp->operands()); 1144 int old_oplen = operand_array_length(to_cp->operands());
1145 if (from_oplen != 0) { 1145 if (from_oplen != 0) {
1146 ClassLoaderData* loader_data = to_cp->pool_holder()->class_loader_data();
1146 // append my operands to the target's operands array 1147 // append my operands to the target's operands array
1147 if (old_oplen == 0) { 1148 if (old_oplen == 0) {
1148 to_cp->set_operands(from_cp->operands()); // reuse; do not merge 1149 // Can't just reuse from_cp's operand list because of deallocation issues
1150 int len = from_cp->operands()->length();
1151 Array<u2>* new_ops = MetadataFactory::new_array<u2>(loader_data, len, CHECK);
1152 Copy::conjoint_memory_atomic(
1153 from_cp->operands()->adr_at(0), new_ops->adr_at(0), len * sizeof(u2));
1154 to_cp->set_operands(new_ops);
1149 } else { 1155 } else {
1150 int old_len = to_cp->operands()->length(); 1156 int old_len = to_cp->operands()->length();
1151 int from_len = from_cp->operands()->length(); 1157 int from_len = from_cp->operands()->length();
1152 int old_off = old_oplen * sizeof(u2); 1158 int old_off = old_oplen * sizeof(u2);
1153 int from_off = from_oplen * sizeof(u2); 1159 int from_off = from_oplen * sizeof(u2);
1154 // Use the metaspace for the destination constant pool 1160 // Use the metaspace for the destination constant pool
1155 ClassLoaderData* loader_data = to_cp->pool_holder()->class_loader_data();
1156 Array<u2>* new_operands = MetadataFactory::new_array<u2>(loader_data, old_len + from_len, CHECK); 1161 Array<u2>* new_operands = MetadataFactory::new_array<u2>(loader_data, old_len + from_len, CHECK);
1157 int fillp = 0, len = 0; 1162 int fillp = 0, len = 0;
1158 // first part of dest 1163 // first part of dest
1159 Copy::conjoint_memory_atomic(to_cp->operands()->adr_at(0), 1164 Copy::conjoint_memory_atomic(to_cp->operands()->adr_at(0),
1160 new_operands->adr_at(fillp), 1165 new_operands->adr_at(fillp),