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/ForEachFunction.java

View differences:

ForEachFunction.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;
......
7 8
import org.gvsig.expressionevaluator.spi.AbstractFunction;
8 9
import org.gvsig.expressionevaluator.ExpressionRuntimeException;
9 10
import org.gvsig.expressionevaluator.MutableSymbolTable;
11
import org.gvsig.expressionevaluator.impl.function.programming.BreakFunction.BreakException;
12
import org.gvsig.expressionevaluator.impl.function.programming.ReturnFunction.ReturnException;
10 13

  
11 14
public class ForEachFunction extends AbstractFunction {
12 15
    
......
56 59
        
57 60
        Object body = null;
58 61
        String varname = getObject(interpreter, args, 0).toString();
59
        
62
        int argn = 1;
60 63
        Iterable iterable = (Iterable) getObject(interpreter, args, 1);
61 64
        for (Object value : iterable) {
62 65
            symbolTable.setVar(varname, value);
63
            body = getObject(interpreter, args, 2);
66
            try {
67
                Object x = getObject(interpreter, args, 2);
68
                body = x;
69
            } catch(BreakException ex) {
70
                break;
71
            } catch(ReturnException ex) {
72
                throw ex;
73
            } catch(Exception ex) {
74
                String stmt = "unknown";
75
                try {
76
                    stmt = Objects.toString(args);
77
                } catch(Exception ex2) {
78
                    
79
                }
80
                LOGGER.warn("Error in foreach function calling arg "+ argn + ", "+ stmt, ex);
81
                throw ex;
82
            }
83
            argn++;
64 84
        }
65 85
        return body;
66 86
    }

Also available in: Unified diff