Module: wine Branch: master Commit: e1da3d7242ba0411ccf3cc616cda0b8c76093d7f URL: http://source.winehq.org/git/wine.git/?a=commit;h=e1da3d7242ba0411ccf3cc616c...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Dec 7 11:02:07 2011 +0100
jscript: Use bytecode for post-decrement expression.
---
dlls/jscript/compile.c | 8 +++++--- dlls/jscript/engine.c | 35 ----------------------------------- dlls/jscript/engine.h | 1 - dlls/jscript/parser.y | 2 +- 4 files changed, 6 insertions(+), 40 deletions(-)
diff --git a/dlls/jscript/compile.c b/dlls/jscript/compile.c index b274a0e..0ed6f29 100644 --- a/dlls/jscript/compile.c +++ b/dlls/jscript/compile.c @@ -292,7 +292,7 @@ static HRESULT compile_memberid_expression(compiler_ctx_t *ctx, expression_t *ex return hres; }
-static HRESULT compile_increment_expression(compiler_ctx_t *ctx, unary_expression_t *expr) +static HRESULT compile_increment_expression(compiler_ctx_t *ctx, unary_expression_t *expr, int n) { HRESULT hres;
@@ -308,7 +308,7 @@ static HRESULT compile_increment_expression(compiler_ctx_t *ctx, unary_expressio if(FAILED(hres)) return hres;
- return push_instr_int(ctx, OP_postinc, 1); + return push_instr_int(ctx, OP_postinc, n); }
/* ECMA-262 3rd Edition 11.14 */ @@ -647,8 +647,10 @@ static HRESULT compile_expression_noret(compiler_ctx_t *ctx, expression_t *expr, return compile_logical_expression(ctx, (binary_expression_t*)expr, OP_jmp_nz); case EXPR_PLUS: return compile_unary_expression(ctx, (unary_expression_t*)expr, OP_tonum); + case EXPR_POSTDEC: + return compile_increment_expression(ctx, (unary_expression_t*)expr, -1); case EXPR_POSTINC: - return compile_increment_expression(ctx, (unary_expression_t*)expr); + return compile_increment_expression(ctx, (unary_expression_t*)expr, 1); case EXPR_SUB: return compile_binary_expression(ctx, (binary_expression_t*)expr, OP_sub); case EXPR_THIS: diff --git a/dlls/jscript/engine.c b/dlls/jscript/engine.c index 8bf0a0a..102c305 100644 --- a/dlls/jscript/engine.c +++ b/dlls/jscript/engine.c @@ -2735,41 +2735,6 @@ static HRESULT interp_postinc(exec_ctx_t *ctx) return stack_push(ctx, &v); }
-/* ECMA-262 3rd Edition 11.3.2 */ -HRESULT post_decrement_expression_eval(script_ctx_t *ctx, expression_t *_expr, DWORD flags, jsexcept_t *ei, exprval_t *ret) -{ - unary_expression_t *expr = (unary_expression_t*)_expr; - VARIANT val, num; - exprval_t exprval; - HRESULT hres; - - TRACE("\n"); - - hres = expr_eval(ctx, expr->expression, EXPR_NEWREF, ei, &exprval); - if(FAILED(hres)) - return hres; - - hres = exprval_value(ctx, &exprval, ei, &val); - if(SUCCEEDED(hres)) { - hres = to_number(ctx, &val, ei, &num); - VariantClear(&val); - } - - if(SUCCEEDED(hres)) { - VARIANT dec; - num_set_val(&dec, num_val(&num)-1.0); - hres = put_value(ctx, &exprval, &dec, ei); - } - - exprval_release(&exprval); - if(FAILED(hres)) - return hres; - - ret->type = EXPRVAL_VARIANT; - ret->u.var = num; - return S_OK; -} - /* ECMA-262 3rd Edition 11.4.4 */ HRESULT pre_increment_expression_eval(script_ctx_t *ctx, expression_t *_expr, DWORD flags, jsexcept_t *ei, exprval_t *ret) { diff --git a/dlls/jscript/engine.h b/dlls/jscript/engine.h index 21d599b..7359d06 100644 --- a/dlls/jscript/engine.h +++ b/dlls/jscript/engine.h @@ -563,7 +563,6 @@ HRESULT binary_and_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t* HRESULT instanceof_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN; HRESULT delete_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN; HRESULT typeof_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN; -HRESULT post_decrement_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN; HRESULT pre_increment_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN; HRESULT pre_decrement_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN; HRESULT left_shift_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN; diff --git a/dlls/jscript/parser.y b/dlls/jscript/parser.y index f32788e..07414ce 100644 --- a/dlls/jscript/parser.y +++ b/dlls/jscript/parser.y @@ -1323,7 +1323,7 @@ static const expression_eval_t expression_eval_table[] = { compiled_expression_eval, compiled_expression_eval, compiled_expression_eval, - post_decrement_expression_eval, + compiled_expression_eval, pre_increment_expression_eval, pre_decrement_expression_eval, compiled_expression_eval,