CommonMemType.java
package edu.udel.cis.vsl.abc.ast.type.common;
import java.io.PrintStream;
import java.util.Map;
import edu.udel.cis.vsl.abc.ast.type.IF.MemType;
import edu.udel.cis.vsl.abc.ast.type.IF.ObjectType;
import edu.udel.cis.vsl.abc.ast.type.IF.PointerType;
import edu.udel.cis.vsl.abc.ast.type.IF.Type;
public class CommonMemType extends CommonObjectType implements MemType {
private static int classCode = CommonMemType.class.hashCode();
private PointerType elementType;
public CommonMemType(PointerType elementType) {
super(TypeKind.MEM);
this.elementType = elementType;
}
@Override
public boolean isComplete() {
return true;
}
@Override
public boolean isVariablyModified() {
return false;
}
@Override
public int hashCode() {
return classCode ^ 65535;
}
@Override
public boolean equals(Object object) {
if (object instanceof CommonMemType)
return elementType().equals(((CommonMemType) object).elementType());
return false;
}
@Override
public void print(String prefix, PrintStream out, boolean abbrv) {
out.print(prefix + "$mem");
}
@Override
public boolean isScalar() {
return true;
}
@Override
protected boolean similar(Type other, boolean equivalent,
Map<TypeKey, Type> seen) {
if (other.kind() == TypeKind.MEM) {
if (equivalent)
return equals(other);
else
return true;
}
return false;
}
@Override
public ObjectType elementType() {
return elementType;
}
}