Search in sources :

Example 6 with PrefixExpression

use of com.google.devtools.j2objc.ast.PrefixExpression in project j2objc by google.

the class Autoboxer method rewriteBoxedAssignment.

private void rewriteBoxedAssignment(Assignment node) {
    Expression lhs = node.getLeftHandSide();
    Expression rhs = node.getRightHandSide();
    TypeMirror type = lhs.getTypeMirror();
    TypeMirror primitiveType = typeUtil.unboxedType(type);
    if (primitiveType == null) {
        return;
    }
    TypeMirror pointerType = new PointerType(type);
    String funcName = "JreBoxed" + getAssignFunctionName(node.getOperator()) + translationUtil.getOperatorFunctionModifier(lhs) + NameTable.capitalize(primitiveType.toString());
    FunctionElement element = new FunctionElement(funcName, type, TypeUtil.asTypeElement(type)).addParameters(pointerType, primitiveType);
    FunctionInvocation invocation = new FunctionInvocation(element, type);
    invocation.addArgument(new PrefixExpression(pointerType, PrefixExpression.Operator.ADDRESS_OF, TreeUtil.remove(lhs)));
    invocation.addArgument(TreeUtil.remove(rhs));
    unbox(rhs);
    node.replaceWith(invocation);
}
Also used : FunctionElement(com.google.devtools.j2objc.types.FunctionElement) FunctionInvocation(com.google.devtools.j2objc.ast.FunctionInvocation) CastExpression(com.google.devtools.j2objc.ast.CastExpression) PostfixExpression(com.google.devtools.j2objc.ast.PostfixExpression) Expression(com.google.devtools.j2objc.ast.Expression) PrefixExpression(com.google.devtools.j2objc.ast.PrefixExpression) InfixExpression(com.google.devtools.j2objc.ast.InfixExpression) ParenthesizedExpression(com.google.devtools.j2objc.ast.ParenthesizedExpression) ConditionalExpression(com.google.devtools.j2objc.ast.ConditionalExpression) TypeMirror(javax.lang.model.type.TypeMirror) PrefixExpression(com.google.devtools.j2objc.ast.PrefixExpression) PointerType(com.google.devtools.j2objc.types.PointerType)

Example 7 with PrefixExpression

use of com.google.devtools.j2objc.ast.PrefixExpression in project j2objc by google.

the class TreeConverter method convertPrefixExpression.

private static TreeNode convertPrefixExpression(org.eclipse.jdt.core.dom.PrefixExpression node) {
    PrefixExpression newNode = new PrefixExpression();
    convertExpression(node, newNode);
    return newNode.setOperator(PrefixExpression.Operator.parse(node.getOperator().toString())).setOperand((Expression) TreeConverter.convert(node.getOperand())).setTypeMirror(BindingConverter.getType(node.resolveTypeBinding()));
}
Also used : PostfixExpression(com.google.devtools.j2objc.ast.PostfixExpression) InstanceofExpression(com.google.devtools.j2objc.ast.InstanceofExpression) Expression(com.google.devtools.j2objc.ast.Expression) ConditionalExpression(com.google.devtools.j2objc.ast.ConditionalExpression) InfixExpression(com.google.devtools.j2objc.ast.InfixExpression) ParenthesizedExpression(com.google.devtools.j2objc.ast.ParenthesizedExpression) LambdaExpression(com.google.devtools.j2objc.ast.LambdaExpression) PrefixExpression(com.google.devtools.j2objc.ast.PrefixExpression) ThisExpression(com.google.devtools.j2objc.ast.ThisExpression) FunctionalExpression(com.google.devtools.j2objc.ast.FunctionalExpression) CastExpression(com.google.devtools.j2objc.ast.CastExpression) VariableDeclarationExpression(com.google.devtools.j2objc.ast.VariableDeclarationExpression) PrefixExpression(com.google.devtools.j2objc.ast.PrefixExpression)

Example 8 with PrefixExpression

use of com.google.devtools.j2objc.ast.PrefixExpression in project j2objc by google.

the class ArrayRewriter method newArrayAccess.

private Expression newArrayAccess(ArrayAccess arrayAccessNode, TypeMirror componentType, TypeElement iosArrayElement, boolean assignable) {
    String funcName = ElementUtil.getName(iosArrayElement) + "_Get";
    TypeMirror returnType = componentType;
    TypeMirror declaredReturnType = componentType.getKind().isPrimitive() ? componentType : TypeUtil.ID_TYPE;
    if (assignable) {
        funcName += "Ref";
        returnType = declaredReturnType = new PointerType(componentType);
    }
    FunctionElement element = new FunctionElement(funcName, declaredReturnType, iosArrayElement).addParameters(iosArrayElement.asType(), typeUtil.getInt());
    FunctionInvocation invocation = new FunctionInvocation(element, returnType);
    invocation.addArgument(arrayAccessNode.getArray().copy());
    invocation.addArgument(arrayAccessNode.getIndex().copy());
    if (assignable) {
        return new PrefixExpression(componentType, PrefixExpression.Operator.DEREFERENCE, invocation);
    }
    return invocation;
}
Also used : FunctionElement(com.google.devtools.j2objc.types.FunctionElement) FunctionInvocation(com.google.devtools.j2objc.ast.FunctionInvocation) TypeMirror(javax.lang.model.type.TypeMirror) PrefixExpression(com.google.devtools.j2objc.ast.PrefixExpression) PointerType(com.google.devtools.j2objc.types.PointerType)

