static HRESULT interp_xor(exec_ctx_t *ctx)
{
- FIXME("\n");
- return E_NOTIMPL;
+ variant_val_t r, l;
+ VARIANT v;
+ HRESULT hres;
+
+ TRACE("\n");
+
+ hres = stack_pop_val(ctx, &r);
+ if(FAILED(hres))
+ return hres;
+
+ hres = stack_pop_val(ctx, &l);
+ if(SUCCEEDED(hres)) {
+ hres = VarXor(l.v, r.v, &v);
+ release_val(&l);
+ }
+ release_val(&r);
+ if(FAILED(hres))
+ return hres;
+
+ return stack_push(ctx, &v);
}
static HRESULT interp_eqv(exec_ctx_t *ctx)
call ok(true or false and false, "true or false and false is false?")
call ok(null or true, "null or true is false")
+call ok(true xor false, "true xor false is false?")
+call ok(not (false xor false), "false xor false is true?")
+call ok(not (true or false xor true), "true or false xor true is true?")
+call ok(not (true xor false or true), "true xor false or true is true?")
+
x = 3
Call ok(2+2 = 4, "2+2 = " & (2+2))
Call ok(false + 6 + true = 5, "false + 6 + true <> 5")