Jacek Caban : vbscipt: Added string constants.

Alexandre Julliard julliard at winehq.org
Wed Feb 27 14:41:58 CST 2013


Module: wine
Branch: master
Commit: 5f3c38ed61d8e062954953ec3a64fba6b19a445d
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=5f3c38ed61d8e062954953ec3a64fba6b19a445d

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Feb 27 12:56:05 2013 +0100

vbscipt: Added string constants.

---

 dlls/vbscript/global.c      |   80 ++++++++++---------------------------------
 dlls/vbscript/tests/api.vbs |   14 +++++++
 dlls/vbscript/vbdisp.c      |   12 ++++++
 dlls/vbscript/vbscript.h    |    7 +++-
 4 files changed, 50 insertions(+), 63 deletions(-)

diff --git a/dlls/vbscript/global.c b/dlls/vbscript/global.c
index 5b4af6f..9ff1f76 100644
--- a/dlls/vbscript/global.c
+++ b/dlls/vbscript/global.c
@@ -1609,59 +1609,15 @@ static HRESULT Global_GetRef(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VA
     return E_NOTIMPL;
 }
 
-static HRESULT Global_vbCr(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
-{
-    FIXME("\n");
-    return E_NOTIMPL;
-}
-
-static HRESULT Global_vbCrLf(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
-{
-    FIXME("\n");
-    return E_NOTIMPL;
-}
-
-static HRESULT Global_vbNewLine(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
-{
-    FIXME("\n");
-    return E_NOTIMPL;
-}
-
-static HRESULT Global_vbFormFeed(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
-{
-    FIXME("\n");
-    return E_NOTIMPL;
-}
-
-static HRESULT Global_vbLf(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
-{
-    FIXME("\n");
-    return E_NOTIMPL;
-}
-
-static HRESULT Global_vbNullChar(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
-{
-    FIXME("\n");
-    return E_NOTIMPL;
-}
-
-static HRESULT Global_vbNullString(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
-{
-    FIXME("\n");
-    return E_NOTIMPL;
-}
-
-static HRESULT Global_vbTab(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
-{
-    FIXME("\n");
-    return E_NOTIMPL;
-}
-
-static HRESULT Global_vbVerticalTab(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
-{
-    FIXME("\n");
-    return E_NOTIMPL;
-}
+static const string_constant_t vbCr          = {1, {'\r'}};
+static const string_constant_t vbCrLf        = {2, {'\r','\n'}};
+static const string_constant_t vbNewLine     = {2, {'\r','\n'}};
+static const string_constant_t vbFormFeed    = {1, {0xc}};
+static const string_constant_t vbLf          = {1, {'\n'}};
+static const string_constant_t vbNullChar    = {1};
+static const string_constant_t vbNullString  = {0};
+static const string_constant_t vbTab         = {1, {'\t'}};
+static const string_constant_t vbVerticalTab = {1, {0xb}};
 
 static const builtin_prop_t global_props[] = {
     {DISPID_GLOBAL_VBUSESYSTEM,        NULL, BP_GET, VT_I2, 0},
@@ -1736,15 +1692,15 @@ static const builtin_prop_t global_props[] = {
     {DISPID_GLOBAL_VBRED,              NULL, BP_GET, VT_I4, 0x0000ff},
     {DISPID_GLOBAL_VBWHITE,            NULL, BP_GET, VT_I4, 0xffffff},
     {DISPID_GLOBAL_VBYELLOW,           NULL, BP_GET, VT_I4, 0x00ffff},
-    {DISPID_GLOBAL_VBCR,               Global_vbCr, BP_GET},
-    {DISPID_GLOBAL_VBCRLF,             Global_vbCrLf, BP_GET},
-    {DISPID_GLOBAL_VBNEWLINE,          Global_vbNewLine, BP_GET},
-    {DISPID_GLOBAL_VBFORMFEED,         Global_vbFormFeed, BP_GET},
-    {DISPID_GLOBAL_VBLF,               Global_vbLf, BP_GET},
-    {DISPID_GLOBAL_VBNULLCHAR,         Global_vbNullChar, BP_GET},
-    {DISPID_GLOBAL_VBNULLSTRING,       Global_vbNullString, BP_GET},
-    {DISPID_GLOBAL_VBTAB,              Global_vbTab, BP_GET},
-    {DISPID_GLOBAL_VBVERTICALTAB,      Global_vbVerticalTab, BP_GET},
+    {DISPID_GLOBAL_VBCR,               NULL, BP_GET, VT_BSTR, (UINT_PTR)&vbCr},
+    {DISPID_GLOBAL_VBCRLF,             NULL, BP_GET, VT_BSTR, (UINT_PTR)&vbCrLf},
+    {DISPID_GLOBAL_VBNEWLINE,          NULL, BP_GET, VT_BSTR, (UINT_PTR)&vbNewLine},
+    {DISPID_GLOBAL_VBFORMFEED,         NULL, BP_GET, VT_BSTR, (UINT_PTR)&vbFormFeed},
+    {DISPID_GLOBAL_VBLF,               NULL, BP_GET, VT_BSTR, (UINT_PTR)&vbLf},
+    {DISPID_GLOBAL_VBNULLCHAR,         NULL, BP_GET, VT_BSTR, (UINT_PTR)&vbNullChar},
+    {DISPID_GLOBAL_VBNULLSTRING,       NULL, BP_GET, VT_BSTR, (UINT_PTR)&vbNullString},
+    {DISPID_GLOBAL_VBTAB,              NULL, BP_GET, VT_BSTR, (UINT_PTR)&vbTab},
+    {DISPID_GLOBAL_VBVERTICALTAB,      NULL, BP_GET, VT_BSTR, (UINT_PTR)&vbVerticalTab},
     {DISPID_GLOBAL_CCUR,                      Global_CCur, 0, 1},
     {DISPID_GLOBAL_CINT,                      Global_CInt, 0, 1},
     {DISPID_GLOBAL_CLNG,                      Global_CLng, 0, 1},
diff --git a/dlls/vbscript/tests/api.vbs b/dlls/vbscript/tests/api.vbs
index 3e53813..0aaeefb 100644
--- a/dlls/vbscript/tests/api.vbs
+++ b/dlls/vbscript/tests/api.vbs
@@ -48,6 +48,11 @@ Sub TestConstantI4(name, val, exval)
     Call ok(getVT(val) = "VT_I4*", "getVT(" & name & ") = " & getVT(val))
 End Sub
 
+Sub TestConstantBSTR(name, val, exval)
+    Call ok(val = exval, name & " =  " & val & " expected " & exval)
+    Call ok(getVT(val) = "VT_BSTR*", "getVT(" & name & ") = " & getVT(val))
+End Sub
+
 TestConstant "vbEmpty", vbEmpty, 0
 TestConstant "vbNull", vbNull, 1
 TestConstant "vbLong", vbLong, 3
@@ -103,6 +108,15 @@ TestConstantI4 "vbMagenta", vbMagenta, &hff00ff&
 TestConstantI4 "vbRed", vbRed, &h0000ff&
 TestConstantI4 "vbWhite", vbWhite, &hffffff&
 TestConstantI4 "vbYellow", vbYellow, &h00ffff&
+TestConstantBSTR "vbCr", vbCr, Chr(13)
+TestConstantBSTR "vbCrLf", vbCrLf, Chr(13)&Chr(10)
+TestConstantBSTR "vbNewLine", vbNewLine, Chr(13)&Chr(10)
+TestConstantBSTR "vbFormFeed", vbFormFeed, Chr(12)
+TestConstantBSTR "vbLf", vbLf, Chr(10)
+TestConstantBSTR "vbNullChar", vbNullChar, Chr(0)
+TestConstantBSTR "vbNullString", vbNullString, ""
+TestConstantBSTR "vbTab", vbTab, chr(9)
+TestConstantBSTR "vbVerticalTab", vbVerticalTab, chr(11)
 
 Sub TestCStr(arg, exval)
     dim x
diff --git a/dlls/vbscript/vbdisp.c b/dlls/vbscript/vbdisp.c
index 0c39956..f06a5b6 100644
--- a/dlls/vbscript/vbdisp.c
+++ b/dlls/vbscript/vbdisp.c
@@ -160,6 +160,18 @@ static HRESULT invoke_builtin(vbdisp_t *This, const builtin_prop_t *prop, WORD f
                 V_VT(res) = VT_I4;
                 V_I4(res) = val;
                 break;
+            case VT_BSTR: {
+                const string_constant_t *str = (const string_constant_t*)prop->max_args;
+                BSTR ret;
+
+                ret = SysAllocStringLen(str->buf, str->len);
+                if(!ret)
+                    return E_OUTOFMEMORY;
+
+                V_VT(res) = VT_BSTR;
+                V_BSTR(res) = ret;
+                break;
+            }
             default:
                 assert(0);
             }
diff --git a/dlls/vbscript/vbscript.h b/dlls/vbscript/vbscript.h
index db31b47..e25b524 100644
--- a/dlls/vbscript/vbscript.h
+++ b/dlls/vbscript/vbscript.h
@@ -86,7 +86,7 @@ typedef struct {
     HRESULT (*proc)(vbdisp_t*,VARIANT*,unsigned,VARIANT*);
     DWORD flags;
     unsigned min_args;
-    unsigned max_args;
+    UINT_PTR max_args;
 } builtin_prop_t;
 
 typedef struct _class_desc_t {
@@ -334,6 +334,11 @@ HRESULT compile_script(script_ctx_t*,const WCHAR*,const WCHAR*,vbscode_t**) DECL
 HRESULT exec_script(script_ctx_t*,function_t*,IDispatch*,DISPPARAMS*,VARIANT*) DECLSPEC_HIDDEN;
 void release_dynamic_vars(dynamic_var_t*) DECLSPEC_HIDDEN;
 
+typedef struct {
+    UINT16 len;
+    WCHAR buf[7];
+} string_constant_t;
+
 #define TID_LIST \
     XDIID(ErrObj) \
     XDIID(GlobalObj)




More information about the wine-cvs mailing list