Search in sources :

Example 11 with Type

use of org.abs_models.frontend.typechecker.Type in project abstools by abstools.

the class JavaGeneratorHelper method generateAsyncCall.

private static void generateAsyncCall(PrintStream stream, final String calleeString, final PureExp callee, final Type calleeType, final List<PureExp> args, final List<ParamDecl> params, final MethodSig sig, final List<Annotation> annotations) {
    final java.util.List<Type> paramTypes = sig.getTypes();
    stream.print(ABSRuntime.class.getName() + ".getCurrentRuntime().asyncCall(");
    String targetType = JavaBackend.getQualifiedString(calleeType);
    stream.println("new " + AbstractAsyncCallRT.class.getName() + "<" + targetType + ">(");
    stream.println("this,");
    if (callee instanceof ThisExp) {
        if (calleeString != null)
            stream.print(calleeString);
        else
            callee.generateJava(stream);
    } else {
        stream.print(ABSRuntime.class.getName() + ".checkForNull(");
        if (calleeString != null)
            stream.print(calleeString);
        else
            callee.generateJava(stream);
        stream.print(")");
    }
    stream.println(",");
    PureExp rtAttr;
    rtAttr = AnnotationHelper.getAnnotationValueFromSimpleName(annotations, "Deadline");
    if (rtAttr == null)
        stream.print("new ABS.StdLib.Duration_InfDuration()");
    else
        rtAttr.generateJava(stream);
    stream.println(",");
    rtAttr = AnnotationHelper.getAnnotationValueFromSimpleName(annotations, "Cost");
    if (rtAttr == null)
        stream.print("new ABS.StdLib.Duration_InfDuration()");
    else
        rtAttr.generateJava(stream);
    stream.println(",");
    rtAttr = AnnotationHelper.getAnnotationValueFromSimpleName(annotations, "Critical");
    if (rtAttr == null)
        stream.print(ABSBool.class.getName() + ".FALSE");
    else
        rtAttr.generateJava(stream);
    stream.println(") {");
    int i = 0;
    for (Type t : paramTypes) {
        stream.println(JavaBackend.getQualifiedString(t) + " arg" + i + ";");
        i++;
    }
    generateTaskGetArgsMethod(stream, paramTypes.size());
    generateTaskInitMethod(stream, paramTypes);
    stream.println("public java.lang.String methodName() {");
    stream.println("return \"" + sig.getName() + "\";");
    stream.println("}");
    stream.println("public Object execute() {");
    stream.print("return target." + JavaBackend.getMethodName(sig.getName()) + "(");
    for (i = 0; i < paramTypes.size(); i++) {
        if (i > 0)
            stream.print(",");
        stream.println("arg" + i);
        if (paramTypes.get(i).isIntType())
            stream.print(".truncate()");
    }
    stream.println(");");
    stream.println("}");
    stream.print("}.init");
    if (args != null)
        JavaGeneratorHelper.generateArgs(stream, args, paramTypes);
    else
        JavaGeneratorHelper.generateParamArgs(stream, params);
    stream.println(")");
}
Also used : Type(org.abs_models.frontend.typechecker.Type) ABSBool(org.abs_models.backend.java.lib.types.ABSBool) PureExp(org.abs_models.frontend.ast.PureExp) ThisExp(org.abs_models.frontend.ast.ThisExp)

Example 12 with Type

use of org.abs_models.frontend.typechecker.Type in project abstools by abstools.

the class JavaGeneratorHelper method generateTaskInitMethod.

private static void generateTaskInitMethod(PrintStream stream, final java.util.List<Type> paramTypes) {
    int i;
    stream.print("public " + org.abs_models.backend.java.lib.runtime.AsyncCall.class.getName() + "<?> init(");
    i = 0;
    for (Type t : paramTypes) {
        if (i > 0)
            stream.print(",");
        stream.print(JavaBackend.getQualifiedString(t) + " _arg" + i);
        i++;
    }
    stream.println(") {");
    for (i = 0; i < paramTypes.size(); i++) {
        stream.println("arg" + i + " = _arg" + i + ";");
    }
    stream.println("return this;");
    stream.println("}");
}
Also used : Type(org.abs_models.frontend.typechecker.Type) AwaitAsyncCall(org.abs_models.frontend.ast.AwaitAsyncCall) AsyncCall(org.abs_models.frontend.ast.AsyncCall)

