Revision 47017 trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/function/programming/WhileFunction.java

View differences:

WhileFunction.java
1 1
package org.gvsig.expressionevaluator.impl.function.programming;
2 2

  
3
import java.util.Objects;
3 4
import org.apache.commons.lang3.Range;
4 5
import org.gvsig.expressionevaluator.Codes;
5 6
import org.gvsig.expressionevaluator.Function;
6 7
import org.gvsig.expressionevaluator.Interpreter;
8
import org.gvsig.expressionevaluator.impl.function.programming.BreakFunction.BreakException;
9
import org.gvsig.expressionevaluator.impl.function.programming.ReturnFunction.ReturnException;
7 10
import org.gvsig.expressionevaluator.spi.AbstractFunction;
8 11

  
9 12

  
......
46 49
    @Override
47 50
    public Object call(Interpreter interpreter, Codes args) throws Exception {
48 51
        Object body = null;
52
        int argn = 0;
49 53
        boolean condition = getBoolean(interpreter, args, 0);
50 54
        while( condition ) {
51
            body = getObject(interpreter, args, 1);
55
            try {
56
                body = getObject(interpreter, args, 1);
57
            } catch(BreakException ex) {
58
                break;
59
            } catch(ReturnException ex) {
60
                throw ex;
61
            } catch(Exception ex) {
62
                String stmt = "unknown";
63
                try {
64
                    stmt = Objects.toString(args);
65
                } catch(Exception ex2) {
66
                    
67
                }
68
                LOGGER.warn("Error in while function calling arg "+ argn + ", "+ stmt, ex);
69
                throw ex;
70
            }
52 71
            condition = getBoolean(interpreter, args, 0);
72
            argn++;
53 73
        }
54 74
        return body;
55 75
    }

Also available in: Unified diff