public static TypeRef recognizeSizeOf(Expression e) { if (!(e instanceof FunctionCall)) { return null; } FunctionCall fc = (FunctionCall) e; List<Pair<String, Expression>> args = fc.getArguments(); if (args.size() != 1) { return null; } Pair<String, Expression> arg = args.get(0); if (arg == null) { return null; } Expression f = fc.getFunction(); if (!(f instanceof VariableRef)) { return null; } VariableRef vr = (VariableRef) f; if (!"sizeof".equals(String.valueOf(vr.getName()))) { return null; } Expression a = arg.getSecond(); if (!(a instanceof Expression.TypeRefExpression)) { return null; } Expression.TypeRefExpression tr = (Expression.TypeRefExpression) a; return tr.getType(); }
TypeRef tr = tre.getType(); if (tr instanceof TypeRef.SimpleTypeRef) { TypeRef.SimpleTypeRef str = (TypeRef.SimpleTypeRef) tr;
TypeRef tr = tre.getType(); if (tr instanceof TypeRef.SimpleTypeRef) { TypeRef.SimpleTypeRef str = (TypeRef.SimpleTypeRef) tr;
expr = new FunctionCall(varRef("sizeof"), new TypeRefExpression(tr));
init = new FunctionCall(new TypeRefExpression(new SimpleTypeRef(qn)));
expr = new Expression.TypeRefExpression(tr);
Expression.TypeRefExpression typeEx = SyntaxUtils.as(fc.getArguments().get(0).getValue(), Expression.TypeRefExpression.class); if (typeEx != null) { res = typed(sizeofToJava(typeEx.getType(), libraryClassName), typeRef(Integer.TYPE));
Expression.TypeRefExpression typeEx = SyntaxUtils.as(fc.getArguments().get(0).getValue(), Expression.TypeRefExpression.class); if (typeEx != null) { res = typed(sizeofToJava(typeEx.getType(), libraryClassName), typeRef(Integer.TYPE));
TypeRef tr = tre.getType(); if (tr instanceof TypeRef.SimpleTypeRef) { TypeRef.SimpleTypeRef str = (TypeRef.SimpleTypeRef) tr; } else { TypeRef conv = convertTypeToJNA(tr, TypeConversionMode.ExpressionType, libraryClassName); return typed(new Expression.TypeRefExpression(conv), conv);
TypeRef tr = tre.getType(); if (tr instanceof TypeRef.SimpleTypeRef) { TypeRef.SimpleTypeRef str = (TypeRef.SimpleTypeRef) tr; } else { TypeRef conv = convertTypeToJNA(tr, TypeConversionMode.ExpressionType, libraryClassName); return typed(new Expression.TypeRefExpression(conv), conv);
public Identifier findObjCClassIdent(Identifier name) { if (name instanceof SimpleIdentifier) { SimpleIdentifier sname = (SimpleIdentifier) name; String n = sname.getName(); if (n.equals("id") && sname.getTemplateArguments().size() == 1/* && conversionMode != TypeConversionMode.NativeParameter && conversionMode != TypeConversionMode.NativeParameterWithStructsPtrPtrs*/) { Expression x = sname.getTemplateArguments().get(0); TypeRefExpression trx = x instanceof TypeRefExpression ? (TypeRefExpression) x : null; SimpleTypeRef str = trx.getType() instanceof SimpleTypeRef ? (SimpleTypeRef) trx.getType() : null; if (str != null) { name = str.getName(); } } } Class<?> class1 = predefObjCClasses.get(name.toString()); if (class1 != null) { return ident(class1); } Struct s = result.resolveObjCClass(name); if (s != null) { return result.objectiveCGenerator.getFullClassName(s); } return null; }
public static TypeRef recognizeSizeOf(Expression e) { if (!(e instanceof FunctionCall)) { return null; } FunctionCall fc = (FunctionCall) e; List<Pair<String, Expression>> args = fc.getArguments(); if (args.size() != 1) { return null; } Pair<String, Expression> arg = args.get(0); if (arg == null) { return null; } Expression f = fc.getFunction(); if (!(f instanceof VariableRef)) { return null; } VariableRef vr = (VariableRef) f; if (!"sizeof".equals(String.valueOf(vr.getName()))) { return null; } Expression a = arg.getSecond(); if (!(a instanceof Expression.TypeRefExpression)) { return null; } Expression.TypeRefExpression tr = (Expression.TypeRefExpression) a; return tr.getType(); }
public Identifier findObjCClassIdent(Identifier name) { if (name instanceof SimpleIdentifier) { SimpleIdentifier sname = (SimpleIdentifier) name; String n = sname.getName(); if (n.equals("id") && sname.getTemplateArguments().size() == 1/* && conversionMode != TypeConversionMode.NativeParameter && conversionMode != TypeConversionMode.NativeParameterWithStructsPtrPtrs*/) { Expression x = sname.getTemplateArguments().get(0); TypeRefExpression trx = x instanceof TypeRefExpression ? (TypeRefExpression) x : null; SimpleTypeRef str = trx.getType() instanceof SimpleTypeRef ? (SimpleTypeRef) trx.getType() : null; if (str != null) { name = str.getName(); } } } Class<?> class1 = predefObjCClasses.get(name.toString()); if (class1 != null) { return ident(class1); } Struct s = result.resolveObjCClass(name); if (s != null) { return result.objectiveCGenerator.getFullClassName(s); } return null; }
@Override public Expression typeLiteral(TypeRef c) { if (c instanceof SimpleTypeRef && result.config.runtime == JNAeratorConfig.Runtime.BridJ) { Identifier id = ((SimpleTypeRef) c).getName(); Identifier.SimpleIdentifier sid = id.resolveLastSimpleIdentifier(); if (!sid.getTemplateArguments().isEmpty()) { Identifier erased = id.eraseTemplateArguments(); List<Expression> exprs = new ArrayList<Expression>(); exprs.add(typeLiteral(typeRef(erased.clone()))); for (Expression t : sid.getTemplateArguments()) { if (t instanceof Expression.TypeRefExpression) { exprs.add(typeLiteral(((Expression.TypeRefExpression) t).getType().clone())); } } return methodCall(expr(typeRef(DefaultParameterizedType.class)), "paramType", exprs.toArray(new Expression[exprs.size()])); } } return super.typeLiteral(c); }
public static TypeRef getSingleTypeParameter(TypeRef tr) { if (!(tr instanceof SimpleTypeRef)) { return null; } SimpleTypeRef str = (SimpleTypeRef) tr; Identifier name = str.getName(); if (name == null) { return null; } SimpleIdentifier id = name.resolveLastSimpleIdentifier(); List<Expression> templateArguments = id.getTemplateArguments(); if (templateArguments.size() != 1) { return null; } Expression x = templateArguments.get(0); if (!(x instanceof TypeRefExpression)) { return null; } return ((TypeRefExpression) x).getType(); }
@Override public Expression typeLiteral(TypeRef c) { if (c instanceof SimpleTypeRef && result.config.runtime == JNAeratorConfig.Runtime.BridJ) { Identifier id = ((SimpleTypeRef) c).getName(); Identifier.SimpleIdentifier sid = id.resolveLastSimpleIdentifier(); if (!sid.getTemplateArguments().isEmpty()) { Identifier erased = id.eraseTemplateArguments(); List<Expression> exprs = new ArrayList<Expression>(); exprs.add(typeLiteral(typeRef(erased.clone()))); for (Expression t : sid.getTemplateArguments()) { if (t instanceof Expression.TypeRefExpression) { exprs.add(typeLiteral(((Expression.TypeRefExpression) t).getType().clone())); } } return methodCall(expr(typeRef(DefaultParameterizedType.class)), "paramType", exprs.toArray(new Expression[exprs.size()])); } } return super.typeLiteral(c); }
public static Expression expr(TypeRef tr) { return new TypeRefExpression(tr); }
public TypeRefExpression(TypeRef type) { setType(type); } public TypeRefExpression() {}
public void visitTypeRefExpression(TypeRefExpression typeRefExpression) { visitExpression(typeRefExpression); visit(typeRefExpression.getType()); }
public void setType(TypeRef type) { this.type = changeValue(this, this.type, type); } @Override