You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by jo...@apache.org on 2009/11/26 03:57:25 UTC

svn commit: r884389 - in /poi/trunk/src/java/org/apache/poi: hssf/record/formula/functions/Choose.java hssf/record/formula/functions/If.java ss/formula/WorkbookEvaluator.java

Author: josh
Date: Thu Nov 26 02:57:24 2009
New Revision: 884389

URL: http://svn.apache.org/viewvc?rev=884389&view=rev
Log:
Moved handling of MissingArgEval into IF() or CHOOSE() for non-optimised (eager argument evaluation) case

Modified:
    poi/trunk/src/java/org/apache/poi/hssf/record/formula/functions/Choose.java
    poi/trunk/src/java/org/apache/poi/hssf/record/formula/functions/If.java
    poi/trunk/src/java/org/apache/poi/ss/formula/WorkbookEvaluator.java

Modified: poi/trunk/src/java/org/apache/poi/hssf/record/formula/functions/Choose.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/formula/functions/Choose.java?rev=884389&r1=884388&r2=884389&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/formula/functions/Choose.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/formula/functions/Choose.java Thu Nov 26 02:57:24 2009
@@ -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 @@
 			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();
 		}

Modified: poi/trunk/src/java/org/apache/poi/hssf/record/formula/functions/If.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/formula/functions/If.java?rev=884389&r1=884388&r2=884389&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/formula/functions/If.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/formula/functions/If.java Thu Nov 26 02:57:24 2009
@@ -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 @@
 		} 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 @@
 		} 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)

Modified: poi/trunk/src/java/org/apache/poi/ss/formula/WorkbookEvaluator.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/WorkbookEvaluator.java?rev=884389&r1=884388&r2=884389&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/WorkbookEvaluator.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/WorkbookEvaluator.java Thu Nov 26 02:57:24 2009
@@ -435,9 +435,6 @@
 				}
 //				logDebug("invoke " + operation + " (nAgs=" + numops + ")");
 				opResult = OperationEvaluatorFactory.evaluate(optg, ops, ec);
-				if (opResult == MissingArgEval.instance) {
-					opResult = BlankEval.INSTANCE;
-				}
 			} else {
 				opResult = getEvalForPtg(ptg, ec);
 			}



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org