fprintf(stderr, "[%s@%p]", chars, this);
FPRINTF(stderr, "[%s@%p]", chars, this);
CSSStyleSheetImpl::CheckRuleForAttributes(nsICSSRule *aRule){  PRInt32 ruleType;  aRule->GetType(ruleType);  switch (ruleType) {    case nsICSSRule::MEDIA_RULE: {      nsICSSMediaRule *mediaRule = (nsICSSMediaRule *)aRule;      return mediaRule->EnumerateRulesForwards(CheckRuleForAttributesEnum,                                               (void *)this);    }    case nsICSSRule::STYLE_RULE: {      nsICSSStyleRule *styleRule = NS_STATIC_CAST(nsICSSStyleRule *, aRule);      nsCSSSelector *iter;      for (iter = styleRule->FirstSelector(); iter; iter = iter->mNext) {        /* P.classname means we have to check the attribute "class" */        if (iter->mID) {          AtomKey idKey(nsHTMLAtoms::id);          mInner->mRelevantAttributes.Put(&idKey, nsHTMLAtoms::id);        }        if (iter->mClassList) {          AtomKey classKey(nsHTMLAtoms::kClass);          mInner->mRelevantAttributes.Put(&classKey, nsHTMLAtoms::kClass);        }        for (nsAttrSelector *sel = iter->mAttrList; sel; sel = sel->mNext) {          /* store it in this sheet's attributes-that-matter table */          /* XXX store tag name too, but handle collisions */#ifdef DEBUG_shaver_off          nsAutoString str;          sel->mAttr->ToString(str);          char * chars = str.ToNewCString();          fprintf(stderr, "[%s@%p]", chars, this);          nsMemory::Free(chars);#endif          AtomKey key(sel->mAttr);          mInner->mRelevantAttributes.Put(&key, sel->mAttr);        }      }    } /* fall-through */    default:      return NS_OK;  }}