ArrayLiteralType.java
package edu.udel.cis.vsl.tass.model.impl.expression.literal;
import edu.udel.cis.vsl.tass.model.IF.expression.ArrayLiteralTypeIF;
import edu.udel.cis.vsl.tass.model.IF.expression.LiteralTypeIF;
import edu.udel.cis.vsl.tass.model.IF.type.ArrayTypeIF;
import edu.udel.cis.vsl.tass.model.IF.type.RecordTypeIF;
import edu.udel.cis.vsl.tass.model.IF.type.TypeIF;
public class ArrayLiteralType extends LiteralType implements ArrayLiteralTypeIF {
private LiteralTypeIF elementLiteralType;
private int extent;
public ArrayLiteralType(ArrayTypeIF arrayType, LiteralTypeIF elementType,
int extent) {
super(arrayType);
assert (elementType.type().equals(arrayType.elementType()));
this.elementLiteralType = elementType;
this.extent = extent;
}
/**
* Creates "default" array literal type in which all extents are set to -1
* recursively.
*/
public ArrayLiteralType(ArrayTypeIF arrayType) {
super(arrayType);
this.extent = -1;
TypeIF elementType = arrayType.elementType();
if (elementType instanceof ArrayTypeIF) {
elementLiteralType = new ArrayLiteralType((ArrayTypeIF) elementType);
} else if (elementType instanceof RecordTypeIF) {
elementLiteralType = new RecordLiteralType(
(RecordTypeIF) elementType);
} else {
elementLiteralType = new LiteralType(elementType);
}
}
public ArrayLiteralType(ArrayTypeIF arrayType, int extent) {
this(arrayType);
this.extent = extent;
}
@Override
public LiteralTypeIF elementLiteralType() {
return elementLiteralType;
}
@Override
public int extent() {
return extent;
}
public void setExtent(int extent) {
this.extent = extent;
}
@Override
public ArrayTypeIF type() {
return (ArrayTypeIF) super.type();
}
public String toString() {
return "ArrayLiteralType[" + extent + ", " + elementLiteralType + "]";
}
}