From: chiba Date: Sat, 20 Oct 2007 17:01:47 +0000 (+0000) Subject: for JASSIST-37 (again) X-Git-Tag: rel_3_17_1_ga~230 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=04bb09167da844dc49516342063a3e642afab7ab;p=javassist.git for JASSIST-37 (again) git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@412 30ef5769-5b8d-40dd-aea6-55b5d6557bb3 --- diff --git a/src/main/javassist/CtField.java b/src/main/javassist/CtField.java index efc6b94b..6903daf2 100644 --- a/src/main/javassist/CtField.java +++ b/src/main/javassist/CtField.java @@ -435,6 +435,14 @@ public class CtField extends CtMember { return new LongInitializer(l); } + /** + * Makes an initializer that assigns a constant float value. + * The field must be float type. + */ + public static Initializer constant(float l) { + return new FloatInitializer(l); + } + /** * Makes an initializer that assigns a constant double value. * The field must be double type. @@ -1173,6 +1181,42 @@ public class CtField extends CtMember { } } + static class FloatInitializer extends Initializer { + float value; + + FloatInitializer(float v) { value = v; } + + void check(String desc) throws CannotCompileException { + if (!desc.equals("F")) + throw new CannotCompileException("type mismatch"); + } + + int compile(CtClass type, String name, Bytecode code, + CtClass[] parameters, Javac drv) + throws CannotCompileException + { + code.addAload(0); + code.addFconst(value); + code.addPutfield(Bytecode.THIS, name, Descriptor.of(type)); + return 3; // stack size + } + + int compileIfStatic(CtClass type, String name, Bytecode code, + Javac drv) throws CannotCompileException + { + code.addFconst(value); + code.addPutstatic(Bytecode.THIS, name, Descriptor.of(type)); + return 2; // stack size + } + + int getConstantValue(ConstPool cp, CtClass type) { + if (type == CtClass.floatType) + return cp.addFloatInfo(value); + else + return 0; + } + } + static class DoubleInitializer extends Initializer { double value;