Jacek Caban : jscript: Added Object. toString for host objects implementation.
Alexandre Julliard
julliard at winehq.org
Wed Sep 23 11:03:58 CDT 2009
Module: wine
Branch: master
Commit: 461180459b7a077fbdd617b51b3d0641863e5921
URL: http://source.winehq.org/git/wine.git/?a=commit;h=461180459b7a077fbdd617b51b3d0641863e5921
Author: Jacek Caban <jacek at codeweavers.com>
Date: Wed Sep 23 16:19:58 2009 +0200
jscript: Added Object.toString for host objects implementation.
---
dlls/jscript/object.c | 11 ++++++++---
dlls/jscript/tests/api.js | 2 ++
2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/dlls/jscript/object.c b/dlls/jscript/object.c
index 7dffff7..f5bc455 100644
--- a/dlls/jscript/object.c
+++ b/dlls/jscript/object.c
@@ -36,6 +36,7 @@ static HRESULT Object_toString(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, D
VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
{
DispatchEx *jsdisp;
+ const WCHAR *str;
static const WCHAR formatW[] = {'[','o','b','j','e','c','t',' ','%','s',']',0};
@@ -56,18 +57,22 @@ static HRESULT Object_toString(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, D
TRACE("\n");
jsdisp = get_jsdisp(jsthis);
- if(!jsdisp || names[jsdisp->builtin_info->class] == NULL) {
+ if(!jsdisp) {
+ str = objectW;
+ }else if(names[jsdisp->builtin_info->class]) {
+ str = names[jsdisp->builtin_info->class];
+ }else {
FIXME("jdisp->builtin_info->class = %d\n", jsdisp->builtin_info->class);
return E_FAIL;
}
if(retv) {
V_VT(retv) = VT_BSTR;
- V_BSTR(retv) = SysAllocStringLen(NULL, 9+strlenW(names[jsdisp->builtin_info->class]));
+ V_BSTR(retv) = SysAllocStringLen(NULL, 9+strlenW(str));
if(!V_BSTR(retv))
return E_OUTOFMEMORY;
- sprintfW(V_BSTR(retv), formatW, names[jsdisp->builtin_info->class]);
+ sprintfW(V_BSTR(retv), formatW, str);
}
return S_OK;
diff --git a/dlls/jscript/tests/api.js b/dlls/jscript/tests/api.js
index 7b22212..ee3a058 100644
--- a/dlls/jscript/tests/api.js
+++ b/dlls/jscript/tests/api.js
@@ -87,6 +87,8 @@ ok(tmp.f() === "[object Number]", "tmp.f() = " + tmp.f());
ok(tmp.f() === "[object RegExp]", "tmp.f() = " + tmp.f());
(tmp = new String).f = Object.prototype.toString;
ok(tmp.f() === "[object String]", "tmp.f() = " + tmp.f());
+tmp = Object.prototype.toString.call(testObj);
+ok(tmp === "[object Object]", "'' + new Object() = " + tmp);
ok(Object(1) instanceof Number, "Object(1) is not instance of Number");
ok(Object("") instanceof String, "Object('') is not instance of String");
More information about the wine-cvs
mailing list