Package org.openquark.cal.internal.javamodel

Examples of org.openquark.cal.internal.javamodel.JavaMethod


            //    } else {
            //        return "(" + function.getQualifiedName();
            //    }
            //}

            JavaMethod method = new JavaMethod (Modifier.PUBLIC | Modifier.FINAL, JavaTypeName.STRING, "debug_getNodeStartText");

            JavaField resultField = new JavaField.Instance(null, "result", JavaTypeNames.RTVALUE);
            JavaExpression conditionExpr =
                new JavaExpression.OperatorExpression.Binary(
                    JavaOperator.NOT_EQUALS_OBJECT,
                    resultField,
                    LiteralWrapper.NULL)
                    ;

            JavaStatement thenStatement =
                new ReturnStatement(
                     new MethodInvocation.Instance(
                         null,
                         "debug_getNodeStartText",
                         JavaTypeNames.RTFULLAPP,
                         JavaExpression.EMPTY_JAVA_EXPRESSION_ARRAY,
                         JavaExpression.EMPTY_TYPE_NAME_ARRAY,
                         JavaTypeName.STRING,
                         MethodInvocation.InvocationType.SPECIAL));

            JavaStatement elseStatement =
                new ReturnStatement(
                    new JavaExpression.OperatorExpression.Binary(JavaOperator.STRING_CONCATENATION,
                        LiteralWrapper.make("("),
                        new MethodInvocation.Instance(
                            new JavaExpression.JavaField.Instance(null, "function", className),
                            "getQualifiedName", JavaTypeName.STRING, MethodInvocation.InvocationType.VIRTUAL)));

            JavaStatement.IfThenElseStatement ifThenElseStatement =
                new JavaStatement.IfThenElseStatement (conditionExpr, thenStatement, elseStatement);

            method.addStatement(ifThenElseStatement);

            return method;
        }
View Full Code Here


            //    } else {
            //       return ")";
            //    }
            //}

            JavaMethod method = new JavaMethod (Modifier.PUBLIC | Modifier.FINAL, JavaTypeName.STRING, "debug_getNodeEndText");

            JavaField resultField = new JavaField.Instance(null, "result", JavaTypeNames.RTVALUE);
            JavaExpression conditionExpr =
                new JavaExpression.OperatorExpression.Binary(
                    JavaOperator.NOT_EQUALS_OBJECT,
                    resultField,
                    LiteralWrapper.NULL)
                    ;

            JavaStatement thenStatement =
                new ReturnStatement(
                    new MethodInvocation.Instance(
                        null,
                        "debug_getNodeEndText",
                        JavaTypeNames.RTFULLAPP,
                        JavaExpression.EMPTY_JAVA_EXPRESSION_ARRAY,
                        JavaExpression.EMPTY_TYPE_NAME_ARRAY,
                        JavaTypeName.STRING,
                        MethodInvocation.InvocationType.SPECIAL));

            JavaStatement elseStatement =
                new ReturnStatement(LiteralWrapper.make(")"));

            JavaStatement.IfThenElseStatement ifThenElseStatement =
                new JavaStatement.IfThenElseStatement (conditionExpr, thenStatement, elseStatement);

            method.addStatement(ifThenElseStatement);

            return method;
        }
