CommonVariable.java
package edu.udel.cis.vsl.abc.ast.entity.common;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import edu.udel.cis.vsl.abc.ast.entity.IF.ProgramEntity;
import edu.udel.cis.vsl.abc.ast.entity.IF.Variable;
import edu.udel.cis.vsl.abc.ast.node.IF.declaration.DeclarationNode;
import edu.udel.cis.vsl.abc.ast.node.IF.declaration.InitializerNode;
import edu.udel.cis.vsl.abc.ast.node.IF.declaration.VariableDeclarationNode;
import edu.udel.cis.vsl.abc.ast.type.IF.ObjectType;
import edu.udel.cis.vsl.abc.ast.type.IF.Type;
import edu.udel.cis.vsl.abc.ast.value.IF.Value;
public class CommonVariable extends CommonOrdinaryEntity implements Variable {
private StorageDurationKind storageDurationKind;
private InitializerNode initializer;
private Set<Type> typeAlignments = new HashSet<Type>();
private Set<Value> constantAlignments = new HashSet<Value>();
public CommonVariable(String name, ProgramEntity.LinkageKind linkage,
Type type) {
super(EntityKind.VARIABLE, name, linkage, type);
}
@Override
public StorageDurationKind getStorageDuration() {
return storageDurationKind;
}
@Override
public void setStorageDuration(StorageDurationKind duration) {
this.storageDurationKind = duration;
}
@Override
public InitializerNode getInitializer() {
return initializer;
}
@Override
public void setInitializer(InitializerNode initializer) {
this.initializer = initializer;
}
@Override
public Iterator<Type> getTypeAlignments() {
return typeAlignments.iterator();
}
@Override
public void addTypeAlignment(Type type) {
typeAlignments.add(type);
}
@Override
public Iterator<Value> getConstantAlignments() {
return constantAlignments.iterator();
}
@Override
public void addConstantAlignment(Value constant) {
constantAlignments.add(constant);
}
@Override
public VariableDeclarationNode getDefinition() {
return (VariableDeclarationNode) super.getDefinition();
}
@Override
public void setDefinition(DeclarationNode declaration) {
if (!(declaration instanceof VariableDeclarationNode))
throw new IllegalArgumentException(
"Variable declaration not instance of VariableDeclarationNode: "
+ declaration);
super.setDefinition(declaration);
}
@Override
public ObjectType getType() {
return (ObjectType) super.getType();
}
@Override
public void setType(Type type) {
if (!(type instanceof ObjectType))
throw new IllegalArgumentException(
"Type of variable must be object type");
super.setType(type);
}
@Override
public VariableDeclarationNode getDeclaration(int index) {
return (VariableDeclarationNode) super.getDeclaration(index);
}
}