jscript: Added call_expression_eval implementation for EXPRVAL_VARIANT values.
This commit is contained in:
parent
75cce3cdcd
commit
b6b520e0ed
|
@ -1536,11 +1536,19 @@ HRESULT call_expression_eval(exec_ctx_t *ctx, expression_t *_expr, DWORD flags,
|
||||||
hres = args_to_param(ctx, expr->argument_list, ei, &dp);
|
hres = args_to_param(ctx, expr->argument_list, ei, &dp);
|
||||||
if(SUCCEEDED(hres)) {
|
if(SUCCEEDED(hres)) {
|
||||||
switch(exprval.type) {
|
switch(exprval.type) {
|
||||||
|
case EXPRVAL_VARIANT:
|
||||||
|
if(V_VT(&exprval.u.var) != VT_DISPATCH) {
|
||||||
|
FIXME("throw TypeError\n");
|
||||||
|
hres = E_NOTIMPL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
hres = disp_call(V_DISPATCH(&exprval.u.var), DISPID_VALUE, ctx->parser->script->lcid,
|
||||||
|
DISPATCH_METHOD, &dp, flags & EXPR_NOVAL ? NULL : &var, ei, NULL/*FIXME*/);
|
||||||
|
break;
|
||||||
case EXPRVAL_IDREF:
|
case EXPRVAL_IDREF:
|
||||||
hres = disp_call(exprval.u.idref.disp, exprval.u.idref.id, ctx->parser->script->lcid, DISPATCH_METHOD,
|
hres = disp_call(exprval.u.idref.disp, exprval.u.idref.id, ctx->parser->script->lcid,
|
||||||
&dp, flags & EXPR_NOVAL ? NULL : &var, ei, NULL/*FIXME*/);
|
DISPATCH_METHOD, &dp, flags & EXPR_NOVAL ? NULL : &var, ei, NULL/*FIXME*/);
|
||||||
if(flags & EXPR_NOVAL)
|
|
||||||
V_VT(&var) = VT_EMPTY;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
FIXME("unimplemented type %d\n", exprval.type);
|
FIXME("unimplemented type %d\n", exprval.type);
|
||||||
|
@ -1554,9 +1562,13 @@ HRESULT call_expression_eval(exec_ctx_t *ctx, expression_t *_expr, DWORD flags,
|
||||||
if(FAILED(hres))
|
if(FAILED(hres))
|
||||||
return hres;
|
return hres;
|
||||||
|
|
||||||
TRACE("= %s\n", debugstr_variant(&var));
|
|
||||||
ret->type = EXPRVAL_VARIANT;
|
ret->type = EXPRVAL_VARIANT;
|
||||||
|
if(flags & EXPR_NOVAL) {
|
||||||
|
V_VT(&ret->u.var) = VT_EMPTY;
|
||||||
|
}else {
|
||||||
|
TRACE("= %s\n", debugstr_variant(&var));
|
||||||
ret->u.var = var;
|
ret->u.var = var;
|
||||||
|
}
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -894,4 +894,6 @@ ok(""+str === "valueOf", "''+str = " + str);
|
||||||
str.valueOf = function() { return new Date(); }
|
str.valueOf = function() { return new Date(); }
|
||||||
ok(""+str === "test", "''+str = " + str);
|
ok(""+str === "test", "''+str = " + str);
|
||||||
|
|
||||||
|
ok((function (){return 1;})() === 1, "(function (){return 1;})() = " + (function (){return 1;})());
|
||||||
|
|
||||||
reportSuccess();
|
reportSuccess();
|
||||||
|
|
Loading…
Reference in New Issue