// $Id: EnterInstruction.java,v 1.3 1999/12/10 01:31:41 golem Exp $

package IR2;

import java.util.*;

public class EnterInstruction extends LowInstruction {
  //private LowInstruction exit_node;

  public EnterInstruction(LowInstruction n) {
    next = n;
  }
  
  public String desc() {
    return "enter";
  }

  public DelocalizedInstruction do_asm(Codegen c, MethodDescriptor d, 
                                       CFG output,
                                       DelocalizedInstruction prev) { 
    // What the heck is going on here?
    output.addElement(new DelocalizedEnterInstruction(d) /*, prev*/);

    // Generate local-initialization code.
    Enumeration e = d.get_symbol_table().elements();
    while (e.hasMoreElements()) {
      ScalarVarDescriptor v = (ScalarVarDescriptor) e.nextElement();
      if (v instanceof LocalScalarVarDescriptor) {
        output.addElement(new DelocalizedStoreInstruction
                          (v, new DelocalizedImmed(0)));
      }
    }

    // Generate machine-specific prologue.
    // For MIPSCodegen, turns params into local variables.
    c.generate_delocalized_prologue(d, output);

    // Modeled off of SimpleInstruction.do_asm.  This can't possibly
    // be right.
    return output.last();
  } 


  /* Traversable methods. */
  public void traverse(Traversal t) {
    t.traverse(next);
  }
}
