Jacek Caban : jscript: Support VT_DATE to string conversion.
Alexandre Julliard
julliard at winehq.org
Tue Jan 19 15:44:00 CST 2021
Module: wine
Branch: master
Commit: 42c044ae7170ea5f3bb92c47f62d28378cf8cee7
URL: https://source.winehq.org/git/wine.git/?a=commit;h=42c044ae7170ea5f3bb92c47f62d28378cf8cee7
Author: Jacek Caban <jacek at codeweavers.com>
Date: Tue Jan 19 14:33:52 2021 +0100
jscript: Support VT_DATE to string conversion.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/jscript/date.c | 25 +++++++++++++++++++++++++
dlls/jscript/jscript.h | 1 +
dlls/jscript/jsutils.c | 14 +++++++++++---
dlls/jscript/tests/lang.js | 3 +++
4 files changed, 40 insertions(+), 3 deletions(-)
diff --git a/dlls/jscript/date.c b/dlls/jscript/date.c
index c0264c26bb8..96d366c6245 100644
--- a/dlls/jscript/date.c
+++ b/dlls/jscript/date.c
@@ -2483,3 +2483,28 @@ HRESULT variant_date_to_number(double date, double *ret)
make_time(st.wHour, st.wMinute, st.wSecond, st.wMilliseconds));
return S_OK;
}
+
+HRESULT variant_date_to_string(script_ctx_t *ctx, double date, jsstr_t **r)
+{
+ DateInstance *date_obj;
+ jsval_t val;
+ double time;
+ HRESULT hres;
+
+ hres = variant_date_to_number(date, &time);
+ if(FAILED(hres))
+ return hres;
+
+ hres = create_date(ctx, NULL, time, &date_obj);
+ if(FAILED(hres))
+ return hres;
+
+ hres = dateobj_to_string(date_obj, &val);
+ jsdisp_release(&date_obj->dispex);
+ if(FAILED(hres))
+ return hres;
+
+ assert(is_string(val));
+ *r = get_string(val);
+ return hres;
+}
diff --git a/dlls/jscript/jscript.h b/dlls/jscript/jscript.h
index 7cc194b84b9..b590e1a7441 100644
--- a/dlls/jscript/jscript.h
+++ b/dlls/jscript/jscript.h
@@ -361,6 +361,7 @@ HRESULT jsval_strict_equal(jsval_t,jsval_t,BOOL*) DECLSPEC_HIDDEN;
HRESULT variant_change_type(script_ctx_t*,VARIANT*,VARIANT*,VARTYPE) DECLSPEC_HIDDEN;
HRESULT variant_date_to_number(double,double*) DECLSPEC_HIDDEN;
+HRESULT variant_date_to_string(script_ctx_t*,double,jsstr_t**) DECLSPEC_HIDDEN;
HRESULT decode_source(WCHAR*) DECLSPEC_HIDDEN;
diff --git a/dlls/jscript/jsutils.c b/dlls/jscript/jsutils.c
index a77c70ad01d..bfecdc75c4a 100644
--- a/dlls/jscript/jsutils.c
+++ b/dlls/jscript/jsutils.c
@@ -773,9 +773,17 @@ HRESULT to_string(script_ctx_t *ctx, jsval_t val, jsstr_t **str)
case JSV_BOOL:
*str = jsstr_alloc(get_bool(val) ? L"true" : L"false");
break;
- default:
- FIXME("unsupported %s\n", debugstr_jsval(val));
- return E_NOTIMPL;
+ default: {
+ const VARIANT *v = get_variant(val);
+ switch(V_VT(v))
+ {
+ case VT_DATE:
+ return variant_date_to_string(ctx, V_DATE(v), str);
+ default:
+ FIXME("unsupported %s\n", debugstr_variant(v));
+ return E_NOTIMPL;
+ }
+ }
}
return *str ? S_OK : E_OUTOFMEMORY;
diff --git a/dlls/jscript/tests/lang.js b/dlls/jscript/tests/lang.js
index d6973099b7c..7bcb121131e 100644
--- a/dlls/jscript/tests/lang.js
+++ b/dlls/jscript/tests/lang.js
@@ -200,14 +200,17 @@ ok(tmp === 3, "tmp = " + tmp);
ok(getVT(+d) === "VT_R8", "vt +v_date(0) = " + getVT(d));
ok(getVT(d / d) === "VT_I4", "vt v_date(0) / v_date(0) = " + getVT(d / d));
ok((+d) === e, "+v_date(0) = " + (+d) + " expected " + e);
+ ok(("" + d).match(/^Sat Dec 30 00:00:00 .* 1899$/) != null, "+v_date(0) = " + d);
d = v_date(2.5);
e = Date.parse("Mon Jan 1 12:00:00 1900");
ok((+d) === e, "+v_date(2.5) = " + (+d));
+ ok(("" + d).match(/^Mon Jan 1 12:00:00 .* 1900$/) != null, "+v_date(2.5) = " + d);
d = v_date(42091);
e = Date.parse("Sat Mar 28 00:00:00 2015");
ok((+d) === e, "+v_date(2015y) = " + (+d) + " expected " + e);
+ ok(("" + d).match(/^Sat Mar 28 00:00:00 .* 2015$/) != null, "+v_date(2015y) = " + d);
})();
function testRecFunc(x) {
More information about the wine-cvs
mailing list