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.QuercusClass; 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 ClassMethodExpr extends Expr { 45 private static final L10N L = new L10N(ClassMethodExpr.class); 46 47 protected final String _className; 48 protected final String _name; 49 protected final Expr []_args; 50 51 protected boolean _isMethod; 52 53 public ClassMethodExpr(Location location, String className, String name, ArrayList <Expr> args) 54 { 55 super(location); 56 _className = className.intern(); 57 58 _name = name.intern(); 59 60 _args = new Expr[args.size()]; 61 args.toArray(_args); 62 } 63 64 public ClassMethodExpr(Location location, String className, String name, Expr []args) 65 { 66 super(location); 67 _className = className.intern(); 68 69 _name = name.intern(); 70 71 _args = args; 72 } 73 74 public ClassMethodExpr(String className, String name, ArrayList <Expr> args) 75 { 76 this(Location.UNKNOWN, className, name, args); 77 } 78 79 public ClassMethodExpr(String className, String name, Expr []args) 80 { 81 this(Location.UNKNOWN, className, name, args); 82 } 83 84 91 public Value eval(Env env) 92 { 93 QuercusClass cl = env.findClass(_className); 94 95 if (cl == null) 96 throw env.errorException(L.l("{0} is an unknown class", _className)); 97 98 AbstractFunction fun = cl.findFunction(_name); 99 100 if (fun == null) 101 throw env.errorException(L.l("{0}::{1} is an unknown method", 102 _className, _name)); 103 104 Value []values = new Value[_args.length]; 105 106 for (int i = 0; i < values.length; i++) 107 values[i] = _args[i].eval(env); 108 109 return fun.callMethod(env, env.getThis(), values); 110 } 111 112 public String toString() 113 { 114 return _className + "::" + _name + "()"; 115 } 116 } 117 118 | Popular Tags |