public static Arg createVarArgs() { Arg a = new Arg(null, null); a.varArg = true; return a; }
@Override public void visitArg(Arg arg) { Declarator d = arg.getDeclarator(); if (d == null) { TypeRef tr = arg.getValueType(); if (tr instanceof TypeRef.Pointer) { TypeRef target = ((TypeRef.Pointer)tr).getTarget(); if (target instanceof TypeRef.FunctionSignature) { TypeRef.FunctionSignature fs = (TypeRef.FunctionSignature) target; Identifier name = fs.getFunction() == null ? null : fs.getFunction().getName(); if (name != null) { arg.setDeclarator(new DirectDeclarator(name.toString())); fs.getFunction().setName(null); } } } } else if (!(d instanceof DirectDeclarator)) { MutableByDeclarator type = d.mutateType(arg.getValueType()); if (type instanceof TypeRef) { arg.setValueType((TypeRef) type); arg.setDeclarator(new DirectDeclarator(d.resolveName(), d.getBits(), arg.getDefaultValue())); } else { type = null; } } super.visitArg(arg); } private static final boolean mutateDeclaratorTypes = true;
@Override public void visitArg(Arg arg) { super.visitArg(arg); if (arg.getName() == null) { return; } if (!result.config.features.contains(GenFeatures.FunctionArgsJavaDoc)) { return; } String ca = arg.getCommentAfter(), cb = arg.getCommentBefore(); if (ca == null && cb == null) { return; } Function f = arg.findParentOfType(Function.class); if (f == null) { return; } ca = cleanCom(ca); cb = cleanCom(cb); if (!result.config.noComments) { f.addToCommentBefore("@param " + arg.getName() + " " + StringUtils.implode(new String[]{ca, cb}, "<br>")); } arg.setCommentAfter(null); arg.setCommentBefore(null); } }
@Override public boolean replaceChild(Element child, Element by) { if (child == getDefaultValue()) { setDefaultValue((Expression) by); return true; } if (child == getDeclarator()) { setDeclarator((Declarator) by); return true; } return super.replaceChild(child, by); }
protected static boolean isVarArgs(Arg arg) { if (arg.isVarArg()) { return true; } String t = arg.getValueType() + ""; return t.equals("va_list") || t.equals("__builtin_va_list") || t.equals("__gnuc_va_list"); } public void convertCallback(FunctionSignature functionSignature, Signatures signatures, DeclarationsHolder out, Identifier libraryClass) {
private boolean checkNoCycles(SourceFiles sourceFiles) { final LinkedHashMap<Integer, Throwable> ids = new LinkedHashMap<Integer, Throwable>(new Arg().getId()); sourceFiles.accept(new Scanner() { @Override protected void visitElement(Element d) { if (d != null && ids.put(d.getId(), new RuntimeException().fillInStackTrace()) != null) { Throwable previous = ids.get(d.getId()); throw new RuntimeException("Cycle : " + d, previous); } super.visitElement(d); } }); return true; } }
if (at == null && methodType != null) { if (iArg < methodType.getArgs().size()) { at = methodType.getArgs().get(iArg).getValueType(); } else { at = null; return null; Arg a = new Arg(); a.setName(XMLUtils.getAttribute(arg, "name")); a.setValueType(at); a.setSelector(splitSelector == null || iArg >= splitSelector.length ? null : splitSelector[iArg]); f.addArg(a); iArg++;
Arg holder = new Arg(); holder.setValueType(valueTypeCl); holder.setParentElement(valueType.getParentElement()); holder.accept(new Scanner() { java.util.Stack<String> names = new java.util.Stack<String>(); int depth = 0; TypeRef tr = holder.getValueType();
retval.arg = new Arg(); retval.arg.setValueType(tr); int i = getTokenStream().index() + 1; retval.arg.setCommentBefore(getCommentBefore(i)); retval.arg.setCommentAfter(getCommentAfterOnSameLine(i, ")")); retval.arg.setDeclarator(declarator21); retval.arg.setDefaultValue((dv!=null?dv.expr:null)); retval.arg = Arg.createVarArgs();
String methodName = library + "_" + (function.getParentElement() instanceof Struct ? ((Struct) function.getParentElement()).getTag() + "_" : "") + function.getName(); Function method = new Function(Function.Type.CppMethod, ident(methodName), typeRef(v8Ident("Handle", v8Ident("Value")))); method.addArg(new Arg(argsName, new TypeRef.Pointer(typeRef(v8Ident("Arguments")), Declarator.PointerStyle.Reference).addModifiers(ModifierType.Const))); Block body = new Block(); for (int iArg = 0; iArg < argCount; iArg++) { Arg arg = args.get(iArg); if (arg.isVarArg()) { throw new UnsupportedConversionException(function, "varargs not supported yet"); TypeRef tr = resolveTypeDef(arg.getValueType()); NodeType argNodeType = getNodeType(tr); Expression typeTest = null; argDeclExpr = arrowMethodCall(argExpr.clone(), "ToString"); argType = typeRef(v8Ident("Handle", v8Ident("String"))); argUsageExpr = cast(transformTypeForCast(arg.getValueType()), expr(UnaryOperator.Dereference, methodCall(ident("v8", "String", "AsciiValue"), varRef(arg.getName())))); break; case Pointer: methodCall(argExpr.clone(), Expression.MemberRefStyle.Dot, templateIdent(ident("As"), varRef(v8Ident("Object")))))); argType = new TypeRef.Pointer(typeRef(ident("char")), Declarator.PointerStyle.Pointer); argUsageExpr = cast(transformTypeForCast(arg.getValueType()), varRef(arg.getName())); break; case Boolean:
public void visitArg(Arg e) { implode(e.getAnnotations(), "\n"); if (e.getValueType() != null) { if (e.getName() != null) { variableDeclarationToString(e.getValueType(), e.getName(), e.isVarArg()); if (e.getDefaultValue() != null) { append(" = ").append(e.getDefaultValue()); } } else { append(e.getValueType()).append(e.isVarArg() ? "..." : null); } } else { append("..."); } }
protected void collectParamComments(Function f) { for (Arg arg : f.getArgs()) { arg.moveAllCommentsBefore(); TypeRef argType = arg.getValueType(); if (argType != null) { if (!result.config.noComments) { argType.moveAllCommentsBefore(); arg.addToCommentBefore(argType.getCommentBefore()); } argType.stripDetails(); } if (arg.getCommentBefore() != null) { if (!result.config.noComments) { f.addToCommentBefore("@param " + arg.getName() + " " + Element.cleanComment(arg.getCommentBefore())); } arg.stripDetails(); } } }
String name = arg.getName(); if (name == null && !isNamedFunctionType(arg.getValueType())) { missing.add(new Pair<Arg, Integer>(arg, i)); } else if (name != null) { i = 1; String base; if (p.getFirst().isVarArg()) { base = "varArgs"; } else { try { base = chooseArgNameFromType(p.getFirst().getValueType()); } catch (UnsupportedConversionException ex) { base = "arg"; p.getFirst().setName(name);
String argName = chooseJavaArgName(arg.getName() == null ? "varargs" : arg.getName(), iArg + 1, argNames); natFunc.addArg(new Arg(argName, typeRef(vaType.clone()))).setVarArg(true); if (alternativeOutputs) { primOrBufFunc.addArg(new Arg(argName, typeRef(vaType.clone()))).setVarArg(true); natStructFunc.addArg(new Arg(argName, typeRef(vaType.clone()))).setVarArg(true); String argName = chooseJavaArgName(arg.getName(), iArg + 1, argNames); TypeRef mutType = arg.createMutatedType(); if (mutType == null) { throw new UnsupportedConversionException(function, "Argument " + arg.getName() + " cannot be converted"); natFunc.addArg(new Arg(argName, typeConverter().convertTypeToJNA(mutType, TypeConversionMode.NativeParameter, libraryClassName))); if (alternativeOutputs) { primOrBufFunc.addArg(new Arg(argName, typeConverter().convertTypeToJNA(mutType, TypeConversionMode.PrimitiveOrBufferParameter, libraryClassName))); natStructFunc.addArg(new Arg(argName, typeConverter().convertTypeToJNA(mutType, TypeConversionMode.NativeParameterWithStructsPtrPtrs, libraryClassName)));
String rt = getScalaType(f.getValueType()); for (Arg a : args) { String vt = getScalaType(a.getValueType()); String n = a.getName(); argTypes.add(vt); argNames.add(n);
boolean firstArg = true; for (Arg arg : e.getArgs()) { if (arg.isVarArg()) { if (!firstArg) { append(", "); } else { if (!firstArg) { append(' ', arg.getSelector()); append(":(", arg.createMutatedType(), ')', arg.getName());
Function unionValConstr = new Function(Function.Type.JavaMethod, structName.clone(), null, new Arg(name, tr.clone())); if (!result.config.noComments) { if (!commentBits.isEmpty()) { String name = chooseJavaArgName(vd.getDeclarators().get(0).resolveName(), iArg, names); namesById.put(vd.getId(), name); fieldsConstr.addArg(new Arg(name, vd.getValueType().clone())); iArg++; if (iArg == 1 && isJNAPointer(fieldsConstr.getArgs().get(0).getValueType())) addPointerConstructor = false; Function addressConstructor = new Function(Function.Type.JavaMethod, structName.clone(), null).addModifiers(ModifierType.Public); String pointerVarName = "peer"; addressConstructor.addArg(new Arg(pointerVarName, typeRef(com.sun.jna.Pointer.class))); FunctionCall superPointerCall = methodCall("super"); superPointerCall.addArgument(varRef(pointerVarName));
boolean firstArg = true; for (Arg arg : args) { if (arg.isVarArg()) { if (!firstArg) b.append(", "); } else { if (!firstArg) b.append(" " + arg.getSelector()); b.append(":("); t = arg.createMutatedType(); if (t != null) { erase(t); } else b.append(", "); TypeRef t = arg.createMutatedType(); if (t != null) { erase(t);
Arg arg = new Arg((argName1!=null?argName1.getText():null), argType1); arg.setSelector((methodName!=null?methodName.getText():null)); function.addArg(arg); Arg arg = new Arg((argName!=null?argName.getText():null), argType); arg.setSelector((sel!=null?sel.getText():null)); function.addArg(arg); function.addArg(Arg.createVarArgs());
@Override public void visitArg(final Arg element) { super.visitArg(element); currentTable.defineVariable(element.getName(), element); }