Package org.openquark.cal.internal.javamodel.JavaStatement

Examples of org.openquark.cal.internal.javamodel.JavaStatement.ExpressionStatement


    /* (non-Javadoc)
     * @see org.openquark.cal.internal.runtime.lecc.JavaModelVisitor#visitExpressionStatement(org.openquark.cal.internal.runtime.lecc.JavaStatement.ExpressionStatement, java.lang.Object)
     */
    public JavaStatement visitExpressionStatement(
            ExpressionStatement expressionStatement, T arg) {
        return new ExpressionStatement (
                (JavaExpression)expressionStatement.getJavaExpression().accept(this, arg));
    }
View Full Code Here


            // ;
            sb.append(";" + EOL);


        } else if (statement instanceof ExpressionStatement) {
            ExpressionStatement expressionStatement = (ExpressionStatement)statement;
            String expressionSource = getSource(expressionStatement.getJavaExpression(), indent, 0, context);
            emitLine(sb, 0, expressionSource + ";");

        } else if (statement instanceof LineComment) {
            LineComment lineComment = (LineComment)statement;
            emitLine(sb, indent, "// " + lineComment.getCommentText());

        } else if (statement instanceof MultiLineComment) {
            boolean isJavaDoc = (statement instanceof JavaDocComment);
            MultiLineComment jdc = (MultiLineComment)statement;

            Iterator<String> it = jdc.getCommentLines().iterator();
            String firstLine = it.next();
            boolean nd = !firstLine.startsWith("/*");
            if (nd) {
                emitLine(sb, indent, isJavaDoc ? "/**" : "/*");
            }
            it = jdc.getCommentLines().iterator();
            while (it.hasNext()) {
                String line = it.next();
                if (nd) {
                    emitLine(sb, indent, " * " + line);
                } else {
                    emitLine(sb, indent, line);
                }
            }
            if (nd) {
                emitLine(sb, indent, " */");
            }

        } else if (statement instanceof ReturnStatement) {
            ReturnStatement returnStatement = (ReturnStatement)statement;
            if (returnStatement.getReturnExpression() == null) {
                emitLine(sb, indent, "return;");
            } else {
                emitLine(sb, indent, "return " + getSource(returnStatement.getReturnExpression(),indent, 7, context) ";");
            }
        } else if (statement instanceof IfThenElseStatement) {
            IfThenElseStatement iteStatement = (IfThenElseStatement)statement;

            emitLine(sb, indent, "if (" + getSource(iteStatement.getCondition(), indent, 4, context) + ") {");

            sb.append(getSource(iteStatement.getThenStatement(), context, indent + 1));

            // Emit the else clause only if there is one.
            StringBuilder elseClause = getSource(iteStatement.getElseStatement(), context, indent + 1);

            if (elseClause.length() > 0) {
                emitLine(sb, indent, "} else {");
                sb.append(elseClause);
            }

            emitLine(sb, indent, "}");

        } else if (statement instanceof SwitchStatement) {
            SwitchStatement switchStatement = (SwitchStatement)statement;

            JavaExpression condition = switchStatement.getCondition();
            List<IntCaseGroup> caseGroups = switchStatement.getCaseGroups();
            JavaStatement defaultStatementGroup = switchStatement.getDefaultStatement();

            // Sort cases by the first case label in each group.
            Collections.sort(caseGroups, new Comparator<IntCaseGroup>() {

                public int compare(IntCaseGroup o1, IntCaseGroup o2) {
                    int int1 = o1.getNthCaseLabel(0);
                    int int2 = o2.getNthCaseLabel(0);
                    if (int1 < int2) {
                        return -1;
                    }
                    if (int1 > int2) {
                        return 1;
                    }
                    return 0;
                }
            });

            emitIndent (sb, indent);
            int length = sb.length();

            sb.append("switch (");
            String conditionString = getSource(condition, 0, 0, context, true);
            conditionString = conditionString.replaceAll(EOL," ");
            sb.append(conditionString);
            if (sb.lastIndexOf(EOL, length) >= 0) {
                emitLine(sb);
                emitIndent(sb, indent);
                for (int i = 0; i < 7; ++i) {
                    sb.append(" ");
                }
                sb.append (") {");
                emitLine (sb);
            } else {
                sb.append(") {");
                emitLine(sb);
            }

            emitLine(sb);

            // case labels and their statement groups.
            for (final IntCaseGroup switchCaseGroup : caseGroups) {

                JavaStatement caseStatementGroup = switchCaseGroup.getStatement();

                int nCaseLabels = switchCaseGroup.getNCaseLabels();
                for (int i = 0; i < nCaseLabels - 1; i++) {
                    emitLine(sb, indent + 1, "case " + switchCaseGroup.getNthCaseLabel(i) + ":");
                }
                emitLine(sb, indent + 1, "case " + switchCaseGroup.getNthCaseLabel(nCaseLabels - 1) + ": {");

                sb.append(getSource(caseStatementGroup, context, indent + 2));
                emitLine(sb, indent + 1, "}");
                emitLine(sb);
            }

            // default label and statement group.
            if (defaultStatementGroup != null) {
                emitLine(sb, indent + 1, "default: {");
                sb.append(getSource(defaultStatementGroup, context, indent + 2));
                emitLine(sb, indent + 1, "}");
            }

            emitLine(sb, indent, "}");

        } else if (statement instanceof Block) {
            Block block = (Block)statement;

            int blockIndent = indent;
            List<JavaExceptionHandler> exceptionHandlers = block.getExceptionHandlers();
            if (!exceptionHandlers.isEmpty()) {
                emitLine(sb, indent, "try {");
                blockIndent++;
            }

            boolean doingLocalVarDeclarations = false;
            boolean wasLineComment = false;
            int nStatements = block.getNBlockStatements();
            for (int i = 0; i < nStatements; i++) {
                JavaStatement blockStatement = block.getNthBlockStatement(i);

                // Try to separate local var declarations from other types of block statements.
                boolean isLocalVarDeclaration = blockStatement instanceof LocalVariableDeclaration;
                if (!wasLineComment && isLocalVarDeclaration != doingLocalVarDeclarations && i > 0) {
                    sb.append(EOL);
                }
                doingLocalVarDeclarations = isLocalVarDeclaration;
                wasLineComment = blockStatement instanceof LineComment;

                // Now append the source.
                sb.append(getSource(blockStatement, context, blockIndent));
            }

            if (!exceptionHandlers.isEmpty()) {
                for (final JavaExceptionHandler eh : exceptionHandlers) {
                    emitLine(sb, indent, "} catch (" + fixupClassName(eh.getExceptionClass().getName()) + " " + eh.getExceptionVarName() + ") {");
                    sb.append(getSource(eh.getHandlerCode(), context, blockIndent));
                }
                emitLine(sb, indent, "}");

            }

        } else
        if (statement instanceof ThrowStatement) {
            ThrowStatement throwStatement = (ThrowStatement)statement;
            emitLine(sb, indent, "throw " + getSource(throwStatement.getThrownExpression(), indent, 6, context) + ";");
        } else
        if (statement instanceof UnconditionalLoop) {
            UnconditionalLoop whileStatement = (UnconditionalLoop)statement;
            emitLine (sb, indent, whileStatement.getLabel() + ": while (true) {");
            sb.append(getSource(whileStatement.getBody(), context, indent + 1));
            emitLine (sb, indent, "}");
        } else
        if (statement instanceof LabelledContinue) {
            LabelledContinue lc = (LabelledContinue)statement;
            emitLine (sb, indent, "continue " + lc.getLabel() + ";");
        } else
        if (statement instanceof SynchronizedMethodInvocation){
            // A method invocation wrapped in a synchronization block.
            SynchronizedMethodInvocation sof = (SynchronizedMethodInvocation)statement;

            // Start the synchronized block.
            emitLine (sb, indent, "synchronized (" + getSource(sof.getSynchronizingObject(), indent, 14, context) + ") {");

            // Add the method invocation.
            sb.append (getSource(new ExpressionStatement(sof.getMethodInvocation()), context, indent + 1));

            // Finish the block.
            emitLine (sb, indent, "}");
        } else
        if (statement instanceof AssertStatement) {
View Full Code Here

                    argTypes[i] = type;
                   
                    JavaExpression.JavaField.Instance field =
                        new JavaExpression.JavaField.Instance(null, fieldName, type);
                    JavaExpression assign = new Assignment (field, new MethodVariable(argName));
                    constructorBody.addStatement(new ExpressionStatement(assign));
                    i++;
                }
               
                String constructorName = className.getUnqualifiedJavaSourceName();
                int index = constructorName.lastIndexOf('.');
