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 }