package org.scribble.del.global; import org.scribble.ast.AstFactoryImpl; import org.scribble.ast.ScribNode; import org.scribble.ast.global.GContinue; import org.scribble.ast.global.GNode; import org.scribble.ast.local.LContinue; import org.scribble.ast.name.simple.RecVarNode; import org.scribble.del.ContinueDel; import org.scribble.main.ScribbleException; import org.scribble.sesstype.name.Role; import org.scribble.visit.ProtocolDefInliner; import org.scribble.visit.context.Projector; import org.scribble.visit.env.InlineProtocolEnv; public class GContinueDel extends ContinueDel implements GSimpleInteractionNodeDel { @Override public GContinue leaveProtocolInlining(ScribNode parent, ScribNode child, ProtocolDefInliner inl, ScribNode visited) throws ScribbleException { GContinue gc = (GContinue) visited; RecVarNode recvar = (RecVarNode) ((InlineProtocolEnv) gc.recvar.del().env()).getTranslation(); GContinue inlined = AstFactoryImpl.FACTORY.GContinue(gc.getSource(), recvar); inl.pushEnv(inl.popEnv().setTranslation(inlined)); return (GContinue) super.leaveProtocolInlining(parent, child, inl, gc); } public LContinue project(GNode n, Role self) { GContinue gc = (GContinue) n; LContinue projection = gc.project(self); return projection; } @Override public GContinue leaveProjection(ScribNode parent, ScribNode child, Projector proj, ScribNode visited) throws ScribbleException { GContinue gc = (GContinue) visited; LContinue projection = project(gc, proj.peekSelf()); proj.pushEnv(proj.popEnv().setProjection(projection)); return (GContinue) GSimpleInteractionNodeDel.super.leaveProjection(parent, child, proj, gc); } }