View Full Code Here

                   
                    JavaExpression assignOrdinal =
                        new JavaExpression.Assignment (
                                new JavaField.Instance(null, ORDINAL_FIELD_NAME, JavaTypeName.INT),
                                new MethodVariable("ordinal"));
                    constructor.addStatement(new ExpressionStatement(assignOrdinal));
                   
                    JavaExpression assignName =
                        new JavaExpression.Assignment (
                                new JavaField.Instance(null, DC_NAME_FIELD_NAME, JavaTypeName.STRING),
                                new MethodVariable("name"));
                    constructor.addStatement(new ExpressionStatement(assignName));
                   
                } else {
                    constructor = new JavaConstructor (Modifier.PUBLIC, className.getUnqualifiedJavaSourceName());
                }
               
View Full Code Here

                        MethodInvocation.InvocationType.VIRTUAL);

            JavaExpression newResult =
                new OperatorExpression.Binary (JavaOperator.ADD_INT, thirtySevenTimesResult, nameExpression);
            JavaExpression assignResult = new Assignment (result, newResult);
            thenBlock.addStatement(new ExpressionStatement (assignResult));
           
            // Now get the contribution from each dc field.
            for (FieldName fn : fieldNames) {
                String javaFieldName = typeConstructorInfo.fieldJavaNames.get (fn);
                JavaTypeName fieldType = fieldNameToType.get (fn);
                JavaField field = new JavaField.Instance(null, javaFieldName, fieldType);
               
                JavaExpression fieldExpression;
                if (fieldType instanceof JavaTypeName.Primitive) {
                    if (fieldType instanceof JavaTypeName.Primitive.Boolean) {
                        fieldExpression =
                            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);
                    }
                   
                } else {
                    // get objects hashcode
                    fieldExpression =
                        new MethodInvocation.Instance (field, "hashCode", JavaTypeName.INT, MethodInvocation.InvocationType.VIRTUAL);
                }

                newResult =
                    new OperatorExpression.Binary (JavaOperator.ADD_INT, thirtySevenTimesResult, fieldExpression);
               
                assignResult = new Assignment (result, newResult);
                thenBlock.addStatement(new ExpressionStatement (assignResult));
            }
           
            // Assign the hash code value to the hashCode field.
            JavaExpression assign = new JavaExpression.Assignment(hashCodeField, result);
            thenBlock.addStatement(new ExpressionStatement (assign));
           
            // Return the initialized hashCode field.
            hashCode.addStatement (new ReturnStatement (hashCodeField));
           
            return hashCode;
