1
0
mirror of https://github.com/rkd77/elinks.git synced 2024-12-04 14:46:47 -05:00

[quickjs] mark_function for element

This commit is contained in:
Witold Filipczyk 2024-07-12 21:37:17 +02:00
parent fd04e5cbb2
commit 00553ed5f6

View File

@ -2309,7 +2309,7 @@ js_element_addEventListener(JSContext *ctx, JSValueConst this_val, int argc, JSV
dom_node_unref(el); dom_node_unref(el);
return JS_UNDEFINED; return JS_UNDEFINED;
} }
n->fun = fun; n->fun = JS_DupValue(ctx, fun);
n->typ = method; n->typ = method;
add_to_list_end(el_private->listeners, n); add_to_list_end(el_private->listeners, n);
dom_exception exc; dom_exception exc;
@ -2405,6 +2405,7 @@ js_element_removeEventListener(JSContext *ctx, JSValueConst this_val, int argc,
dom_string_unref(typ); dom_string_unref(typ);
del_from_list(l); del_from_list(l);
JS_FreeValue(ctx, l->fun);
mem_free_set(&l->typ, NULL); mem_free_set(&l->typ, NULL);
mem_free(l); mem_free(l);
mem_free(method); mem_free(method);
@ -3628,8 +3629,10 @@ void js_element_finalizer(JSRuntime *rt, JSValue val)
foreach(l, el_private->listeners) { foreach(l, el_private->listeners) {
mem_free_set(&l->typ, NULL); mem_free_set(&l->typ, NULL);
JS_FreeValueRT(rt, l->fun);
} }
free_list(el_private->listeners); free_list(el_private->listeners);
JS_FreeValueRT(rt, el_private->thisval);
attr_erase_from_map(map_elements, el_private->node); attr_erase_from_map(map_elements, el_private->node);
mem_free(el_private); mem_free(el_private);
@ -3661,7 +3664,7 @@ js_element_mark(JSRuntime *rt, JSValueConst val, JS_MarkFunc *mark_func)
static JSClassDef js_element_class = { static JSClassDef js_element_class = {
"Element", "Element",
.finalizer = js_element_finalizer, .finalizer = js_element_finalizer,
//.gc_mark = js_element_mark, .gc_mark = js_element_mark,
}; };
int int
@ -3718,6 +3721,7 @@ getElement(JSContext *ctx, void *node)
} }
init_list(el_private->listeners); init_list(el_private->listeners);
el_private->node = node; el_private->node = node;
dom_node_ref((dom_node *)node);
struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx); struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx);
el_private->interpreter = interpreter; el_private->interpreter = interpreter;
@ -3738,7 +3742,7 @@ getElement(JSContext *ctx, void *node)
(void *) &old_node_data); (void *) &old_node_data);
JSValue rr = JS_DupValue(ctx, element_obj); JSValue rr = JS_DupValue(ctx, element_obj);
el_private->thisval = rr; el_private->thisval = JS_DupValue(ctx, rr);
RETURN_JS(rr); RETURN_JS(rr);
} }