001    package AST;
002    
003    import java.util.HashSet;
004    import java.io.File;
005    import java.util.*;
006    import beaver.*;
007    import java.util.ArrayList;
008    import java.util.zip.*;
009    import java.io.*;
010    import java.io.FileNotFoundException;
011    import java.util.Collection;
012    /**
013      * @ast class
014     * 
015     */
016    public class CodeAttribute extends Attribute {
017    
018        public CodeAttribute(CodeGeneration codeGen, MethodDecl m) {
019          super(codeGen.constantPool(), "Code");
020          u2(codeGen.maxStackDepth());
021          u2(codeGen.maxLocals());
022          u4(codeGen.pos()); // code_length
023          append(codeGen.toArray());
024          u2(codeGen.exceptions.size());
025          for(Iterator iter = codeGen.exceptions.iterator(); iter.hasNext(); ) {
026            CodeGeneration.ExceptionEntry e = (CodeGeneration.ExceptionEntry)iter.next();
027            u2(e.start_pc);
028            u2(e.end_pc);
029            u2(e.handler_pc);
030            u2(e.catch_type);
031          }
032    
033          if(m == null || !m.getModifiers().isSynthetic()) {
034            u2(2); // Attribute count
035            append(new LineNumberTableAttribute(codeGen));
036            append(new LocalVariableTableAttribute(codeGen));
037          }
038          else {
039            u2(0); // Attribute count
040          }
041        }
042    
043    
044    }