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 }