ASTLoopInvariant.java

package edu.udel.cis.vsl.tass.front.minimp.ast.statement;

import edu.udel.cis.vsl.tass.front.minimp.ast.expression.ASTExpressionIF;
import edu.udel.cis.vsl.tass.front.minimp.ast.misc.ASTIdentifier;
import edu.udel.cis.vsl.tass.model.IF.SyntaxException;
import edu.udel.cis.vsl.tass.util.Source;
import edu.udel.cis.vsl.tass.util.Sourceable;

public class ASTLoopInvariant implements Sourceable {
	private ASTIdentifier name;
	private ASTIdentifier functionName;
	private int specFactor;
	private int implFactor;
	private ASTExpressionIF invariant;
	private Source source;

	public ASTLoopInvariant(ASTIdentifier name, ASTIdentifier functionName,
			ASTExpressionIF invariant, int spec, int impl)
			throws SyntaxException {
		if (spec <= 0 || impl <= 0) {
			throw new SyntaxException(invariant.getSource(),
					"Skew factors cannot be less than or equal to 0.");
		}
		this.name = name;
		this.functionName = functionName;
		this.invariant = invariant;
		this.specFactor = spec;
		this.implFactor = impl;
	}

	public ASTLoopInvariant(ASTIdentifier name, ASTIdentifier functionName,
			ASTExpressionIF invariant) throws SyntaxException {
		this(name, functionName, invariant, 1, 1);
	}

	public ASTExpressionIF getInvariant() {
		return this.invariant;
	}

	public String toString() {
		String result = name.toString() + "{";
		if (specFactor != 1 && implFactor != 1) {
			result += specFactor + ":" + implFactor + " ";
		}
		result += this.invariant;
		return result;
	}

	public int getSpecFactor() {
		return this.specFactor;
	}

	public int getImplFactor() {
		return this.implFactor;
	}

	public String getLabel() {
		return this.name.toString();
	}

	public String getFunctionName() {
		return this.functionName.toString();
	}

	public Source getSource() {
		return this.source;
	}

	public void setSource(Source source) {
		this.source = source;
	}

	public void setText(String text) {
		this.source.setText(text);
	}
}