ContainsCallpublic final class ContainsCall extends FunctionCall
Fields Summary |
---|
private Expression | _base | private Expression | _token |
Constructors Summary |
---|
public ContainsCall(QName fname, Vector arguments)Create a contains() call - two arguments, both strings
super(fname, arguments);
|
Methods Summary |
---|
public boolean | isBoolean()This XPath function returns true/false values
return true;
| 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)Compile the expression - leave boolean expression on stack
translateDesynthesized(classGen, methodGen);
synthesize(classGen, methodGen);
| 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)Compile expression and update true/false-lists
final ConstantPoolGen cpg = classGen.getConstantPool();
final InstructionList il = methodGen.getInstructionList();
_base.translate(classGen, methodGen);
_token.translate(classGen, methodGen);
il.append(new INVOKEVIRTUAL(cpg.addMethodref(STRING_CLASS,
"indexOf",
"("+STRING_SIG+")I")));
_falseList.add(il.append(new IFLT(null)));
| public com.sun.org.apache.xalan.internal.xsltc.compiler.util.Type | typeCheck(com.sun.org.apache.xalan.internal.xsltc.compiler.SymbolTable stable)Type check the two parameters for this function
// Check that the function was passed exactly two arguments
if (argumentCount() != 2) {
throw new TypeCheckError(ErrorMsg.ILLEGAL_ARG_ERR, getName(), this);
}
// The first argument must be a String, or cast to a String
_base = argument(0);
Type baseType = _base.typeCheck(stable);
if (baseType != Type.String)
_base = new CastExpr(_base, Type.String);
// The second argument must also be a String, or cast to a String
_token = argument(1);
Type tokenType = _token.typeCheck(stable);
if (tokenType != Type.String)
_token = new CastExpr(_token, Type.String);
return _type = Type.Boolean;
|
|