Methods Summary |
---|
public void | backPatchFalseList(com.sun.org.apache.bcel.internal.generic.InstructionHandle ih)
_falseList.backPatch(ih);
|
public void | backPatchTrueList(com.sun.org.apache.bcel.internal.generic.InstructionHandle ih)
_trueList.backPatch(ih);
|
public final com.sun.org.apache.bcel.internal.generic.InstructionList | compile(com.sun.org.apache.xalan.internal.xsltc.compiler.util.ClassGenerator classGen, com.sun.org.apache.xalan.internal.xsltc.compiler.util.MethodGenerator methodGen)Translate this node into a fresh instruction list.
The original instruction list is saved and restored.
final InstructionList result, save = methodGen.getInstructionList();
methodGen.setInstructionList(result = new InstructionList());
translate(classGen, methodGen);
methodGen.setInstructionList(save);
return result;
|
public void | desynthesize(com.sun.org.apache.xalan.internal.xsltc.compiler.util.ClassGenerator classGen, com.sun.org.apache.xalan.internal.xsltc.compiler.util.MethodGenerator methodGen)
final InstructionList il = methodGen.getInstructionList();
_falseList.add(il.append(new IFEQ(null)));
|
public java.lang.Object | evaluateAtCompileTime()Returns an object representing the compile-time evaluation
of an expression. We are only using this for function-available
and element-available at this time.
return null;
|
public com.sun.org.apache.xalan.internal.xsltc.compiler.FlowList | getFalseList()
return _falseList;
|
public com.sun.org.apache.xalan.internal.xsltc.compiler.FlowList | getTrueList()
return _trueList;
|
public com.sun.org.apache.xalan.internal.xsltc.compiler.util.Type | getType()
return _type;
|
public boolean | hasLastCall()
return false;
|
public boolean | hasPositionCall()
return false; // default should be 'false' for StepPattern
|
public com.sun.org.apache.xalan.internal.xsltc.compiler.util.MethodType | lookupPrimop(com.sun.org.apache.xalan.internal.xsltc.compiler.SymbolTable stable, java.lang.String op, com.sun.org.apache.xalan.internal.xsltc.compiler.util.MethodType ctype)Search for a primop in the symbol table that matches the method type
ctype . Two methods match if they have the same arity.
If a primop is overloaded then the "closest match" is returned. The
first entry in the vector of primops that has the right arity is
considered to be the default one.
MethodType result = null;
final Vector primop = stable.lookupPrimop(op);
if (primop != null) {
final int n = primop.size();
int minDistance = Integer.MAX_VALUE;
for (int i = 0; i < n; i++) {
final MethodType ptype = (MethodType) primop.elementAt(i);
// Skip if different arity
if (ptype.argsCount() != ctype.argsCount()) {
continue;
}
// The first method with the right arity is the default
if (result == null) {
result = ptype; // default method
}
// Check if better than last one found
final int distance = ctype.distanceTo(ptype);
if (distance < minDistance) {
minDistance = distance;
result = ptype;
}
}
}
return result;
|
public void | startIterator(com.sun.org.apache.xalan.internal.xsltc.compiler.util.ClassGenerator classGen, com.sun.org.apache.xalan.internal.xsltc.compiler.util.MethodGenerator methodGen)If this expression is of type node-set and it is not a variable
reference, then call setStartNode() passing the context node.
// Ignore if type is not node-set
if (_type instanceof NodeSetType == false) {
return;
}
// setStartNode() should not be called if expr is a variable ref
Expression expr = this;
if (expr instanceof CastExpr) {
expr = ((CastExpr) expr).getExpr();
}
if (expr instanceof VariableRefBase == false) {
final InstructionList il = methodGen.getInstructionList();
il.append(methodGen.loadContextNode());
il.append(methodGen.setStartNode());
}
|
public void | synthesize(com.sun.org.apache.xalan.internal.xsltc.compiler.util.ClassGenerator classGen, com.sun.org.apache.xalan.internal.xsltc.compiler.util.MethodGenerator methodGen)Synthesize a boolean expression, i.e., either push a 0 or 1 onto the
operand stack for the next statement to succeed. Returns the handle
of the instruction to be backpatched.
final ConstantPoolGen cpg = classGen.getConstantPool();
final InstructionList il = methodGen.getInstructionList();
_trueList.backPatch(il.append(ICONST_1));
final BranchHandle truec = il.append(new GOTO_W(null));
_falseList.backPatch(il.append(ICONST_0));
truec.setTarget(il.append(NOP));
|
public abstract java.lang.String | toString()
|
public void | translate(com.sun.org.apache.xalan.internal.xsltc.compiler.util.ClassGenerator classGen, com.sun.org.apache.xalan.internal.xsltc.compiler.util.MethodGenerator methodGen)Translate this node into JVM bytecodes.
ErrorMsg msg = new ErrorMsg(ErrorMsg.NOT_IMPLEMENTED_ERR,
getClass(), this);
getParser().reportError(FATAL, msg);
|
public void | translateDesynthesized(com.sun.org.apache.xalan.internal.xsltc.compiler.util.ClassGenerator classGen, com.sun.org.apache.xalan.internal.xsltc.compiler.util.MethodGenerator methodGen)Redefined by expressions of type boolean that use flow lists.
translate(classGen, methodGen);
if (_type instanceof BooleanType) {
desynthesize(classGen, methodGen);
}
|
public com.sun.org.apache.xalan.internal.xsltc.compiler.util.Type | typeCheck(com.sun.org.apache.xalan.internal.xsltc.compiler.SymbolTable stable)Type check all the children of this node.
return typeCheckContents(stable);
|