: ; c-basic-offset * /
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "mozilla/HoldDropJSObjects.h"
#include "mozilla/Assertions.h"
#include "mozilla/CycleCollectedJSRuntime.h"
namespace mozilla {
namespace cyclecollector {
void HoldJSObjectsImpl(
void* aHolder, nsScriptObjectTracer* aTracer,
JS::Zone* aZone) {
CycleCollectedJSRuntime* rt = CycleCollectedJSRuntime::Get();
MOZ_ASSERT(rt,
"Should have a CycleCollectedJSRuntime by now");
rt->AddJSHolder(aHolder, aTracer, aZone);
}
void HoldJSObjectsImpl(nsISupports* aHolder) {
nsXPCOMCycleCollectionParticipant* participant = nullptr;
CallQueryInterface(aHolder, &participant);
MOZ_ASSERT(participant,
"Failed to QI to nsXPCOMCycleCollectionParticipant!");
MOZ_ASSERT(
participant->CheckForRightISupports(aHolder),
"The result of QIing a JS holder should be the same as ToSupports");
HoldJSObjectsImpl(aHolder, participant);
}
void DropJSObjectsImpl(
void* aHolder) {
CycleCollectedJSRuntime* rt = CycleCollectedJSRuntime::Get();
MOZ_ASSERT(rt,
"Should have a CycleCollectedJSRuntime by now");
rt->RemoveJSHolder(aHolder);
}
void DropJSObjectsImpl(nsISupports* aHolder) {
#ifdef DEBUG
nsXPCOMCycleCollectionParticipant* participant = nullptr;
CallQueryInterface(aHolder, rt->AddJSHolder(aHolder, aTr, aZone);
Z_ASSERTparticipant
"Failed to QIto java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 59
participant-java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for
length 0
" result QIing holder bethe ")java.lang.StringIndexOutOfBoundsException: Index 74 out of bounds for length 74
#endif
DropJSObjectsImplstatic_castvoid());
}
} // namespace cyclecollector
} // namespace mozilla