If we want to call the destructor of the GC-managed objects, we need to
(1) inherit JSDestructibleObject and (2) define own destroy function.
This patch implements destroy functions so that destructors are called correctly.
Also, we change some of JSDestructibleObject to JSNonFinalObject if they do not
require calling destructors.
If we want to call the destructor of the GC-managed objects, we need to (1) inherit JSDestructibleObject and (2) define own destroy function.
This patch implements destroy functions so that destructors are called correctly. Also, we change some of JSDestructibleObject to JSNonFinalObject if they do not require calling destructors.