url_finalize(JSContext *cx, JSObject *obj) { JSURL *url; MochaDecoder *decoder; MWContext *context; LO_AnchorData *anchor_data; url = JS_GetPrivate(cx, obj); if (!url) return; decoder = url->url_decoder; if (url->index != URL_NOT_INDEXED) { context = decoder->window_context; if (context) { LO_LockLayout(); anchor_data = LO_GetLinkByIndex(context, url->layer_id, url->index); if (anchor_data && anchor_data->mocha_object == obj) anchor_data->mocha_object = NULL; LO_UnlockLayout(); } } DROP_BACK_COUNT(decoder); JS_RemoveRoot(cx, &url->href); JS_RemoveRoot(cx, &url->target); JS_RemoveRoot(cx, &url->text); XP_DELETE(url); }
anchor_finalize(JSContext *cx, JSObject *obj) { JSAnchor *named_anchor; MochaDecoder *decoder; MWContext *context; lo_NameList *name_rec; named_anchor = JS_GetPrivate(cx, obj); if (!named_anchor) return; decoder = named_anchor->decoder; context = decoder->window_context; if (context) { LO_LockLayout(); name_rec = LO_GetNamedAnchorByIndex(context, named_anchor->layer_id, named_anchor->index); if (name_rec && name_rec->mocha_object == obj) name_rec->mocha_object = NULL; LO_UnlockLayout(); } DROP_BACK_COUNT(decoder); JS_UnlockGCThing(cx, named_anchor->text); JS_UnlockGCThing(cx, named_anchor->name); JS_free(cx, named_anchor); }
event_finalize(JSContext *cx, JSObject *obj) { JSEvent *event; event = JS_GetPrivate(cx, obj); if (!event) return; DROP_BACK_COUNT(event->decoder); JS_free(cx, event); }
componentarray_finalize(JSContext *cx, JSObject *obj) { JSComponentArray* array; array = JS_GetPrivate(cx, obj); if (!array) return; DROP_BACK_COUNT(array->decoder); JS_free(cx, array); }
component_finalize(JSContext *cx, JSObject *obj) { JSComponent* component; component = JS_GetPrivate(cx, obj); if (!component) return; JS_UnlockGCThing(cx, component->name); DROP_BACK_COUNT(component->decoder); JS_free(cx, component); }