Ejemplo n.º 1
0
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");
  }
}
Ejemplo n.º 2
0
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();
}
Ejemplo n.º 4
0
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");
  }
}
Ejemplo n.º 5
0
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");
  }
}
Ejemplo n.º 6
0
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");
  }
}
Ejemplo n.º 7
0
Variant EvalFuncNumArgs::InvokeImpl(VariableEnvironment &env,
                                    CArrRef params) {
  int size = params.size();
  if (size != 0) throw InvalidFunctionCallException("func_num_args");
  return env.getParams().size();
}
Ejemplo n.º 8
0
Variant EvalFuncNumArgs::InvokeImpl(VariableEnvironment &env,
                                    CArrRef params) {
  return env.getParams().size();
}