Module: wine Branch: master Commit: 3767d63a1c220e1168c3d4326602fd3db5abd2ba URL: https://source.winehq.org/git/wine.git/?a=commit;h=3767d63a1c220e1168c3d4326...
Author: Jacek Caban jacek@codeweavers.com Date: Mon May 14 13:33:52 2018 +0200
jscript: Use jsdisp_define_property to set function prototypes.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/jscript/function.c | 12 ++++-------- dlls/mshtml/tests/es5.js | 4 ++++ 2 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/dlls/jscript/function.c b/dlls/jscript/function.c index 5fff9da..9b51b08 100644 --- a/dlls/jscript/function.c +++ b/dlls/jscript/function.c @@ -641,11 +641,6 @@ static HRESULT create_function(script_ctx_t *ctx, const builtin_info_t *builtin_ return S_OK; }
-static inline HRESULT set_prototype(script_ctx_t *ctx, jsdisp_t *dispex, jsdisp_t *prototype) -{ - return jsdisp_propput_dontenum(dispex, prototypeW, jsval_obj(prototype)); -} - HRESULT create_builtin_function(script_ctx_t *ctx, builtin_invoke_t value_proc, const WCHAR *name, const builtin_info_t *builtin_info, DWORD flags, jsdisp_t *prototype, jsdisp_t **ret) { @@ -660,7 +655,7 @@ HRESULT create_builtin_function(script_ctx_t *ctx, builtin_invoke_t value_proc, hres = jsdisp_define_data_property(&function->dispex, lengthW, 0, jsval_number(function->length)); if(SUCCEEDED(hres)) - hres = set_prototype(ctx, &function->dispex, prototype); + hres = jsdisp_define_data_property(&function->dispex, prototypeW, 0, jsval_obj(prototype)); if(FAILED(hres)) { jsdisp_release(&function->dispex); return hres; @@ -713,7 +708,8 @@ HRESULT create_source_function(script_ctx_t *ctx, bytecode_t *code, function_cod
hres = create_function(ctx, NULL, PROPF_CONSTR, FALSE, NULL, &function); if(SUCCEEDED(hres)) { - hres = set_prototype(ctx, &function->dispex, prototype); + hres = jsdisp_define_data_property(&function->dispex, prototypeW, PROPF_WRITABLE, + jsval_obj(prototype)); if(SUCCEEDED(hres)) hres = set_constructor_prop(ctx, &function->dispex, prototype); if(FAILED(hres)) @@ -871,7 +867,7 @@ HRESULT init_function_constr(script_ctx_t *ctx, jsdisp_t *object_prototype) if(SUCCEEDED(hres)) { constr->value_proc = FunctionConstr_value; constr->name = FunctionW; - hres = set_prototype(ctx, &constr->dispex, &prot->dispex); + hres = jsdisp_define_data_property(&constr->dispex, prototypeW, 0, jsval_obj(&prot->dispex)); if(SUCCEEDED(hres)) hres = set_constructor_prop(ctx, &constr->dispex, &prot->dispex); if(FAILED(hres)) diff --git a/dlls/mshtml/tests/es5.js b/dlls/mshtml/tests/es5.js index 30b464c..70e9ecb 100644 --- a/dlls/mshtml/tests/es5.js +++ b/dlls/mshtml/tests/es5.js @@ -195,6 +195,10 @@ function test_getOwnPropertyDescriptor() { test_own_data_prop_desc(arguments, "callee", true, false, true); })();
+ test_own_data_prop_desc(String, "prototype", false, false, false); + test_own_data_prop_desc(function(){}, "prototype", true, false, false); + test_own_data_prop_desc(Function, "prototype", false, false, false); + next_test(); }