CommonVariableExpression.java

/**
 * 
 */
package edu.udel.cis.vsl.civl.model.common.expression;

import edu.udel.cis.vsl.civl.model.IF.CIVLSource;
import edu.udel.cis.vsl.civl.model.IF.Scope;
import edu.udel.cis.vsl.civl.model.IF.expression.VariableExpression;
import edu.udel.cis.vsl.civl.model.IF.variable.Variable;

/**
 * A use of a variable in an expression.
 * 
 * @author Timothy K. Zirkel (zirkel)
 * 
 */
public class CommonVariableExpression extends CommonExpression implements
		VariableExpression {

	Variable variable;

	/**
	 * A use of a variable in an expression.
	 * 
	 * @param variable
	 *            The variable.
	 */
	public CommonVariableExpression(CIVLSource source, Variable variable) {
		super(source);
		this.variable = variable;
	}

	/**
	 * @return The variable
	 */
	public Variable variable() {
		return variable;
	}

	/**
	 * @param variable
	 *            The variable.
	 */
	public void setVariable(Variable variable) {
		this.variable = variable;
	}

	@Override
	public String toString() {
		return variable.name().name();
	}

	@Override
	public ExpressionKind expressionKind() {
		return ExpressionKind.VARIABLE;
	}

	@Override
	public void setPurelyLocal(boolean pl) {
		this.variable.setPurelyLocal(pl);
	}
	
	@Override
	public void purelyLocalAnalysisOfVariables(Scope funcScope){
//		if(this.variable.type().isPointerType())
//			this.setPurelyLocal(false);
		if(funcScope.isDescendantOf(this.variable.scope()))
			this.setPurelyLocal(false);
		
	}

	@Override
	public void purelyLocalAnalysis() {
		this.purelyLocal = this.variable.purelyLocal();
	}
	
	

}