Package org.openquark.cal.internal.javamodel.JavaExpression

Examples of org.openquark.cal.internal.javamodel.JavaExpression.CastExpression


    /* (non-Javadoc)
     * @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitCastExpression(org.openquark.cal.internal.runtime.lecc.JavaExpression.CastExpression, java.lang.Object)
     */
    public JavaExpression visitCastExpression(CastExpression cast, T arg) {
        return new CastExpression (
                cast.getCastType(),
                (JavaExpression)cast.getExpressionToCast().accept(this, arg));
    }
View Full Code Here


                Void arg) {

            // Check for redundant casts. i.e. (RTRecordValue)(RTRecordValue)expressionToCast

            if (cast.getExpressionToCast() instanceof CastExpression) {
                CastExpression innerCast = (CastExpression)cast.getExpressionToCast();
                if (cast.getCastType().equals(innerCast.getCastType())) {
                    return super.visitCastExpression(cast, arg);
                }
            }

            ExpressionTextNode node =
View Full Code Here

                            new OperatorExpression.Ternary (field, zero, one);
                    } else if (fieldType instanceof JavaTypeName.Primitive.Byte ||
                            fieldType instanceof JavaTypeName.Primitive.Char ||
                            fieldType instanceof JavaTypeName.Primitive.Short) {
                        fieldExpression =
                            new CastExpression(JavaTypeName.INT, field);
                    }else if (fieldType instanceof JavaTypeName.Primitive.Double) {
                        // long f = Double.doubleToLongBits(f);
                        // result = (int) (f ^ (f >>> 32));
                        JavaExpression.LocalVariable f =
                            new LocalVariable ("f", JavaTypeName.LONG);
                        JavaExpression initializeF =
                            new MethodInvocation.Static (
                                    JavaTypeName.DOUBLE_OBJECT,
                                    "doubleToLongBits",
                                    field,
                                    JavaTypeName.DOUBLE,
                                    JavaTypeName.LONG);
                        LocalVariableDeclaration fVarDecl =
                            new LocalVariableDeclaration(f, initializeF);
                        thenBlock.addStatement(fVarDecl);
                       
                        fieldExpression =
                            new OperatorExpression.Binary (
                                JavaOperator.SHIFTR_UNSIGNED_LONG,
                                f,
                                LiteralWrapper.make(new Integer (32)));
                        fieldExpression =
                            new OperatorExpression.Binary (
                                    JavaOperator.BITWISE_XOR_LONG,
                                    f,
                                    fieldExpression);
                        fieldExpression =
                            new CastExpression (JavaTypeName.INT, fieldExpression);
                       
                    } else if (fieldType instanceof JavaTypeName.Primitive.Float) {
                        fieldExpression =
                            new MethodInvocation.Static (
                                    JavaTypeName.FLOAT_OBJECT,
                                    "floatToIntBits",
                                    field,
                                    JavaTypeName.FLOAT,
                                    JavaTypeName.INT);
                    } else if (fieldType instanceof JavaTypeName.Primitive.Int) {
                        fieldExpression = field;
                    } else if (fieldType instanceof JavaTypeName.Primitive.Long) {
                        fieldExpression =
                            new OperatorExpression.Binary (
                                JavaOperator.SHIFTR_UNSIGNED_LONG,
                                field,
                                LiteralWrapper.make(new Integer (32)));
                        fieldExpression =
                            new OperatorExpression.Binary (
                                    JavaOperator.BITWISE_XOR_LONG,
                                    field,
                                    fieldExpression);
                        fieldExpression =
                            new CastExpression (JavaTypeName.INT, fieldExpression);
                    } else {
                        fieldExpression =
                            new MethodInvocation.Instance (field, "hashCode", JavaTypeName.INT, MethodInvocation.InvocationType.VIRTUAL);
                    }
                   
View Full Code Here

                        "badValue_Object",
                        new JavaExpression[]{LiteralWrapper.NULL, LiteralWrapper.make("Invalid DC ordinal in getDCNameByOrdinal() for " + className.toString())},
                        new JavaTypeName[]{JavaTypeName.ERRORINFO, JavaTypeName.STRING},
                        JavaTypeName.OBJECT);

            javaMethod.addStatement (new ReturnStatement(new CastExpression(JavaTypeName.STRING, badValue)));
        }
View Full Code Here

                } else {
                    // This is a valid ordinal for the data type but does not correspond to a zero arity DC.
                    LiteralWrapper badValueMessageWrapper = LiteralWrapper.make ("Attempt to treat " + dc.getName() + " as a zero arity data constructor.");
                    Block block = new Block();
                    block.addStatement(new JavaStatement.LineComment(dc.getName().getQualifiedName()));
                    JavaExpression castExpression = new CastExpression(tagDCTypeName, new MethodInvocation.Static(JavaTypeNames.RTVALUE, "badValue", badValueMessageWrapper, JavaTypeName.STRING, JavaTypeNames.RTVALUE));
                    block.addStatement(new ReturnStatement(castExpression));
                    ordSwitch.addCase(new SwitchStatement.IntCaseGroup (dc.getOrdinal(), block));
                }
            }

            // Add a default case in the switch to throw an error if an invalid ordinal value is used.
            Block defaultBlock = new Block();
            LocalVariable bf = new LocalVariable("bf", JavaTypeName.STRING_BUILDER);
            defaultBlock.addStatement(new LocalVariableDeclaration (bf, new ClassInstanceCreationExpression(JavaTypeName.STRING_BUILDER)));
            LiteralWrapper badValueMessageWrapper1 = LiteralWrapper.make("Invalid ordinal value of ");
            JavaExpression message = new MethodInvocation.Instance(bf, "append", badValueMessageWrapper1, JavaTypeName.STRING, JavaTypeName.STRING_BUILDER, MethodInvocation.InvocationType.VIRTUAL);
            message = new  MethodInvocation.Instance(message, "append", METHODVAR_ORDINAL, JavaTypeName.INT, JavaTypeName.STRING_BUILDER, MethodInvocation.InvocationType.VIRTUAL);
            LiteralWrapper badValueMessageWrapper2 = LiteralWrapper.make(" in " + className.toString() + ".getTagDC().");
            message = new MethodInvocation.Instance(message, "append", badValueMessageWrapper2, JavaTypeName.STRING, JavaTypeName.STRING_BUILDER, MethodInvocation.InvocationType.VIRTUAL);
            defaultBlock.addStatement (new ExpressionStatement(message));
            message = new MethodInvocation.Instance(bf, "toString", JavaTypeName.STRING, MethodInvocation.InvocationType.VIRTUAL);
            defaultBlock.addStatement (new ReturnStatement(new CastExpression(tagDCTypeName, new MethodInvocation.Static(JavaTypeNames.RTVALUE, "badValue", message, JavaTypeName.STRING, JavaTypeNames.RTVALUE))));
            ordSwitch.addCase(new SwitchStatement.DefaultCase (defaultBlock));

            // Add the switch statement to the method.
            javaMethod.addStatement(ordSwitch);
        }