Example 9 with PrefixExpression

use of com.google.devtools.j2objc.ast.PrefixExpression in project j2objc by google.

the class ComplexExpressionExtractor method endVisit.

@Override
public void endVisit(PrefixExpression node) {
    TreeNode parent = node.getParent();
    if (parent == null) {
        return;
    }
    // Check for balancing dereference and address-of operators.
    if (parent instanceof PrefixExpression) {
        PrefixExpression.Operator thisOp = node.getOperator();
        PrefixExpression.Operator parentOp = ((PrefixExpression) parent).getOperator();
        if ((thisOp == PrefixExpression.Operator.DEREFERENCE && parentOp == PrefixExpression.Operator.ADDRESS_OF) || (thisOp == PrefixExpression.Operator.ADDRESS_OF && parentOp == PrefixExpression.Operator.DEREFERENCE)) {
            parent.replaceWith(TreeUtil.remove(node.getOperand()));
            return;
        }
    }
    // without checking if parentheses were necessary.
    switch(parent.getKind()) {
        case POSTFIX_EXPRESSION:
        case // Parentheses not needed, but better for readability.
        PREFIX_EXPRESSION:
            ParenthesizedExpression.parenthesizeAndReplace(node);
            break;
        default:
    }
}
Also used : TreeNode(com.google.devtools.j2objc.ast.TreeNode) PrefixExpression(com.google.devtools.j2objc.ast.PrefixExpression)

Example 10 with PrefixExpression

use of com.google.devtools.j2objc.ast.PrefixExpression in project j2objc by google.

the class JavaCloneWriter method createVolatileCloneStatement.

private Statement createVolatileCloneStatement(VariableElement var, VariableElement originalVar, boolean isWeak) {
    TypeMirror voidType = typeUtil.getVoid();
    TypeMirror pointerType = new PointerType(var.asType());
    String funcName = "JreCloneVolatile" + (isWeak ? "" : "Strong");
    FunctionElement element = new FunctionElement(funcName, voidType, null).addParameters(pointerType, pointerType);
    FunctionInvocation invocation = new FunctionInvocation(element, voidType);
    invocation.addArgument(new PrefixExpression(pointerType, PrefixExpression.Operator.ADDRESS_OF, new SimpleName(var)));
    invocation.addArgument(new PrefixExpression(pointerType, PrefixExpression.Operator.ADDRESS_OF, new FieldAccess(var, new SimpleName(originalVar))));
    return new ExpressionStatement(invocation);
}
Also used : FunctionElement(com.google.devtools.j2objc.types.FunctionElement) FunctionInvocation(com.google.devtools.j2objc.ast.FunctionInvocation) TypeMirror(javax.lang.model.type.TypeMirror) PrefixExpression(com.google.devtools.j2objc.ast.PrefixExpression) SimpleName(com.google.devtools.j2objc.ast.SimpleName) ExpressionStatement(com.google.devtools.j2objc.ast.ExpressionStatement) PointerType(com.google.devtools.j2objc.types.PointerType) FieldAccess(com.google.devtools.j2objc.ast.FieldAccess)

Aggregations

PrefixExpression (com.google.devtools.j2objc.ast.PrefixExpression)18 PointerType (com.google.devtools.j2objc.types.PointerType)12 TypeMirror (javax.lang.model.type.TypeMirror)12 Expression (com.google.devtools.j2objc.ast.Expression)11 FunctionInvocation (com.google.devtools.j2objc.ast.FunctionInvocation)9 FunctionElement (com.google.devtools.j2objc.types.FunctionElement)9 InfixExpression (com.google.devtools.j2objc.ast.InfixExpression)8 CommaExpression (com.google.devtools.j2objc.ast.CommaExpression)7 PostfixExpression (com.google.devtools.j2objc.ast.PostfixExpression)6 VariableElement (javax.lang.model.element.VariableElement)6 ThisExpression (com.google.devtools.j2objc.ast.ThisExpression)5 ConditionalExpression (com.google.devtools.j2objc.ast.ConditionalExpression)4 ParenthesizedExpression (com.google.devtools.j2objc.ast.ParenthesizedExpression)4 SimpleName (com.google.devtools.j2objc.ast.SimpleName)4 GeneratedVariableElement (com.google.devtools.j2objc.types.GeneratedVariableElement)4 CastExpression (com.google.devtools.j2objc.ast.CastExpression)3 ExpressionStatement (com.google.devtools.j2objc.ast.ExpressionStatement)3 TreeNode (com.google.devtools.j2objc.ast.TreeNode)3 Assignment (com.google.devtools.j2objc.ast.Assignment)2 Block (com.google.devtools.j2objc.ast.Block)2