< prev index next >

src/jdk.jextract/share/classes/com/sun/tools/jextract/AsmCodeFactoryExt.java

Print this page




 183     @Override
 184     public Boolean visitFunction(FunctionTree funcTree, JType jt) {
 185         if (super.visitFunction(funcTree, jt)) {
 186             assert (jt instanceof JType.Function);
 187             JType.Function fn = (JType.Function)jt;
 188             log.print(Level.FINE, () -> "Add method: " + fn.getSignature(false));
 189             emitStaticForwarder(funcTree.name(), fn.getDescriptor(), fn.getSignature(false), fn.isVarArgs);
 190             fn.visitInner(cw);
 191             return true;
 192         } else {
 193             return false;
 194         }
 195     }
 196 
 197     @Override
 198     public Boolean visitMacro(MacroTree macroTree, JType jt) {
 199         if (super.visitMacro(macroTree, jt)) {
 200             String name = macroTree.name();
 201             MacroParser.Macro macro = macroTree.macro().get();
 202             log.print(Level.FINE, () -> "Adding macro " + name);
 203             addConstant(name, macro.type(), macro.value());
 204             return true;
 205         } else {
 206             return false;
 207         }
 208     }
 209 
 210     private void addConstant(String name, JType type, Object value) {
 211         Object constantValue = makeConstantValue(type, value);
 212         FieldVisitor fv = cw.visitField(ACC_PUBLIC | ACC_STATIC | ACC_FINAL, name, type.getDescriptor(),
 213                 type.getSignature(false), constantValue);
 214         fv.visitEnd();
 215         if (constantValue == null) {
 216             constantInitializers.add(mv -> {
 217                 // load library interface (static) field
 218                 String desc = type.getDescriptor();
 219                 mv.visitFieldInsn(GETSTATIC, getClassName(),
 220                         STATICS_LIBRARY_FIELD_NAME, headerClassNameDesc);
 221                 mv.visitMethodInsn(INVOKEINTERFACE, headerClassName, name, "()" + desc, true);
 222                 mv.visitFieldInsn(PUTSTATIC, getClassName(), name, desc);
 223             });




 183     @Override
 184     public Boolean visitFunction(FunctionTree funcTree, JType jt) {
 185         if (super.visitFunction(funcTree, jt)) {
 186             assert (jt instanceof JType.Function);
 187             JType.Function fn = (JType.Function)jt;
 188             log.print(Level.FINE, () -> "Add method: " + fn.getSignature(false));
 189             emitStaticForwarder(funcTree.name(), fn.getDescriptor(), fn.getSignature(false), fn.isVarArgs);
 190             fn.visitInner(cw);
 191             return true;
 192         } else {
 193             return false;
 194         }
 195     }
 196 
 197     @Override
 198     public Boolean visitMacro(MacroTree macroTree, JType jt) {
 199         if (super.visitMacro(macroTree, jt)) {
 200             String name = macroTree.name();
 201             MacroParser.Macro macro = macroTree.macro().get();
 202             log.print(Level.FINE, () -> "Adding macro " + name);
 203             addConstant(Utils.toMacroName(name), macro.type(), macro.value());
 204             return true;
 205         } else {
 206             return false;
 207         }
 208     }
 209 
 210     private void addConstant(String name, JType type, Object value) {
 211         Object constantValue = makeConstantValue(type, value);
 212         FieldVisitor fv = cw.visitField(ACC_PUBLIC | ACC_STATIC | ACC_FINAL, name, type.getDescriptor(),
 213                 type.getSignature(false), constantValue);
 214         fv.visitEnd();
 215         if (constantValue == null) {
 216             constantInitializers.add(mv -> {
 217                 // load library interface (static) field
 218                 String desc = type.getDescriptor();
 219                 mv.visitFieldInsn(GETSTATIC, getClassName(),
 220                         STATICS_LIBRARY_FIELD_NAME, headerClassNameDesc);
 221                 mv.visitMethodInsn(INVOKEINTERFACE, headerClassName, name, "()" + desc, true);
 222                 mv.visitFieldInsn(PUTSTATIC, getClassName(), name, desc);
 223             });


< prev index next >