/* Generated By:JJTree: Do not edit this line. ASTAtTransform.java Version 4.3 */ /* JavaCCOptions:MULTI=true,NODE_USES_PARSER=true,VISITOR=false,TRACK_TOKENS=false,NODE_PREFIX=AST,NODE_EXTENDS=,NODE_FACTORY=,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */ package org.openntf.formula.ast; import java.util.Set; import org.openntf.formula.EvaluateException; import org.openntf.formula.FormulaContext; import org.openntf.formula.FormulaReturnException; import org.openntf.formula.ValueHolder; import org.openntf.formula.ValueHolder.DataType; import org.openntf.formula.parse.AtFormulaParserImpl; public class ASTAtTransform extends SimpleNode { public ASTAtTransform(final AtFormulaParserImpl p, final int id) { super(p, id); } @SuppressWarnings("deprecation") @Override public ValueHolder evaluate(final FormulaContext ctx) throws FormulaReturnException { try { ValueHolder list = children[0].evaluate(ctx); if (list.dataType == DataType.ERROR) return list; ValueHolder temp = children[1].evaluate(ctx); if (temp.dataType == DataType.ERROR) return temp; String varName = temp.getString(0).toLowerCase(); ValueHolder[] tmpHolders = new ValueHolder[list.size]; int valueSize = 0; int holders = 0; for (int i = 0; i < list.size; i++) { ValueHolder iter = list.newInstance(1); switch (list.dataType) { case INTEGER: iter.add(list.getInt(i)); break; case DOUBLE: iter.add(list.getDouble(i)); break; case BOOLEAN: iter.add(list.getBoolean(i)); break; default: iter.add(list.getObject(i)); } ValueHolder old = ctx.setVarLC(varName, iter); try { // Cumulate all return values ValueHolder vh = children[2].evaluate(ctx); if (vh != ValueHolder.valueNothing()) { valueSize += vh.size; tmpHolders[holders++] = vh; if (vh.dataType == DataType.ERROR) return vh; } } finally { ctx.setVarLC(varName, old); } } if (holders == 0) return null; ValueHolder vhRet = tmpHolders[0].newInstance(valueSize); for (int i = 0; i < holders; i++) { vhRet.addAll(tmpHolders[i]); } return vhRet; } catch (RuntimeException cause) { return ValueHolder.valueOf(new EvaluateException(codeLine, codeColumn, cause)); } } @Override protected void analyzeThis(final Set<String> readFields, final Set<String> modifiedFields, final Set<String> variables, final Set<String> functions) { functions.add("@transform"); } } /* JavaCC - OriginalChecksum=31c61346c6eb18629c143c94ecab660b (do not edit this line) */