inline void do_float() { if (!is_return_type()) _jca->push_float(next_arg(T_FLOAT)->float_field(java_lang_boxing_object::value_offset_in_bytes(T_FLOAT))); }
oop LiveFrameStream::create_primitive_value_instance(StackValueCollection* values, int i, TRAPS) { Klass* k = SystemDictionary::resolve_or_null(vmSymbols::java_lang_LiveStackFrameInfo(), CHECK_NULL); instanceKlassHandle ik (THREAD, k); JavaValue result(T_OBJECT); JavaCallArguments args; Symbol* signature = NULL; // ## TODO: type is only available in LocalVariable table, if present. // ## StackValue type is T_INT or T_OBJECT. switch (values->at(i)->type()) { case T_INT: args.push_int(values->int_at(i)); signature = vmSymbols::asPrimitive_int_signature(); break; case T_LONG: args.push_long(values->long_at(i)); signature = vmSymbols::asPrimitive_long_signature(); break; case T_FLOAT: args.push_float(values->float_at(i)); signature = vmSymbols::asPrimitive_float_signature(); break; case T_DOUBLE: args.push_double(values->double_at(i)); signature = vmSymbols::asPrimitive_double_signature(); break; case T_BYTE: args.push_int(values->int_at(i)); signature = vmSymbols::asPrimitive_byte_signature(); break; case T_SHORT: args.push_int(values->int_at(i)); signature = vmSymbols::asPrimitive_short_signature(); break; case T_CHAR: args.push_int(values->int_at(i)); signature = vmSymbols::asPrimitive_char_signature(); break; case T_BOOLEAN: args.push_int(values->int_at(i)); signature = vmSymbols::asPrimitive_boolean_signature(); break; case T_OBJECT: return values->obj_at(i)(); case T_CONFLICT: // put a non-null slot args.push_int(0); signature = vmSymbols::asPrimitive_int_signature(); break; default: ShouldNotReachHere(); } JavaCalls::call_static(&result, ik, vmSymbols::asPrimitive_name(), signature, &args, CHECK_NULL); return (instanceOop) result.get_jobject(); }
virtual void pushFloat(jfloat f) { _javaArgs->push_float(f); }