View Full Code Here

                    new MethodInvocation.Static (JavaTypeNames.RTVALUE,
                                                   "badValue_Object",
                                                   new JavaExpression[]{LiteralWrapper.NULL, LiteralWrapper.make("Bad index in getUnQualifiedName()")},
                                                   new JavaTypeName[]{JavaTypeName.ERRORINFO, JavaTypeName.STRING},
                                                   JavaTypeName.OBJECT);
                jm.addStatement(new ReturnStatement(new CastExpression(JavaTypeName.STRING, mi)));
            } else {
                for (final MachineFunction mf : functions.getTopLevelCALFunctions()) {
                    jm.addStatement(new ReturnStatement(LiteralWrapper.make(mf.getName())));
                }
View Full Code Here

                    new MethodInvocation.Static (JavaTypeNames.RTVALUE,
                                                   "badValue_Object",
                                                   new JavaExpression[]{LiteralWrapper.NULL, LiteralWrapper.make("Bad index in getQualifiedName()")},
                                                   new JavaTypeName[]{JavaTypeName.ERRORINFO, JavaTypeName.STRING},
                                                   JavaTypeName.OBJECT);
                jm.addStatement(new ReturnStatement(new CastExpression(JavaTypeName.STRING, mi)));
            } else {
                for (final MachineFunction mf : functions.getTopLevelCALFunctions()) {
                    jm.addStatement( new ReturnStatement(LiteralWrapper.make(mf.getQualifiedName().getQualifiedName())));
                }
            }
View Full Code Here

                                                   "badValue",
                                                   new JavaExpression[]{LiteralWrapper.NULL, LiteralWrapper.make("Illegal fall through to default case in " + functions.getFunctionGroupQualifiedName() + ".make().")},
                                                   new JavaTypeName[]{JavaTypeName.ERRORINFO, JavaTypeName.STRING},
                                                   JavaTypeNames.RTVALUE);
                switchStatement.addCase(
                        new SwitchStatement.DefaultCase(new ReturnStatement(new CastExpression(JavaTypeNames.RTFUNCTION, mi))));



                javaMethod.addStatement(switchStatement);
            }
View Full Code Here

                    // If we're creating an instance of CAL_Opaque we're dealing with an
                    // Object.  We just do a cast and return.
                    if (staticClass.equals(JavaTypeNames.RTDATA_OPAQUE) &&
                        !(resultTypeName instanceof JavaTypeName.Primitive)) {
                        return new CastExpression(resultTypeName, (JavaExpression)mis.getArg(0).accept(this, null));
                    }

                }
            }
View Full Code Here

                return new OperatorExpression.Binary(JavaOperator.REM_LONG, args);                           

            case PrimOps.PRIMOP_FIELD_NAMES:
            {               
                //((RTRecordValue)args[0]).fieldNames()
                return new MethodInvocation.Instance(new CastExpression(JavaTypeNames.RTRECORD_VALUE, args[0]),
                    "fieldNames", JavaTypeName.LIST, InvocationType.VIRTUAL);                             
            }
           
            case PrimOps.PRIMOP_FIELD_VALUES:
            {               
                //((RTRecordValue)args[0]).fieldValues()
                return new MethodInvocation.Instance(new CastExpression(JavaTypeNames.RTRECORD_VALUE, args[0]),
                    "fieldValues", JavaTypeName.LIST, InvocationType.VIRTUAL);                             
            }           
           
            case PrimOps.PRIMOP_HAS_FIELD:
           
                //((RTRecordValue)args[0]).hasField(args[1])           
                return new MethodInvocation.Instance(new CastExpression(JavaTypeNames.RTRECORD_VALUE, args[0]), "hasField",
                    args[1], JavaTypeName.STRING, JavaTypeName.BOOLEAN, InvocationType.VIRTUAL);
            }
           
            case PrimOps.PRIMOP_RECORD_FIELD_INDEX:
           
                //((RTRecordValue)args[0]).indexOfField(args[1])           
                return new MethodInvocation.Instance(
                        new CastExpression(JavaTypeNames.RTRECORD_VALUE, args[0]),
                        "indexOfField", args[1], JavaTypeName.STRING, JavaTypeName.INT, InvocationType.VIRTUAL);
            }
           
            case PrimOps.PRIMOP_CAL_VALUE_TO_OBJECT:
            {
View Full Code Here

TOP

Related Classes of org.openquark.cal.internal.javamodel.JavaExpression.CastExpression

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.