ASTArrayHeader.java
package edu.udel.cis.vsl.tass.front.minimp.ast.declaration;
import java.util.List;
import java.util.Vector;
import edu.udel.cis.vsl.tass.front.minimp.ast.expression.ASTExpressionIF;
import edu.udel.cis.vsl.tass.front.minimp.ast.type.ASTTypeIF;
public class ASTArrayHeader {
private ASTTypeIF arrayType;
private ASTArrayHeader elementType;
private ASTExpressionIF arrayLength;
public ASTArrayHeader(ASTTypeIF type, ASTExpressionIF length) {
arrayType = type;
arrayLength = length;
elementType = null;
}
public ASTArrayHeader getElementHeader() {
return elementType;
}
public ASTExpressionIF getArrayLength() {
return arrayLength;
}
public ASTTypeIF getType() {
return arrayType;
}
public ASTArrayHeader setElementType(ASTArrayHeader element) {
this.elementType = element;
return this;
}
public String getLength() {
if (elementType != null) {
return "[" + arrayLength.toString() + "]" + elementType.getLength();
} else {
return "[" + arrayLength.toString() + "]";
}
}
public ASTExpressionIF[] getDimensions() {
List<ASTExpressionIF> dimensions = new Vector<ASTExpressionIF>();
ASTArrayHeader element = this;
while (element != null) {
dimensions.add(element.arrayLength);
element = element.elementType;
}
ASTExpressionIF[] result = new ASTExpressionIF[dimensions.size()];
for (int i = 0; i < dimensions.size(); i++) {
result[i] = dimensions.get(i);
}
return result;
}
public String toString() {
String prefix = this.arrayType.toString();
int index = prefix.indexOf("[");
prefix = prefix.substring(0, index);
return prefix + getLength();
}
}