[PATCH 2/7] jscript: Implement Object.prototype.isPrototypeOf method.
Gabriel Ivăncescu
gabrielopcode at gmail.com
Mon Nov 1 11:44:28 CDT 2021
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 at 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.
More information about the wine-devel
mailing list