Bug 859817 - Make NS_NewAtom return already_AddRefed; r=bz

This commit is contained in:
Aryeh Gregor
2013-04-22 14:13:22 +03:00
parent 563acc033a
commit 03b4600974
15 changed files with 47 additions and 51 deletions

View File

@@ -1229,9 +1229,9 @@ nsAttrValue::ParseAtom(const nsAString& aValue)
{ {
ResetIfSet(); ResetIfSet();
nsIAtom* atom = NS_NewAtom(aValue); nsCOMPtr<nsIAtom> atom = NS_NewAtom(aValue);
if (atom) { if (atom) {
SetPtrValueAndType(atom, eAtomBase); SetPtrValueAndType(atom.forget().get(), eAtomBase);
} }
} }
@@ -1712,9 +1712,10 @@ nsAttrValue::SetMiscAtomOrString(const nsAString* aValue)
"Empty string?"); "Empty string?");
MiscContainer* cont = GetMiscContainer(); MiscContainer* cont = GetMiscContainer();
if (len <= NS_ATTRVALUE_MAX_STRINGLENGTH_ATOM) { if (len <= NS_ATTRVALUE_MAX_STRINGLENGTH_ATOM) {
nsIAtom* atom = NS_NewAtom(*aValue); nsCOMPtr<nsIAtom> atom = NS_NewAtom(*aValue);
if (atom) { if (atom) {
cont->mStringBits = reinterpret_cast<uintptr_t>(atom) | eAtomBase; cont->mStringBits =
reinterpret_cast<uintptr_t>(atom.forget().get()) | eAtomBase;
} }
} else { } else {
nsStringBuffer* buf = GetStringBuffer(*aValue); nsStringBuffer* buf = GetStringBuffer(*aValue);

View File

@@ -2535,11 +2535,11 @@ nsContentUtils::SplitQName(const nsIContent* aNamespaceResolver,
if (*aNamespace == kNameSpaceID_Unknown) if (*aNamespace == kNameSpaceID_Unknown)
return NS_ERROR_FAILURE; return NS_ERROR_FAILURE;
*aLocalName = NS_NewAtom(Substring(colon + 1, end)); *aLocalName = NS_NewAtom(Substring(colon + 1, end)).get();
} }
else { else {
*aNamespace = kNameSpaceID_None; *aNamespace = kNameSpaceID_None;
*aLocalName = NS_NewAtom(aQName); *aLocalName = NS_NewAtom(aQName).get();
} }
NS_ENSURE_TRUE(aLocalName, NS_ERROR_OUT_OF_MEMORY); NS_ENSURE_TRUE(aLocalName, NS_ERROR_OUT_OF_MEMORY);
return NS_OK; return NS_OK;
@@ -2624,7 +2624,7 @@ nsContentUtils::SplitExpatName(const PRUnichar *aExpatName, nsIAtom **aPrefix,
nameStart = (uriEnd + 1); nameStart = (uriEnd + 1);
if (nameEnd) { if (nameEnd) {
const PRUnichar *prefixStart = nameEnd + 1; const PRUnichar *prefixStart = nameEnd + 1;
*aPrefix = NS_NewAtom(Substring(prefixStart, pos)); *aPrefix = NS_NewAtom(Substring(prefixStart, pos)).get();
} }
else { else {
nameEnd = pos; nameEnd = pos;
@@ -2637,7 +2637,7 @@ nsContentUtils::SplitExpatName(const PRUnichar *aExpatName, nsIAtom **aPrefix,
nameEnd = pos; nameEnd = pos;
*aPrefix = nullptr; *aPrefix = nullptr;
} }
*aLocalName = NS_NewAtom(Substring(nameStart, nameEnd)); *aLocalName = NS_NewAtom(Substring(nameStart, nameEnd)).get();
} }
// static // static

View File

@@ -85,7 +85,7 @@ SVGTransformListParser::GetTransformToken(nsIAtom** aKeyAtom,
uint32_t len; uint32_t len;
if ((len = strlen(mTokenPos)) > 0) { if ((len = strlen(mTokenPos)) > 0) {
*aKeyAtom = NS_NewAtom(Substring(mTokenPos, mTokenPos + len)); *aKeyAtom = NS_NewAtom(Substring(mTokenPos, mTokenPos + len)).get();
if (aAdvancePos) { if (aAdvancePos) {
mInputPos = mTokenPos + len; mInputPos = mTokenPos + len;

View File

@@ -88,7 +88,7 @@ XMLUtils::splitExpatName(const PRUnichar *aExpatName, nsIAtom **aPrefix,
nameStart = (uriEnd + 1); nameStart = (uriEnd + 1);
if (nameEnd) { if (nameEnd) {
const PRUnichar *prefixStart = nameEnd + 1; const PRUnichar *prefixStart = nameEnd + 1;
*aPrefix = NS_NewAtom(Substring(prefixStart, pos)); *aPrefix = NS_NewAtom(Substring(prefixStart, pos)).get();
if (!*aPrefix) { if (!*aPrefix) {
return NS_ERROR_OUT_OF_MEMORY; return NS_ERROR_OUT_OF_MEMORY;
} }
@@ -105,7 +105,7 @@ XMLUtils::splitExpatName(const PRUnichar *aExpatName, nsIAtom **aPrefix,
*aPrefix = nullptr; *aPrefix = nullptr;
} }
*aLocalName = NS_NewAtom(Substring(nameStart, nameEnd)); *aLocalName = NS_NewAtom(Substring(nameStart, nameEnd)).get();
return *aLocalName ? NS_OK : NS_ERROR_OUT_OF_MEMORY; return *aLocalName ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
} }
@@ -125,12 +125,12 @@ XMLUtils::splitQName(const nsAString& aName, nsIAtom** aPrefix,
const PRUnichar *end; const PRUnichar *end;
qName.EndReading(end); qName.EndReading(end);
*aPrefix = NS_NewAtom(Substring(qName.get(), colon)); *aPrefix = NS_NewAtom(Substring(qName.get(), colon)).get();
*aLocalName = NS_NewAtom(Substring(colon + 1, end)); *aLocalName = NS_NewAtom(Substring(colon + 1, end)).get();
} }
else { else {
*aPrefix = nullptr; *aPrefix = nullptr;
*aLocalName = NS_NewAtom(aName); *aLocalName = NS_NewAtom(aName).get();
} }
return NS_OK; return NS_OK;

View File

@@ -893,12 +893,12 @@ txExprParser::resolveQName(const nsAString& aQName,
aNamespace = kNameSpaceID_None; aNamespace = kNameSpaceID_None;
int32_t idx = aQName.FindChar(':'); int32_t idx = aQName.FindChar(':');
if (idx > 0) { if (idx > 0) {
*aPrefix = NS_NewAtom(StringHead(aQName, (uint32_t)idx)); *aPrefix = NS_NewAtom(StringHead(aQName, (uint32_t)idx)).get();
if (!*aPrefix) { if (!*aPrefix) {
return NS_ERROR_OUT_OF_MEMORY; return NS_ERROR_OUT_OF_MEMORY;
} }
*aLocalName = NS_NewAtom(Substring(aQName, (uint32_t)idx + 1, *aLocalName = NS_NewAtom(Substring(aQName, (uint32_t)idx + 1,
aQName.Length() - (idx + 1))); aQName.Length() - (idx + 1))).get();
if (!*aLocalName) { if (!*aLocalName) {
NS_RELEASE(*aPrefix); NS_RELEASE(*aPrefix);
return NS_ERROR_OUT_OF_MEMORY; return NS_ERROR_OUT_OF_MEMORY;
@@ -910,10 +910,10 @@ txExprParser::resolveQName(const nsAString& aQName,
if (aIsNameTest && aContext->caseInsensitiveNameTests()) { if (aIsNameTest && aContext->caseInsensitiveNameTests()) {
nsAutoString lcname; nsAutoString lcname;
nsContentUtils::ASCIIToLower(aQName, lcname); nsContentUtils::ASCIIToLower(aQName, lcname);
*aLocalName = NS_NewAtom(lcname); *aLocalName = NS_NewAtom(lcname).get();
} }
else { else {
*aLocalName = NS_NewAtom(aQName); *aLocalName = NS_NewAtom(aQName).get();
} }
if (!*aLocalName) { if (!*aLocalName) {
return NS_ERROR_OUT_OF_MEMORY; return NS_ERROR_OUT_OF_MEMORY;

View File

@@ -304,7 +304,7 @@ getAtomAttr(txStylesheetAttr* aAttributes,
return rv; return rv;
} }
*aAtom = NS_NewAtom(attr->mValue); *aAtom = NS_NewAtom(attr->mValue).get();
NS_ENSURE_TRUE(*aAtom, NS_ERROR_OUT_OF_MEMORY); NS_ENSURE_TRUE(*aAtom, NS_ERROR_OUT_OF_MEMORY);
return NS_OK; return NS_OK;

View File

@@ -2138,7 +2138,7 @@ nsXULTemplateBuilder::DetermineRDFQueryRef(nsIContent* aQueryElement, nsIAtom**
content->GetAttr(kNameSpaceID_None, nsGkAtoms::tag, tag); content->GetAttr(kNameSpaceID_None, nsGkAtoms::tag, tag);
if (!tag.IsEmpty()) if (!tag.IsEmpty())
*aTag = NS_NewAtom(tag); *aTag = NS_NewAtom(tag).get();
} }
} }

View File

@@ -706,7 +706,7 @@ nsHTMLCSSUtils::ParseLength(const nsAString & aString, float * aValue, nsIAtom *
i++; i++;
} }
*aValue = value * sign; *aValue = value * sign;
*aUnit = NS_NewAtom(StringTail(aString, j-i)); *aUnit = NS_NewAtom(StringTail(aString, j-i)).get();
} }
void void

View File

@@ -354,7 +354,7 @@ nsCharsetConverterManager::GetCharsetLangGroupRaw(const char * aCharset,
if (NS_SUCCEEDED(rv)) { if (NS_SUCCEEDED(rv)) {
ToLowerCase(langGroup); // use lowercase for all language atoms ToLowerCase(langGroup); // use lowercase for all language atoms
*aResult = NS_NewAtom(langGroup); *aResult = NS_NewAtom(langGroup).get();
} }
return rv; return rv;

View File

@@ -734,12 +734,10 @@ XPCConvert::JSData2Native(JSContext* cx, void* d, HandleValue s,
return false; return false;
} }
uint32_t length = JS_GetStringLength(str); uint32_t length = JS_GetStringLength(str);
nsIAtom* atom = NS_NewAtom(nsDependentSubstring(chars, nsCOMPtr<nsIAtom> atom =
chars + length)); NS_NewAtom(nsDependentSubstring(chars, chars + length));
if (!atom && pErr) atom.forget((nsISupports**)d);
*pErr = NS_ERROR_OUT_OF_MEMORY; return true;
*((nsISupports**)d) = atom;
return atom != nullptr;
} }
//else ... //else ...

View File

@@ -3,6 +3,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "nsHtml5Atom.h" #include "nsHtml5Atom.h"
#include "nsAutoPtr.h"
nsHtml5Atom::nsHtml5Atom(const nsAString& aString) nsHtml5Atom::nsHtml5Atom(const nsAString& aString)
{ {

View File

@@ -1347,7 +1347,7 @@ RDFContentSinkImpl::SplitExpatName(const PRUnichar *aExpatName,
} }
const nsDependentSubstring& nameSpaceURI = Substring(aExpatName, uriEnd); const nsDependentSubstring& nameSpaceURI = Substring(aExpatName, uriEnd);
*aLocalName = NS_NewAtom(Substring(nameStart, pos)); *aLocalName = NS_NewAtom(Substring(nameStart, pos)).get();
return nameSpaceURI; return nameSpaceURI;
} }

View File

@@ -14,7 +14,7 @@ nsAtomService::nsAtomService()
nsresult nsresult
nsAtomService::GetAtom(const nsAString& aString, nsIAtom ** aResult) nsAtomService::GetAtom(const nsAString& aString, nsIAtom ** aResult)
{ {
*aResult = NS_NewAtom(aString); *aResult = NS_NewAtom(aString).get();
if (!*aResult) if (!*aResult)
return NS_ERROR_OUT_OF_MEMORY; return NS_ERROR_OUT_OF_MEMORY;
@@ -36,7 +36,7 @@ nsAtomService::GetPermanentAtom(const nsAString& aString, nsIAtom ** aResult)
NS_IMETHODIMP NS_IMETHODIMP
nsAtomService::GetAtomUTF8(const char *aValue, nsIAtom* *aResult) nsAtomService::GetAtomUTF8(const char *aValue, nsIAtom* *aResult)
{ {
*aResult = NS_NewAtom(aValue); *aResult = NS_NewAtom(aValue).get();
if (!*aResult) if (!*aResult)
return NS_ERROR_OUT_OF_MEMORY; return NS_ERROR_OUT_OF_MEMORY;

View File

@@ -616,23 +616,22 @@ RegisterStaticAtoms(const nsStaticAtom* aAtoms, uint32_t aAtomCount)
return NS_OK; return NS_OK;
} }
nsIAtom* already_AddRefed<nsIAtom>
NS_NewAtom(const char* aUTF8String) NS_NewAtom(const char* aUTF8String)
{ {
return NS_NewAtom(nsDependentCString(aUTF8String)); return NS_NewAtom(nsDependentCString(aUTF8String));
} }
nsIAtom* already_AddRefed<nsIAtom>
NS_NewAtom(const nsACString& aUTF8String) NS_NewAtom(const nsACString& aUTF8String)
{ {
AtomTableEntry *he = GetAtomHashEntry(aUTF8String.Data(), AtomTableEntry *he = GetAtomHashEntry(aUTF8String.Data(),
aUTF8String.Length()); aUTF8String.Length());
if (he->mAtom) { if (he->mAtom) {
nsIAtom* atom; nsCOMPtr<nsIAtom> atom = he->mAtom;
NS_ADDREF(atom = he->mAtom);
return atom; return atom.forget();
} }
// This results in an extra addref/release of the nsStringBuffer. // This results in an extra addref/release of the nsStringBuffer.
@@ -640,38 +639,35 @@ NS_NewAtom(const nsACString& aUTF8String)
// Actually, now there is, sort of: ForgetSharedBuffer. // Actually, now there is, sort of: ForgetSharedBuffer.
nsString str; nsString str;
CopyUTF8toUTF16(aUTF8String, str); CopyUTF8toUTF16(aUTF8String, str);
AtomImpl* atom = new AtomImpl(str, he->keyHash); nsRefPtr<AtomImpl> atom = new AtomImpl(str, he->keyHash);
he->mAtom = atom; he->mAtom = atom;
NS_ADDREF(atom);
return atom; return atom.forget();
} }
nsIAtom* already_AddRefed<nsIAtom>
NS_NewAtom(const PRUnichar* aUTF16String) NS_NewAtom(const PRUnichar* aUTF16String)
{ {
return NS_NewAtom(nsDependentString(aUTF16String)); return NS_NewAtom(nsDependentString(aUTF16String));
} }
nsIAtom* already_AddRefed<nsIAtom>
NS_NewAtom(const nsAString& aUTF16String) NS_NewAtom(const nsAString& aUTF16String)
{ {
AtomTableEntry *he = GetAtomHashEntry(aUTF16String.Data(), AtomTableEntry *he = GetAtomHashEntry(aUTF16String.Data(),
aUTF16String.Length()); aUTF16String.Length());
if (he->mAtom) { if (he->mAtom) {
nsIAtom* atom; nsCOMPtr<nsIAtom> atom = he->mAtom;
NS_ADDREF(atom = he->mAtom);
return atom; return atom.forget();
} }
AtomImpl* atom = new AtomImpl(aUTF16String, he->keyHash); nsRefPtr<AtomImpl> atom = new AtomImpl(aUTF16String, he->keyHash);
he->mAtom = atom; he->mAtom = atom;
NS_ADDREF(atom);
return atom; return atom.forget();
} }
nsIAtom* nsIAtom*

View File

@@ -99,7 +99,7 @@ protected:
* Find an atom that matches the given UTF-8 string. * Find an atom that matches the given UTF-8 string.
* The string is assumed to be zero terminated. Never returns null. * The string is assumed to be zero terminated. Never returns null.
*/ */
extern nsIAtom* NS_NewAtom(const char* aUTF8String); extern already_AddRefed<nsIAtom> NS_NewAtom(const char* aUTF8String);
inline already_AddRefed<nsIAtom> do_GetAtom(const char* aUTF8String) inline already_AddRefed<nsIAtom> do_GetAtom(const char* aUTF8String)
{ return NS_NewAtom(aUTF8String); } { return NS_NewAtom(aUTF8String); }
@@ -107,7 +107,7 @@ inline already_AddRefed<nsIAtom> do_GetAtom(const char* aUTF8String)
/** /**
* Find an atom that matches the given UTF-8 string. Never returns null. * Find an atom that matches the given UTF-8 string. Never returns null.
*/ */
extern nsIAtom* NS_NewAtom(const nsACString& aUTF8String); extern already_AddRefed<nsIAtom> NS_NewAtom(const nsACString& aUTF8String);
inline already_AddRefed<nsIAtom> do_GetAtom(const nsACString& aUTF8String) inline already_AddRefed<nsIAtom> do_GetAtom(const nsACString& aUTF8String)
{ return NS_NewAtom(aUTF8String); } { return NS_NewAtom(aUTF8String); }
@@ -115,14 +115,14 @@ inline already_AddRefed<nsIAtom> do_GetAtom(const nsACString& aUTF8String)
* Find an atom that matches the given UTF-16 string. * Find an atom that matches the given UTF-16 string.
* The string is assumed to be zero terminated. Never returns null. * The string is assumed to be zero terminated. Never returns null.
*/ */
extern nsIAtom* NS_NewAtom(const PRUnichar* aUTF16String); extern already_AddRefed<nsIAtom> NS_NewAtom(const PRUnichar* aUTF16String);
inline already_AddRefed<nsIAtom> do_GetAtom(const PRUnichar* aUTF16String) inline already_AddRefed<nsIAtom> do_GetAtom(const PRUnichar* aUTF16String)
{ return NS_NewAtom(aUTF16String); } { return NS_NewAtom(aUTF16String); }
/** /**
* Find an atom that matches the given UTF-16 string. Never returns null. * Find an atom that matches the given UTF-16 string. Never returns null.
*/ */
extern nsIAtom* NS_NewAtom(const nsAString& aUTF16String); extern already_AddRefed<nsIAtom> NS_NewAtom(const nsAString& aUTF16String);
extern nsIAtom* NS_NewPermanentAtom(const nsAString& aUTF16String); extern nsIAtom* NS_NewPermanentAtom(const nsAString& aUTF16String);
inline already_AddRefed<nsIAtom> do_GetAtom(const nsAString& aUTF16String) inline already_AddRefed<nsIAtom> do_GetAtom(const nsAString& aUTF16String)
{ return NS_NewAtom(aUTF16String); } { return NS_NewAtom(aUTF16String); }