Commit dfb867af authored by Jacek Caban's avatar Jacek Caban Committed by Alexandre Julliard

jscript: Added with statement implementation.

parent 4e9749bf
...@@ -924,12 +924,50 @@ HRESULT return_statement_eval(exec_ctx_t *ctx, statement_t *_stat, return_type_t ...@@ -924,12 +924,50 @@ HRESULT return_statement_eval(exec_ctx_t *ctx, statement_t *_stat, return_type_t
return S_OK; return S_OK;
} }
HRESULT with_statement_eval(exec_ctx_t *ctx, statement_t *stat, return_type_t *rt, VARIANT *ret) /* ECMA-262 3rd Edition 12.10 */
HRESULT with_statement_eval(exec_ctx_t *ctx, statement_t *_stat, return_type_t *rt, VARIANT *ret)
{ {
FIXME("\n"); with_statement_t *stat = (with_statement_t*)_stat;
exprval_t exprval;
IDispatch *disp;
DispatchEx *obj;
VARIANT val;
HRESULT hres;
TRACE("\n");
hres = expr_eval(ctx, stat->expr, 0, &rt->ei, &exprval);
if(FAILED(hres))
return hres;
hres = exprval_to_value(ctx->parser->script, &exprval, &rt->ei, &val);
exprval_release(&exprval);
if(FAILED(hres))
return hres;
hres = to_object(ctx, &val, &disp);
VariantClear(&val);
if(FAILED(hres))
return hres;
obj = iface_to_jsdisp((IUnknown*)disp);
IDispatch_Release(disp);
if(!obj) {
FIXME("disp id not jsdisp\n");
return E_NOTIMPL; return E_NOTIMPL;
}
hres = scope_push(ctx->scope_chain, obj, &ctx->scope_chain);
jsdisp_release(obj);
if(FAILED(hres));
hres = stat_eval(ctx, stat->statement, rt, ret);
scope_pop(&ctx->scope_chain);
return hres;
} }
/* ECMA-262 3rd Edition 12.12 */
HRESULT labelled_statement_eval(exec_ctx_t *ctx, statement_t *stat, return_type_t *rt, VARIANT *ret) HRESULT labelled_statement_eval(exec_ctx_t *ctx, statement_t *stat, return_type_t *rt, VARIANT *ret)
{ {
FIXME("\n"); FIXME("\n");
......
...@@ -657,4 +657,8 @@ ok(typeof(tmp.test) === "undefined", "tmp.test type = " + typeof(tmp.test)); ...@@ -657,4 +657,8 @@ ok(typeof(tmp.test) === "undefined", "tmp.test type = " + typeof(tmp.test));
for(iter in tmp) for(iter in tmp)
ok(false, "tmp has prop " + iter); ok(false, "tmp has prop " + iter);
tmp.testWith = true;
with(tmp)
ok(testWith === true, "testWith !== true");
reportSuccess(); reportSuccess();
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment