Commit 4f9f184
committed
CogVM source as per VMMaker.oscog-eem.1873
Spur: Fix ephemerons (at least for Gule's test case).
The mournQueue is of course a root for the scavenger and so must be visited at
the start of a scavenge. Fix bug in markAllUnscannedEphemerons, enumerating
correctly.
Both fireEphemeronsInRememberedSet and fireEphemeronsOnEphemeronList must check
for an ephemeron being fireable. An as-yet-firable ephemeron might get added to
the ephemeron list and later its key may get tenured, rendering the ephemeron
unfirable in that cycle.
Fix marking of obj stack contents (markAndTraceObjStack:andContents:). Again
tenuring could cause contents to be forwarded and hence read barrier is needed.
Fix asserts that check for ephemerons so that the change in an ephemeron's
format once it gets added to the mournQueue doesn't break the asserts;
isMaybeFiredEphemeron[Format]: answer true for ephemerons and ephemerons in
the mournQueue.
Make pushLiteralVariable: store unfollowed literals back into the literal frame.
Do so in a function off to the side, not inlined into the interpreter loop.
With these changes Guille's test case passes:
| e |
Smalltalk supportsQueueingFinalization: true.
e := (1 to: 200000) collect:
[:i| Ephemeron
key: (ObjectFinalizer receiver: 'test', 'asd' selector: #logCr)
value: Object new].
Smalltalk garbageCollect!
Plugins:
Take a slightly more minimal approach to Esteban's FloatArray changes in
VMMaker.oscog-EstebanLorenzano.1869
git-svn-id: http://squeakvm.org/svn/squeak/branches/Cog@3732 fa1542d4-bde8-0310-ad64-8ed1123d492a
Former-commit-id: 44a69bc6a14208a3c14745135797ba8bab61a0a61 parent 439f74f commit 4f9f184
File tree
38 files changed
+19101
-19647
lines changed- nsspur64src/vm
- nsspursrc/vm
- nsspurstack64src/vm
- nsspurstacksrc/vm
- spur64src/vm
- spursistasrc/vm
- spursrc/vm
- spurstack64src/vm
- spurstacksrc/vm
- src
- plugins/FloatArrayPlugin
- vm
- stacksrc/vm
38 files changed
+19101
-19647
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
| 2 | + | |
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
| |||
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
| 2 | + | |
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
| |||
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
| 2 | + | |
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
| |||
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
| 2 | + | |
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
| |||
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
0 commit comments