}
}
@Override
protected void factorsToStack() {
AClass ftrCls1 = factor1.getParamterizedType();
AClass ftrCls2 = factor2.getParamterizedType();
if(ftrCls1.isPrimitive() || ftrCls2.isPrimitive()){
log.debug("push the first factor to stack");
factor1.loadToStack(block);
if(!ftrCls1.isPrimitive()){
log.debug("unbox " + ftrCls1);
insnHelper.unbox(ftrCls1.getType());
}
boolean isNumerical = (targetClass.getCastOrder() >= AClass.BYTE_ACLASS.getCastOrder() &&
targetClass.getCastOrder() <= AClass.DOUBLE_ACLASS.getCastOrder());
if(isNumerical){
if(!ftrCls1.equals(targetClass) &&
targetClass.getCastOrder() > AClass.INT_ACLASS.getCastOrder()){
log.debug("cast from " + ftrCls1 + " to " + targetClass);
insnHelper.cast(ftrCls1.getType(), targetClass.getType());
}
}
log.debug("push the second factor to stack");
factor2.loadToStack(block);
if(!ftrCls2.isPrimitive()){
log.debug("unbox " + ftrCls1);
insnHelper.unbox(ftrCls2.getType());
}
if(isNumerical){
if(!ftrCls2.equals(targetClass) &&
targetClass.getCastOrder() > AClass.INT_ACLASS.getCastOrder()){
log.debug("cast from " + ftrCls2 + " to " + targetClass);
insnHelper.cast(ftrCls2.getType(), targetClass.getType());
}
}
}else{
log.debug("push the first factor to stack");
factor1.loadToStack(block);