[PATCH v3 1/3] jscript: Store the object prototype in the script context.

Gabriel Ivăncescu gabrielopcode at gmail.com
Thu Mar 11 10:01:08 CST 2021


Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
---
 dlls/jscript/global.c  | 7 +++----
 dlls/jscript/jscript.c | 5 +++++
 dlls/jscript/jscript.h | 1 +
 3 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/dlls/jscript/global.c b/dlls/jscript/global.c
index 735e188..33869cd 100644
--- a/dlls/jscript/global.c
+++ b/dlls/jscript/global.c
@@ -1055,7 +1055,7 @@ static HRESULT init_constructors(script_ctx_t *ctx, jsdisp_t *object_prototype)
 HRESULT init_global(script_ctx_t *ctx)
 {
     unsigned const_flags = ctx->version >= SCRIPTLANGUAGEVERSION_ES5 ? 0 : PROPF_WRITABLE;
-    jsdisp_t *math, *object_prototype, *constr;
+    jsdisp_t *math, *constr;
     HRESULT hres;
 
     if(ctx->global)
@@ -1065,12 +1065,11 @@ HRESULT init_global(script_ctx_t *ctx)
     if(FAILED(hres))
         return hres;
 
-    hres = create_object_prototype(ctx, &object_prototype);
+    hres = create_object_prototype(ctx, &ctx->object_prototype);
     if(FAILED(hres))
         return hres;
 
-    hres = init_constructors(ctx, object_prototype);
-    jsdisp_release(object_prototype);
+    hres = init_constructors(ctx, ctx->object_prototype);
     if(FAILED(hres))
         return hres;
 
diff --git a/dlls/jscript/jscript.c b/dlls/jscript/jscript.c
index c5c2388..67a25d1 100644
--- a/dlls/jscript/jscript.c
+++ b/dlls/jscript/jscript.c
@@ -483,6 +483,11 @@ static void decrease_state(JScript *This, SCRIPTSTATE state)
                 This->ctx->site = NULL;
             }
 
+            if(This->ctx->object_prototype) {
+                jsdisp_release(This->ctx->object_prototype);
+                This->ctx->object_prototype = NULL;
+            }
+
             if(This->ctx->global) {
                 jsdisp_release(This->ctx->global);
                 This->ctx->global = NULL;
diff --git a/dlls/jscript/jscript.h b/dlls/jscript/jscript.h
index b590e1a..d7d9dd7 100644
--- a/dlls/jscript/jscript.h
+++ b/dlls/jscript/jscript.h
@@ -451,6 +451,7 @@ struct _script_ctx_t {
     jsdisp_t *uri_error_constr;
     jsdisp_t *number_constr;
     jsdisp_t *object_constr;
+    jsdisp_t *object_prototype;
     jsdisp_t *regexp_constr;
     jsdisp_t *string_constr;
     jsdisp_t *vbarray_constr;
-- 
2.30.0




More information about the wine-devel mailing list