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 @@ +
+

Coroutines

+ +

(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 @@ +
+

Finalization

+ +

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...
+
+