ReferenceTypepublic final class ReferenceType extends Type
Constructors Summary |
---|
protected ReferenceType()
|
Methods Summary |
---|
public com.sun.org.apache.bcel.internal.generic.Instruction | LOAD(int slot)
return new ALOAD(slot);
| public com.sun.org.apache.bcel.internal.generic.Instruction | STORE(int slot)
return new ASTORE(slot);
| 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.OBJECT;
| public java.lang.String | toSignature()
return "Ljava/lang/Object;";
| public java.lang.String | toString()
return "reference";
| 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.
| 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 Java type into a reference. Only conversion
allowed is from java.lang.Object.
if (clazz.getName().equals("java.lang.Object")) {
methodGen.getInstructionList().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.NodeSetType type)Casts a reference into a NodeIterator.
final ConstantPoolGen cpg = classGen.getConstantPool();
final InstructionList il = methodGen.getInstructionList();
int index = cpg.addMethodref(BASIS_LIBRARY_CLASS, "referenceToNodeSet",
"("
+ OBJECT_SIG
+ ")"
+ NODE_ITERATOR_SIG);
il.append(new INVOKESTATIC(index));
// Reset this iterator
index = cpg.addInterfaceMethodref(NODE_ITERATOR, RESET, RESET_SIG);
il.append(new INVOKEINTERFACE(index, 1));
| 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.NodeType type)Casts a reference into a Node.
translateTo(classGen, methodGen, Type.NodeSet);
Type.NodeSet.translateTo(classGen, methodGen, type);
| 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.ResultTreeType type)Casts a reference into a ResultTree.
final ConstantPoolGen cpg = classGen.getConstantPool();
final InstructionList il = methodGen.getInstructionList();
int index = cpg.addMethodref(BASIS_LIBRARY_CLASS, "referenceToResultTree",
"(" + OBJECT_SIG + ")" + DOM_INTF_SIG);
il.append(new INVOKESTATIC(index));
| 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.ObjectType type)Subsume reference into ObjectType.
methodGen.getInstructionList().append(NOP);
| 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 reference into the Java type denoted by clazz .
final ConstantPoolGen cpg = classGen.getConstantPool();
final InstructionList il = methodGen.getInstructionList();
int referenceToLong = cpg.addMethodref(BASIS_LIBRARY_CLASS,
"referenceToLong",
"(" + OBJECT_SIG + ")J");
int referenceToDouble = cpg.addMethodref(BASIS_LIBRARY_CLASS,
"referenceToDouble",
"(" + OBJECT_SIG + ")D");
int referenceToBoolean = cpg.addMethodref(BASIS_LIBRARY_CLASS,
"referenceToBoolean",
"(" + OBJECT_SIG + ")Z");
if (clazz.getName().equals("java.lang.Object")) {
il.append(NOP);
}
else if (clazz == Double.TYPE) {
il.append(new INVOKESTATIC(referenceToDouble));
}
else if (clazz.getName().equals("java.lang.Double")) {
il.append(new INVOKESTATIC(referenceToDouble));
Type.Real.translateTo(classGen, methodGen, Type.Reference);
}
else if (clazz == Float.TYPE) {
il.append(new INVOKESTATIC(referenceToDouble));
il.append(D2F);
}
else if (clazz.getName().equals("java.lang.String")) {
int index = cpg.addMethodref(BASIS_LIBRARY_CLASS, "referenceToString",
"("
+ OBJECT_SIG
+ DOM_INTF_SIG
+ ")"
+ "Ljava/lang/String;");
il.append(methodGen.loadDOM());
il.append(new INVOKESTATIC(index));
}
else if (clazz.getName().equals("org.w3c.dom.Node")) {
int index = cpg.addMethodref(BASIS_LIBRARY_CLASS, "referenceToNode",
"("
+ OBJECT_SIG
+ DOM_INTF_SIG
+ ")"
+ "Lorg/w3c/dom/Node;");
il.append(methodGen.loadDOM());
il.append(new INVOKESTATIC(index));
}
else if (clazz.getName().equals("org.w3c.dom.NodeList")) {
int index = cpg.addMethodref(BASIS_LIBRARY_CLASS, "referenceToNodeList",
"("
+ OBJECT_SIG
+ DOM_INTF_SIG
+ ")"
+ "Lorg/w3c/dom/NodeList;");
il.append(methodGen.loadDOM());
il.append(new INVOKESTATIC(index));
}
else if (clazz.getName().equals("com.sun.org.apache.xalan.internal.xsltc.DOM")) {
translateTo(classGen, methodGen, Type.ResultTree);
}
else if (clazz == Long.TYPE) {
il.append(new INVOKESTATIC(referenceToLong));
}
else if (clazz == Integer.TYPE) {
il.append(new INVOKESTATIC(referenceToLong));
il.append(L2I);
}
else if (clazz == Short.TYPE) {
il.append(new INVOKESTATIC(referenceToLong));
il.append(L2I);
il.append(I2S);
}
else if (clazz == Byte.TYPE) {
il.append(new INVOKESTATIC(referenceToLong));
il.append(L2I);
il.append(I2B);
}
else if (clazz == Character.TYPE) {
il.append(new INVOKESTATIC(referenceToLong));
il.append(L2I);
il.append(I2C);
}
else if (clazz == java.lang.Boolean.TYPE) {
il.append(new INVOKESTATIC(referenceToBoolean));
}
else if (clazz.getName().equals("java.lang.Boolean")) {
il.append(new INVOKESTATIC(referenceToBoolean));
Type.Boolean.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 reference to an object of internal type type .
The translation to int is undefined since references
are always converted to reals in arithmetic expressions.
if (type == Type.String) {
translateTo(classGen, methodGen, (StringType) type);
}
else if (type == Type.Real) {
translateTo(classGen, methodGen, (RealType) type);
}
else if (type == Type.Boolean) {
translateTo(classGen, methodGen, (BooleanType) type);
}
else if (type == Type.NodeSet) {
translateTo(classGen, methodGen, (NodeSetType) type);
}
else if (type == Type.Node) {
translateTo(classGen, methodGen, (NodeType) type);
}
else if (type == Type.ResultTree) {
translateTo(classGen, methodGen, (ResultTreeType) type);
}
else if (type == Type.Object) {
translateTo(classGen, methodGen, (ObjectType) type);
}
else if (type == Type.Reference ) {
}
else {
ErrorMsg err = new ErrorMsg(ErrorMsg.INTERNAL_ERR, 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)Translates reference into object of internal type type .
final int current = methodGen.getLocalIndex("current");
ConstantPoolGen cpg = classGen.getConstantPool();
InstructionList il = methodGen.getInstructionList();
// If no current, conversion is a top-level
if (current < 0) {
il.append(new PUSH(cpg, DTM.ROOT_NODE)); // push root node
}
else {
il.append(new ILOAD(current));
}
il.append(methodGen.loadDOM());
final int stringF = cpg.addMethodref(BASIS_LIBRARY_CLASS,
"stringF",
"("
+ OBJECT_SIG
+ NODE_SIG
+ DOM_INTF_SIG
+ ")" + STRING_SIG);
il.append(new INVOKESTATIC(stringF));
| 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.RealType type)Translates a reference into an object of internal type type .
final ConstantPoolGen cpg = classGen.getConstantPool();
final InstructionList il = methodGen.getInstructionList();
il.append(methodGen.loadDOM());
int index = cpg.addMethodref(BASIS_LIBRARY_CLASS, "numberF",
"("
+ OBJECT_SIG
+ DOM_INTF_SIG
+ ")D");
il.append(new INVOKESTATIC(index));
| 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)Translates a reference to an object of internal type type .
final ConstantPoolGen cpg = classGen.getConstantPool();
final InstructionList il = methodGen.getInstructionList();
int index = cpg.addMethodref(BASIS_LIBRARY_CLASS, "booleanF",
"("
+ OBJECT_SIG
+ ")Z");
il.append(new INVOKESTATIC(index));
| 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)Expects a reference on the stack and translates it to 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.
InstructionList il = methodGen.getInstructionList();
translateTo(classGen, methodGen, type);
return new FlowList(il.append(new IFEQ(null)));
| 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.
|
|