View Full Code Here

            //    }
            //
            //    throw new IndexOutOfBoundsException();
            //}

            JavaMethod method = new JavaMethod (Modifier.PUBLIC | Modifier.FINAL, JavaTypeName.STRING, "childN", JavaTypeName.INT, false, "debug_getChildPrefixText");

            MethodVariable childNVar = new JavaExpression.MethodVariable("childN");

            {
                //    if (result != null) {
                //        return super.debug_getChildPrefixText(childN);
                //    }

                JavaField resultField = new JavaField.Instance(null, "result", JavaTypeNames.RTVALUE);
                JavaExpression conditionExpr =
                    new OperatorExpression.Binary(
                        JavaOperator.NOT_EQUALS_OBJECT,
                        resultField,
                        LiteralWrapper.NULL)
                        ;

                JavaStatement thenStatement =
                    new ReturnStatement(
                        new MethodInvocation.Instance(
                            null,
                            "debug_getChildPrefixText",
                            JavaTypeNames.RTFULLAPP,
                            new JavaExpression[]{childNVar},
                            new JavaTypeName[]{JavaTypeName.INT},
                            JavaTypeName.STRING,
                            MethodInvocation.InvocationType.SPECIAL));

                JavaStatement.IfThenElseStatement ifThenStatement =
                    new JavaStatement.IfThenElseStatement (conditionExpr, thenStatement);

                method.addStatement(ifThenStatement);
            }

            {
                //    if (childN >= 0 && childN < 2) {
                //        return " ";
                //    }

                JavaExpression conditionExpr =
                    new OperatorExpression.Binary(
                        JavaOperator.CONDITIONAL_AND,
                        new OperatorExpression.Binary(
                            JavaOperator.GREATER_THAN_EQUALS_INT,
                            childNVar,
                            LiteralWrapper.make(Integer.valueOf(0))),
                        new OperatorExpression.Binary(
                            JavaOperator.LESS_THAN_INT,
                            childNVar,
                            LiteralWrapper.make(Integer.valueOf(memberFields.length))));

                JavaStatement thenStatement =
                    new ReturnStatement(LiteralWrapper.make(" "));

                JavaStatement.IfThenElseStatement ifThenStatement =
                    new JavaStatement.IfThenElseStatement (conditionExpr, thenStatement);

                method.addStatement(ifThenStatement);
            }

            method.addStatement(
                new JavaStatement.ThrowStatement(
                    new JavaExpression.ClassInstanceCreationExpression(JavaTypeName.INDEX_OUT_OF_BOUNDS_EXCEPTION)));

            return method;
        }
View Full Code Here

         *         return "ModuleName";
         *     }
         *
         */
        private final void createMethod_getModuleName () {
            JavaMethod jm = new JavaMethod (Modifier.PUBLIC | Modifier.FINAL, JavaTypeName.STRING, "getModuleName");
            javaClassRep.addMethod(jm);
            jm.addStatement(new ReturnStatement(LiteralWrapper.make(module.getName().toSourceText())));
        }
