package de.gaalop.algebra;
import de.gaalop.dfg.Expression;
import de.gaalop.dfg.FunctionArgument;
import de.gaalop.dfg.MacroCall;
import de.gaalop.visitors.DFGTraversalVisitor;
/**
* Returns the maximum argument number
* @author Christian Steinmetz
*/
public class MaxFunctionArgumentNumberGetter extends DFGTraversalVisitor {
private int maxInt = 0;
/**
* Returns the maximum argument number of an expression
* @param e The expression
* @return The maxima number of arguments
*/
public static int getMaxFunctionArgumentNumber(Expression e) {
MaxFunctionArgumentNumberGetter visitor = new MaxFunctionArgumentNumberGetter();
e.accept(visitor);
return visitor.maxInt;
}
public int getMaxInt() {
return maxInt;
}
@Override
public void visit(FunctionArgument node) {
maxInt = Math.max(maxInt, node.getIndex());
super.visit(node);
}
@Override
public void visit(MacroCall node) {
for (Expression e: node.getArguments())
e.accept(this);
super.visit(node);
}
}