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();
  }
}