Jacek Caban : jscript: Don't store compiler_ctx_t in parser_ctx_t.

Alexandre Julliard julliard at winehq.org
Tue Mar 13 13:50:35 CDT 2012


Module: wine
Branch: master
Commit: 9d4b0bd502d396957fc1983c7b3aaf556ba3ba5c
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=9d4b0bd502d396957fc1983c7b3aaf556ba3ba5c

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Mar 12 19:23:19 2012 +0100

jscript: Don't store compiler_ctx_t in parser_ctx_t.

---

 dlls/jscript/compile.c |   49 +++++++++++++++--------------------------------
 dlls/jscript/engine.h  |    5 ----
 dlls/jscript/parser.y  |    2 -
 3 files changed, 16 insertions(+), 40 deletions(-)

diff --git a/dlls/jscript/compile.c b/dlls/jscript/compile.c
index dc6f099..40ad782 100644
--- a/dlls/jscript/compile.c
+++ b/dlls/jscript/compile.c
@@ -40,7 +40,7 @@ typedef struct _statement_ctx_t {
     struct _statement_ctx_t *next;
 } statement_ctx_t;
 
-struct _compiler_ctx_t {
+typedef struct {
     parser_ctx_t *parser;
     bytecode_t *code;
 
@@ -52,7 +52,7 @@ struct _compiler_ctx_t {
     unsigned labels_cnt;
 
     statement_ctx_t *stat_ctx;
-};
+} compiler_ctx_t;
 
 static const struct {
     const char *op_str;
@@ -1703,44 +1703,22 @@ void release_bytecode(bytecode_t *code)
     heap_free(code);
 }
 
-void release_compiler(compiler_ctx_t *ctx)
+static HRESULT init_code(compiler_ctx_t *compiler)
 {
-    heap_free(ctx);
-}
-
-static HRESULT init_compiler(parser_ctx_t *parser)
-{
-    compiler_ctx_t *compiler;
-
-    if(parser->compiler)
-        return S_OK;
-
-    compiler = heap_alloc_zero(sizeof(*compiler));
-    if(!compiler)
-        return E_OUTOFMEMORY;
-
     compiler->code = heap_alloc_zero(sizeof(bytecode_t));
-    if(!compiler->code) {
-        release_compiler(compiler);
+    if(!compiler->code)
         return E_OUTOFMEMORY;
-    }
 
     jsheap_init(&compiler->code->heap);
 
     compiler->code->instrs = heap_alloc(64 * sizeof(instr_t));
     if(!compiler->code->instrs) {
         release_bytecode(compiler->code);
-        release_compiler(compiler);
         return E_OUTOFMEMORY;
     }
 
     compiler->code_size = 64;
     compiler->code_off = 1;
-
-    compiler->parser = parser;
-
-    parser->code = compiler->code;
-    parser->compiler = compiler;
     return S_OK;
 }
 
@@ -1781,21 +1759,26 @@ static HRESULT compile_function(compiler_ctx_t *ctx, source_elements_t *source,
 HRESULT compile_script(script_ctx_t *ctx, const WCHAR *code, const WCHAR *delimiter, BOOL from_eval,
         parser_ctx_t **ret)
 {
-    parser_ctx_t *parser;
+    compiler_ctx_t compiler = {0};
     HRESULT hres;
 
-    hres = script_parse(ctx, code, delimiter, from_eval, &parser);
+    hres = script_parse(ctx, code, delimiter, from_eval, &compiler.parser);
     if(FAILED(hres))
         return hres;
 
-    hres = init_compiler(parser);
-    if(SUCCEEDED(hres))
-        hres = compile_function(parser->compiler, parser->source, from_eval);
+    hres = init_code(&compiler);
+    if(SUCCEEDED(hres)) {
+        hres = compile_function(&compiler, compiler.parser->source, from_eval);
+        if(FAILED(hres))
+            release_bytecode(compiler.code);
+    }
+
     if(FAILED(hres)) {
-        parser_release(parser);
+        parser_release(compiler.parser);
         return hres;
     }
 
-    *ret = parser;
+    compiler.parser->code = compiler.code;
+    *ret = compiler.parser;
     return S_OK;
 }
diff --git a/dlls/jscript/engine.h b/dlls/jscript/engine.h
index 73553b6..1c4f49a 100644
--- a/dlls/jscript/engine.h
+++ b/dlls/jscript/engine.h
@@ -160,10 +160,6 @@ typedef struct {
 
 void release_bytecode(bytecode_t*);
 
-typedef struct _compiler_ctx_t compiler_ctx_t;
-
-void release_compiler(compiler_ctx_t*);
-
 typedef struct _parser_ctx_t {
     LONG ref;
 
@@ -183,7 +179,6 @@ typedef struct _parser_ctx_t {
     func_stack_t *func_stack;
 
     bytecode_t *code;
-    compiler_ctx_t *compiler;
 
     struct _parser_ctx_t *next;
 } parser_ctx_t;
diff --git a/dlls/jscript/parser.y b/dlls/jscript/parser.y
index 66b5476..41a99c4 100644
--- a/dlls/jscript/parser.y
+++ b/dlls/jscript/parser.y
@@ -1537,8 +1537,6 @@ void parser_release(parser_ctx_t *ctx)
 
     if(ctx->code)
         release_bytecode(ctx->code);
-    if(ctx->compiler)
-        release_compiler(ctx->compiler);
     script_release(ctx->script);
     heap_free(ctx->begin);
     jsheap_free(&ctx->heap);




More information about the wine-cvs mailing list