rv = CompileCondition(tag, aRule, condition, aParentNode, &testnode);
if (tag.get() == nsXULAtoms::triple) { rv = CompileTripleCondition(aRule, condition, aParentNode, &testnode); } else if (tag.get() == nsXULAtoms::member) { rv = CompileMemberCondition(aRule, condition, aParentNode, &testnode); } else if (tag.get() == nsXULAtoms::content) { rv = CompileContentCondition(aRule, condition, aParentNode, &testnode); } else { #ifdef PR_LOGGING nsAutoString tagstr; tag->ToString(tagstr);  nsCAutoString tagstrC; tagstrC.AssignWithConversion(tagstr); PR_LOG(gLog, PR_LOG_ALWAYS, ("xultemplate[%p] unrecognized condition test <%s>", this, NS_STATIC_CAST(const char*, tagstrC))); #endif continue; }
nsXULTemplateBuilder::CompileConditions(nsTemplateRule* aRule,                                        nsIContent* aConditions,                                        InnerNode* aParentNode,                                        InnerNode** aLastNode){    // Compile an extended rule's conditions.    nsresult rv;    PRInt32 count;    aConditions->ChildCount(count);    for (PRInt32 i = 0; i < count; ++i) {        nsCOMPtr<nsIContent> condition;        aConditions->ChildAt(i, *getter_AddRefs(condition));        nsCOMPtr<nsIAtom> tag;        condition->GetTag(*getter_AddRefs(tag));        TestNode* testnode = nsnull;        rv = CompileCondition(tag, aRule, condition, aParentNode, &testnode);        if (NS_FAILED(rv)) return rv;        // XXXwaterson proably wrong to just drill it straight down        // like this.        if (testnode) {            aParentNode->AddChild(testnode);            mRules.AddNode(testnode);            aParentNode = testnode;        }    }    *aLastNode = aParentNode;    return NS_OK;}