package org.scribble.visit.context; import java.util.HashSet; import java.util.Set; import org.scribble.ast.ScribNode; import org.scribble.main.Job; import org.scribble.main.ScribbleException; import org.scribble.sesstype.name.RecVar; import org.scribble.visit.NoEnvInlinedProtocolVisitor; // FIXME: shadowed recvars public class RecRemover extends NoEnvInlinedProtocolVisitor { private final Set<RecVar> rvs = new HashSet<>(); public RecRemover(Job job) { super(job); } public void setToRemove(Set<RecVar> rv) { this.rvs.clear(); this.rvs.addAll(rv); } public boolean toRemove(RecVar rv) { return this.rvs.contains(rv); } public void remove(RecVar rv) { this.rvs.remove(rv); } @Override public void inlinedEnter(ScribNode parent, ScribNode child) throws ScribbleException { super.inlinedEnter(parent, child); child.del().enterRecRemoval(parent, child, this); } @Override public ScribNode inlinedLeave(ScribNode parent, ScribNode child, ScribNode visited) throws ScribbleException { visited = visited.del().leaveRecRemoval(parent, child, this, visited); return super.inlinedLeave(parent, child, visited); } }