summaryrefslogtreecommitdiff
path: root/src/fjbg/ch/epfl/lamp/fjbg/JConstantValueAttribute.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/fjbg/ch/epfl/lamp/fjbg/JConstantValueAttribute.java')
-rw-r--r--src/fjbg/ch/epfl/lamp/fjbg/JConstantValueAttribute.java69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/fjbg/ch/epfl/lamp/fjbg/JConstantValueAttribute.java b/src/fjbg/ch/epfl/lamp/fjbg/JConstantValueAttribute.java
new file mode 100644
index 0000000000..6efd3d7d34
--- /dev/null
+++ b/src/fjbg/ch/epfl/lamp/fjbg/JConstantValueAttribute.java
@@ -0,0 +1,69 @@
+/* FJBG -- Fast Java Bytecode Generator
+ * Copyright 2002-2011 LAMP/EPFL
+ * @author Michel Schinz
+ */
+
+package ch.epfl.lamp.fjbg;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+/**
+ * ConstantValue attribute representing the value of a constant field.
+ *
+ * There can be no more than one ConstantValue attribute in the attributes
+ * table of a given field_info structure.. See section 4.8.2 of the JVM
+ * specification.
+ *
+ * @author Stephane Micheloud
+ * @version 1.0
+ */
+
+public class JConstantValueAttribute extends JAttribute {
+ /** Constant pool of the current classfile. */
+ private JConstantPool pool;
+
+ protected int constantValueIndex;
+
+ public JConstantValueAttribute(FJBGContext context,
+ JClass clazz,
+ JField field) {
+ super(context, clazz);
+ this.pool = clazz.pool;
+
+ assert field.getOwner() == clazz;
+ }
+
+ public JConstantValueAttribute(FJBGContext context,
+ JClass clazz,
+ Object owner, // JField
+ String name,
+ int size,
+ DataInputStream stream)
+ throws IOException {
+ super(context, clazz, name);
+ this.pool = clazz.pool;
+
+ this.constantValueIndex = stream.readShort();
+
+ assert name.equals(getName());
+ }
+
+ public String getName() { return "ConstantValue"; }
+
+ // Follows javap output format for ConstantValue attribute.
+ /*@Override*/ public String toString() {
+ StringBuffer buf = new StringBuffer(" Constant value: ");
+ buf.append(pool.lookupEntry(constantValueIndex));
+ return buf.toString();
+ }
+
+ protected int getSize() {
+ return 2; // Short.SIZE
+ }
+
+ protected void writeContentsTo(DataOutputStream stream) throws IOException {
+ stream.writeShort(constantValueIndex);
+ }
+}