162 fill_live_stackframe(stackFrame, method, CHECK);
163 }
164
165 // Fill in the StackFrameInfo at the given index in frames_array
166 void JavaFrameStream::fill_frame(int index, objArrayHandle frames_array,
167 const methodHandle& method, TRAPS) {
168 if (_need_method_info) {
169 Handle stackFrame(THREAD, frames_array->obj_at(index));
170 fill_stackframe(stackFrame, method);
171 } else {
172 frames_array->obj_at_put(index, method->method_holder()->java_mirror());
173 }
174 }
175
176 // Create and return a LiveStackFrame.PrimitiveSlot (if needed) for the
177 // StackValue at the given index. 'type' is expected to be T_INT, T_LONG,
178 // T_OBJECT, or T_CONFLICT.
179 oop LiveFrameStream::create_primitive_slot_instance(StackValueCollection* values,
180 int i, BasicType type, TRAPS) {
181 Klass* k = SystemDictionary::resolve_or_null(vmSymbols::java_lang_LiveStackFrameInfo(), CHECK_NULL);
182 instanceKlassHandle ik (THREAD, k);
183
184 JavaValue result(T_OBJECT);
185 JavaCallArguments args;
186 Symbol* signature = NULL;
187
188 // ## TODO: type is only available in LocalVariable table, if present.
189 // ## StackValue type is T_INT or T_OBJECT (or converted to T_LONG on 64-bit)
190 switch (type) {
191 case T_INT:
192 args.push_int(values->int_at(i));
193 signature = vmSymbols::asPrimitive_int_signature();
194 break;
195
196 case T_LONG:
197 args.push_long(values->long_at(i));
198 signature = vmSymbols::asPrimitive_long_signature();
199 break;
200
201 case T_FLOAT:
202 case T_DOUBLE:
|
162 fill_live_stackframe(stackFrame, method, CHECK);
163 }
164
165 // Fill in the StackFrameInfo at the given index in frames_array
166 void JavaFrameStream::fill_frame(int index, objArrayHandle frames_array,
167 const methodHandle& method, TRAPS) {
168 if (_need_method_info) {
169 Handle stackFrame(THREAD, frames_array->obj_at(index));
170 fill_stackframe(stackFrame, method);
171 } else {
172 frames_array->obj_at_put(index, method->method_holder()->java_mirror());
173 }
174 }
175
176 // Create and return a LiveStackFrame.PrimitiveSlot (if needed) for the
177 // StackValue at the given index. 'type' is expected to be T_INT, T_LONG,
178 // T_OBJECT, or T_CONFLICT.
179 oop LiveFrameStream::create_primitive_slot_instance(StackValueCollection* values,
180 int i, BasicType type, TRAPS) {
181 Klass* k = SystemDictionary::resolve_or_null(vmSymbols::java_lang_LiveStackFrameInfo(), CHECK_NULL);
182 InstanceKlass* ik = InstanceKlass::cast(k);
183
184 JavaValue result(T_OBJECT);
185 JavaCallArguments args;
186 Symbol* signature = NULL;
187
188 // ## TODO: type is only available in LocalVariable table, if present.
189 // ## StackValue type is T_INT or T_OBJECT (or converted to T_LONG on 64-bit)
190 switch (type) {
191 case T_INT:
192 args.push_int(values->int_at(i));
193 signature = vmSymbols::asPrimitive_int_signature();
194 break;
195
196 case T_LONG:
197 args.push_long(values->long_at(i));
198 signature = vmSymbols::asPrimitive_long_signature();
199 break;
200
201 case T_FLOAT:
202 case T_DOUBLE:
|