SyntaxTree* Parser::m_parse_sequence(TArray<Parser*>* ps) { m_ErrorPos startPos = m_curErrPos(); SyntaxTree::Childs* childs = new SyntaxTree::Childs(ps->size()); childs->setContentsMemID("pcsq"); int errorCutId = 0; hyu32 errorCutPos = 0; for (TArrayIterator<Parser*> itr(ps); itr.hasMore(); ) { Parser* p = itr.next(); SyntaxTree* st = p->parse(); if (st->isErrorCut()) { errorCutId = st->errorCutId; errorCutPos = st->str.startPos; delete st; } else if (! st->isFail()) { p->addSyntaxTreeToParent(childs, st); } else { if (st->isFailNotError() && errorCutId > 0) { SyntaxTree* e = new SyntaxTree(errorCutPos, errorCutId, this); if (! m_bUseMemoize) delete st; st = e; } m_fail(startPos); if (! m_bUseMemoize) { SyntaxTree::Childs::deleteRecursively(childs); } else { delete childs; } return st; } } return createSyntaxTree(startPos.parsePos, childs); }