1 29 30 package com.caucho.quercus.expr; 31 32 import com.caucho.quercus.Location; 33 import com.caucho.quercus.env.Env; 34 import com.caucho.quercus.env.Value; 35 import com.caucho.quercus.program.AbstractFunction; 36 import com.caucho.util.L10N; 37 38 import java.util.ArrayList ; 39 40 43 public class VarMethodCallExpr extends Expr { 44 private static final L10N L = new L10N(VarMethodCallExpr.class); 45 46 protected final Expr _objExpr; 47 48 protected final Expr _name; 49 protected final Expr []_args; 50 51 protected Expr []_fullArgs; 52 53 private AbstractFunction _fun; 54 55 public VarMethodCallExpr(Location location, Expr objExpr, Expr name, ArrayList <Expr> args) 56 { 57 super(location); 58 _objExpr = objExpr; 59 60 _name = name; 61 62 _args = new Expr[args.size()]; 63 args.toArray(_args); 64 } 65 66 public VarMethodCallExpr(Location location, Expr objExpr, Expr name, Expr []args) 67 { 68 super(location); 69 _objExpr = objExpr; 70 71 _name = name; 72 73 _args = args; 74 } 75 76 public VarMethodCallExpr(Expr objExpr, Expr name, ArrayList <Expr> args) 77 { 78 this(Location.UNKNOWN, objExpr, name, args); 79 } 80 81 public VarMethodCallExpr(Expr objExpr, Expr name, Expr []args) 82 { 83 this(Location.UNKNOWN, objExpr, name, args); 84 } 85 86 93 public Value eval(Env env) 94 { 95 Value []values = new Value[_args.length]; 96 97 for (int i = 0; i < values.length; i++) { 98 values[i] = _args[i].evalArg(env); 99 } 100 101 return _objExpr.eval(env).callMethod(env, _name.evalString(env), values); 102 } 103 104 public String toString() 105 { 106 return _objExpr + "->" + _name + "()"; 107 } 108 } 109 110 | Popular Tags |