166 } 167 168 @SuppressWarnings("unchecked") 169 public Class<T> boxClass() { 170 return (Class<T>)boxLookup.lookupClass(); 171 } 172 173 public Class<?> sourceClass() { 174 return boxClass(); 175 } 176 177 public Class<?> valueClass() { 178 return valueLookup.lookupClass(); 179 } 180 181 public Class<?> arrayValueClass() { 182 return arrayValueClass(1); 183 } 184 185 public Class<?> arrayValueClass(int dims) { 186 try { 187 String dimsStr = "[[[[[[[[[[[[[[[["; 188 if (dims < 1 || dims > 16) { 189 throw new IllegalArgumentException("cannot create array class for dimension > 16"); 190 } 191 return Class.forName(dimsStr.substring(0, dims) + "Q" + valueClass().getName() + ";", false, boxLookup.lookupClass().getClassLoader()); 192 } catch (ClassNotFoundException ex) { 193 throw new IllegalStateException(ex); 194 } 195 } 196 197 public String toString() { 198 return "ValueType boxClass=" + boxClass() + " valueClass=" + valueClass(); 199 } 200 201 String mhName(String opName) { 202 return sourceClass().getName() + "_" + opName; 203 } 204 205 public MethodHandle defaultValueConstant() { 206 ValueHandleKey key = ValueHandleKind.DEFAULT.key(); 207 MethodHandle result = handleMap.get(key); 208 if (result == null) { 209 result = MethodHandleBuilder.loadCode(boxLookup, mhName("default"), MethodType.methodType(valueClass()), 210 C -> { 211 C.vdefault(valueClass()).vreturn(); 212 }); 213 handleMap.put(key, result); 214 } | 166 } 167 168 @SuppressWarnings("unchecked") 169 public Class<T> boxClass() { 170 return (Class<T>)boxLookup.lookupClass(); 171 } 172 173 public Class<?> sourceClass() { 174 return boxClass(); 175 } 176 177 public Class<?> valueClass() { 178 return valueLookup.lookupClass(); 179 } 180 181 public Class<?> arrayValueClass() { 182 return arrayValueClass(1); 183 } 184 185 public Class<?> arrayValueClass(int dims) { 186 String dimsStr = "[[[[[[[[[[[[[[[["; 187 if (dims < 1 || dims > 16) { 188 throw new IllegalArgumentException("cannot create array class for dimension > 16"); 189 } 190 String cn = dimsStr.substring(0, dims) + "Q" + valueClass().getName() + ";"; 191 return MinimalValueTypes_1_0.loadValueTypeClass(boxLookup.lookupClass(), cn); 192 } 193 194 public String toString() { 195 return "ValueType boxClass=" + boxClass() + " valueClass=" + valueClass(); 196 } 197 198 String mhName(String opName) { 199 return sourceClass().getName() + "_" + opName; 200 } 201 202 public MethodHandle defaultValueConstant() { 203 ValueHandleKey key = ValueHandleKind.DEFAULT.key(); 204 MethodHandle result = handleMap.get(key); 205 if (result == null) { 206 result = MethodHandleBuilder.loadCode(boxLookup, mhName("default"), MethodType.methodType(valueClass()), 207 C -> { 208 C.vdefault(valueClass()).vreturn(); 209 }); 210 handleMap.put(key, result); 211 } |