nsresult RDFContentSinkImpl::PopContext(nsIRDFResource *&aResource, RDFContentSinkState &aState, RDFContentSinkParseMode &aParseMode) { if ((nsnull == mContextStack) || (mContextStack->IsEmpty())) { return NS_ERROR_NULL_POINTER; } PRUint32 i = mContextStack->Length() - 1; RDFContextStackElement &e = mContextStack->ElementAt(i); aResource = e.mResource; NS_IF_ADDREF(aResource); aState = e.mState; aParseMode = e.mParseMode; mContextStack->RemoveElementAt(i); return NS_OK; }
HTMLContentSink::~HTMLContentSink() { if (mNotificationTimer) { mNotificationTimer->Cancel(); } int32_t numContexts = mContextStack.Length(); if (mCurrentContext == mHeadContext && numContexts > 0) { // Pop off the second html context if it's not done earlier mContextStack.RemoveElementAt(--numContexts); } int32_t i; for (i = 0; i < numContexts; i++) { SinkContext* sc = mContextStack.ElementAt(i); if (sc) { sc->End(); if (sc == mCurrentContext) { mCurrentContext = nullptr; } delete sc; } } if (mCurrentContext == mHeadContext) { mCurrentContext = nullptr; } delete mCurrentContext; delete mHeadContext; for (i = 0; uint32_t(i) < ArrayLength(mNodeInfoCache); ++i) { NS_IF_RELEASE(mNodeInfoCache[i]); } }