package org.overture.codegen.traces;
import org.apache.log4j.Logger;
import org.overture.ast.analysis.AnalysisException;
import org.overture.ast.definitions.traces.AApplyExpressionTraceCoreDefinition;
import org.overture.ast.definitions.traces.ABracketedExpressionTraceCoreDefinition;
import org.overture.ast.definitions.traces.AConcurrentExpressionTraceCoreDefinition;
import org.overture.ast.definitions.traces.ATraceDefinitionTerm;
import org.overture.ast.definitions.traces.PTraceDefinition;
import org.overture.ast.statements.PStm;
import org.overture.codegen.ir.IRInfo;
import org.overture.codegen.ir.SStmIR;
import org.overture.codegen.ir.STermIR;
import org.overture.codegen.ir.STraceCoreDeclIR;
import org.overture.codegen.ir.STraceDeclIR;
import org.overture.codegen.ir.traces.AApplyExpTraceCoreDeclIR;
import org.overture.codegen.ir.traces.ABracketedExpTraceCoreDeclIR;
import org.overture.codegen.ir.traces.AConcurrentExpTraceCoreDeclIR;
import org.overture.codegen.ir.traces.ATraceDeclTermIR;
import org.overture.codegen.visitor.AbstractVisitorIR;
public class TraceCoreDeclVisitorIR
extends AbstractVisitorIR<IRInfo, STraceCoreDeclIR>
{
private Logger log = Logger.getLogger(this.getClass().getName());
@Override
public STraceCoreDeclIR caseAApplyExpressionTraceCoreDefinition(
AApplyExpressionTraceCoreDefinition node, IRInfo question)
throws AnalysisException
{
PStm callStm = node.getCallStatement();
SStmIR callStmCg = callStm.apply(question.getStmVisitor(), question);
AApplyExpTraceCoreDeclIR applyTraceCoreDecl = new AApplyExpTraceCoreDeclIR();
applyTraceCoreDecl.setCallStm(callStmCg);
return applyTraceCoreDecl;
}
@Override
public STraceCoreDeclIR caseABracketedExpressionTraceCoreDefinition(
ABracketedExpressionTraceCoreDefinition node, IRInfo question)
throws AnalysisException
{
ABracketedExpTraceCoreDeclIR bracketTraceCoreDecl = new ABracketedExpTraceCoreDeclIR();
for (ATraceDefinitionTerm term : node.getTerms())
{
STermIR termCg = term.apply(question.getTermVisitor(), question);
if (termCg instanceof ATraceDeclTermIR)
{
bracketTraceCoreDecl.getTerms().add((ATraceDeclTermIR) termCg);
} else
{
log.error("Expected term to be of type ATraceDeclTermIR. Got: "
+ termCg);
}
}
return bracketTraceCoreDecl;
}
@Override
public STraceCoreDeclIR caseAConcurrentExpressionTraceCoreDefinition(
AConcurrentExpressionTraceCoreDefinition node, IRInfo question)
throws AnalysisException
{
AConcurrentExpTraceCoreDeclIR concTraceCoreDecl = new AConcurrentExpTraceCoreDeclIR();
for (PTraceDefinition def : node.getDefs())
{
STraceDeclIR traceDefCg = def.apply(question.getTraceDeclVisitor(), question);
concTraceCoreDecl.getDecls().add(traceDefCg);
}
return concTraceCoreDecl;
}
}