View Full Code Here

         *         return "unqualifiedName";
         *     }
         *
         */
        private final void createMethod_getUnqualifiedName () {
            JavaMethod jm =
                new JavaMethod (Modifier.PUBLIC | Modifier.FINAL,
                                JavaTypeName.STRING,
                                "getUnqualifiedName");
            javaClassRep.addMethod(jm);

            if (functions.getNFunctions() > 1) {
                SwitchStatement switchStatement =
                    new SwitchStatement(new JavaField.Instance(null, SCDefinitionBuilder.functionTagFieldName, JavaTypeName.INT));

                for (final MachineFunction mf : functions.getTopLevelCALFunctions()) {
                    switchStatement.addCase(
                            new SwitchStatement.IntCaseGroup(
                                    functions.getFunctionIndex(mf.getName()),
                                    new ReturnStatement(LiteralWrapper.make(mf.getName()))));
                }
                jm.addStatement(switchStatement);

                MethodInvocation mi =
                    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

         *    public final String getQualifiedName () {
         *        return "Module.unqualifiedName";
         *    }
         */
        private final void createMethod_getQualifiedName () {
            JavaMethod jm = new JavaMethod (Modifier.PUBLIC | Modifier.FINAL, JavaTypeName.STRING, "getQualifiedName");
            javaClassRep.addMethod(jm);

            if (functions.getNFunctions() > 1) {
                SwitchStatement switchStatement =
                    new SwitchStatement(new JavaField.Instance(null, SCDefinitionBuilder.functionTagFieldName, JavaTypeName.INT));

                for (final MachineFunction mf : functions.getTopLevelCALFunctions()) {
                    switchStatement.addCase(
                            new SwitchStatement.IntCaseGroup(
                                    functions.getFunctionIndex(mf.getName()),
                                    new ReturnStatement(LiteralWrapper.make(mf.getQualifiedName().getQualifiedName()))));
                }

                jm.addStatement(switchStatement);

                MethodInvocation mi =
                    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

            // Add the method to the class.
            JavaTypeName returnType = JavaTypeNames.RTVALUE;
            if (scheme == Scheme.UNBOX_INTERNAL_SCHEME) {
                returnType = SCJavaDefn.typeExprToTypeName(mf.getResultType());
            }
            JavaMethod javaMethod = new JavaMethod(modifiers, returnType, argNames, argTypes, null, methodName);

            // Add the throws declaration
            javaMethod.addThrows(JavaTypeName.CAL_EXECUTOR_EXCEPTION);

            // If we are doing a sanity check on let variable behaviour we
            // want to check/set the flag associated with this method.
            if (LECCMachineConfiguration.SANITY_CHECK_LET_VARS) {
                JavaField flag = new JavaField.Instance(null, CALToJavaNames.cleanSCName(javaDefn.getFunctionName()) + "_flag_", JavaTypeName.BOOLEAN);
                JavaExpression exception =
                    new JavaExpression.ClassInstanceCreationExpression(
                            JavaTypeName.NULL_POINTER_EXCEPTION,
                            LiteralWrapper.make("Double evaluation of " + javaDefn.getModuleName() + "." + CALToJavaNames.cleanSCName(javaDefn.getFunctionName()) + " in " + functions.getFunctionGroupName()),
                            JavaTypeName.STRING);

                JavaStatement.IfThenElseStatement check =
                    new JavaStatement.IfThenElseStatement(flag, new JavaStatement.ThrowStatement(exception));

                javaMethod.addStatement(check);

                JavaExpression assign = new JavaExpression.Assignment(flag, LiteralWrapper.make(Boolean.TRUE));
                javaMethod.addStatement(new ExpressionStatement(assign));
            }

            // Add the body
            javaMethod.addStatement(bodyBlock);

            return javaMethod;
        }
View Full Code Here

            argNames[arity] = SCJavaDefn.EXECUTION_CONTEXT_NAME;
            argTypes[arity] = JavaTypeNames.RTEXECUTION_CONTEXT;
            argValues[arity] = SCJavaDefn.EXECUTION_CONTEXT_VAR;

            String methodName = "f" + arity + (strict ? "S" : "L");
            JavaMethod javaMethod = new JavaMethod(modifiers, JavaTypeNames.RTVALUE, argNames, argTypes, null, methodName);
            javaClassRep.addMethod(javaMethod);

            // Add the throws declaration
            javaMethod.addThrows(JavaTypeName.CAL_EXECUTOR_EXCEPTION);

            // At this point we want to switch based on the scTag and dispatch to the appropriate
            // sc specific f method.
            SwitchStatement switchStatement =
                new SwitchStatement(new JavaField.Instance(null, SCDefinitionBuilder.functionTagFieldName, JavaTypeName.INT));

            for (int i = 0, n = javaDefns.size(); i < n; ++i) {
                SCJavaDefn javaDefn = javaDefns.get(i);
                if (javaDefn.getArity() != arity) {
                    continue;
                }

                if (functions.getMachineFunction(javaDefn.getFunctionName()) instanceof LECCLiftedLetVarMachineFunction) {
                    continue;
                }

                if (strict &&
                    javaDefn.hasStrictUnboxableArguments()) {
                    continue;
                }

                methodName = functions.getFNamePrefix(javaDefn.getFunctionName()) + "f" + arity + (strict ? "S" : "L");
                MethodInvocation mi =
                    new MethodInvocation.Instance(
                            null,
                            methodName,
                            argValues,
                            argTypes,
                            JavaTypeNames.RTVALUE,
                            MethodInvocation.InvocationType.VIRTUAL);

                switchStatement.addCase(
                    new SwitchStatement.IntCaseGroup(functions.getFunctionIndex(javaDefn.getFunctionName()), new ReturnStatement(mi)));
            }

            javaMethod.addStatement(switchStatement);

            // Handle the fallthrough.
            // If this is the lazy version of the 'f' method we want to defer to the
            // version in the superclass (i.e. RTValue).  This can occur when there
            // is a lazy application of a functional argument, or an oversaturation.
            if (strict) {
                MethodInvocation mi =
                    new MethodInvocation.Static (JavaTypeNames.RTVALUE,
                                                   "badValue",
                                                   LiteralWrapper.make("Bad scTag in 'f'."),
                                                   JavaTypeName.STRING,
                                                   JavaTypeNames.RTVALUE);
                javaMethod.addStatement(new ReturnStatement(mi));
            } else {
                MethodInvocation mi =
                    new MethodInvocation.Instance(
                            null,
                            "f" + arity + "L",
                            this.javaClassRep.getSuperclassName(),
                            argValues,
                            argTypes,
                            JavaTypeNames.RTVALUE,
                            MethodInvocation.InvocationType.SPECIAL);

                javaMethod.addStatement(new JavaStatement.LineComment("This is an oversaturated lazy application."));
                javaMethod.addStatement(new JavaStatement.LineComment("Usually this occurs when dealing with a lazy application of a function type argument."));
                javaMethod.addStatement(new JavaStatement.LineComment("Defer to the base implementation in the super class."));

                javaMethod.addStatement(new ReturnStatement(mi));
            }
        }
View Full Code Here

            final JavaTypeName argTypes[] = new JavaTypeName []{JavaTypeNames.RTRESULT_FUNCTION, JavaTypeNames.RTEXECUTION_CONTEXT};
            final boolean[] argFinal = new boolean[] {true, true};

            String methodName = "f";

            final JavaMethod javaMethod = new JavaMethod(modifiers, JavaTypeNames.RTVALUE, argNames, argTypes, argFinal, methodName);
            javaClassRep.addMethod(javaMethod);

            // Add the throws declaration
            javaMethod.addThrows(JavaTypeName.CAL_EXECUTOR_EXCEPTION);

            // At this point we want to switch based on the scTag and dispatch to the appropriate
            // sc specific f method.
            SwitchStatement switchStatement =
                new SwitchStatement(new JavaField.Instance(null, SCDefinitionBuilder.functionTagFieldName, JavaTypeName.INT));

            for (final MachineFunction mf : functions.getTopLevelCALFunctions()) {
                methodName = functions.getFNamePrefix(mf.getName()) + "f";
                MethodInvocation mi =
                    new MethodInvocation.Instance(
                            null,
                            methodName,
                            new JavaExpression[]{new MethodVariable(ROOT_NODE), SCJavaDefn.EXECUTION_CONTEXT_VAR},
                            argTypes,
                            JavaTypeNames.RTVALUE,
                            MethodInvocation.InvocationType.VIRTUAL);

                switchStatement.addCase(
                    new SwitchStatement.IntCaseGroup(
                            functions.getFunctionIndex(mf.getName()),
                            new ReturnStatement(mi)));
            }

            javaMethod.addStatement(switchStatement);

            // Handle the fallthrough.
            final MethodInvocation mi =
                new MethodInvocation.Static (JavaTypeNames.RTVALUE,
                                               "badValue",
                                               LiteralWrapper.make("Bad scTag in 'f'."),
                                               JavaTypeName.STRING,
                                               JavaTypeNames.RTVALUE);
            javaMethod.addStatement(new ReturnStatement(mi));
        }
View Full Code Here

            //generator does not support synchronization blocks, and so this is adequate.
            final int modifiers = Modifier.PUBLIC | Modifier.STATIC | Modifier.FINAL | Modifier.SYNCHRONIZED;
            JavaTypeName returnType = JavaTypeName.VOID;

            // Add the method to the class.
            JavaMethod javaMethod = new JavaMethod(modifiers, returnType, SCJavaDefn.EXECUTION_CONTEXT_NAME, JavaTypeNames.RTEXECUTION_CONTEXT, false, "resetCachedResults");
            javaClassRep.addMethod(javaMethod);

            for (final MachineFunction mf : functions.getTopLevelCALFunctions() ) {
                if (!mf.isCAF()) {
                    continue;
                }
                String mapPrefix = functions.getFNamePrefix(mf.getName());

                JavaField instanceField = new JavaField.Static(className, mapPrefix+"$instancesMap", JavaTypeName.MAP);
                MethodInvocation remove = new MethodInvocation.Instance (instanceField,
                                                             "remove",
                                                             new JavaExpression[]{SCJavaDefn.EXECUTION_CONTEXT_VAR},
                                                             new JavaTypeName[]{JavaTypeName.OBJECT},
                                                             JavaTypeName.OBJECT,
                                                             MethodInvocation.InvocationType.INTERFACE);
                javaMethod.addStatement (new ExpressionStatement(remove));
            }
        }
View Full Code Here

TOP

Related Classes of org.openquark.cal.internal.javamodel.JavaMethod

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.