In the pernosco session, `mItems.Length()` is `2` whereas `InternalList().Length()` is `3`.
This happens because there are two different tearoff objects, and one of them is out of date. The testcase has:
```
let x = b.points
try { FuzzingFunctions.garbageCollect() } catch (err) {}
try { FuzzingFunctions.cycleCollect() } catch (err) {}
let y = b.points
```
Here `x` and `y` end up with **different DOMSVGPointList objects**.
Previously they're both `2`, but `InternalList().Length()` grows to length `3` in a call to `InsertBefore()`.
It looks like this is because the tearoff table might not be sticking around for the second `b.points` call for some reason, which is why we end up generating a new `DOMSVGPointList` tearoff.
Bug 1742738 Comment 8 Edit History
Note: The actual edited comment in the bug view page will always show the original commenter’s name and original timestamp.
In the pernosco session, `mItems.Length()` is `2` whereas `InternalList().Length()` is `3`. (Previously they're both `2`, but `InternalList().Length()` grows to length `3` in a call to `InsertBefore()`, while operating on a *different* tearoff that shares the same underlying internal-list.)
This happens because there are two different tearoff objects, and one of them is out of date. The testcase has:
```
let x = b.points
try { FuzzingFunctions.garbageCollect() } catch (err) {}
try { FuzzingFunctions.cycleCollect() } catch (err) {}
let y = b.points
```
Here `x` and `y` end up with **different DOMSVGPointList objects** having been returned from `b.points`.
It looks like this is because the tearoff table might not be sticking around for the second `b.points` call for some reason, which is why we end up generating a new `DOMSVGPointList` tearoff.
In the pernosco session, `mItems.Length()` is `2` whereas `InternalList().Length()` is `3`. (Previously they're both `2`, but `InternalList().Length()` grows to length `3` in a call to `InsertBefore()`, while operating on a *different* tearoff that shares the same underlying internal-list.)
This happens because there are two different tearoff objects, so one of them ends up out of date. The testcase has:
```
let x = b.points
try { FuzzingFunctions.garbageCollect() } catch (err) {}
try { FuzzingFunctions.cycleCollect() } catch (err) {}
let y = b.points
```
Here `x` and `y` end up with **different DOMSVGPointList objects** having been returned from `b.points`.
It looks like this is because the tearoff table might not be sticking around for the second `b.points` call for some reason, which is why we end up generating a new `DOMSVGPointList` tearoff.