Example 13 with Type

use of org.abs_models.frontend.typechecker.Type in project abstools by abstools.

the class ClassGenerator method generateParameterDescription.

private void generateParameterDescription(Type paramtype) {
    ecs.print("<<\"" + paramtype.getQualifiedName() + "\">>,");
    ecs.print(" {");
    if (paramtype.isDataType()) {
        DataTypeType paramdatatype = (DataTypeType) paramtype;
        if (paramdatatype.hasTypeArgs()) {
            String interp = "";
            for (Type typearg : paramdatatype.getTypeArgs()) {
                ecs.print(interp);
                interp = ", ";
                generateParameterDescription(typearg);
            }
        }
    }
    ecs.print(" }");
}
Also used : DataTypeType(org.abs_models.frontend.typechecker.DataTypeType) Type(org.abs_models.frontend.typechecker.Type) DataTypeType(org.abs_models.frontend.typechecker.DataTypeType)

Example 14 with Type

use of org.abs_models.frontend.typechecker.Type in project abstools by abstools.

the class TypeExtensionHelper method checkOverride.

@Override
public void checkOverride(MethodSig impl, MethodSig overriden) {
    for (TypeSystemExtension tse : obs) {
        tse.checkOverride(impl, overriden);
    }
    assert overriden.getParent().getParent() instanceof InterfaceDecl;
    Type expectedReturnType = overriden.getType();
    Type actualReturnType = impl.getType();
    checkAssignable(actualReturnType, expectedReturnType, impl);
    for (int i = 0; i < overriden.getNumParam(); i++) {
        Type texpected = overriden.getParam(i).getType();
        Type tactual = impl.getParam(i).getType();
        checkAssignable(texpected, tactual, impl);
    }
}
Also used : BoundedType(org.abs_models.frontend.typechecker.BoundedType) DataTypeType(org.abs_models.frontend.typechecker.DataTypeType) Type(org.abs_models.frontend.typechecker.Type)

Example 15 with Type

use of org.abs_models.frontend.typechecker.Type in project abstools by abstools.

the class TypeExtensionHelper method checkDataConstructorExp.

public void checkDataConstructorExp(DataConstructorExp e) {
    DataConstructor decl = (DataConstructor) e.getDecl();
    if (decl.getDataTypeDecl() instanceof ParametricDataTypeDecl) {
        HashMap<TypeParameter, Type> map = new HashMap<>();
        for (int i = 0; i < decl.getNumConstructorArg(); i++) {
            Type rht = e.getParam(i).getType();
            Type arg = decl.getConstructorArg(i).getType();
            checkTypeParameter(map, rht, arg, e.getParam(i));
        }
    }
}
Also used : TypeParameter(org.abs_models.frontend.typechecker.TypeParameter) BoundedType(org.abs_models.frontend.typechecker.BoundedType) DataTypeType(org.abs_models.frontend.typechecker.DataTypeType) Type(org.abs_models.frontend.typechecker.Type) HashMap(java.util.HashMap)

Aggregations

Type (org.abs_models.frontend.typechecker.Type)21 DataTypeType (org.abs_models.frontend.typechecker.DataTypeType)11 BoundedType (org.abs_models.frontend.typechecker.BoundedType)7 TypeParameter (org.abs_models.frontend.typechecker.TypeParameter)4 PureExp (org.abs_models.frontend.ast.PureExp)3 HashMap (java.util.HashMap)2 HashSet (java.util.HashSet)2 FrontendTest (org.abs_models.frontend.FrontendTest)2 TypeError (org.abs_models.frontend.analyser.TypeError)2 ClassDecl (org.abs_models.frontend.ast.ClassDecl)2 MethodSig (org.abs_models.frontend.ast.MethodSig)2 Model (org.abs_models.frontend.ast.Model)2 Stmt (org.abs_models.frontend.ast.Stmt)2 VarDeclStmt (org.abs_models.frontend.ast.VarDeclStmt)2 InterfaceType (org.abs_models.frontend.typechecker.InterfaceType)2 UnionType (org.abs_models.frontend.typechecker.UnionType)2 Test (org.junit.Test)2 Constraint (com.gzoumix.semisolver.constraint.Constraint)1 LinkedList (java.util.LinkedList)1 ABSBool (org.abs_models.backend.java.lib.types.ABSBool)1