00001 package de.fub.bytecode.generic;
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 public class DCONST extends Instruction
00012 implements ConstantPushInstruction, TypedInstruction {
00013 private double value;
00014
00015
00016
00017
00018
00019 DCONST() {}
00020 public DCONST(double f) {
00021 super(de.fub.bytecode.Constants.DCONST_0, (short)1);
00022
00023 if(f == 0.0)
00024 tag = de.fub.bytecode.Constants.DCONST_0;
00025 else if(f == 1.0)
00026 tag = de.fub.bytecode.Constants.DCONST_1;
00027 else
00028 throw new ClassGenException("DCONST can be used only for 0.0 and 1.0: " + f);
00029
00030 value = f;
00031 }
00032
00033
00034
00035
00036
00037
00038
00039
00040 public void accept(Visitor v) {
00041 v.visitPushInstruction(this);
00042 v.visitStackProducer(this);
00043 v.visitTypedInstruction(this);
00044 v.visitConstantPushInstruction(this);
00045 v.visitDCONST(this);
00046 }
00047
00048
00049 public Type getType(ConstantPoolGen cp) {
00050 return Type.DOUBLE;
00051 }
00052 public Number getValue() { return new Double(value); }
00053 }