219 if (this == JavaType.L) { |
219 if (this == JavaType.L) { |
220 return "Ljava/lang/Object;"; |
220 return "Ljava/lang/Object;"; |
221 } else { |
221 } else { |
222 return name(); |
222 return name(); |
223 } |
223 } |
|
224 } |
|
225 String unsafeTypeName() { |
|
226 return typeName.equals("Object") ? "Reference" : typeName; |
224 } |
227 } |
225 } |
228 } |
226 |
229 |
227 static String internalName(Class cls) { |
230 static String internalName(Class cls) { |
228 return cls.getName().replace('.', '/'); |
231 return cls.getName().replace('.', '/'); |
350 if (type.defaultValue != null) { |
353 if (type.defaultValue != null) { |
351 mv.visitLdcInsn(type.defaultValue); |
354 mv.visitLdcInsn(type.defaultValue); |
352 } else { |
355 } else { |
353 mv.visitInsn(ACONST_NULL); |
356 mv.visitInsn(ACONST_NULL); |
354 } |
357 } |
355 String name = "put" + type.typeName + nameSuffix; |
358 String name = "put" + type.unsafeTypeName() + nameSuffix; |
356 mv.visitMethodInsn(INVOKEVIRTUAL, UNSAFE_NAME, name, "(Ljava/lang/Object;J" + type.desc()+ ")V", false); |
359 mv.visitMethodInsn(INVOKEVIRTUAL, UNSAFE_NAME, name, "(Ljava/lang/Object;J" + type.desc()+ ")V", false); |
357 mv.visitInsn(RETURN); |
360 mv.visitInsn(RETURN); |
358 |
361 |
359 mv.visitMaxs(0, 0); |
362 mv.visitMaxs(0, 0); |
360 mv.visitEnd(); |
363 mv.visitEnd(); |
436 mv.visitFieldInsn(GETSTATIC, className, "STATIC_BASE", "Ljava/lang/Object;"); |
439 mv.visitFieldInsn(GETSTATIC, className, "STATIC_BASE", "Ljava/lang/Object;"); |
437 } else { |
440 } else { |
438 mv.visitFieldInsn(GETSTATIC, className, "t", classDesc); |
441 mv.visitFieldInsn(GETSTATIC, className, "t", classDesc); |
439 } |
442 } |
440 mv.visitFieldInsn(GETSTATIC, className, "FIELD_OFFSET", "J"); |
443 mv.visitFieldInsn(GETSTATIC, className, "FIELD_OFFSET", "J"); |
441 String name = "get" + type.typeName + nameSuffix; |
444 String name = "get" + type.unsafeTypeName() + nameSuffix; |
442 mv.visitMethodInsn(INVOKEVIRTUAL, UNSAFE_NAME, name, "(Ljava/lang/Object;J)" + type.desc(), false); |
445 mv.visitMethodInsn(INVOKEVIRTUAL, UNSAFE_NAME, name, "(Ljava/lang/Object;J)" + type.desc(), false); |
443 } |
446 } |
444 void wrapResult(MethodVisitor mv) { |
447 void wrapResult(MethodVisitor mv) { |
445 if (type != JavaType.L) { |
448 if (type != JavaType.L) { |
446 String desc = String.format("(%s)L%s;", type.desc(), type.wrapper); |
449 String desc = String.format("(%s)L%s;", type.desc(), type.wrapper); |