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

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


            System.arraycopy(extraArgs, 0, args, 0, extraArgs.length);
            args[args.length-1] = SCJavaDefn.EXECUTION_CONTEXT_VAR;
            JavaTypeName[] argTypes = new JavaTypeName[args.length];
            Arrays.fill(argTypes, JavaTypeNames.RTVALUE);
            argTypes[argTypes.length-1] = JavaTypeNames.RTEXECUTION_CONTEXT;
            MethodInvocation fL = new MethodInvocation.Instance(rootExpression, "f" + (diff) + "L", args, argTypes, JavaTypeNames.RTVALUE, MethodInvocation.InvocationType.VIRTUAL);
            MethodInvocation eval = SCJavaDefn.createInvocation(fL, SCJavaDefn.EVALUATE, EXECUTION_CONTEXT_VAR);
            return new ExpressionContextPair(eval, b);
        }

        // Now we want to build the application chain. (As efficiently as possible).
        int nApplicationArguments = extraArgs.length;
View Full Code Here


        argTypes[1] = JavaTypeName.STRING;
        args[2] = LiteralWrapper.make(currentModuleName.toSourceText());
        argTypes[2] = JavaTypeName.STRING;
        args[3] = LiteralWrapper.make(getFunctionName());
        argTypes[3] = JavaTypeName.STRING;
        MethodInvocation genMessage = new MethodInvocation.Static (JavaTypeNames.RTVALUE,
                                                            "generateForeignFunctionErrorMessage",
                                                            args,
                                                            argTypes,
                                                            argTypes[1]);
View Full Code Here

                String functionName = fgi.getFnNamePrefix(getFunctionName()) + "f";
                if (getArity() > 0) {
                    functionName = functionName + getArity() + "S";
                }

                MethodInvocation fNS =
                    new MethodInvocation.Instance(
                            null,
                            functionName,
                            argValues,
                            argTypes,
                            JavaTypeNames.RTVALUE,
                            MethodInvocation.InvocationType.VIRTUAL);

                LocalVariable result = new LocalVariable("$result", JavaTypeNames.RTVALUE);
                LocalVariableDeclaration resultDecl = new LocalVariableDeclaration(result, fNS);

                body.addStatement(resultDecl);

                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);

                body.addStatement(new ReturnStatement(unbox));

                unboxedBodyCode = body;
View Full Code Here

                ExpressionContextPair arg = genS_C(appl.getE2(), variableContext);

                Block newContextBlock = target.getContextBlock();
                newContextBlock.addStatement(arg.getContextBlock());

                MethodInvocation applyMI = createInvocation(target.getJavaExpression(), APPLY, arg.getJavaExpression());
                MethodInvocation evaluateMI = createInvocation(applyMI, EVALUATE, EXECUTION_CONTEXT_VAR);//, ExecutionContextClassName));

                ecp = new ExpressionContextPair(evaluateMI, newContextBlock);
            }

            return ecp;
View Full Code Here

                ExpressionContextPair arg = genS_C(appl.getE2(), variableContext);

                JavaStatement.Block returnBlock = target.getContextBlock();
                returnBlock.addStatement(arg.getContextBlock());

                MethodInvocation mi = createInvocation(target.getJavaExpression(), APPLY, arg.getJavaExpression());
                return generateReturn (new ExpressionContextPair(mi, returnBlock), variableContext);
            }
        }

        //e is a record update
