1 29 30 package com.caucho.quercus.program; 31 32 import com.caucho.quercus.env.Env; 33 import com.caucho.quercus.env.NullValue; 34 import com.caucho.quercus.env.Value; 35 import com.caucho.quercus.expr.Expr; 36 import com.caucho.util.L10N; 37 38 import java.util.logging.Logger ; 39 40 43 abstract public class CompiledMethodRef_N extends CompiledMethodRef { 44 private static final Logger log 45 = Logger.getLogger(CompiledMethodRef_N.class.getName()); 46 private static final L10N L = new L10N(CompiledMethodRef_N.class); 47 48 private String _name; 49 private Expr []_defaultArgs; 50 51 public CompiledMethodRef_N(String name, Expr []defaultArgs) 52 { 53 _name = name; 54 55 _defaultArgs = defaultArgs; 56 } 57 58 64 public Expr []bindArguments(Env env, Expr fun, Expr []args) 65 { 66 return args; 67 } 68 69 public final Value callMethodRef(Env env, Value obj, Value []argValues) 70 { 71 Value []args; 72 73 if (_defaultArgs.length <= argValues.length) { 74 args = argValues; 75 } 76 else { 77 args = new Value[_defaultArgs.length]; 78 79 System.arraycopy(argValues, 0, args, 0, argValues.length); 80 81 for (int i = argValues.length; i < args.length; i++) { 82 if (_defaultArgs[i] != null) 83 args[i] = _defaultArgs[i].eval(env); 84 else 85 args[i] = NullValue.NULL; 86 } 87 } 88 89 return callMethodRefImpl(env, obj, args); 90 } 91 92 abstract public Value callMethodRefImpl(Env env, Value obj, Value []argValues); 93 94 97 public Value call(Env env, Value []argValues) 98 { 99 env.error(L.l("can't call {0} as a static function", 100 _name)); 101 102 return NullValue.NULL; 103 } 104 105 public String toString() 106 { 107 return "CompiledMethodRef_N[" + _name + "]"; 108 } 109 } 110 111 | Popular Tags |