Piotr Caban : jscript: Make context generic in internal regular expression functions.
Alexandre Julliard
julliard at winehq.org
Fri Feb 15 11:19:16 CST 2013
Module: wine
Branch: master
Commit: 5f06c6de285d78caaae497e8b573e7fe238d1343
URL: http://source.winehq.org/git/wine.git/?a=commit;h=5f06c6de285d78caaae497e8b573e7fe238d1343
Author: Piotr Caban <piotr at codeweavers.com>
Date: Fri Feb 15 14:05:15 2013 +0100
jscript: Make context generic in internal regular expression functions.
---
dlls/jscript/regexp.c | 16 ++++++++++------
1 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/dlls/jscript/regexp.c b/dlls/jscript/regexp.c
index ea25c64..9df7372 100644
--- a/dlls/jscript/regexp.c
+++ b/dlls/jscript/regexp.c
@@ -294,7 +294,7 @@ typedef struct REBackTrackData {
#define INITIAL_BACKTRACK 8000
typedef struct REGlobalData {
- script_ctx_t *cx;
+ void *cx;
JSRegExp *regexp; /* the RE in execution */
BOOL ok; /* runtime error (out_of_memory only?) */
size_t start; /* offset to start at */
@@ -354,7 +354,7 @@ struct RENode {
#define CLASS_CACHE_SIZE 4
typedef struct CompilerState {
- script_ctx_t *context;
+ void *context;
const WCHAR *cpbegin;
const WCHAR *cpend;
const WCHAR *cp;
@@ -370,6 +370,9 @@ typedef struct CompilerState {
size_t index;
} classCache[CLASS_CACHE_SIZE];
WORD flags;
+
+ heap_pool_t *pool; /* It's faster to use one malloc'd pool
+ than to malloc/free */
} CompilerState;
typedef struct EmitStateStackEntry {
@@ -469,7 +472,7 @@ NewRENode(CompilerState *state, REOp op)
{
RENode *ren;
- ren = heap_pool_alloc(&state->context->tmp_heap, sizeof(*ren));
+ ren = heap_pool_alloc(state->pool, sizeof(*ren));
if (!ren) {
/* js_ReportOutOfScriptQuota(cx); */
return NULL;
@@ -3254,7 +3257,7 @@ js_DestroyRegExp(JSRegExp *re)
}
static JSRegExp *
-js_NewRegExp(script_ctx_t *cx, const WCHAR *str, DWORD str_len, UINT flags, BOOL flat)
+js_NewRegExp(void *cx, heap_pool_t *pool, const WCHAR *str, DWORD str_len, UINT flags, BOOL flat)
{
JSRegExp *re;
heap_pool_t *mark;
@@ -3265,10 +3268,11 @@ js_NewRegExp(script_ctx_t *cx, const WCHAR *str, DWORD str_len, UINT flags, BOOL
size_t len;
re = NULL;
- mark = heap_pool_mark(&cx->tmp_heap);
+ mark = heap_pool_mark(pool);
len = str_len;
state.context = cx;
+ state.pool = pool;
state.cp = str;
if (!state.cp)
goto out;
@@ -3884,7 +3888,7 @@ HRESULT create_regexp(script_ctx_t *ctx, jsstr_t *src, DWORD flags, jsdisp_t **r
regexp->str = jsstr_addref(src);
regexp->last_index_val = jsval_number(0);
- regexp->jsregexp = js_NewRegExp(ctx, regexp->str->str,
+ regexp->jsregexp = js_NewRegExp(ctx, &ctx->tmp_heap, regexp->str->str,
jsstr_length(regexp->str), flags, FALSE);
if(!regexp->jsregexp) {
WARN("js_NewRegExp failed\n");
More information about the wine-cvs
mailing list