173 return outerName; 174 } 175 176 public String getName() { 177 return name; 178 } 179 180 @Override 181 public String getDescriptor() { 182 return "L" + outerName + "$" + name + ";"; 183 } 184 } 185 186 final class ArrayType implements JType { 187 final JType elementType; 188 189 ArrayType(JType type) { 190 elementType = type; 191 } 192 193 @Override 194 public String getDescriptor() { 195 return JType.of(java.foreign.memory.Array.class).getDescriptor(); 196 } 197 198 @Override 199 public String getSignature() { 200 StringBuilder sb = new StringBuilder(); 201 sb.append("L"); 202 sb.append(java.foreign.memory.Array.class.getName().replace('.', '/')); 203 sb.append("<"); 204 JType pt = elementType; 205 if (pt instanceof JType2) { 206 pt = ((JType2) pt).getDelegate(); 207 } 208 if (pt instanceof TypeAlias) { 209 pt = ((TypeAlias) pt).canonicalType(); 210 } 211 sb.append(JType.boxing(pt)); 212 sb.append(">;"); 213 return sb.toString(); 214 } 215 216 public JType getElementType() { 217 return elementType; 218 } 219 } 220 221 final static class Function implements JType { 222 final JType returnType; 223 final JType[] args; 224 final boolean isVarArgs; 225 final java.foreign.layout.Function layout; 226 227 Function(java.foreign.layout.Function layout, boolean isVarArgs, JType returnType, JType... args) { 228 this.layout = layout; 229 this.returnType = returnType; 230 this.args = args; 231 this.isVarArgs = isVarArgs; 232 } 233 234 @Override 235 public String getDescriptor() { 236 StringBuilder sb = new StringBuilder(); 237 sb.append('('); 238 // ensure sequence 239 for (int i = 0; i < args.length; i++) { 240 sb.append(args[i].getDescriptor()); 241 } 242 if (isVarArgs) { 243 sb.append("[Ljava/lang/Object;"); 244 } 245 sb.append(')'); 246 sb.append(returnType.getDescriptor()); 247 return sb.toString(); 248 } 249 250 @Override 251 public String getSignature() { 252 StringBuilder sb = new StringBuilder(); 253 sb.append('('); | 173 return outerName; 174 } 175 176 public String getName() { 177 return name; 178 } 179 180 @Override 181 public String getDescriptor() { 182 return "L" + outerName + "$" + name + ";"; 183 } 184 } 185 186 final class ArrayType implements JType { 187 final JType elementType; 188 189 ArrayType(JType type) { 190 elementType = type; 191 } 192 193 PointerType asPointer() { 194 return new PointerType(elementType); 195 } 196 197 @Override 198 public String getDescriptor() { 199 return JType.of(java.foreign.memory.Array.class).getDescriptor(); 200 } 201 202 @Override 203 public String getSignature() { 204 StringBuilder sb = new StringBuilder(); 205 sb.append("L"); 206 sb.append(java.foreign.memory.Array.class.getName().replace('.', '/')); 207 sb.append("<"); 208 JType pt = elementType; 209 if (pt instanceof JType2) { 210 pt = ((JType2) pt).getDelegate(); 211 } 212 if (pt instanceof TypeAlias) { 213 pt = ((TypeAlias) pt).canonicalType(); 214 } 215 sb.append(JType.boxing(pt)); 216 sb.append(">;"); 217 return sb.toString(); 218 } 219 220 public JType getElementType() { 221 return elementType; 222 } 223 } 224 225 final static class Function implements JType { 226 final JType returnType; 227 final JType[] args; 228 final boolean isVarArgs; 229 final java.foreign.layout.Function layout; 230 231 Function(java.foreign.layout.Function layout, boolean isVarArgs, JType returnType, JType... args) { 232 this.layout = layout; 233 this.returnType = returnType; 234 this.args = args; 235 for (int i = 0; i < args.length; i++) { 236 args[i] = arrayAsPointer(args[i]); 237 } 238 this.isVarArgs = isVarArgs; 239 } 240 241 private static JType arrayAsPointer(JType t) { 242 if (t instanceof JType2) { 243 t = ((JType2)t).getDelegate(); 244 } 245 if (t instanceof TypeAlias) { 246 t = ((TypeAlias)t).canonicalType(); 247 } 248 return t instanceof ArrayType? ((ArrayType)t).asPointer() : t; 249 } 250 251 @Override 252 public String getDescriptor() { 253 StringBuilder sb = new StringBuilder(); 254 sb.append('('); 255 // ensure sequence 256 for (int i = 0; i < args.length; i++) { 257 sb.append(args[i].getDescriptor()); 258 } 259 if (isVarArgs) { 260 sb.append("[Ljava/lang/Object;"); 261 } 262 sb.append(')'); 263 sb.append(returnType.getDescriptor()); 264 return sb.toString(); 265 } 266 267 @Override 268 public String getSignature() { 269 StringBuilder sb = new StringBuilder(); 270 sb.append('('); |