Module: wine Branch: master Commit: 28734e3756761867d94eca0eb870a36a8f6da3b2 URL: http://source.winehq.org/git/wine.git/?a=commit;h=28734e3756761867d94eca0eb8...
Author: Piotr Caban piotr.caban@gmail.com Date: Fri Aug 14 11:58:10 2009 +0200
jscript: Inherit some Error functions from Object.
---
dlls/jscript/error.c | 50 ++++++++------------------------------------ dlls/jscript/global.c | 2 +- dlls/jscript/jscript.h | 2 +- dlls/jscript/tests/api.js | 1 + 4 files changed, 12 insertions(+), 43 deletions(-)
diff --git a/dlls/jscript/error.c b/dlls/jscript/error.c index 25a3836..70fd008 100644 --- a/dlls/jscript/error.c +++ b/dlls/jscript/error.c @@ -38,10 +38,6 @@ static const WCHAR descriptionW[] = {'d','e','s','c','r','i','p','t','i','o','n' static const WCHAR messageW[] = {'m','e','s','s','a','g','e',0}; static const WCHAR numberW[] = {'n','u','m','b','e','r',0}; static const WCHAR toStringW[] = {'t','o','S','t','r','i','n','g',0}; -static const WCHAR hasOwnPropertyW[] = {'h','a','s','O','w','n','P','r','o','p','e','r','t','y',0}; -static const WCHAR propertyIsEnumerableW[] = - {'p','r','o','p','e','r','t','y','I','s','E','n','u','m','e','r','a','b','l','e',0}; -static const WCHAR isPrototypeOfW[] = {'i','s','P','r','o','t','o','t','y','p','e','O','f',0};
static HRESULT Error_number(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) @@ -116,28 +112,6 @@ static HRESULT Error_toString(DispatchEx *dispex, LCID lcid, WORD flags, return S_OK; }
-static HRESULT Error_hasOwnProperty(DispatchEx *dispex, LCID lcid, WORD flags, - DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) -{ - FIXME("\n"); - return E_NOTIMPL; -} - -static HRESULT Error_propertyIsEnumerable(DispatchEx *dispex, LCID lcid, WORD flags, - DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) -{ - FIXME("\n"); - return E_NOTIMPL; -} - - -static HRESULT Error_isPrototypeOf(DispatchEx *dispex, LCID lcid, WORD flags, - DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) -{ - FIXME("\n"); - return E_NOTIMPL; -} - static HRESULT Error_value(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) { @@ -166,11 +140,8 @@ static void Error_destructor(DispatchEx *dispex)
static const builtin_prop_t Error_props[] = { {descriptionW, Error_description, 0}, - {hasOwnPropertyW, Error_hasOwnProperty, PROPF_METHOD}, - {isPrototypeOfW, Error_isPrototypeOf, PROPF_METHOD}, {messageW, Error_message, 0}, {numberW, Error_number, 0}, - {propertyIsEnumerableW, Error_propertyIsEnumerable, PROPF_METHOD}, {toStringW, Error_toString, PROPF_METHOD} };
@@ -185,11 +156,8 @@ static const builtin_info_t Error_info = {
static const builtin_prop_t ErrorInst_props[] = { {descriptionW, Error_description, 0}, - {hasOwnPropertyW, Error_hasOwnProperty, PROPF_METHOD}, - {isPrototypeOfW, Error_isPrototypeOf, PROPF_METHOD}, {messageW, Error_message, 0}, {numberW, Error_number, 0}, - {propertyIsEnumerableW, Error_propertyIsEnumerable, PROPF_METHOD} };
static const builtin_info_t ErrorInst_info = { @@ -201,21 +169,21 @@ static const builtin_info_t ErrorInst_info = { NULL };
-static HRESULT alloc_error(script_ctx_t *ctx, BOOL error_prototype, +static HRESULT alloc_error(script_ctx_t *ctx, DispatchEx *prototype, DispatchEx *constr, ErrorInstance **ret) { ErrorInstance *err; - DispatchEx *inherit; HRESULT hres;
err = heap_alloc_zero(sizeof(ErrorInstance)); if(!err) return E_OUTOFMEMORY;
- inherit = error_prototype ? ctx->object_constr : ctx->error_constr; - hres = init_dispex_from_constr(&err->dispex, ctx, - error_prototype ? &Error_info : &ErrorInst_info, - constr ? constr : inherit); + if(prototype) + hres = init_dispex(&err->dispex, ctx, &Error_info, prototype); + else + hres = init_dispex_from_constr(&err->dispex, ctx, &ErrorInst_info, + constr ? constr : ctx->error_constr); if(FAILED(hres)) { heap_free(err); return hres; @@ -231,7 +199,7 @@ static HRESULT create_error(script_ctx_t *ctx, DispatchEx *constr, ErrorInstance *err; HRESULT hres;
- hres = alloc_error(ctx, FALSE, constr, &err); + hres = alloc_error(ctx, NULL, constr, &err); if(FAILED(hres)) return hres;
@@ -366,7 +334,7 @@ static HRESULT URIErrorConstr_value(DispatchEx *dispex, LCID lcid, WORD flags, dispex->ctx->uri_error_constr); }
-HRESULT init_error_constr(script_ctx_t *ctx) +HRESULT init_error_constr(script_ctx_t *ctx, DispatchEx *object_prototype) { static const WCHAR nameW[] = {'n','a','m','e',0}; static const WCHAR ErrorW[] = {'E','r','r','o','r',0}; @@ -392,7 +360,7 @@ HRESULT init_error_constr(script_ctx_t *ctx) HRESULT hres;
for(i=0; i<7; i++) { - hres = alloc_error(ctx, i==0, NULL, &err); + hres = alloc_error(ctx, i==0 ? object_prototype : NULL, NULL, &err); if(FAILED(hres)) return hres;
diff --git a/dlls/jscript/global.c b/dlls/jscript/global.c index f0dadc3..e843fac 100644 --- a/dlls/jscript/global.c +++ b/dlls/jscript/global.c @@ -766,7 +766,7 @@ static HRESULT init_constructors(script_ctx_t *ctx, DispatchEx *object_prototype if(FAILED(hres)) return hres;
- hres = init_error_constr(ctx); + hres = init_error_constr(ctx, object_prototype); if(FAILED(hres)) return hres;
diff --git a/dlls/jscript/jscript.h b/dlls/jscript/jscript.h index 2adcc86..807225a 100644 --- a/dlls/jscript/jscript.h +++ b/dlls/jscript/jscript.h @@ -229,7 +229,7 @@ HRESULT create_object_prototype(script_ctx_t*,DispatchEx**); HRESULT create_array_constr(script_ctx_t*,DispatchEx*,DispatchEx**); HRESULT create_bool_constr(script_ctx_t*,DispatchEx*,DispatchEx**); HRESULT create_date_constr(script_ctx_t*,DispatchEx*,DispatchEx**); -HRESULT init_error_constr(script_ctx_t*); +HRESULT init_error_constr(script_ctx_t*,DispatchEx*); HRESULT create_number_constr(script_ctx_t*,DispatchEx*,DispatchEx**); HRESULT create_object_constr(script_ctx_t*,DispatchEx*,DispatchEx**); HRESULT create_regexp_constr(script_ctx_t*,DispatchEx*,DispatchEx**); diff --git a/dlls/jscript/tests/api.js b/dlls/jscript/tests/api.js index 05cb2b2..4c1e24f 100644 --- a/dlls/jscript/tests/api.js +++ b/dlls/jscript/tests/api.js @@ -1392,5 +1392,6 @@ testObjectInherit(new Number(1), false, false, false); testObjectInherit(new Date(), false, false, false); testObjectInherit(new Boolean(true), false, true, false); testObjectInherit(new Array(), false, false, true); +testObjectInherit(new Error(), false, true, true);
reportSuccess();