if (mIsLoading) {
if (IsLoading()) {
RDFXMLDataSourceImpl::Assert(nsIRDFResource* aSource,                             nsIRDFResource* aProperty,                             nsIRDFNode* aTarget,                             PRBool aTruthValue){    // We don't accept assertions unless we're writable (except in the    // case that we're actually _reading_ the datasource in).    nsresult rv;    if (mIsLoading) {        PRBool hasAssertion = PR_FALSE;        nsCOMPtr<nsIRDFPurgeableDataSource> gcable = do_QueryInterface(mInner);        if (gcable) {            rv = gcable->Mark(aSource, aProperty, aTarget, aTruthValue, &hasAssertion);            if (NS_FAILED(rv)) return rv;        }        rv = NS_RDF_ASSERTION_ACCEPTED;        if (! hasAssertion) {            rv = mInner->Assert(aSource, aProperty, aTarget, aTruthValue);            if (NS_SUCCEEDED(rv) && gcable) {                // Now mark the new assertion, so it doesn't get                // removed when we sweep. Ignore rv, because we want                // to return what mInner->Assert() gave us.                PRBool didMark;                (void) gcable->Mark(aSource, aProperty, aTarget, aTruthValue, &didMark);            }            if (NS_FAILED(rv)) return rv;        }        return rv;    }    else if (mIsWritable) {        rv = mInner->Assert(aSource, aProperty, aTarget, aTruthValue);        if (rv == NS_RDF_ASSERTION_ACCEPTED)            mIsDirty = PR_TRUE;        return rv;    }    else {        return NS_RDF_ASSERTION_REJECTED;    }}