("rdfgeneric[%p] on <content> test, expected 'uri' attribute to name a variable", this));
("xultemplate[%p] on <content> test, expected 'uri' attribute to name a variable", this));
nsXULTemplateBuilder::CompileContentCondition(Rule* aRule,                                              nsIContent* aCondition,                                              InnerNode* aParentNode,                                              TestNode** aResult){    // Compile a <content> condition, which currently must be of the form:    //    //  <content uri="?var" />    //    // XXXwaterson I'm currently too lame to get the full blown    // <content> syntax working. Right now, exactly one <content>    // condition is required per rule. It creates a ContentIdTestNode,    // binding the content variable to the global content variable    // that's used during match propogation. The 'uri' attribute must    // be set.    // uri    nsAutoString uri;    aCondition->GetAttribute(kNameSpaceID_None, nsXULAtoms::uri, uri);    if (uri[0] != PRUnichar('?')) {        PR_LOG(gLog, PR_LOG_ALWAYS,               ("rdfgeneric[%p] on <content> test, expected 'uri' attribute to name a variable", this));        return NS_OK;    }    PRInt32 urivar = aRule->LookupSymbol(uri);    if (! urivar) {        mRules.CreateVariable(&urivar);        aRule->AddSymbol(uri, urivar);    }    // XXXwaterson By binding the content to the global mContentVar,    // we're essentially saying that each rule *must* have exactly one    // <content id="?x"/> condition.    TestNode* testnode =         new ContentIdTestNode(aParentNode,                              mDocument,                              mRoot,                              mContentVar, // XXX see above                              urivar);    if (! testnode)        return NS_ERROR_OUT_OF_MEMORY;    // XXXwaterson More assumptions about this being run once...    aRule->SetContainerVariable(urivar);    *aResult = testnode;    return NS_OK;}