[PATCH v2 2/2] jscript: Pass undefined 'this' instead of null in ES5 mode.
Gabriel Ivăncescu
gabrielopcode at gmail.com
Fri May 6 08:49:18 CDT 2022
Based on the spec (ECMA-262 5.1 Edition 11.2.3.7), whereas the ES3 spec
says it gets replaced with null.
Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
---
dlls/jscript/function.c | 7 ++++++-
dlls/mshtml/tests/es5.js | 3 +++
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/dlls/jscript/function.c b/dlls/jscript/function.c
index 942ec9d..a18705b 100644
--- a/dlls/jscript/function.c
+++ b/dlls/jscript/function.c
@@ -268,13 +268,18 @@ static inline HRESULT call(script_ctx_t *ctx, FunctionInstance *function, jsval_
HRESULT Function_invoke(jsdisp_t *func_this, IDispatch *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
{
FunctionInstance *function;
+ jsval_t vthis;
TRACE("func %p this %p\n", func_this, jsthis);
assert(is_class(func_this, JSCLASS_FUNCTION));
function = function_from_jsdisp(func_this);
- return call(function->dispex.ctx, function, jsthis ? jsval_disp(jsthis) : jsval_null(), flags, argc, argv, r);
+ if(jsthis)
+ vthis = jsval_disp(jsthis);
+ else
+ vthis = function->dispex.ctx->version < SCRIPTLANGUAGEVERSION_ES5 ? jsval_null() : jsval_undefined();
+ return call(function->dispex.ctx, function, vthis, flags, argc, argv, r);
}
static HRESULT Function_get_length(script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t *r)
diff --git a/dlls/mshtml/tests/es5.js b/dlls/mshtml/tests/es5.js
index fb756ac..b02f71c 100644
--- a/dlls/mshtml/tests/es5.js
+++ b/dlls/mshtml/tests/es5.js
@@ -1795,6 +1795,9 @@ sync_test("builtins detached scope this", function() {
var r = ((function() { var f = Object.prototype.toString; return (function() { return f(); }); })())();
ok(r === "[object Undefined]", "Object.toString returned " + r);
+ var r = (function() { var f = Object.prototype.toString; return f(); })();
+ ok(r === "[object Undefined]", "Object.toString returned " + r);
+
var r = ((function() { return (function() { return this; }); })())();
ok(r === window, "detached scope this = " + r);
});
--
2.34.1
More information about the wine-devel
mailing list