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(")");
}
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("}");
}
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(" }");
}
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);
}
}
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));
}
}
}
Aggregations