188 sb.append(' '); 189 sb.append(fieldName); 190 sb.append("$ptr() {\n"); 191 incrAlign(); 192 indent(); 193 sb.append("return "); 194 sb.append(libraryField); 195 sb.append('.'); 196 sb.append(fieldName); 197 sb.append("$ptr();\n"); 198 decrAlign(); 199 indent(); 200 sb.append("}\n\n"); 201 202 decrAlign(); 203 } 204 205 // emit static forwarder method of a function 206 protected void emitStaticForwarder(FunctionTree funcTree, JType.Function fn, String libraryField) { 207 check(); 208 incrAlign(); 209 indent(); 210 sb.append("public static "); 211 sb.append(fn.returnType.getSourceSignature(false)); 212 sb.append(' '); 213 sb.append(funcTree.name()); 214 sb.append('('); 215 final int arg_cnt = funcTree.numParams(); 216 final List<String> argNames = new ArrayList<>(); 217 for (int i = 0; i < fn.args.length; i++) { 218 sb.append(fn.args[i].getSourceSignature(false)); 219 sb.append(' '); 220 String pname = funcTree.paramName(i); 221 pname = pname == null || pname.isEmpty()? ("$arg" + i) : pname; 222 argNames.add(pname); 223 sb.append(pname); 224 if (fn.isVarArgs || i != arg_cnt - 1) { 225 sb.append(", "); 226 } 227 } 228 if (fn.isVarArgs) { 229 sb.append("Object... "); 230 String pname = funcTree.paramName(arg_cnt - 1); 231 pname = pname == null || pname.isEmpty()? "$args" : pname; 232 argNames.add(pname); 233 sb.append(pname); 234 } 235 236 sb.append(") {\n"); 237 incrAlign(); 238 indent(); 239 if (fn.returnType != JType.Void) { 240 sb.append("return "); 241 } 242 sb.append(libraryField); 243 sb.append('.'); 244 sb.append(funcTree.name()); 245 sb.append('('); 246 int size = argNames.size(); 247 int j = 0; 248 for (String an : argNames) { 249 sb.append(an); 250 if (j != size - 1) sb.append(", "); 251 j++; 252 } 253 sb.append(");\n"); 254 decrAlign(); 255 indent(); 256 sb.append("}\n\n"); 257 decrAlign(); 258 } 259 } | 188 sb.append(' '); 189 sb.append(fieldName); 190 sb.append("$ptr() {\n"); 191 incrAlign(); 192 indent(); 193 sb.append("return "); 194 sb.append(libraryField); 195 sb.append('.'); 196 sb.append(fieldName); 197 sb.append("$ptr();\n"); 198 decrAlign(); 199 indent(); 200 sb.append("}\n\n"); 201 202 decrAlign(); 203 } 204 205 // emit static forwarder method of a function 206 protected void emitStaticForwarder(FunctionTree funcTree, JType.Function fn, String libraryField) { 207 check(); 208 209 final int numArgs = fn.isVarArgs? fn.args.length + 1 : fn.args.length; 210 final String[] argTypes = new String[numArgs]; 211 final String[] argNames = new String[numArgs]; 212 fillArgTypes(fn, argTypes); 213 fillArgNames(fn, funcTree, argNames); 214 215 incrAlign(); 216 indent(); 217 sb.append("public static "); 218 sb.append(fn.returnType.getSourceSignature(false)); 219 sb.append(' '); 220 sb.append(funcTree.name()); 221 sb.append('('); 222 for (int i = 0; i < numArgs; i++) { 223 sb.append(argTypes[i]); 224 sb.append(' '); 225 sb.append(argNames[i]); 226 if (i != numArgs - 1) { 227 sb.append(", "); 228 } 229 } 230 sb.append(") {\n"); 231 incrAlign(); 232 indent(); 233 if (fn.returnType != JType.Void) { 234 sb.append("return "); 235 } 236 sb.append(libraryField); 237 sb.append('.'); 238 sb.append(funcTree.name()); 239 sb.append('('); 240 for (int j = 0; j < numArgs; j++) { 241 sb.append(argNames[j]); 242 if (j != numArgs - 1) { 243 sb.append(", "); 244 } 245 } 246 sb.append(");\n"); 247 decrAlign(); 248 indent(); 249 sb.append("}\n\n"); 250 decrAlign(); 251 } 252 } |