From 4d79093742932c3981f4d254972590e7c0c891ed Mon Sep 17 00:00:00 2001 From: Witold Filipczyk Date: Sun, 19 May 2024 16:32:51 +0200 Subject: [PATCH] [quickjs] JS_DupValue in some places. --- src/ecmascript/quickjs.c | 2 +- src/ecmascript/quickjs/document.c | 14 ++++++-------- src/ecmascript/quickjs/implementation.c | 8 ++++++-- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/ecmascript/quickjs.c b/src/ecmascript/quickjs.c index 90734590..42aa3252 100644 --- a/src/ecmascript/quickjs.c +++ b/src/ecmascript/quickjs.c @@ -116,7 +116,7 @@ quickjs_done(struct module *xxx) attr_delete_map_rev(map_rev_forms); attr_delete_map(map_inputs); attr_delete_map(map_nodelist); - attr_delete_map_rev(map_rev_nodelist); +// attr_delete_map_rev(map_rev_nodelist); attr_delete_map(map_form_elements); attr_delete_map_rev(map_form_elements_rev); diff --git a/src/ecmascript/quickjs/document.c b/src/ecmascript/quickjs/document.c index 7e860535..a03ab432 100644 --- a/src/ecmascript/quickjs/document.c +++ b/src/ecmascript/quickjs/document.c @@ -1778,14 +1778,16 @@ getDocument(JSContext *ctx, void *doc) struct ecmascript_interpreter *interpreter = (struct ecmascript_interpreter *)JS_GetContextOpaque(ctx); doc_private->interpreter = interpreter; static int initialized; + + JSValue global_obj = JS_GetGlobalObject(ctx); + /* create the element class */ if (!initialized) { JS_NewClassID(&js_document_class_id); JS_NewClass(JS_GetRuntime(ctx), js_document_class_id, &js_document_class); initialized = 1; } - JSValue global_obj = JS_GetGlobalObject(ctx); - REF_JS(global_obj); + //REF_JS(global_obj); JSValue document_obj = JS_NewObjectClass(ctx, js_document_class_id); JS_SetPropertyFunctionList(ctx, document_obj, js_document_proto_funcs, countof(js_document_proto_funcs)); @@ -1794,12 +1796,8 @@ getDocument(JSContext *ctx, void *doc) JS_SetOpaque(document_obj, doc_private); // JS_SetClassProto(ctx, js_document_class_id, document_obj); JS_SetPropertyStr(ctx, global_obj, "document", document_obj); - - JSValue rr = JS_DupValue(ctx, document_obj); - doc_private->thisval = rr; - JS_FreeValue(ctx, rr); - JS_FreeValue(ctx, global_obj); + doc_private->thisval = document_obj; - RETURN_JS(rr); + RETURN_JS(document_obj); } diff --git a/src/ecmascript/quickjs/implementation.c b/src/ecmascript/quickjs/implementation.c index 5b01c523..419575be 100644 --- a/src/ecmascript/quickjs/implementation.c +++ b/src/ecmascript/quickjs/implementation.c @@ -62,7 +62,9 @@ js_implementation_createHTMLDocument(JSContext *ctx, JSValueConst this_val, int done_string(&str); JS_FreeCString(ctx, title); - return getDocument(ctx, docu); + JSValue rr = JS_DupValue(ctx, getDocument(ctx, docu)); + + RETURN_JS(rr); } static JSValue @@ -152,5 +154,7 @@ getImplementation(JSContext *ctx) // JS_SetConstructor(ctx, implementation_class, implementation_obj); JS_SetClassProto(ctx, js_implementation_class_id, implementation_obj); - RETURN_JS(implementation_obj); + JSValue rr = JS_DupValue(ctx, implementation_obj); + + RETURN_JS(rr); }