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.NullValue; 35 import com.caucho.quercus.env.Value; 36 import com.caucho.quercus.program.AbstractFunction; 37 import com.caucho.util.L10N; 38 39 import java.util.ArrayList ; 40 41 44 public class MethodCallExpr extends Expr { 45 private static final L10N L = new L10N(MethodCallExpr.class); 46 47 protected final Expr _objExpr; 48 49 protected final String _name; 50 protected final Expr []_args; 51 52 public MethodCallExpr(Location location, 53 Expr objExpr, 54 String name, 55 ArrayList <Expr> args) 56 { 57 super(location); 58 _objExpr = objExpr; 59 60 _name = name.intern(); 61 62 _args = new Expr[args.size()]; 63 args.toArray(_args); 64 } 65 66 public MethodCallExpr(Expr objExpr, String name, ArrayList <Expr> args) 67 { 68 this(Location.UNKNOWN, objExpr, name, args); 69 } 70 71 public String getName() 72 { 73 return _name; 74 } 75 76 83 public Value eval(Env env) 84 { 85 env.checkTimeout(); 86 87 Value obj = _objExpr.eval(env); 88 89 Value []args = new Value[_args.length]; 90 91 for (int i = 0; i < _args.length; i++) 92 args[i] = _args[i].evalArg(env); 93 94 env.pushCall(this, obj); 95 96 try { 97 env.checkTimeout(); 98 99 return obj.callMethod(env, _name, args); 100 } finally { 101 env.popCall(); 102 } 103 } 104 105 112 public Value evalRef(Env env) 113 { 114 env.checkTimeout(); 115 116 Value obj = _objExpr.eval(env); 117 118 Value []args = new Value[_args.length]; 119 120 for (int i = 0; i < _args.length; i++) 121 args[i] = _args[i].evalArg(env); 122 123 env.pushCall(this, obj); 124 125 try { 126 env.checkTimeout(); 127 128 return obj.callMethodRef(env, _name, args); 129 } finally { 130 env.popCall(); 131 } 132 } 133 134 public String toString() 135 { 136 return _objExpr + "->" + _name + "()"; 137 } 138 } 139 140 | Popular Tags |