Methods Summary |
---|
public com.sun.org.apache.bcel.internal.generic.Instruction | ADD()
return InstructionConstants.DADD;
|
public com.sun.org.apache.bcel.internal.generic.Instruction | CMP(boolean less)
return less ? InstructionConstants.DCMPG : InstructionConstants.DCMPL;
|
public com.sun.org.apache.bcel.internal.generic.Instruction | DIV()
return InstructionConstants.DDIV;
|
public com.sun.org.apache.bcel.internal.generic.Instruction | DUP()
return DUP2;
|
public com.sun.org.apache.bcel.internal.generic.Instruction | LOAD(int slot)
return new DLOAD(slot);
|
public com.sun.org.apache.bcel.internal.generic.Instruction | MUL()
return InstructionConstants.DMUL;
|
public com.sun.org.apache.bcel.internal.generic.Instruction | NEG()
return InstructionConstants.DNEG;
|
public com.sun.org.apache.bcel.internal.generic.Instruction | POP()
return POP2;
|
public com.sun.org.apache.bcel.internal.generic.Instruction | REM()
return InstructionConstants.DREM;
|
public com.sun.org.apache.bcel.internal.generic.Instruction | STORE(int slot)
return new DSTORE(slot);
|
public com.sun.org.apache.bcel.internal.generic.Instruction | SUB()
return InstructionConstants.DSUB;
|
public int | distanceTo(com.sun.org.apache.xalan.internal.xsltc.compiler.util.Type type)
if (type == this) {
return 0;
}
else if (type == Type.Int) {
return 1;
}
else {
return Integer.MAX_VALUE;
}
|
public boolean | identicalTo(com.sun.org.apache.xalan.internal.xsltc.compiler.util.Type other)
return this == other;
|
public com.sun.org.apache.bcel.internal.generic.Type | toJCType()
return com.sun.org.apache.bcel.internal.generic.Type.DOUBLE;
|
public java.lang.String | toSignature()
return "D";
|
public java.lang.String | toString()
return "real";
|
public void | translateBox(com.sun.org.apache.xalan.internal.xsltc.compiler.util.ClassGenerator classGen, com.sun.org.apache.xalan.internal.xsltc.compiler.util.MethodGenerator methodGen)Translates an object of this type to its boxed representation.
translateTo(classGen, methodGen, Type.Reference);
|
public void | translateFrom(com.sun.org.apache.xalan.internal.xsltc.compiler.util.ClassGenerator classGen, com.sun.org.apache.xalan.internal.xsltc.compiler.util.MethodGenerator methodGen, java.lang.Class clazz)Translates an external (primitive) Java type into a real. Expects a java
object on the stack and pushes a real (i.e., a double).
InstructionList il = methodGen.getInstructionList();
if (clazz == Character.TYPE || clazz == Byte.TYPE ||
clazz == Short.TYPE || clazz == Integer.TYPE) {
il.append(I2D);
}
else if (clazz == Long.TYPE) {
il.append(L2D);
}
else if (clazz == Float.TYPE) {
il.append(F2D);
}
else if (clazz == Double.TYPE) {
il.append(NOP);
}
else {
ErrorMsg err = new ErrorMsg(ErrorMsg.DATA_CONVERSION_ERR,
toString(), clazz.getName());
classGen.getParser().reportError(Constants.FATAL, err);
}
|
public void | translateTo(com.sun.org.apache.xalan.internal.xsltc.compiler.util.ClassGenerator classGen, com.sun.org.apache.xalan.internal.xsltc.compiler.util.MethodGenerator methodGen, com.sun.org.apache.xalan.internal.xsltc.compiler.util.IntType type)Expects a real on the stack and pushes a truncated integer value
final ConstantPoolGen cpg = classGen.getConstantPool();
final InstructionList il = methodGen.getInstructionList();
il.append(new INVOKESTATIC(cpg.addMethodref(BASIS_LIBRARY_CLASS,
"realToInt","(D)I")));
|
public void | translateTo(com.sun.org.apache.xalan.internal.xsltc.compiler.util.ClassGenerator classGen, com.sun.org.apache.xalan.internal.xsltc.compiler.util.MethodGenerator methodGen, com.sun.org.apache.xalan.internal.xsltc.compiler.util.ReferenceType type)Expects a double on the stack and pushes a boxed double. Boxed
double are represented by an instance of java.lang.Double .
final ConstantPoolGen cpg = classGen.getConstantPool();
final InstructionList il = methodGen.getInstructionList();
il.append(new NEW(cpg.addClass(DOUBLE_CLASS)));
il.append(DUP_X2);
il.append(DUP_X2);
il.append(POP);
il.append(new INVOKESPECIAL(cpg.addMethodref(DOUBLE_CLASS,
"<init>", "(D)V")));
|
public void | translateTo(com.sun.org.apache.xalan.internal.xsltc.compiler.util.ClassGenerator classGen, com.sun.org.apache.xalan.internal.xsltc.compiler.util.MethodGenerator methodGen, java.lang.Class clazz)Translates a real into the Java type denoted by clazz .
Expects a real on the stack and pushes a number of the appropriate
type after coercion.
final InstructionList il = methodGen.getInstructionList();
if (clazz == Character.TYPE) {
il.append(D2I);
il.append(I2C);
}
else if (clazz == Byte.TYPE) {
il.append(D2I);
il.append(I2B);
}
else if (clazz == Short.TYPE) {
il.append(D2I);
il.append(I2S);
}
else if (clazz == Integer.TYPE) {
il.append(D2I);
}
else if (clazz == Long.TYPE) {
il.append(D2L);
}
else if (clazz == Float.TYPE) {
il.append(D2F);
}
else if (clazz == Double.TYPE) {
il.append(NOP);
}
// Is Double <: clazz? I.e. clazz in { Double, Number, Object }
else if (clazz.isAssignableFrom(java.lang.Double.class)) {
translateTo(classGen, methodGen, Type.Reference);
}
else {
ErrorMsg err = new ErrorMsg(ErrorMsg.DATA_CONVERSION_ERR,
toString(), clazz.getName());
classGen.getParser().reportError(Constants.FATAL, err);
}
|
public void | translateTo(com.sun.org.apache.xalan.internal.xsltc.compiler.util.ClassGenerator classGen, com.sun.org.apache.xalan.internal.xsltc.compiler.util.MethodGenerator methodGen, com.sun.org.apache.xalan.internal.xsltc.compiler.util.Type type)Translates a real into an object of internal type type . The
translation to int is undefined since reals are never converted to ints.
if (type == Type.String) {
translateTo(classGen, methodGen, (StringType) type);
}
else if (type == Type.Boolean) {
translateTo(classGen, methodGen, (BooleanType) type);
}
else if (type == Type.Reference) {
translateTo(classGen, methodGen, (ReferenceType) type);
}
else if (type == Type.Int) {
translateTo(classGen, methodGen, (IntType) type);
}
else {
ErrorMsg err = new ErrorMsg(ErrorMsg.DATA_CONVERSION_ERR,
toString(), type.toString());
classGen.getParser().reportError(Constants.FATAL, err);
}
|
public void | translateTo(com.sun.org.apache.xalan.internal.xsltc.compiler.util.ClassGenerator classGen, com.sun.org.apache.xalan.internal.xsltc.compiler.util.MethodGenerator methodGen, com.sun.org.apache.xalan.internal.xsltc.compiler.util.StringType type)Expects a real on the stack and pushes its string value by calling
Double.toString(double d) .
final ConstantPoolGen cpg = classGen.getConstantPool();
final InstructionList il = methodGen.getInstructionList();
il.append(new INVOKESTATIC(cpg.addMethodref(BASIS_LIBRARY_CLASS,
"realToString",
"(D)" + STRING_SIG)));
|
public void | translateTo(com.sun.org.apache.xalan.internal.xsltc.compiler.util.ClassGenerator classGen, com.sun.org.apache.xalan.internal.xsltc.compiler.util.MethodGenerator methodGen, com.sun.org.apache.xalan.internal.xsltc.compiler.util.BooleanType type)Expects a real on the stack and pushes a 0 if that number is 0.0 and
a 1 otherwise.
final InstructionList il = methodGen.getInstructionList();
FlowList falsel = translateToDesynthesized(classGen, methodGen, type);
il.append(ICONST_1);
final BranchHandle truec = il.append(new GOTO(null));
falsel.backPatch(il.append(ICONST_0));
truec.setTarget(il.append(NOP));
|
public com.sun.org.apache.xalan.internal.xsltc.compiler.FlowList | translateToDesynthesized(com.sun.org.apache.xalan.internal.xsltc.compiler.util.ClassGenerator classGen, com.sun.org.apache.xalan.internal.xsltc.compiler.util.MethodGenerator methodGen, com.sun.org.apache.xalan.internal.xsltc.compiler.util.BooleanType type)Translates a real into a non-synthesized boolean. It does not push a
0 or a 1 but instead returns branchhandle list to be appended to the
false list. A NaN must be converted to "false".
LocalVariableGen local;
final FlowList flowlist = new FlowList();
final ConstantPoolGen cpg = classGen.getConstantPool();
final InstructionList il = methodGen.getInstructionList();
// Store real into a local variable
il.append(DUP2);
local = methodGen.addLocalVariable("real_to_boolean_tmp",
com.sun.org.apache.bcel.internal.generic.Type.DOUBLE,
il.getEnd(), null);
il.append(new DSTORE(local.getIndex()));
// Compare it to 0.0
il.append(DCONST_0);
il.append(DCMPG);
flowlist.add(il.append(new IFEQ(null)));
//!!! call isNaN
// Compare it to itself to see if NaN
il.append(new DLOAD(local.getIndex()));
il.append(new DLOAD(local.getIndex()));
il.append(DCMPG);
flowlist.add(il.append(new IFNE(null))); // NaN != NaN
return flowlist;
|
public void | translateUnBox(com.sun.org.apache.xalan.internal.xsltc.compiler.util.ClassGenerator classGen, com.sun.org.apache.xalan.internal.xsltc.compiler.util.MethodGenerator methodGen)Translates an object of this type to its unboxed representation.
final ConstantPoolGen cpg = classGen.getConstantPool();
final InstructionList il = methodGen.getInstructionList();
il.append(new CHECKCAST(cpg.addClass(DOUBLE_CLASS)));
il.append(new INVOKEVIRTUAL(cpg.addMethodref(DOUBLE_CLASS,
DOUBLE_VALUE,
DOUBLE_VALUE_SIG)));
|