Пример #1
0
void CheckArgIsList(LispPtr arg, int arg_idx, LispEnvironment& env, int stack_top)
{
    if (!InternalIsList(env, arg)) {
        ShowArgTypeErrorInfo(arg_idx, env.iStack[stack_top], env);
        throw LispErrNotList();
    }
}
Пример #2
0
bool MatchSubList::ArgumentMatches(LispEnvironment& aEnvironment,
                                          LispPtr& aExpression,
                                          LispPtr* arguments) const
{
  if (!aExpression->SubList())
    return false;

  LispIterator iter(aExpression);
  LispObject * pObj = iter.getObj();

  if (!pObj)
      throw LispErrInvalidArg();

  LispPtr * pPtr = pObj->SubList();

  if (!pPtr)
      throw LispErrNotList();

  iter = *pPtr;

  const LispInt iNrMatchers = iMatchers.size();
  for (LispInt i=0;i<iNrMatchers;i++,++iter)
  {
    if (!iter.getObj())
      return false;
    if (!iMatchers[i]->ArgumentMatches(aEnvironment,*iter,arguments))
      return false;
  }
  if (iter.getObj())
    return false;
  return true;
}