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 java.lang.String | getClassName()Returns the class name of an internal type's external representation.
return(NODE_ITERATOR);
|
private void | getFirstNode(com.sun.org.apache.xalan.internal.xsltc.compiler.util.ClassGenerator classGen, com.sun.org.apache.xalan.internal.xsltc.compiler.util.MethodGenerator methodGen)Some type conversions require gettting the first node from the node-set.
This function is defined to avoid code repetition.
final ConstantPoolGen cpg = classGen.getConstantPool();
final InstructionList il = methodGen.getInstructionList();
il.append(new INVOKEINTERFACE(cpg.addInterfaceMethodref(NODE_ITERATOR,
NEXT,
NEXT_SIG), 1));
|
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 new com.sun.org.apache.bcel.internal.generic.ObjectType(NODE_ITERATOR);
|
public java.lang.String | toSignature()
return NODE_ITERATOR_SIG;
|
public java.lang.String | toString()
return "node-set";
|
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 Java Class into an internal type.
Expects the Java object on the stack, pushes the internal type
InstructionList il = methodGen.getInstructionList();
ConstantPoolGen cpg = classGen.getConstantPool();
if (clazz.getName().equals("org.w3c.dom.NodeList")) {
// w3c NodeList is on the stack from the external Java function call.
// call BasisFunction to consume NodeList and leave Iterator on
// the stack.
il.append(classGen.loadTranslet()); // push translet onto stack
il.append(methodGen.loadDOM()); // push DOM onto stack
final int convert = cpg.addMethodref(BASIS_LIBRARY_CLASS,
"nodeList2Iterator",
"("
+ "Lorg/w3c/dom/NodeList;"
+ TRANSLET_INTF_SIG
+ DOM_INTF_SIG
+ ")" + NODE_ITERATOR_SIG );
il.append(new INVOKESTATIC(convert));
}
else if (clazz.getName().equals("org.w3c.dom.Node")) {
// w3c Node is on the stack from the external Java function call.
// call BasisLibrary.node2Iterator() to consume Node and leave
// Iterator on the stack.
il.append(classGen.loadTranslet()); // push translet onto stack
il.append(methodGen.loadDOM()); // push DOM onto stack
final int convert = cpg.addMethodref(BASIS_LIBRARY_CLASS,
"node2Iterator",
"("
+ "Lorg/w3c/dom/Node;"
+ TRANSLET_INTF_SIG
+ DOM_INTF_SIG
+ ")" + NODE_ITERATOR_SIG );
il.append(new INVOKESTATIC(convert));
}
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.RealType type)Expects a node-set on the stack and pushes a real.
First the node-set is converted to string, and from string to real.
translateTo(classGen, methodGen, Type.String);
Type.String.translateTo(classGen, methodGen, Type.Real);
|
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)Expects a node-set on the stack and pushes a node.
getFirstNode(classGen, methodGen);
|
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 node-set 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, com.sun.org.apache.xalan.internal.xsltc.compiler.util.ReferenceType type)Expects a node-set on the stack and pushes a boxed node-set.
Node sets are already boxed so the translation is just a NOP.
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 node-set into the Java type denoted by clazz .
Expects a node-set on the stack and pushes an object of the appropriate
type after coercion.
final ConstantPoolGen cpg = classGen.getConstantPool();
final InstructionList il = methodGen.getInstructionList();
final String className = clazz.getName();
il.append(methodGen.loadDOM());
il.append(SWAP);
if (className.equals("org.w3c.dom.Node")) {
int index = cpg.addInterfaceMethodref(DOM_INTF,
MAKE_NODE,
MAKE_NODE_SIG2);
il.append(new INVOKEINTERFACE(index, 2));
}
else if (className.equals("org.w3c.dom.NodeList") ||
className.equals("java.lang.Object")) {
int index = cpg.addInterfaceMethodref(DOM_INTF,
MAKE_NODE_LIST,
MAKE_NODE_LIST_SIG2);
il.append(new INVOKEINTERFACE(index, 2));
}
else if (className.equals("java.lang.String")) {
int next = cpg.addInterfaceMethodref(NODE_ITERATOR,
"next", "()I");
int index = cpg.addInterfaceMethodref(DOM_INTF,
GET_NODE_VALUE,
"(I)"+STRING_SIG);
// Get next node from the iterator
il.append(new INVOKEINTERFACE(next, 1));
// Get the node's string value (from the DOM)
il.append(new INVOKEINTERFACE(index, 2));
}
else {
ErrorMsg err = new ErrorMsg(ErrorMsg.DATA_CONVERSION_ERR,
toString(), className);
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 node-set into an object of internal type
type . The translation to int is undefined
since node-sets are always converted to
reals in arithmetic expressions.
if (type == Type.String) {
translateTo(classGen, methodGen, (StringType) type);
}
else if (type == Type.Boolean) {
translateTo(classGen, methodGen, (BooleanType) type);
}
else if (type == Type.Real) {
translateTo(classGen, methodGen, (RealType) type);
}
else if (type == Type.Node) {
translateTo(classGen, methodGen, (NodeType) type);
}
else if (type == Type.Reference) {
translateTo(classGen, methodGen, (ReferenceType) type);
}
else if (type == Type.Object) {
translateTo(classGen, methodGen, (ObjectType) 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.BooleanType type)Translates a node-set into a synthesized boolean.
The boolean value of a node-set is "true" if non-empty
and "false" otherwise. Notice that the
function getFirstNode() is called in translateToDesynthesized().
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 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 a node-set into a string. The string value of a node-set is
value of its first element.
final InstructionList il = methodGen.getInstructionList();
getFirstNode(classGen, methodGen);
il.append(DUP);
final BranchHandle falsec = il.append(new IFLT(null));
Type.Node.translateTo(classGen, methodGen, type);
final BranchHandle truec = il.append(new GOTO(null));
falsec.setTarget(il.append(POP));
il.append(new PUSH(classGen.getConstantPool(), ""));
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 node-set 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.
final InstructionList il = methodGen.getInstructionList();
getFirstNode(classGen, methodGen);
return new FlowList(il.append(new IFLT(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.
methodGen.getInstructionList().append(NOP);
|