Variant EvalFuncGetArg::InvokeImpl(VariableEnvironment &env, CArrRef params) { int size = params.size(); switch (size) { case 1: { int n = params.rvalAt(0); if (n >= 0 && n < env.getParams().size()) { return env.getParams().rvalAt(n); } return false; } default: throw InvalidFunctionCallException("func_get_arg"); } }
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 FunctionStatement::evalBody(VariableEnvironment &env) const { Variant &ret = env.getRet(); if (m_maybeIntercepted) { Variant handler = get_intercept_handler(fullName(), &m_maybeIntercepted); if (!handler.isNull() && handle_intercept(handler, fullName(), env.getParams(), ret)) { if (m_ref) { ret.setContagious(); } return ret; } } if (m_body) { m_body->eval(env); if (env.isReturning()) { if (m_ref) { ret.setContagious(); } return ret; } else if (env.isBreaking()) { throw FatalErrorException("Cannot break/continue out of function"); } } return Variant(); }
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"); } }
Variant EvalFuncGetArgs::InvokeImpl(VariableEnvironment &env, CArrRef params) { int size = params.size(); switch (size) { case 0: { Array res = Array::Create(); for (ArrayIter iter(env.getParams()); !iter.end(); iter.next()) { res.append(iter.second()); } return res; } default: throw InvalidFunctionCallException("func_get_args"); } }
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 EvalFuncNumArgs::InvokeImpl(VariableEnvironment &env, CArrRef params) { int size = params.size(); if (size != 0) throw InvalidFunctionCallException("func_num_args"); return env.getParams().size(); }
Variant EvalFuncNumArgs::InvokeImpl(VariableEnvironment &env, CArrRef params) { return env.getParams().size(); }