| 79 | } |
| 80 | |
| 81 | public Object get(Object instance) throws IllegalAccessException { |
| 82 | Object target; |
| 83 | if ((vmField.flags & Modifier.STATIC) != 0) { |
| 84 | target = vmField.class_.staticTable; |
| 85 | } else if (Class.isInstance(vmField.class_, instance)) { |
| 86 | target = instance; |
| 87 | } else { |
| 88 | throw new IllegalArgumentException(); |
| 89 | } |
| 90 | |
| 91 | Classes.initialize(vmField.class_); |
| 92 | |
| 93 | switch (vmField.code) { |
| 94 | case ByteField: |
| 95 | return Byte.valueOf |
| 96 | ((byte) getPrimitive(target, vmField.code, vmField.offset)); |
| 97 | |
| 98 | case BooleanField: |
| 99 | return Boolean.valueOf |
| 100 | (getPrimitive(target, vmField.code, vmField.offset) != 0); |
| 101 | |
| 102 | case CharField: |
| 103 | return Character.valueOf |
| 104 | ((char) getPrimitive(target, vmField.code, vmField.offset)); |
| 105 | |
| 106 | case ShortField: |
| 107 | return Short.valueOf |
| 108 | ((short) getPrimitive(target, vmField.code, vmField.offset)); |
| 109 | |
| 110 | case IntField: |
| 111 | return Integer.valueOf |
| 112 | ((int) getPrimitive(target, vmField.code, vmField.offset)); |
| 113 | |
| 114 | case LongField: |
| 115 | return Long.valueOf |
| 116 | (getPrimitive(target, vmField.code, vmField.offset)); |
| 117 | |
| 118 | case FloatField: |
| 119 | return Float.valueOf |
| 120 | (Float.intBitsToFloat |
| 121 | ((int) getPrimitive(target, vmField.code, vmField.offset))); |
| 122 | |
| 123 | case DoubleField: |
| 124 | return Double.valueOf |
| 125 | (Double.longBitsToDouble |
| 126 | (getPrimitive(target, vmField.code, vmField.offset))); |
| 127 | |
| 128 | case ObjectField: |
| 129 | return getObject(target, vmField.offset); |
| 130 | |
| 131 | default: |
| 132 | throw new Error(); |
| 133 | } |
| 134 | } |
| 135 | |
| 136 | public boolean getBoolean(Object instance) throws IllegalAccessException { |
| 137 | return ((Boolean) get(instance)).booleanValue(); |