On 01/11/2021 15:46, Jacek Caban wrote:
On 10/25/21 3:30 PM, Gabriel Ivăncescu wrote:
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com
dlls/jscript/object.c | 13 +++++++++++-- dlls/jscript/tests/lang.js | 13 +++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-)
diff --git a/dlls/jscript/object.c b/dlls/jscript/object.c index 169b47c..8da0ff4 100644 --- a/dlls/jscript/object.c +++ b/dlls/jscript/object.c @@ -196,8 +196,17 @@ static HRESULT Object_propertyIsEnumerable(script_ctx_t *ctx, vdisp_t *jsthis, W static HRESULT Object_isPrototypeOf(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r) { - FIXME("\n"); - return E_NOTIMPL; + jsdisp_t *jsdisp; + BOOL ret = FALSE;
+ if(!r) + return S_OK;
+ if(argc && is_jsdisp(jsthis) && is_object_instance(argv[0]) && (jsdisp = to_jsdisp(get_object(argv[0])))) + ret = (jsdisp->prototype == jsthis->u.jsdisp);
That's not what spec says we should do.
Oh yeah, oops, I see it's supposed to check the whole chain.
diff --git a/dlls/jscript/tests/lang.js b/dlls/jscript/tests/lang.js index ad1217d..bcfe88b 100644 --- a/dlls/jscript/tests/lang.js +++ b/dlls/jscript/tests/lang.js @@ -1679,14 +1679,27 @@ tmp = new instanceOfTest(); ok((tmp instanceof instanceOfTest) === true, "tmp is not instance of instanceOfTest"); ok((tmp instanceof Object) === true, "tmp is not instance of Object"); ok((tmp instanceof String) === false, "tmp is instance of String"); +ok(Object.prototype.isPrototypeOf.call(instanceOfTest, tmp) === false, "instanceOfTest is prototype of tmp"); +ok(Object.prototype.isPrototypeOf.call(instanceOfTest.prototype, tmp) === true, "instanceOfTest.prototype is not prototype of tmp");
Why do you use call() instead of doing regular calls?
Not a specific reason, I just use it in general to make sure it's the proper one called, so I end up copy pasting it.