package org.scribble.del.local;
import org.scribble.ast.AstFactoryImpl;
import org.scribble.ast.ScribNode;
import org.scribble.ast.local.LInteractionSeq;
import org.scribble.ast.local.LProtocolBlock;
import org.scribble.del.ProtocolBlockDel;
import org.scribble.del.ScribDelBase;
import org.scribble.main.ScribbleException;
import org.scribble.visit.ProtocolDefInliner;
import org.scribble.visit.env.InlineProtocolEnv;
import org.scribble.visit.wf.ReachabilityChecker;
public class LProtocolBlockDel extends ProtocolBlockDel
{
@Override
public ScribNode leaveProtocolInlining(ScribNode parent, ScribNode child, ProtocolDefInliner inl, ScribNode visited) throws ScribbleException
{
LProtocolBlock lpb = (LProtocolBlock) visited;
LInteractionSeq seq = (LInteractionSeq) ((InlineProtocolEnv) lpb.seq.del().env()).getTranslation();
LProtocolBlock inlined = AstFactoryImpl.FACTORY.LProtocolBlock(lpb.getSource(), seq);
inl.pushEnv(inl.popEnv().setTranslation(inlined));
return (LProtocolBlock) ScribDelBase.popAndSetVisitorEnv(this, inl, lpb);
}
@Override
public void enterReachabilityCheck(ScribNode parent, ScribNode child, ReachabilityChecker checker) throws ScribbleException
{
ScribDelBase.pushVisitorEnv(this, checker);
}
@Override
public LProtocolBlock leaveReachabilityCheck(ScribNode parent, ScribNode child, ReachabilityChecker checker, ScribNode visited) throws ScribbleException
{
return (LProtocolBlock) ScribDelBase.popAndSetVisitorEnv(this, checker, visited); // records the current checker Env to the current del; also pops and merges that env into the parent env
}
}