diff --git a/dlls/jscript/engine.c b/dlls/jscript/engine.c index 80bc9d90eda..a526431b683 100644 --- a/dlls/jscript/engine.c +++ b/dlls/jscript/engine.c @@ -1939,12 +1939,33 @@ HRESULT delete_expression_eval(exec_ctx_t *ctx, expression_t *expr, DWORD flags, return E_NOTIMPL; } -HRESULT void_expression_eval(exec_ctx_t *ctx, expression_t *expr, DWORD flags, jsexcept_t *ei, exprval_t *ret) +/* ECMA-262 3rd Edition 11.4.2 */ +HRESULT void_expression_eval(exec_ctx_t *ctx, expression_t *_expr, DWORD flags, jsexcept_t *ei, exprval_t *ret) { - FIXME("\n"); - return E_NOTIMPL; + unary_expression_t *expr = (unary_expression_t*)_expr; + exprval_t exprval; + VARIANT tmp; + HRESULT hres; + + TRACE("\n"); + + hres = expr_eval(ctx, expr->expression, 0, ei, &exprval); + if(FAILED(hres)) + return hres; + + hres = exprval_to_value(ctx->parser->script, &exprval, ei, &tmp); + exprval_release(&exprval); + if(FAILED(hres)) + return hres; + + VariantClear(&tmp); + + ret->type = EXPRVAL_VARIANT; + V_VT(&ret->u.var) = VT_EMPTY; + return S_OK; } +/* ECMA-262 3rd Edition 11.4.3 */ HRESULT typeof_expression_eval(exec_ctx_t *ctx, expression_t *_expr, DWORD flags, jsexcept_t *ei, exprval_t *ret) { unary_expression_t *expr = (unary_expression_t*)_expr; diff --git a/dlls/jscript/tests/lang.js b/dlls/jscript/tests/lang.js index 3b0d130b72f..0ea4ef54fb2 100644 --- a/dlls/jscript/tests/lang.js +++ b/dlls/jscript/tests/lang.js @@ -615,4 +615,6 @@ for(var fi=0; fi < 4; fi++) ok(fi < 4, "fi = " + fi); ok(fi === 4, "fi !== 4"); +ok((void 1) === undefined, "(void 1) !== undefined"); + reportSuccess();