本文整理汇总了C++中JSCompartment::isGCMarkingGray方法的典型用法代码示例。如果您正苦于以下问题:C++ JSCompartment::isGCMarkingGray方法的具体用法?C++ JSCompartment::isGCMarkingGray怎么用?C++ JSCompartment::isGCMarkingGray使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类JSCompartment
的用法示例。
在下文中一共展示了JSCompartment::isGCMarkingGray方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: AsGCMarker
static bool
ShouldMarkCrossCompartment(JSTracer *trc, RawObject src, Cell *cell)
{
if (!IS_GC_MARKING_TRACER(trc))
return true;
JSCompartment *c = cell->compartment();
uint32_t color = AsGCMarker(trc)->getMarkColor();
JS_ASSERT(color == BLACK || color == GRAY);
if (color == BLACK) {
/*
* Having black->gray edges violates our promise to the cycle
* collector. This can happen if we're collecting a compartment and it
* has an edge to an uncollected compartment: it's possible that the
* source and destination of the cross-compartment edge should be gray,
* but the source was marked black by the conservative scanner.
*/
if (cell->isMarked(GRAY)) {
JS_ASSERT(!cell->compartment()->isCollecting());
trc->runtime->gcFoundBlackGrayEdges = true;
}
return c->isGCMarking();
} else {
if (c->isGCMarkingBlack()) {
/*
* The destination compartment is being not being marked gray now,
* but it will be later, so record the cell so it can be marked gray
* at the appropriate time.
*/
if (!cell->isMarked())
DelayCrossCompartmentGrayMarking(src);
return false;
}
return c->isGCMarkingGray();
}
}