1 29 30 package com.caucho.quercus.expr; 31 32 import com.caucho.quercus.env.ArrayValue; 33 import com.caucho.quercus.env.Env; 34 import com.caucho.quercus.env.NullValue; 35 import com.caucho.quercus.env.Value; 36 37 40 public class ListEachExpr extends Expr { 41 protected final AbstractVarExpr _keyVar; 42 protected final AbstractVarExpr _valueVar; 43 protected final Expr _value; 44 45 public ListEachExpr(Expr []varList, EachExpr each) 46 { 47 if (varList.length > 0) { 48 _keyVar = (AbstractVarExpr) varList[0]; 50 } 51 else 52 _keyVar = null; 53 54 if (varList.length > 1) { 55 _valueVar = (AbstractVarExpr) varList[1]; 57 } 58 else 59 _valueVar = null; 60 61 _value = each.getExpr(); 62 } 63 64 71 public Value eval(Env env) 72 { 73 Value value = _value.eval(env); 74 75 if (! (value instanceof ArrayValue)) 76 return NullValue.NULL; 77 78 ArrayValue array = (ArrayValue) value; 79 83 84 if (_keyVar != null) 85 _keyVar.evalAssign(env, array.key()); 86 87 if (_valueVar != null) 88 _valueVar.evalAssign(env, array.current()); 89 90 return array.each(); 91 } 92 93 100 public boolean evalBoolean(Env env) 101 { 102 Value value = _value.eval(env); 103 104 if (! (value instanceof ArrayValue)) 105 return false; 106 107 ArrayValue array = (ArrayValue) value; 108 109 if (! array.hasCurrent()) 110 return false; 111 112 if (_keyVar != null) 113 _keyVar.evalAssign(env, array.key()); 114 115 if (_valueVar != null) 116 _valueVar.evalAssign(env, array.current()); 117 118 array.next(); 119 120 return true; 121 } 122 } 123 124 | Popular Tags |