KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > jas > LineTableAttr


1 /**
2  * Line number table attributes are embedded into Code attributes
3  * and used for further debugging information.
4  * @see CodeAttr#setLineTable
5  * @author $Author: fqian $
6  * @version $Revision: 1.1 $
7  */

8
9 package jas;
10
11 import java.io.*;
12 import java.util.*;
13
14 public class LineTableAttr
15 {
16   static CP attr = new AsciiCP("LineNumberTable");
17
18   Vector line, pc;
19
20   /**
21    * Note: A line table is associated with a <em>method</em>, so you
22    * need to create a new LineTableAttr for each method for which you add
23    * debugging information.
24    * @see CodeAttr#setLineTable
25    */

26   public LineTableAttr()
27   { line = new Vector(); pc = new Vector(); }
28
29   /**
30    * Add a pc to line number entry to the line table.
31    * @param Label to the location in the class file
32    * @param line Corresponding line number in the source file
33    */

34
35   public void addEntry(Label l, int line)
36   {
37     pc.addElement(l);
38     this.line.addElement(new Integer JavaDoc(line));
39   }
40
41   void resolve(ClassEnv e)
42   { e.addCPItem(attr); }
43
44   int size()
45   { return
46       (2 + // name_idx
47
4 + // attr_len
48
2 + // line table len spec
49
4*(pc.size())); // table
50
}
51
52   void write(ClassEnv e, CodeAttr ce, DataOutputStream out)
53     throws IOException, jasError
54   {
55     out.writeShort(e.getCPIndex(attr));
56     out.writeInt(2 + 4*(pc.size()));
57     out.writeShort(pc.size());
58     for (Enumeration en = pc.elements(), ien = line.elements();
59      en.hasMoreElements();)
60       {
61     Label l = (Label)(en.nextElement());
62     Integer JavaDoc i = (Integer JavaDoc)(ien.nextElement());
63     l.writeOffset(ce, null, out);
64     out.writeShort((int) i.intValue());
65       }
66   }
67 }
68
Popular Tags