use of claw.shenron.transformation.TransformationGroup in project claw-compiler by C2SM-RCM.
the class ClawTranslatorDriver method transform.
/**
* Apply all the transformation in the pipeline.
*
* @throws Exception
*/
public void transform() throws Exception {
try {
if (!_canTransform) {
return;
}
for (Map.Entry<Class<?>, TransformationGroup> entry : _translator.getGroups().entrySet()) {
Message.debug(context(), "Apply transformation: " + entry.getValue().transformationName() + " - " + entry.getValue().count());
try {
entry.getValue().applyTransformations(_translationUnit, _translator);
Message.warnings(context(), _translationUnit);
} catch (IllegalTransformationException itex) {
_translationUnit.addError(itex.getMessage(), itex.getStartLine());
flushErrors();
throw itex;
} catch (Exception ex) {
_translationUnit.addError("Unexpected error: " + ex.getMessage(), 0);
if (context().getXmOption().isDebugOutput()) {
StringWriter errors = new StringWriter();
ex.printStackTrace(new PrintWriter(errors));
_translationUnit.addError(errors.toString(), 0);
}
flushErrors();
throw ex;
}
}
} catch (Exception ex) {
context().getErrorStream().println("Transformation exception: " + ex.getMessage());
throw ex;
}
}
use of claw.shenron.transformation.TransformationGroup in project claw-compiler by C2SM-RCM.
the class ClawTranslator method reorderTransformations.
/**
*/
private void reorderTransformations() {
if (getGroups().containsKey(ScaForward.class)) {
TransformationGroup tg = getGroups().get(ScaForward.class);
if (tg.count() <= 1) {
return;
}
DirectedGraph<Transformation> dg = new DirectedGraph<>();
Map<String, List<Transformation>> fctMap = new HashMap<>();
for (Transformation t : tg.getTransformations()) {
ScaForward p = (ScaForward) t;
dg.addNode(p);
if (fctMap.containsKey(p.getCallingFctName())) {
List<Transformation> tList = fctMap.get(p.getCallingFctName());
tList.add(p);
} else {
List<Transformation> tList = new ArrayList<>();
tList.add(p);
fctMap.put(p.getCallingFctName(), tList);
}
}
for (Transformation t : tg.getTransformations()) {
ScaForward p = (ScaForward) t;
if (p.getCalledFctName() != null && fctMap.containsKey(p.getCalledFctName())) {
List<Transformation> tList = fctMap.get(p.getCalledFctName());
for (Transformation end : tList) {
dg.addEdge(p, end);
}
}
}
List<Transformation> ordered = TopologicalSort.sort(TopologicalSort.reverseGraph(dg));
tg.setTransformations(ordered);
}
}
Aggregations