package org.overture.pog.contexts;
import java.util.LinkedList;
import java.util.List;
import org.overture.ast.analysis.AnalysisException;
import org.overture.ast.definitions.AInstanceVariableDefinition;
import org.overture.ast.expressions.AVariableExp;
import org.overture.ast.expressions.PExp;
import org.overture.ast.intf.lex.ILexNameToken;
import org.overture.ast.lex.LexNameToken;
import org.overture.pog.pub.IPogAssistantFactory;
import org.overture.pog.utility.Substitution;
public class OpBodyEndContext extends StatefulContext
{
List<Substitution> subs;
IPogAssistantFactory af;
public OpBodyEndContext(List<AInstanceVariableDefinition> state,
IPogAssistantFactory af)
{
this.af = af;
subs = new LinkedList<Substitution>();
for (AInstanceVariableDefinition i : state)
{
AVariableExp var_exp = new AVariableExp();
ILexNameToken it = i.getName();
String safename = it.getName() + "$";
ILexNameToken safeToken = new LexNameToken(it.getModule(), safename, it.getLocation().clone());
var_exp.setName(safeToken);
var_exp.setType(i.getType().clone());
var_exp.setOriginal(i.getName().getName().toString());
subs.add(new Substitution(i.getOldname(), var_exp));
}
}
@Override
public String getContext()
{
// not used anymore. Will go out soon
return null;
}
@Override
public PExp getContextNode(PExp stitch)
{
for (Substitution sub : subs)
{
try
{
stitch = stitch.clone().apply(af.getVarSubVisitor(), sub);
} catch (AnalysisException e)
{
e.printStackTrace();
}
}
return stitch;
}
}