1 cananian 1.1.2.2 // AttributeUnknown.java, created Mon Jan 18 22:44:36 1999 by cananian
 2 cananian 1.1.2.1 // Copyright (C) 1998 C. Scott Ananian <cananian@alumni.princeton.edu>
 3 cananian 1.1.2.1 // Licensed under the terms of the GNU GPL; see COPYING for details.
 4 cananian 1.1.2.1 package harpoon.IR.RawClass;
 5 cananian 1.1.2.1 
 6 cananian 1.1.2.1 /** 
 7 cananian 1.1.2.1  * An attribute of unknown format.
 8 cananian 1.1.2.1  *
 9 cananian 1.1.2.1  * @author  C. Scott Ananian <cananian@alumni.princeton.edu>
10 cananian 1.2      * @version $Id: AttributeUnknown.java,v 1.2 2002/02/25 21:05:26 cananian Exp $
11 cananian 1.1.2.1  * @see "The Java Virtual Machine Specification, section 4.7"
12 cananian 1.1.2.1  * @see Attribute
13 cananian 1.1.2.1  */
14 cananian 1.1.2.1 public class AttributeUnknown extends Attribute {
15 cananian 1.1.2.1   /** Generic attribute information of unknown type. */
16 cananian 1.1.2.1   public byte[] info;
17 cananian 1.1.2.1   
18 cananian 1.1.2.1   /** Constructor. */
19 cananian 1.1.2.1   AttributeUnknown(ClassFile parent, ClassDataInputStream in,
20 cananian 1.1.2.1                    int attribute_name_index) throws java.io.IOException {
21 cananian 1.1.2.1     super(parent, attribute_name_index);
22 cananian 1.1.2.1     long attribute_length = in.read_u4();
23 cananian 1.1.2.1     info = new byte[(int)attribute_length]; // XXX breaks after 31 bits.
24 cananian 1.1.2.1     in.read(info);
25 cananian 1.1.2.1   }
26 cananian 1.1.2.1   /** Constructor. */
27 cananian 1.1.2.1   public AttributeUnknown(ClassFile parent, 
28 cananian 1.1.2.1                           int attribute_name_index, byte[] info) {
29 cananian 1.1.2.1     super(parent, attribute_name_index);
30 cananian 1.1.2.1     this.info = info;
31 cananian 1.1.2.1   }
32 cananian 1.1.2.1 
33 cananian 1.1.2.1   public long attribute_length() { return info.length; }
34 cananian 1.1.2.1 
35 cananian 1.1.2.1   /** Write to bytecode stream. */
36 cananian 1.1.2.1   public void write(ClassDataOutputStream out) throws java.io.IOException {
37 cananian 1.1.2.1     out.write_u2(attribute_name_index);
38 cananian 1.1.2.1     out.write_u4(attribute_length());
39 cananian 1.1.2.1     out.write(info);
40 cananian 1.1.2.1   }
41 cananian 1.2     }