mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 808067 - Fix needsBarrier for GC (r=sstangl,jonco)
This commit is contained in:
parent
d4f885daa6
commit
6399748bf8
@ -32,5 +32,9 @@ if (!("verifypostbarriers" in this)) {
|
||||
verifypostbarriers = function() { }
|
||||
}
|
||||
|
||||
if (!("gcPreserveCode" in this)) {
|
||||
gcPreserveCode = function() { }
|
||||
}
|
||||
|
||||
if ("options" in this)
|
||||
options("allow_xml");
|
||||
|
19
js/src/jit-test/tests/basic/bug808067.js
Normal file
19
js/src/jit-test/tests/basic/bug808067.js
Normal file
@ -0,0 +1,19 @@
|
||||
function TestCase(n, d, e, a)
|
||||
this.reason = '';
|
||||
function reportCompare (expected, actual, description) {
|
||||
var output = "";
|
||||
var testcase = new TestCase("unknown-test-name", description, expected, actual);
|
||||
testcase.reason = output;
|
||||
}
|
||||
gcPreserveCode();
|
||||
var summary = 'return with argument and lazy generator detection';
|
||||
expect = "generator function foo returns a value";
|
||||
actual = (function (j) {}).message;
|
||||
reportCompare(expect, actual, summary + ": 1");
|
||||
reportCompare(expect, actual, summary + ": 2");
|
||||
gcslice(0);
|
||||
gcslice(1);
|
||||
gc();
|
||||
var strings = [ (0), ];
|
||||
for (var i = 0; i < strings.length; i++)
|
||||
reportCompare(expect, actual, summary + (5e1) + strings[i]);
|
@ -4083,7 +4083,7 @@ ResetIncrementalGC(JSRuntime *rt, const char *reason)
|
||||
AutoCopyFreeListToArenas copy(rt);
|
||||
for (GCCompartmentsIter c(rt); !c.done(); c.next()) {
|
||||
if (c->isGCMarking()) {
|
||||
c->setNeedsBarrier(false, JSCompartment::DontUpdateIon);
|
||||
c->setNeedsBarrier(false, JSCompartment::UpdateIon);
|
||||
c->setGCState(JSCompartment::NoGC);
|
||||
wasMarking = true;
|
||||
}
|
||||
@ -4158,12 +4158,12 @@ AutoGCSlice::AutoGCSlice(JSRuntime *rt)
|
||||
|
||||
AutoGCSlice::~AutoGCSlice()
|
||||
{
|
||||
for (GCCompartmentsIter c(runtime); !c.done(); c.next()) {
|
||||
/* We can't use GCCompartmentsIter if this is the end of the last slice. */
|
||||
for (CompartmentsIter c(runtime); !c.done(); c.next()) {
|
||||
if (c->isGCMarking()) {
|
||||
c->setNeedsBarrier(true, JSCompartment::UpdateIon);
|
||||
c->arenas.prepareForIncrementalGC(runtime);
|
||||
} else {
|
||||
JS_ASSERT(c->isGCSweeping());
|
||||
c->setNeedsBarrier(false, JSCompartment::UpdateIon);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user