Methods Summary |
---|
public boolean | hasLastCall()Returns true if this expressions contains a call to last()
return (_left.hasLastCall() || _right.hasLastCall());
|
public boolean | hasPositionCall()Returns true if this expressions contains a call to position(). This is
needed for context changes in node steps containing multiple predicates.
if (_left.hasPositionCall()) return true;
if (_right.hasPositionCall()) return true;
return false;
|
public void | setParser(com.sun.org.apache.xalan.internal.xsltc.compiler.Parser parser)
super.setParser(parser);
_left.setParser(parser);
_right.setParser(parser);
|
public java.lang.String | toString()
return Ops[_op] + '(" + _left + ", " + _right + ')";
|
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)
final InstructionList il = methodGen.getInstructionList();
_left.translate(classGen, methodGen);
_right.translate(classGen, methodGen);
switch (_op) {
case PLUS:
il.append(_type.ADD());
break;
case MINUS:
il.append(_type.SUB());
break;
case TIMES:
il.append(_type.MUL());
break;
case DIV:
il.append(_type.DIV());
break;
case MOD:
il.append(_type.REM());
break;
default:
ErrorMsg msg = new ErrorMsg(ErrorMsg.ILLEGAL_BINARY_OP_ERR, this);
getParser().reportError(Constants.ERROR, msg);
}
|
public com.sun.org.apache.xalan.internal.xsltc.compiler.util.Type | typeCheck(com.sun.org.apache.xalan.internal.xsltc.compiler.SymbolTable stable)
final Type tleft = _left.typeCheck(stable);
final Type tright = _right.typeCheck(stable);
final MethodType ptype = lookupPrimop(stable, Ops[_op],
new MethodType(Type.Void,
tleft, tright));
if (ptype != null) {
final Type arg1 = (Type) ptype.argsType().elementAt(0);
if (!arg1.identicalTo(tleft)) {
_left = new CastExpr(_left, arg1);
}
final Type arg2 = (Type) ptype.argsType().elementAt(1);
if (!arg2.identicalTo(tright)) {
_right = new CastExpr(_right, arg1);
}
return _type = ptype.resultType();
}
throw new TypeCheckError(this);
|