[PATCH v4 1/6] jscript: Factor local_ref_scopes_t structure out of function_code_t.

Paul Gofman pgofman at codeweavers.com
Thu Jun 17 16:25:18 CDT 2021


Signed-off-by: Paul Gofman <pgofman at codeweavers.com>
---
 dlls/jscript/compile.c | 14 +++++++++-----
 dlls/jscript/engine.c  | 10 +++++-----
 dlls/jscript/engine.h  |  9 +++++++--
 3 files changed, 21 insertions(+), 12 deletions(-)

diff --git a/dlls/jscript/compile.c b/dlls/jscript/compile.c
index 2a17639641f..46efd53cdb5 100644
--- a/dlls/jscript/compile.c
+++ b/dlls/jscript/compile.c
@@ -2379,10 +2379,14 @@ static HRESULT compile_function(compiler_ctx_t *ctx, source_elements_t *source,
     if(FAILED(hres))
         return hres;
 
-    func->locals = compiler_alloc(ctx->code, ctx->locals_cnt * sizeof(*func->locals));
-    if(!func->locals)
+    func->local_scope_count = 1;
+    func->local_scopes = compiler_alloc(ctx->code, func->local_scope_count * sizeof(*func->local_scopes));
+    if(!func->local_scopes)
         return E_OUTOFMEMORY;
-    func->locals_cnt = ctx->locals_cnt;
+    func->local_scopes[0].locals = compiler_alloc(ctx->code, ctx->locals_cnt * sizeof(*func->local_scopes[0].locals));
+    if(!func->local_scopes[0].locals)
+        return E_OUTOFMEMORY;
+    func->local_scopes[0].locals_cnt = ctx->locals_cnt;
 
     func->variables = compiler_alloc(ctx->code, func->var_cnt * sizeof(*func->variables));
     if(!func->variables)
@@ -2390,8 +2394,8 @@ static HRESULT compile_function(compiler_ctx_t *ctx, source_elements_t *source,
 
     i = 0;
     WINE_RB_FOR_EACH_ENTRY(local, &ctx->locals, function_local_t, entry) {
-        func->locals[i].name = local->name;
-        func->locals[i].ref = local->ref;
+        func->local_scopes[0].locals[i].name = local->name;
+        func->local_scopes[0].locals[i].ref = local->ref;
         if(local->ref >= 0) {
             func->variables[local->ref].name = local->name;
             func->variables[local->ref].func_id = -1;
diff --git a/dlls/jscript/engine.c b/dlls/jscript/engine.c
index e0a6e10e98b..c6ca3a9c10d 100644
--- a/dlls/jscript/engine.c
+++ b/dlls/jscript/engine.c
@@ -578,13 +578,12 @@ static HRESULT detach_variable_object(script_ctx_t *ctx, call_frame_t *frame, BO
 
     frame->base_scope->frame = NULL;
 
-    for(i = 0; i < frame->function->locals_cnt; i++) {
-        hres = jsdisp_propput_name(frame->variable_obj, frame->function->locals[i].name,
-                                   ctx->stack[local_off(frame, frame->function->locals[i].ref)]);
+    for(i = 0; i < frame->function->local_scopes[0].locals_cnt; i++) {
+        hres = jsdisp_propput_name(frame->variable_obj, frame->function->local_scopes[0].locals[i].name,
+                                   ctx->stack[local_off(frame, frame->function->local_scopes[0].locals[i].ref)]);
         if(FAILED(hres))
             return hres;
     }
-
     return S_OK;
 }
 
@@ -630,7 +629,8 @@ static int __cdecl local_ref_cmp(const void *key, const void *ref)
 
 local_ref_t *lookup_local(const function_code_t *function, const WCHAR *identifier)
 {
-    return bsearch(identifier, function->locals, function->locals_cnt, sizeof(*function->locals), local_ref_cmp);
+    return bsearch(identifier, function->local_scopes[0].locals, function->local_scopes[0].locals_cnt,
+            sizeof(*function->local_scopes[0].locals), local_ref_cmp);
 }
 
 /* ECMA-262 3rd Edition    10.1.4 */
diff --git a/dlls/jscript/engine.h b/dlls/jscript/engine.h
index 442e7334c41..a94f1f211e4 100644
--- a/dlls/jscript/engine.h
+++ b/dlls/jscript/engine.h
@@ -147,6 +147,11 @@ typedef struct {
 
 #define INVALID_LOCAL_REF 0x7fffffff
 
+typedef struct {
+    unsigned locals_cnt;
+    local_ref_t *locals;
+} local_ref_scopes_t;
+
 typedef struct _function_code_t {
     BSTR name;
     int local_ref;
@@ -168,8 +173,8 @@ typedef struct _function_code_t {
     unsigned param_cnt;
     BSTR *params;
 
-    unsigned locals_cnt;
-    local_ref_t *locals;
+    local_ref_scopes_t *local_scopes;
+    unsigned local_scope_count;
 
     bytecode_t *bytecode;
 } function_code_t;
-- 
2.31.1




More information about the wine-devel mailing list