1 29 30 package com.caucho.quercus.lib; 31 32 import com.caucho.quercus.Quercus; 33 import com.caucho.quercus.QuercusException; 34 import com.caucho.quercus.annotation.VariableArguments; 35 import com.caucho.quercus.env.*; 36 import com.caucho.quercus.module.AbstractQuercusModule; 37 import com.caucho.util.L10N; 38 39 import java.io.IOException ; 40 import java.util.logging.Level ; 41 import java.util.logging.Logger ; 42 43 46 public class FunctionModule extends AbstractQuercusModule { 47 private static final L10N L = new L10N(FunctionModule.class); 48 49 private static final Logger log 50 = Logger.getLogger(FunctionModule.class.getName()); 51 52 55 public static Value call_user_func(Env env, 56 Callback function, 57 Value []args) 58 { 59 return function.call(env, args).copyReturn(); 60 } 61 62 65 public static Value call_user_func_array(Env env, 66 Callback function, 67 Value arg) 68 { 69 ArrayValue argArray; 70 71 if (arg instanceof ArrayValue) 72 argArray = (ArrayValue) arg; 73 else 74 argArray = new ArrayValueImpl().append(arg); 75 76 Value []args; 77 78 if (argArray != null) { 79 args = new Value[argArray.getSize()]; 80 81 int i = 0; 82 for (ArrayValue.Entry head = argArray.getHead(); 83 head != null; 84 head = head.getNext()) { 85 args[i++] = head.getRawValue(); } 87 } 88 else 89 args = new Value[0]; 90 91 return function.call(env, args).copyReturn(); 92 } 93 94 97 public static Value create_function(Env env, 98 String args, 99 String code) 100 { 101 if (log.isLoggable(Level.FINER)) 102 log.finer(code); 103 104 try { 105 Quercus quercus = env.getQuercus(); 106 107 return quercus.parseFunction(args, code); 108 } catch (IOException e) { 109 throw new QuercusException(e); 110 } 111 } 112 113 116 public static Value get_defined_functions(Env env) 117 { 118 return env.getDefinedFunctions(); 119 } 120 121 124 @VariableArguments 125 public static Value func_get_arg(Env env, int index) 126 { 127 Value []args = env.getFunctionArgs(); 128 129 if (0 <= index && index < args.length) 130 return args[index]; 131 else { 132 return NullValue.NULL; 134 } 135 } 136 137 140 @VariableArguments 141 public static Value func_get_args(Env env) 142 { 143 Value []args = env.getFunctionArgs(); 144 145 ArrayValue result = new ArrayValueImpl(); 146 for (int i = 0; i < args.length; i++) 147 result.put(args[i]); 148 149 return result; 150 } 151 152 155 @VariableArguments 156 public static Value func_num_args(Env env) 157 { 158 Value []args = env.getFunctionArgs(); 159 160 if (args != null && args.length > 0) 161 return new LongValue(args.length); 162 else 163 return LongValue.ZERO; 164 } 165 166 172 public static boolean function_exists(Env env, String name) 173 { 174 return env.findFunction(name) != null; 175 } 176 177 180 public static Value register_shutdown_function(Env env, 181 Callback fun, 182 Value []args) 183 { 184 env.addShutdown(fun, args); 185 186 return NullValue.NULL; 187 } 188 } 189 | Popular Tags |