Преглед на файлове

Moved handling of MissingArgEval into IF() or CHOOSE() for non-optimised (eager argument evaluation) case

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@884389 13f79535-47bb-0310-9956-ffa450edef68
tags/REL_3_6
Josh Micich преди 14 години
родител
ревизия
43e6a9c885

+ 7
- 1
src/java/org/apache/poi/hssf/record/formula/functions/Choose.java Целия файл

@@ -17,8 +17,10 @@

package org.apache.poi.hssf.record.formula.functions;

import org.apache.poi.hssf.record.formula.eval.BlankEval;
import org.apache.poi.hssf.record.formula.eval.ErrorEval;
import org.apache.poi.hssf.record.formula.eval.EvaluationException;
import org.apache.poi.hssf.record.formula.eval.MissingArgEval;
import org.apache.poi.hssf.record.formula.eval.OperandResolver;
import org.apache.poi.hssf.record.formula.eval.ValueEval;

@@ -37,7 +39,11 @@ public final class Choose implements Function {
if (ix < 1 || ix >= args.length) {
return ErrorEval.VALUE_INVALID;
}
return OperandResolver.getSingleValue(args[ix], srcRowIndex, srcColumnIndex);
ValueEval result = OperandResolver.getSingleValue(args[ix], srcRowIndex, srcColumnIndex);
if (result == MissingArgEval.instance) {
return BlankEval.INSTANCE;
}
return result;
} catch (EvaluationException e) {
return e.getErrorEval();
}

+ 19
- 2
src/java/org/apache/poi/hssf/record/formula/functions/If.java Целия файл

@@ -17,8 +17,10 @@

package org.apache.poi.hssf.record.formula.functions;

import org.apache.poi.hssf.record.formula.eval.BlankEval;
import org.apache.poi.hssf.record.formula.eval.BoolEval;
import org.apache.poi.hssf.record.formula.eval.EvaluationException;
import org.apache.poi.hssf.record.formula.eval.MissingArgEval;
import org.apache.poi.hssf.record.formula.eval.OperandResolver;
import org.apache.poi.hssf.record.formula.eval.ValueEval;

@@ -34,7 +36,13 @@ public final class If extends Var2or3ArgFunction {
} catch (EvaluationException e) {
return e.getErrorEval();
}
return b ? arg1 : BoolEval.FALSE;
if (b) {
if (arg1 == MissingArgEval.instance) {
return BlankEval.INSTANCE;
}
return arg1;
}
return BoolEval.FALSE;
}

public ValueEval evaluate(int srcRowIndex, int srcColumnIndex, ValueEval arg0, ValueEval arg1,
@@ -45,7 +53,16 @@ public final class If extends Var2or3ArgFunction {
} catch (EvaluationException e) {
return e.getErrorEval();
}
return b ? arg1 : arg2;
if (b) {
if (arg1 == MissingArgEval.instance) {
return BlankEval.INSTANCE;
}
return arg1;
}
if (arg2 == MissingArgEval.instance) {
return BlankEval.INSTANCE;
}
return arg2;
}

public static boolean evaluateFirstArg(ValueEval arg, int srcCellRow, int srcCellCol)

+ 0
- 3
src/java/org/apache/poi/ss/formula/WorkbookEvaluator.java Целия файл

@@ -435,9 +435,6 @@ public final class WorkbookEvaluator {
}
// logDebug("invoke " + operation + " (nAgs=" + numops + ")");
opResult = OperationEvaluatorFactory.evaluate(optg, ops, ec);
if (opResult == MissingArgEval.instance) {
opResult = BlankEval.INSTANCE;
}
} else {
opResult = getEvalForPtg(ptg, ec);
}

Loading…
Отказ
Запис