638
edits
No edit summary |
|||
Line 4: | Line 4: | ||
- Get at least sketchy answers to most of the questions below. | - Get at least sketchy answers to most of the questions below. | ||
- Implement the MMgc changes we need. | |||
- Do a sprint with Mardak and Brendan (if he's available) to reimplement <tt>jsgc.c</tt> using MMgc. Call it <tt>jsgc.cpp</tt>. | - Do a sprint with Mardak and Brendan (if he's available) to reimplement <tt>jsgc.c</tt> using MMgc. Call it <tt>jsgc.cpp</tt>. | ||
- Debug and grow wise. | - Debug and grow wise. | ||
==== MMgc changes ==== | |||
* Clone the tamarin-central repository as <tt>actionmonkey-tamarin</tt>. | |||
* Add support for <code>js_IsAboutToBeFinalized</code>. | |||
* Add support for callbacks (<code>JS_SetGCCallback</code> and <code>JS_SetGCThingCallback</code>, in <tt>jsapi.h</tt>). | |||
* Add support for enumerating GC roots, to support <code>js_MapGCRoots</code> in <tt>jsgc.h</tt>. ''(low priority - /be says we can defer this)'' | |||
* Add support for named GC roots (low priority) | |||
Line 71: | Line 87: | ||
* <code>js_LockGCThing</code>, <code>js_LockGCThingRT</code>, <code>js_UnlockGCThingRT</code> - '''** ?''' | * <code>js_LockGCThing</code>, <code>js_LockGCThingRT</code>, <code>js_UnlockGCThingRT</code> - '''** ?''' | ||
** This is the pinning API. Can be reimplemented on top of MMgc rooting. /be | ** This is the pinning API. Can be reimplemented on top of MMgc rooting. /be | ||
** "make one big root for everything you can keep track of - one GCRoot for each runtime." Reuse the "constants/pinning" GCRoot for anything else that needs locking? | ** "make one big root for everything you can keep track of - one GCRoot for each runtime." Reuse the "constants/pinning" GCRoot for anything else that needs locking? | ||
Line 79: | Line 94: | ||
** or modify MMgc -- that can be done too in this stage 0 work I think. /be | ** or modify MMgc -- that can be done too in this stage 0 work I think. /be | ||
* <code>IS_GC_MARKING_TRACER</code> - '''* | * <code>IS_GC_MARKING_TRACER</code> - '''*''' | ||
** This | ** Unchanged. This is an undocumented feature of the trace API. <code>js_GC</code> will do an exact trace followed by a call to <code>MMgc::GC::Collect()</code>. During that trace, this macro returns true. | ||
* <code>JSTRACE_FUNCTION</code> ... <code>JSTRACE_XML</code> - '''* | * <code>JSTRACE_FUNCTION</code> ... <code>JSTRACE_XML</code> - '''*''' | ||
** The tracing API uses these | ** Unaffected. The tracing API uses these. | ||
* <code>JS_IS_VALID_TRACE_KIND</code> - '''*''' | * <code>JS_IS_VALID_TRACE_KIND</code> - '''*''' | ||
Line 112: | Line 127: | ||
** These should be removed. /be | ** These should be removed. /be | ||
One more feature that doesn't appear in <tt>jsgc.h</tt>: | |||
* <code>JSRuntime::{gcCallback, gcThingCallback}</code> - '''*''' | * <code>JSRuntime::{gcCallback, gcThingCallback}</code> - '''*''' | ||
** Easiest to implement by modifying MMgc. | ** Easiest to implement by modifying MMgc. |
edits