use of org.abs_models.frontend.ast.VarUse in project abstools by abstools.
the class ASTBasedABSTestRunnerGenerator method generateAsyncTestCallAST.
private void generateAsyncTestCallAST(Block block, String objectRef, MethodSig method) {
List<PureExp> args = new List<>();
if (method.getNumParam() > 0) {
args.add(new VarUse(dataValue));
}
block.addStmtNoTransform(getVAssign(fut, new AsyncCall(new VarUse(objectRef), method.getName(), args)));
block.addStmtNoTransform(getVAssign(futs, getFnApp("Insert", new VarUse(fut), new VarUse(futs))));
}
use of org.abs_models.frontend.ast.VarUse in project abstools by abstools.
the class ASTBasedABSTestRunnerGenerator method generateTestClassImplAST.
private Set<TypeUse> generateTestClassImplAST(InterfaceDecl inf, ClassDecl clazz, MainBlock block) {
Set<TypeUse> accesses = new HashSet<>();
TypeUse dataType = generateDataPointsAST(inf, clazz, accesses, block);
String namePrefix = clazz.getName();
int instance = 0;
for (MethodSig method : getTestMethods(inf)) {
Block thisBlock = block;
WhileStmt ws = null;
if (method.getNumParam() > 0) {
if (dataType == null) {
throw new IllegalStateException("Test method requires arguments but test class defines no data point");
}
/*
* a while loop over all data points
*/
String dataPointSet = dataPointSetName(clazz);
ws = new WhileStmt();
ws.setCondition(getFnApp("hasNext", new VarUse(dataPointSet)));
Block body = new Block();
thisBlock = body;
DataTypeUse u = getType("Pair", getType("Set", (TypeUse) dataType.copy()), (TypeUse) dataType.copy());
thisBlock.addStmtNoTransform(getVarDecl("nt", u, getFnApp("next", new VarUse(dataPointSet))));
thisBlock.addStmtNoTransform(getVarDecl(dataValue, (TypeUse) dataType.copy(), getFnApp("snd", new VarUse("nt"))));
thisBlock.addStmtNoTransform(getVAssign(dataPointSet, getFnApp("fst", new VarUse("nt"))));
ws.setBody(body);
}
/*
* Add those methods that are not ignored
*/
if (!isIgnored(clazz, method)) {
String objectRef = uncap(namePrefix) + instance;
thisBlock.addStmtNoTransform(newObj(inf, clazz, objectRef, false));
generateAsyncTestCallAST(thisBlock, objectRef, method);
}
if (ws != null) {
block.addStmtNoTransform(ws);
}
instance++;
}
return accesses;
}
use of org.abs_models.frontend.ast.VarUse in project abstools by abstools.
the class JavaGeneratorHelper method isLocalVarUse.
/**
* checks if astNode is a use of a local variable or parameter
*/
private static boolean isLocalVarUse(ASTNode<?> astNode) {
if (astNode instanceof VarUse) {
VarUse v = (VarUse) astNode;
VarOrFieldDecl decl = v.getDecl();
if (decl instanceof VarDecl || decl instanceof ParamDecl) {
return !(decl.getParent() instanceof LetExp);
}
}
return false;
}
use of org.abs_models.frontend.ast.VarUse in project abstools by abstools.
the class JavaGeneratorHelper method replaceLocalVariables.
/**
* replace all uses of local variables and parameters by a use of a newly introduced
* temporary final local variable
*/
private static void replaceLocalVariables(ASTNode<?> astNode, PrintStream beforeAwaitStream) {
if (isLocalVarUse(astNode)) {
VarUse v = (VarUse) astNode;
replaceVarUse(beforeAwaitStream, v, (TypedVarOrFieldDecl) v.getDecl());
} else {
// process children:
for (int i = 0; i < astNode.getNumChild(); i++) {
ASTNode<?> child = astNode.getChild(i);
replaceLocalVariables(child, beforeAwaitStream);
}
}
}
use of org.abs_models.frontend.ast.VarUse in project abstools by abstools.
the class VarResolutionTest method testNestedLetExp4.
@Test
public void testNestedLetExp4() {
Model m = assertParse(" def Bool f(Bool b) = let (Bool x) = b in let (Bool x) = b in x;");
LetExp e = (LetExp) getFirstFunctionExpr(m);
LetExp e2 = (LetExp) e.getExp();
VarOrFieldDecl decl = e2.getVar();
VarUse u = (VarUse) e2.getExp();
assertEquals(decl, u.getDecl());
}
Aggregations