diff --git a/website/guide/coroutines.html b/website/guide/coroutines.html new file mode 100644 index 00000000..de13cc8c --- /dev/null +++ b/website/guide/coroutines.html @@ -0,0 +1,5 @@ +
(Documentation missing.)
+ diff --git a/website/guide/finalization.html b/website/guide/finalization.html new file mode 100644 index 00000000..f676c80b --- /dev/null +++ b/website/guide/finalization.html @@ -0,0 +1,55 @@ +An object which has an internal _finalizer property in +its prototype chain is subject to finalization before being freed. +The finalizer may be triggered by either reference counting or +mark-and-sweep.
+ +The finalizer method is called with the target object as its sole +argument. The method may rescue the object by creating a live reference +to the object before returning. The return value is ignored; similarly, +any errors thrown by the finalizer are ignored.
+ +Finalizers cannot currently yield. The context executing the finalization +can currently be any coroutine in the heap. (This will be fixed in the future.) +
+ + + +Example:
++// finalize.js +var a; + +function init() { + a = { foo: 123 }; + + __duk__.setFinalizer(a, function (x) { + print('finalizer, foo ->', x.foo); + }); +} + +// create object, reference it through 'a' +init(); + +// delete reference, refcount triggers finalization immediately +print('refcount finalizer'); +a = null; + +// mark-and-sweep finalizing happens here (at the latest) if +// refcounting is disabled +print('mark-and-sweep finalizer') +__duk__.gc(); ++ +
If you run this with the Duktape command line tool (with the default +Duktape profile), you'll get:
++$ duk finalize.js +refcount finalizer +finalizer, foo -> 123 +mark-and-sweep finalizer +Cleaning up... ++