< prev index next >

src/jdk.incubator.jextract/share/classes/jdk/incubator/jextract/tool/JavaSourceBuilder.java

Print this page




 307         sb.append(PRI_MODS + "FunctionDescriptor " + fnName + "$DESC = ");
 308         addFunction(desc);
 309         sb.append(";\n");
 310         indent();
 311         sb.append(PUB_MODS + "MemoryAddress " + fnName + "$make(MethodHandle handle) {\n");
 312         incrAlign();
 313         indent();
 314         sb.append("return RuntimeHelper.upcallStub(handle, " + fnName + "$DESC);\n");
 315         decrAlign();
 316         indent();
 317         sb.append("}\n");
 318         decrAlign();
 319     }
 320 
 321     protected void addStaticFunctionWrapper(Declaration.Function f, MethodType mtype) {
 322         incrAlign();
 323         indent();
 324         sb.append(PUB_MODS + mtype.returnType().getName() + " " + f.name() + " (");
 325         String delim = "";
 326         List<String> pNames = new ArrayList<>();
 327         for (int i = 0 ; i < f.parameters().size() ; i++) {

 328             String pName = f.parameters().get(i).name();
 329             if (pName.isEmpty()) {
 330                 pName = "x" + i;
 331             }
 332             pNames.add(pName);
 333             sb.append(delim + mtype.parameterType(i).getName() + " " + pName);
 334             delim = ", ";
 335         }
 336         if (f.type().varargs()) {
 337             String lastArg = "x" + f.parameters().size();
 338             sb.append(", Object... " + lastArg);



 339             pNames.add(lastArg);
 340         }
 341         sb.append(") {\n");
 342         incrAlign();
 343         indent();
 344         sb.append("try {\n");
 345         incrAlign();
 346         indent();
 347         if (!mtype.returnType().equals(void.class)) {
 348             sb.append("return (" + mtype.returnType().getName() + ")");
 349         }
 350         sb.append(f.name() + ".invokeExact(" + String.join(", ", pNames) + ");\n");
 351         decrAlign();
 352         indent();
 353         sb.append("} catch (Throwable ex) {\n");
 354         incrAlign();
 355         indent();
 356         sb.append("throw new AssertionError(ex);\n");
 357         decrAlign();
 358         indent();




 307         sb.append(PRI_MODS + "FunctionDescriptor " + fnName + "$DESC = ");
 308         addFunction(desc);
 309         sb.append(";\n");
 310         indent();
 311         sb.append(PUB_MODS + "MemoryAddress " + fnName + "$make(MethodHandle handle) {\n");
 312         incrAlign();
 313         indent();
 314         sb.append("return RuntimeHelper.upcallStub(handle, " + fnName + "$DESC);\n");
 315         decrAlign();
 316         indent();
 317         sb.append("}\n");
 318         decrAlign();
 319     }
 320 
 321     protected void addStaticFunctionWrapper(Declaration.Function f, MethodType mtype) {
 322         incrAlign();
 323         indent();
 324         sb.append(PUB_MODS + mtype.returnType().getName() + " " + f.name() + " (");
 325         String delim = "";
 326         List<String> pNames = new ArrayList<>();
 327         final int numParams = f.parameters().size();
 328         for (int i = 0 ; i < numParams; i++) {
 329             String pName = f.parameters().get(i).name();
 330             if (pName.isEmpty()) {
 331                 pName = "x" + i;
 332             }
 333             pNames.add(pName);
 334             sb.append(delim + mtype.parameterType(i).getName() + " " + pName);
 335             delim = ", ";
 336         }
 337         if (f.type().varargs()) {
 338             String lastArg = "x" + numParams;
 339             if (numParams > 0) {
 340                 sb.append(", ");
 341             }
 342             sb.append("Object... " + lastArg);
 343             pNames.add(lastArg);
 344         }
 345         sb.append(") {\n");
 346         incrAlign();
 347         indent();
 348         sb.append("try {\n");
 349         incrAlign();
 350         indent();
 351         if (!mtype.returnType().equals(void.class)) {
 352             sb.append("return (" + mtype.returnType().getName() + ")");
 353         }
 354         sb.append(f.name() + ".invokeExact(" + String.join(", ", pNames) + ");\n");
 355         decrAlign();
 356         indent();
 357         sb.append("} catch (Throwable ex) {\n");
 358         incrAlign();
 359         indent();
 360         sb.append("throw new AssertionError(ex);\n");
 361         decrAlign();
 362         indent();


< prev index next >