View Full Code Here

            }

            if (doCast) {
                target = new JavaExpression.CastExpression(JavaTypeNames.RTCONS, target);
            }
            MethodInvocation mi =
                new MethodInvocation.Instance (target,
                        "getFieldByIndex",
                        new JavaExpression[]{LiteralWrapper.make(new Integer(dcSelection.getDataConstructor().getOrdinal())),
                                             LiteralWrapper.make(new Integer(dcSelection.getFieldIndex())),
                                             getErrorInfo (dcSelection.getErrorInfo())},
                        new JavaTypeName[]{JavaTypeName.INT,
                                           JavaTypeName.INT,
                                           JavaTypeName.ERRORINFO},
                        JavaTypeNames.RTVALUE,
                        MethodInvocation.InvocationType.VIRTUAL);
            return new ExpressionContextPair (createInvocation(mi, EVALUATE, EXECUTION_CONTEXT_VAR), ecp.getContextBlock());
        }

        if (scheme == Scheme.R_SCHEME) {
            ExpressionContextPair ecp = genS_E (dcSelection.getDCValueExpr(), variableContext);
            JavaExpression target = ecp.getJavaExpression();
            if (!(target instanceof JavaExpression.ClassInstanceCreationExpression)) {
                target = new JavaExpression.CastExpression(JavaTypeNames.RTCONS, target);
            }
            MethodInvocation mi =
                new MethodInvocation.Instance (target,
                        "getFieldByIndex",
                        new JavaExpression[]{LiteralWrapper.make(new Integer(dcSelection.getDataConstructor().getOrdinal())),
                                             LiteralWrapper.make(new Integer(dcSelection.getFieldIndex())),
                                             getErrorInfo (dcSelection.getErrorInfo())},
View Full Code Here

                if (hasTupleOrdinalPart) {
                    //in the non-extension case, create code for:
                    //RTRecordValue.makeTupleMixedRecord(new RTValue[] {ordinalValues1, ..., ordinalValuesN},
                    //    new String[] {textualFieldName1, ..., textualFieldNameM},
                    //    new RTValue[] {textualFieldValue1, ..., textualFieldValueM}
                    MethodInvocation mi;
                    if (baseRecordExpr != null) {
                        mi = new MethodInvocation.Instance(
                            invocationTarget,
                            makeRecordCreationName("makeTupleMixedRecord", baseRecordExpr),
                            new JavaExpression[] {
                                createOrdinalValuesArray(extensionFieldsData, recordExtensionBlock, variableContext),
                                createTextualNamesArray(extensionFieldsData.getTextualNames()),
                                createTextualValuesArray(extensionFieldsData, recordExtensionBlock, variableContext)},
                            new JavaTypeName[] {JavaTypeNames.RTVALUE_ARRAY, JavaTypeName.STRING_ARRAY, JavaTypeNames.RTVALUE_ARRAY},
                            JavaTypeNames.RTRECORD_VALUE,
                            InvocationType.VIRTUAL);
                    } else {
                        //static invocation
                        mi = new MethodInvocation.Static(
                            JavaTypeNames.RTRECORD_VALUE,
                            makeRecordCreationName("makeTupleMixedRecord", null),
                            new JavaExpression[] {
                                createOrdinalValuesArray(extensionFieldsData, recordExtensionBlock, variableContext),
                                createTextualNamesArray(extensionFieldsData.getTextualNames()),
                                createTextualValuesArray(extensionFieldsData, recordExtensionBlock, variableContext)},
                            new JavaTypeName[] {JavaTypeNames.RTVALUE_ARRAY, JavaTypeName.STRING_ARRAY, JavaTypeNames.RTVALUE_ARRAY},
                            JavaTypeNames.RTRECORD_VALUE);
                    }
                    return new ExpressionContextPair (mi, recordExtensionBlock);
                }

                MethodInvocation mi;
                if (baseRecordExpr != null) {
                    mi = new MethodInvocation.Instance(
                        invocationTarget,
                        makeRecordCreationName("makeMixedRecord", baseRecordExpr),
                        new JavaExpression[] {
                            createOrdinalNamesArray(extensionFieldsData.getOrdinalNames()),
                            createOrdinalValuesArray(extensionFieldsData, recordExtensionBlock, variableContext),
                            createTextualNamesArray(extensionFieldsData.getTextualNames()),
                            createTextualValuesArray(extensionFieldsData, recordExtensionBlock, variableContext)},
                        new JavaTypeName[] {JavaTypeName.INT_ARRAY, JavaTypeNames.RTVALUE_ARRAY, JavaTypeName.STRING_ARRAY, JavaTypeNames.RTVALUE_ARRAY},
                        JavaTypeNames.RTRECORD_VALUE,
                        InvocationType.VIRTUAL);
                } else {
                    mi = new MethodInvocation.Static(
                        JavaTypeNames.RTRECORD_VALUE,
                        makeRecordCreationName("makeMixedRecord", null),
                        new JavaExpression[] {
                            createOrdinalNamesArray(extensionFieldsData.getOrdinalNames()),
                            createOrdinalValuesArray(extensionFieldsData, recordExtensionBlock, variableContext),
                            createTextualNamesArray(extensionFieldsData.getTextualNames()),
                            createTextualValuesArray(extensionFieldsData, recordExtensionBlock, variableContext)},
                        new JavaTypeName[] {JavaTypeName.INT_ARRAY, JavaTypeNames.RTVALUE_ARRAY, JavaTypeName.STRING_ARRAY, JavaTypeNames.RTVALUE_ARRAY},
                        JavaTypeNames.RTRECORD_VALUE);
                }

                return new ExpressionContextPair (mi, recordExtensionBlock);
            }

            if (hasTupleOrdinalPart) {

                MethodInvocation mi;
                if (baseRecordExpr != null) {
                    mi = new MethodInvocation.Instance(
                        invocationTarget,
                        makeRecordCreationName("makeTupleRecord", baseRecordExpr),
                        new JavaExpression[] {createOrdinalValuesArray(extensionFieldsData, recordExtensionBlock, variableContext)},
                        new JavaTypeName[] {JavaTypeNames.RTVALUE_ARRAY},
                        JavaTypeNames.RTRECORD_VALUE,
                        InvocationType.VIRTUAL);
                } else {
                    mi = new MethodInvocation.Static(
                        JavaTypeNames.RTRECORD_VALUE,
                        makeRecordCreationName("makeTupleRecord", null),
                        new JavaExpression[] {createOrdinalValuesArray(extensionFieldsData, recordExtensionBlock, variableContext)},
                        new JavaTypeName[] {JavaTypeNames.RTVALUE_ARRAY},
                        JavaTypeNames.RTRECORD_VALUE);
                }

                return new ExpressionContextPair(mi, recordExtensionBlock);
            }

            MethodInvocation mi;
            if (baseRecordExpr != null) {
                mi = new MethodInvocation.Instance(
                    invocationTarget,
                    makeRecordCreationName("makeOrdinalRecord", baseRecordExpr),
                    new JavaExpression[] {
                        createOrdinalNamesArray(extensionFieldsData.getOrdinalNames()),
                        createOrdinalValuesArray(extensionFieldsData, recordExtensionBlock, variableContext)},
                    new JavaTypeName[] {JavaTypeName.INT_ARRAY, JavaTypeNames.RTVALUE_ARRAY},
                    JavaTypeNames.RTRECORD_VALUE,
                    InvocationType.VIRTUAL);
            } else {
                mi = new MethodInvocation.Static(
                    JavaTypeNames.RTRECORD_VALUE,
                    makeRecordCreationName("makeOrdinalRecord", null),
                    new JavaExpression[] {
                        createOrdinalNamesArray(extensionFieldsData.getOrdinalNames()),
                        createOrdinalValuesArray(extensionFieldsData, recordExtensionBlock, variableContext)},
                    new JavaTypeName[] {JavaTypeName.INT_ARRAY, JavaTypeNames.RTVALUE_ARRAY},
                    JavaTypeNames.RTRECORD_VALUE);
            }

            return new ExpressionContextPair (mi, recordExtensionBlock);
        }

        if (nTextualFields > 0) {

            //create code for:
            //RTRecordValue.makeTextualRecord(new String[] {textualFieldName1, ..., textualFieldNameN},
            //    new RTValue[] {valueExpr1, ...., valueExprN})
            //or
            //baseRecordExpr.makeTextualRecordExtension(new String[] {textualFieldName1, ..., textualFieldNameN},
            //    new RTValue[] {valueExpr1, ...., valueExprN})

            MethodInvocation mi;
            if (baseRecordExpr != null) {
                mi = new MethodInvocation.Instance(
                    invocationTarget,
                    makeRecordCreationName("makeTextualRecord", baseRecordExpr),
                    new JavaExpression[] {createTextualNamesArray(extensionFieldsData.getTextualNames()),
View Full Code Here

                    LocalVariableDeclaration letDecl = new LocalVariableDeclaration(letNameVariable, newIndirection);
                    declarationBlock.addStatement(letDecl);

                    // Emit let variable definition.
                    // letName.setResult(letDef);
                    MethodInvocation letInvocation = createInvocation(letNameVariable, SETRESULT, boxedVarDef);
                    definitionBlock.addStatement(new ExpressionStatement(letInvocation));
                } else
                if (info instanceof VarInfo.LetNonRec) {
                    // This variable is referenced multiple times.
                    // We need to declare/initialize a local java variable.
View Full Code Here

                    varInfo.updateStrictReference(boxedReference);
                } else {
                    // Since we know that the argument is strict we can call getValue on the lazy reference
                    // for the strict reference.
                    varInfo.updateLazyReference(straightReference);
                    MethodInvocation getValue = new MethodInvocation.Instance(straightReference, "getValue", JavaTypeNames.RTVALUE, MethodInvocation.InvocationType.VIRTUAL);
                    varInfo.updateStrictReference(getValue);
                }
            } else {
                // Without an arg type the lazy reference is just the arg and there is no unboxed ref or strict ref.
                varInfo.updateLazyReference(straightReference);
View Full Code Here

TOP

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

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.