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 }