condition->GetTag(*getter_AddRefs(tag));
condition->GetTag(getter_AddRefs(tag));
nsresult nsXULTemplateBuilder::CompileConditions(Rule* 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;        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;        }        if (NS_FAILED(rv)) return rv;        // XXXwaterson proably wrong to just drill it straight down        // like this.        aParentNode->AddChild(testnode);        mRules.AddNode(testnode);        aParentNode = testnode;    }    *aLastNode = aParentNode;    return NS_OK;}