Module: wine Branch: master Commit: 5f3c38ed61d8e062954953ec3a64fba6b19a445d URL: http://source.winehq.org/git/wine.git/?a=commit;h=5f3c38ed61d8e062954953ec3a...
Author: Jacek Caban jacek@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)