package Frame;

/**
 * Information about frames, gathered as part of the Tiger
 * compilation process.
 * <p>
 * <strong>History</strong>
 * <dl>
 * <dt>4 December 1998 (version 0.1)
 * <dd>Built from examples in Appel's book.
 * <dt>7 December 1998 (version 0.2)
 * <dd>Added history
 * <dd>Updated types of procEntryExit{2,3} and codegen
 * </dl>
 *
 * @author Samuel A. Rebelsky
 * @author Andrew Appel
 * @version 0.2 of 7 December 1998
 */

public abstract class Frame 
  implements Temp.TempMap {

  // +--------+--------------------------------------------------
  // | Fields |
  // +--------+

  public AccessList formals;
  public Temp.Label name;


  // +---------+-------------------------------------------------
  // | Methods |
  // +---------+

  abstract public Temp.Temp RV();
  abstract public Temp.Temp FP();
  abstract public Temp.TempList registers();
  abstract public String tempMap(Temp.Temp temp);
  abstract public int wordSize();
  abstract public Tree.Exp externalCall(String func, Tree.ExpList args);
  abstract public Frame newFrame(Temp.Label name,
                                 Util.BoolList formals);
  abstract public Access allocLocal(boolean escape);
  abstract public String string(Temp.Label label, String value);
  abstract public Tree.Stm procEntryExit1(Tree.Stm body);
  abstract public Tree.StmList procEntryExit2(Tree.StmList body);
  abstract public Tree.StmList procEntryExit3(Tree.StmList body);
  abstract public Tree.StmList codegen(Tree.Stm stm);
} // class Frame

