JavaScript:ActionMonkey:Stage 0 Whiteboard: Difference between revisions

Jump to navigation Jump to search
no edit summary
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> - '''** ?'''
** I need to read this 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 isn't documented anywhere, but it can probably just always return false.
** 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.  I think this will be unaffected; not positive.
** 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


A few more that don't appear in <tt>jsgc.h</tt>:
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.
638

edits

Navigation menu