Re: [PATCH 2/4] vbscript: Implemented VarType(try 2)
On 06/17/14 07:59, Shuai Meng wrote:
diff --git a/dlls/vbscript/global.c b/dlls/vbscript/global.c index 5357df8..c2b2edd 100644 --- a/dlls/vbscript/global.c +++ b/dlls/vbscript/global.c @@ -602,8 +602,52 @@ static HRESULT Global_Oct(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIA
static HRESULT Global_VarType(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res) { - FIXME("\n"); - return E_NOTIMPL; + TRACE("(%s)\n", debugstr_variant(arg)); + + assert(args_cnt == 1); + + if(res) { + V_VT(res) = VT_I2; + switch(V_VT(arg)) { + case VT_EMPTY: + V_I2(res) = VT_EMPTY; + break; + case VT_NULL: + V_I2(res) = VT_NULL; + break; + case VT_I2: + V_I2(res) = VT_I2; + break; (...)
This all could be just: V_I2(res) = V_VT(arg); To handle unsupported types, you could use something like: if(V_VT(arg) & ~VT_TYPEMASK) { FIXME("..."); return E_NOTIMPL; } if(res) { V_VT(res) = VT_I2; V_I2(res) = V_VT(arg); } Jacek
2014-06-17 17:40 GMT+08:00 Jacek Caban <jacek(a)codeweavers.com>:
On 06/17/14 07:59, Shuai Meng wrote:
diff --git a/dlls/vbscript/global.c b/dlls/vbscript/global.c index 5357df8..c2b2edd 100644 --- a/dlls/vbscript/global.c +++ b/dlls/vbscript/global.c @@ -602,8 +602,52 @@ static HRESULT Global_Oct(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIA
static HRESULT Global_VarType(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res) { - FIXME("\n"); - return E_NOTIMPL; + TRACE("(%s)\n", debugstr_variant(arg)); + + assert(args_cnt == 1); + + if(res) { + V_VT(res) = VT_I2; + switch(V_VT(arg)) { + case VT_EMPTY: + V_I2(res) = VT_EMPTY; + break; + case VT_NULL: + V_I2(res) = VT_NULL; + break; + case VT_I2: + V_I2(res) = VT_I2; + break; (...)
This all could be just:
V_I2(res) = V_VT(arg);
To handle unsupported types, you could use something like:
if(V_VT(arg) & ~VT_TYPEMASK) { FIXME("..."); return E_NOTIMPL; }
I think over these codes again, ~VT_TYPEMASK is equal to 0, V_VT(arg) & ~VT_TYPEMASK will always be equal to 0, and then the codes belong to this if branch will never be executed, so why we write them?
if(res) { V_VT(res) = VT_I2; V_I2(res) = V_VT(arg); }
Jacek
On 06/26/14 06:15, Shuai Meng wrote:
I think over these codes again, ~VT_TYPEMASK is equal to 0, V_VT(arg) & ~VT_TYPEMASK will always be equal to 0, and then the codes belong to this if branch will never be executed, so why we write them? ~VT_TYPEMAST is not equal to 0.
participants (3)
-
Jacek Caban -
Piotr Caban -
Shuai Meng