コード例 #1
0
bool TuplesDefaultImpl::m_parse(va_list ap)
{
  bool ret_val = false;
  TupleInDefaultImpl *ptupleIn = m_current_tuple_in();


  if (!m_tuple)
  {
    /*
    NOTE в режиме execute не исключено значение m_tuple = NULL; это означает, что:
      -- для функции PyNoArgsFunction (флаг METH_NOARGS) вызывается проверка аргументов
      -- метод создан только для получения данных (TupleFillState::modGetter)
    в обоих случаях исключение сработает раньше -- в TupleState::parse
    */
    throw ArgsException();
  }

  try
  {
    char * const * keywords = ptupleIn->keywords();
    if
    (
        ptupleIn->args().empty() && !PyObject_Length(m_tuple) && (!m_kw || !PyObject_Length(m_kw))
      || m_kw && PyArg_VaParseTupleAndKeywords(m_tuple, m_kw, ptupleIn->format().c_str(), const_cast<char **>(keywords), ap)
      || !m_kw && PyArg_VaParse(m_tuple, ptupleIn->format().c_str(), ap)
    )
    {
      ret_val = true;
    }
  }
  catch (const TupleBase::FormatException &ex)
  {
    /*TODO
    Возможно правильнее было бы перехватить здесь исключение
    Вопрос особенно актуален, когда сигнатур несколько и большая часть из них правильные
    см также function_dublicate в pytest_pyhrol_keywords.cpp -- этот эффект будет ликвидирован, а многие тесты будут провалены
    ptupleIn->parseError = ex.what();
    */
    throw;
  }

  if (!ret_val && PyErr_Occurred())
  {
    PyObject *ptype, *pvalue, *ptraceback;
    PyErr_Fetch(&ptype, &pvalue, &ptraceback);

    const char *pStrErrorMessage = PyString_AsString(pvalue);
    if (pStrErrorMessage)
    {
      ptupleIn->parseError = pStrErrorMessage;
    }
    Py_DecRef(ptype);
    Py_DecRef(pvalue);
    Py_DecRef(ptraceback);
    PyErr_Clear();
  }

  return ret_val;
}
コード例 #2
0
ファイル: BIO.cpp プロジェクト: nazgee/libosock
BIO::BIO(::BIO* bio, bool closedescriptor, unsigned int chunksize) :
	itsBIO(bio), itsChunkSize(chunksize)
{
	if (itsBIO == NULL) {
		throw ArgsException("NULL BIO given");
	}
//	setClose(closedescriptor);
	DBG_CONSTRUCTOR;
}