1 29 30 package com.caucho.quercus.expr; 31 32 import com.caucho.quercus.Location; 33 import com.caucho.quercus.env.ArrayValue; 34 import com.caucho.quercus.env.ArrayValueImpl; 35 import com.caucho.quercus.env.Env; 36 import com.caucho.quercus.env.Value; 37 38 import java.util.ArrayList ; 39 40 43 public class ArrayFunExpr extends Expr { 44 protected final Expr []_keys; 45 protected final Expr []_values; 46 47 public ArrayFunExpr(Location location, 48 ArrayList <Expr> keyList, 49 ArrayList <Expr> valueList) 50 { 51 super(location); 52 _keys = new Expr[keyList.size()]; 53 keyList.toArray(_keys); 54 55 _values = new Expr[valueList.size()]; 56 valueList.toArray(_values); 57 } 58 59 public ArrayFunExpr(Location location, Expr []keys, Expr []values) 60 { 61 super(location); 62 _keys = keys; 63 _values = values; 64 } 65 66 public ArrayFunExpr(ArrayList <Expr> keyList, ArrayList <Expr> valueList) 67 { 68 this(Location.UNKNOWN, keyList, valueList); 69 } 70 71 public ArrayFunExpr(Expr []keys, Expr []values) 72 { 73 this(Location.UNKNOWN, keys, values); 74 } 75 76 79 public boolean isConstant() 80 { 81 for (int i = 0; i < _keys.length; i++) { 82 if (_keys[i] != null && ! _keys[i].isLiteral()) 83 return false; 84 } 85 86 for (int i = 0; i < _values.length; i++) { 87 if (_values[i] != null && ! _values[i].isLiteral()) 88 return false; 89 } 90 91 return true; 92 } 93 94 101 public Value eval(Env env) 102 { 103 ArrayValue array = new ArrayValueImpl(); 104 105 for (int i = 0; i < _values.length; i++) { 106 Expr keyExpr = _keys[i]; 107 Value value = _values[i].evalArg(env); 108 109 value = value.toArgValue(); 110 111 if (keyExpr != null) { 112 Value key = keyExpr.evalArg(env).toArgValue(); 113 114 array.put(key, value); 115 } 116 else 117 array.put(value); 118 } 119 120 return array; 121 } 122 123 public String toString() 124 { 125 return "array()"; 126 } 127 } 128 129 | Popular Tags |