1 cananian 1.1.2.2 // ConstantUtf8.java, created Mon Jan 18 22:44:37 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 import harpoon.Util.Util;
 7 cananian 1.1.2.1 /**
 8 cananian 1.1.2.1  * The <code>CONSTANT_Utf8_info</code> structure is used to represent
 9 cananian 1.1.2.1  * constant string values. <p> UTF-8 strings are encoded so that
10 cananian 1.1.2.1  * character sequences that contain only non-null ASCII characters can
11 cananian 1.1.2.1  * be represented using only one byte per character, but characters of
12 cananian 1.1.2.1  * up to 16 bits can be represented.
13 cananian 1.1.2.1  *
14 cananian 1.1.2.1  * @author  C. Scott Ananian <cananian@alumni.princeton.edu>
15 cananian 1.2      * @version $Id: ConstantUtf8.java,v 1.2 2002/02/25 21:05:27 cananian Exp $
16 cananian 1.1.2.1  * @see "The Java Virtual Machine Specification, section 4.4.7"
17 cananian 1.1.2.1  * @see Constant
18 cananian 1.1.2.1  */
19 cananian 1.1.2.1 public class ConstantUtf8 extends Constant {
20 cananian 1.1.2.1   /** The value of the string constant */
21 cananian 1.1.2.1   public String val;
22 cananian 1.1.2.1 
23 cananian 1.1.2.1   /** Constructor. */
24 cananian 1.1.2.1   ConstantUtf8(ClassFile parent, ClassDataInputStream in) 
25 cananian 1.1.2.1     throws java.io.IOException {
26 cananian 1.1.2.1     super(parent);
27 cananian 1.1.2.1     val = in.readUTF();
28 cananian 1.1.2.1   }
29 cananian 1.1.2.1   /** Constructor. */
30 cananian 1.1.2.1   public ConstantUtf8(ClassFile parent, String val) {
31 cananian 1.1.2.1     super(parent);
32 cananian 1.1.2.1     this.val = val;
33 cananian 1.1.2.1   }
34 cananian 1.1.2.1 
35 cananian 1.1.2.1   /** Write to a bytecode file. */
36 cananian 1.1.2.1   public void write(ClassDataOutputStream out) throws java.io.IOException {
37 cananian 1.1.2.1     out.write_u1(CONSTANT_Utf8);
38 cananian 1.1.2.1     out.writeUTF(val);
39 cananian 1.1.2.1   }
40 cananian 1.1.2.1 
41 cananian 1.1.2.1   /** Create a human-readable representation of this constant. */
42 cananian 1.1.2.1   public String toString() {
43 cananian 1.1.2.1     return "CONSTANT_Utf8: \"" + Util.escape(val) + "\"";
44 cananian 1.1.2.1   }
45 cananian 1.2     }