View Full Code Here

                    if (!typeConstructorInfo.commonFieldNames.contains(fn)) {
                        JavaExpression.JavaField.Instance field =
                            new JavaExpression.JavaField.Instance(null, fieldName, type);
                        JavaExpression assign = new Assignment (field, new MethodVariable(argName));
                        constructorBody.addStatement(new ExpressionStatement(assign));
                    }
                }
               
                String constructorName = dcClassTypeName.getUnqualifiedJavaSourceName();
                int index = constructorName.lastIndexOf('.');
View Full Code Here

                for (int i = 0, n = getArity(); i < n; ++i) {
                    if (!isArgStrict(i) || !SCJavaDefn.canTypeBeUnboxed(getArgumentType(i))) {
                        // Null out the argument value.
                        Assignment nullOut =
                            new Assignment((JavaExpression.Nameable)argValues[i], LiteralWrapper.NULL);
                        body.addStatement(new ExpressionStatement(nullOut));
                    }
                }

                MethodInvocation eval = createInvocation(result, SCJavaDefn.EVALUATE, SCJavaDefn.EXECUTION_CONTEXT_VAR);
                JavaExpression unbox = SCJavaDefn.unboxValue(SCJavaDefn.typeExprToTypeName(resultType), eval);
View Full Code Here

        JavaExpression javaExpression = null;
        Block context = new Block();

        if (argClass == void.class) {
            // hopefully definition will be a method invocation, rather than object creation or a field..
            context.addStatement(new ExpressionStatement(definition));

            if (LECCMachineConfiguration.TREAT_ENUMS_AS_INTS) {
                javaExpression = createMakeKernelIntInvocation(LiteralWrapper.make (Integer.valueOf(0)));
            } else {
                JavaTypeName calUnitClassName = JavaTypeName.make(CALToJavaNames.createFullPackageName(CALToJavaNames.createPackageNameFromModule(CAL_Prelude.MODULE_NAME)) + ".TYPE_Unit$CAL_Unit", false);
View Full Code Here

                // Assign back to the argument.
                // arg1 = arg1$;
                Assignment a = new Assignment(new JavaExpression.LocalName(getJavaArgumentName(i), argType),
                                              new JavaExpression.LocalName(getJavaArgumentName(i) + "$", argType));
                reAssignment.addStatement(new ExpressionStatement(a));
            } else
            if (needTemp[i] == 1){
                // Simply assign the new definition to the argument.
                // arg1 = ...;
                Assignment a = new Assignment(new JavaExpression.LocalName(getJavaArgumentName(i), argType),
                                                                           ecps[i].getJavaExpression());
                reAssignment.addStatement(new ExpressionStatement(a));
            }
        }

        newContext.addStatement (tempAssignment);
        newContext.addStatement (reAssignment);
View Full Code Here

            pair = generateUnboxedArgument(null, e, variableContext);
        }

        Block block = pair.getContextBlock();
        JavaExpression firstArg = pair.getJavaExpression();
        block.addStatement(new ExpressionStatement(forceSafeForStatement(firstArg)));

        return block;
    }
View Full Code Here

TOP

Related Classes of org.openquark.cal.internal.javamodel.JavaStatement.ExpressionStatement

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.