package org.scribble.ast; import org.antlr.runtime.tree.CommonTree; import org.scribble.ast.name.simple.RecVarNode; import org.scribble.main.ScribbleException; import org.scribble.sesstype.kind.ProtocolKind; import org.scribble.visit.AstVisitor; public abstract class Recursion<K extends ProtocolKind> extends CompoundInteractionNode<K> { public final RecVarNode recvar; public final ProtocolBlock<K> block; protected Recursion(CommonTree source, RecVarNode recvar, ProtocolBlock<K> block) { super(source); this.recvar = recvar; this.block = block; } public abstract Recursion<K> reconstruct(RecVarNode recvar, ProtocolBlock<K> block); @Override public abstract Recursion<K> clone(); @Override public Recursion<K> visitChildren(AstVisitor nv) throws ScribbleException { RecVarNode recvar = (RecVarNode) visitChild(this.recvar, nv); ProtocolBlock<K> block = visitChildWithClassEqualityCheck(this, this.block, nv); return reconstruct(recvar, block); } public abstract ProtocolBlock<K> getBlock(); @Override public String toString() { return Constants.REC_KW + " " + this.recvar + " " + block; } }