Bug 1559546 - Allow to construct StyleAtom objects from C++. r=heycam

I'm going to need it in an upcoming patch.

Differential Revision: https://phabricator.services.mozilla.com/D35118

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Emilio Cobos Álvarez 2019-06-19 05:58:01 +00:00
Родитель 7689870f6b
Коммит 5a2717a028
2 изменённых файлов: 15 добавлений и 0 удалений

Просмотреть файл

@ -242,6 +242,19 @@ inline StyleAtom::~StyleAtom() {
}
}
inline StyleAtom::StyleAtom(already_AddRefed<nsAtom> aAtom) {
nsAtom* atom = aAtom.take();
if (atom->IsStatic()) {
ptrdiff_t offset = reinterpret_cast<const uint8_t*>(atom->AsStatic()) -
reinterpret_cast<const uint8_t*>(&detail::gGkAtoms);
_0 = (offset << 1) | 1;
} else {
_0 = reinterpret_cast<uintptr_t>(atom);
}
MOZ_ASSERT(IsStatic() == atom->IsStatic());
MOZ_ASSERT(AsAtom() == atom);
}
inline StyleAtom::StyleAtom(const StyleAtom& aOther) : _0(aOther._0) {
if (!IsStatic()) {
reinterpret_cast<nsAtom*>(_0)->AddRef();

Просмотреть файл

@ -466,6 +466,8 @@ renaming_overrides_prefixing = true
inline bool IsStatic() const;
inline nsAtom* AsAtom() const;
inline explicit StyleAtom(already_AddRefed<nsAtom> aAtom);
// Could be implemented if wanted.
StyleAtom& operator=(const StyleAtom&) = delete;