Variant EvalFuncNumArgs::InvokeImpl(VariableEnvironment &env, CArrRef params) { if (ObjectData *cont = env.getContinuation()) { return cont->o_invoke("num_args", Array::Create()); } return env.getParams().size(); }
Variant EvalFuncGetArgs::InvokeImpl(VariableEnvironment &env, CArrRef params) { int size = params.size(); switch (size) { case 0: { if (ObjectData *cont = env.getContinuation()) { return cont->o_invoke("get_args", Array::Create()); } Array res = Array::Create(); for (ArrayIter iter(env.getParams()); !iter.end(); iter.next()) { res.append(iter.second()); } return res; } default: return invalid_function_call("func_get_args"); } }
Variant EvalFuncGetArg::InvokeImpl(VariableEnvironment &env, CArrRef params) { int size = params.size(); switch (size) { case 1: { int n = params.rvalAt(0); if (ObjectData *cont = env.getContinuation()) { return cont->o_invoke("get_arg", CREATE_VECTOR1(n)); } if (n >= 0 && n < env.getParams().size()) { return env.getParams().rvalAt(n); } return false; } default: return invalid_function_call("func_get_arg"); } }