/*
* This file is part of the X10 project (http://x10-lang.org).
*
* This file is licensed to You under the Eclipse Public License (EPL);
* You may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.opensource.org/licenses/eclipse-1.0.php
*
* This file was originally derived from the Polyglot extensible compiler framework.
*
* (C) Copyright 2000-2007 Polyglot project group, Cornell University
* (C) Copyright IBM Corporation 2007-2012.
*/
package polyglot.visit;
import java.util.HashMap;
import java.util.Map;
import polyglot.ast.Node;
import polyglot.frontend.Job;
import polyglot.util.InternalCompilerError;
import polyglot.util.CollectionUtil; import x10.util.CollectionFactory;
public class ReentrantVisitor extends NodeVisitor {
protected Job job;
protected Map<Node,Node> newSubst;
public ReentrantVisitor(Job job) {
this.job = job;
this.newSubst = CollectionFactory.newHashMap();
}
public Job job() {
return job;
}
@Override
public Node visitEdge(Node parent, Node child) {
// Map<Node,Node> subst = job.astMap();
// Node n = subst.get(child);
//
// if (n != null) {
// if (true)
// return n;
// child = n;
// }
Node n;
try {
n = override(parent, child);
if (n == null) {
n = visitEdgeNoOverride(parent, child);
}
// if (child != n)
// installSubst(newSubst, child, n);
//
// if (n == job.ast()) {
// job.setAstMap(newSubst);
// }
return n;
}
catch (InternalCompilerError e) {
if (e.position() == null && child != null)
e.setPosition(child.position());
throw e;
}
}
// protected void installSubst(final Map<Node,Node> subst, Node old, Node n) {
// // Remove the children from the substitution.
// old.visitChildren(new NodeVisitor() {
// public Node override(Node n) {
// subst.remove(n);
// return n;
// }
// });
//
// subst.put(old, n);
// }
}