From 61d49a8a97ba5b18eff931ddfbf412ded583fb19 Mon Sep 17 00:00:00 2001 From: Shuai Meng Date: Wed, 25 Jun 2014 10:16:07 +0800 Subject: [PATCH] vbscript: Implemented TypeName. --- dlls/vbscript/global.c | 48 +++++++++++++++++++++++++++++++++++-- dlls/vbscript/tests/api.vbs | 12 ++++++++++ 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/dlls/vbscript/global.c b/dlls/vbscript/global.c index 5160374c98f..5a127293a2d 100644 --- a/dlls/vbscript/global.c +++ b/dlls/vbscript/global.c @@ -1502,8 +1502,52 @@ static HRESULT Global_DatePart(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, static HRESULT Global_TypeName(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res) { - FIXME("\n"); - return E_NOTIMPL; + static const WCHAR ByteW[] = {'B', 'y', 't', 'e', 0}; + static const WCHAR IntegerW[] = {'I', 'n', 't', 'e', 'g', 'e', 'r', 0}; + static const WCHAR LongW[] = {'L', 'o', 'n', 'g', 0}; + static const WCHAR SingleW[] = {'S', 'i', 'n', 'g', 'l', 'e', 0}; + static const WCHAR DoubleW[] = {'D', 'o', 'u', 'b', 'l', 'e', 0}; + static const WCHAR CurrencyW[] = {'C', 'u', 'r', 'r', 'e', 'n', 'c', 'y', 0}; + static const WCHAR DecimalW[] = {'D', 'e', 'c', 'i', 'm', 'a', 'l', 0}; + static const WCHAR DateW[] = {'D', 'a', 't', 'e', 0}; + static const WCHAR StringW[] = {'S', 't', 'r', 'i', 'n', 'g', 0}; + static const WCHAR BooleanW[] = {'B', 'o', 'o', 'l', 'e', 'a', 'n', 0}; + static const WCHAR EmptyW[] = {'E', 'm', 'p', 't', 'y', 0}; + static const WCHAR NullW[] = {'N', 'u', 'l', 'l', 0}; + + TRACE("(%s)\n", debugstr_variant(arg)); + + assert(args_cnt == 1); + + switch(V_VT(arg)) { + case VT_UI1: + return return_string(res, ByteW); + case VT_I2: + return return_string(res, IntegerW); + case VT_I4: + return return_string(res, LongW); + case VT_R4: + return return_string(res, SingleW); + case VT_R8: + return return_string(res, DoubleW); + case VT_CY: + return return_string(res, CurrencyW); + case VT_DECIMAL: + return return_string(res, DecimalW); + case VT_DATE: + return return_string(res, DateW); + case VT_BSTR: + return return_string(res, StringW); + case VT_BOOL: + return return_string(res, BooleanW); + case VT_EMPTY: + return return_string(res, EmptyW); + case VT_NULL: + return return_string(res, NullW); + default: + FIXME("arg %s not supported\n", debugstr_variant(arg)); + return E_NOTIMPL; + } } static HRESULT Global_Array(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res) diff --git a/dlls/vbscript/tests/api.vbs b/dlls/vbscript/tests/api.vbs index 2cf9bb7c7cc..ded9b8bf035 100644 --- a/dlls/vbscript/tests/api.vbs +++ b/dlls/vbscript/tests/api.vbs @@ -845,4 +845,16 @@ MyObject.myval = 0 Call ok(CSng(MyObject) = 0, "CSng(MyObject) = " & CSng(MyObject)) Call ok(getVT(CSng(MyObject)) = "VT_R4", "getVT(CSng(MyObject)) = " & getVT(CSng(MyObject))) +Dim MyEmpty +Call ok(TypeName(CByte(255)) = "Byte", "TypeName(CByte(255)) = " & TypeName(CByte(255))) +Call ok(TypeName(255) = "Integer", "TypeName(255) = " & TypeName(255)) +Call ok(TypeName(32768) = "Long", "TypeName(32768) = " & TypeName(32768)) +Call ok(TypeName(CSng(0.5)) = "Single", "TypeName(CSng(0.5)) = " & TypeName(CSng(0.5))) +Call ok(TypeName(-0.5) = "Double", "TypeName(-0.5) = " & TypeName(-0.5)) +Call ok(TypeName(CCur(0.5)) = "Currency", "TypeName(CCur(0.5)) = " & TypeName(CCur(0.5))) +Call ok(TypeName(CStr(0.5)) = "String", "TypeName(CStr(0.5)) = " & TypeName(CStr(0.5))) +Call ok(TypeName(True) = "Boolean", "TypeName(True) = " & TypeName(True)) +Call ok(TypeName(MyEmpty) = "Empty", "TypeName(MyEmpty) = " & TypeName(Empty)) +Call ok(TypeName(Null) = "Null", "TypeName(Null) = " & TypeName(Null)) + Call reportSuccess()