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(); } }
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; }