Module: wine Branch: master Commit: 5d41205654ea144f99a580d8677a672d1e607a18 URL: http://source.winehq.org/git/wine.git/?a=commit;h=5d41205654ea144f99a580d867...
Author: Piotr Caban piotr.caban@gmail.com Date: Wed Aug 12 12:48:15 2009 +0200
jscript: Inherit some RegExp functions from Object.
---
dlls/jscript/global.c | 2 +- dlls/jscript/jscript.h | 2 +- dlls/jscript/regexp.c | 51 ++++++-------------------------------------- dlls/jscript/tests/api.js | 5 ++- 4 files changed, 12 insertions(+), 48 deletions(-)
diff --git a/dlls/jscript/global.c b/dlls/jscript/global.c index 9991f08..42dad41 100644 --- a/dlls/jscript/global.c +++ b/dlls/jscript/global.c @@ -774,7 +774,7 @@ static HRESULT init_constructors(script_ctx_t *ctx, DispatchEx *object_prototype if(FAILED(hres)) return hres;
- hres = create_regexp_constr(ctx, &ctx->regexp_constr); + hres = create_regexp_constr(ctx, object_prototype, &ctx->regexp_constr); if(FAILED(hres)) return hres;
diff --git a/dlls/jscript/jscript.h b/dlls/jscript/jscript.h index 63654f7..4db58fc 100644 --- a/dlls/jscript/jscript.h +++ b/dlls/jscript/jscript.h @@ -231,7 +231,7 @@ HRESULT create_date_constr(script_ctx_t*,DispatchEx**); HRESULT init_error_constr(script_ctx_t*); HRESULT create_number_constr(script_ctx_t*,DispatchEx**); HRESULT create_object_constr(script_ctx_t*,DispatchEx*,DispatchEx**); -HRESULT create_regexp_constr(script_ctx_t*,DispatchEx**); +HRESULT create_regexp_constr(script_ctx_t*,DispatchEx*,DispatchEx**); HRESULT create_string_constr(script_ctx_t*,DispatchEx*,DispatchEx**);
typedef struct { diff --git a/dlls/jscript/regexp.c b/dlls/jscript/regexp.c index a4d640e..5fe99ab 100644 --- a/dlls/jscript/regexp.c +++ b/dlls/jscript/regexp.c @@ -90,11 +90,6 @@ static const WCHAR ignoreCaseW[] = {'i','g','n','o','r','e','C','a','s','e',0}; static const WCHAR multilineW[] = {'m','u','l','t','i','l','i','n','e',0}; static const WCHAR lastIndexW[] = {'l','a','s','t','I','n','d','e','x',0}; static const WCHAR toStringW[] = {'t','o','S','t','r','i','n','g',0}; -static const WCHAR toLocaleStringW[] = {'t','o','L','o','c','a','l','e','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 const WCHAR execW[] = {'e','x','e','c',0}; static const WCHAR testW[] = {'t','e','s','t',0};
@@ -3471,34 +3466,6 @@ static HRESULT RegExp_toString(DispatchEx *dispex, LCID lcid, WORD flags, DISPPA return E_NOTIMPL; }
-static HRESULT RegExp_toLocaleString(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp, - VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) -{ - FIXME("\n"); - return E_NOTIMPL; -} - -static HRESULT RegExp_hasOwnProperty(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp, - VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) -{ - FIXME("\n"); - return E_NOTIMPL; -} - -static HRESULT RegExp_propertyIsEnumerable(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp, - VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) -{ - FIXME("\n"); - return E_NOTIMPL; -} - -static HRESULT RegExp_isPrototypeOf(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp, - VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) -{ - FIXME("\n"); - return E_NOTIMPL; -} - static HRESULT RegExp_exec(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) { @@ -3542,15 +3509,11 @@ static void RegExp_destructor(DispatchEx *dispex) static const builtin_prop_t RegExp_props[] = { {execW, RegExp_exec, PROPF_METHOD}, {globalW, RegExp_global, 0}, - {hasOwnPropertyW, RegExp_hasOwnProperty, PROPF_METHOD}, {ignoreCaseW, RegExp_ignoreCase, 0}, - {isPrototypeOfW, RegExp_isPrototypeOf, PROPF_METHOD}, {lastIndexW, RegExp_lastIndex, 0}, {multilineW, RegExp_multiline, 0}, - {propertyIsEnumerableW, RegExp_propertyIsEnumerable, PROPF_METHOD}, {sourceW, RegExp_source, 0}, {testW, RegExp_test, PROPF_METHOD}, - {toLocaleStringW, RegExp_toLocaleString, PROPF_METHOD}, {toStringW, RegExp_toString, PROPF_METHOD} };
@@ -3563,7 +3526,7 @@ static const builtin_info_t RegExp_info = { NULL };
-static HRESULT alloc_regexp(script_ctx_t *ctx, BOOL use_constr, RegExpInstance **ret) +static HRESULT alloc_regexp(script_ctx_t *ctx, DispatchEx *object_prototype, RegExpInstance **ret) { RegExpInstance *regexp; HRESULT hres; @@ -3572,10 +3535,10 @@ static HRESULT alloc_regexp(script_ctx_t *ctx, BOOL use_constr, RegExpInstance * if(!regexp) return E_OUTOFMEMORY;
- if(use_constr) - hres = init_dispex_from_constr(®exp->dispex, ctx, &RegExp_info, ctx->regexp_constr); + if(object_prototype) + hres = init_dispex(®exp->dispex, ctx, &RegExp_info, object_prototype); else - hres = init_dispex(®exp->dispex, ctx, &RegExp_info, NULL); + hres = init_dispex_from_constr(®exp->dispex, ctx, &RegExp_info, ctx->regexp_constr);
if(FAILED(hres)) { heap_free(regexp); @@ -3593,7 +3556,7 @@ static HRESULT create_regexp(script_ctx_t *ctx, const WCHAR *exp, int len, DWORD
TRACE("%s %x\n", debugstr_w(exp), flags);
- hres = alloc_regexp(ctx, TRUE, ®exp); + hres = alloc_regexp(ctx, NULL, ®exp); if(FAILED(hres)) return hres;
@@ -3694,12 +3657,12 @@ static HRESULT RegExpConstr_value(DispatchEx *dispex, LCID lcid, WORD flags, DIS return S_OK; }
-HRESULT create_regexp_constr(script_ctx_t *ctx, DispatchEx **ret) +HRESULT create_regexp_constr(script_ctx_t *ctx, DispatchEx *object_prototype, DispatchEx **ret) { RegExpInstance *regexp; HRESULT hres;
- hres = alloc_regexp(ctx, FALSE, ®exp); + hres = alloc_regexp(ctx, object_prototype, ®exp); if(FAILED(hres)) return hres;
diff --git a/dlls/jscript/tests/api.js b/dlls/jscript/tests/api.js index 7cb1f56..8db2bc9 100644 --- a/dlls/jscript/tests/api.js +++ b/dlls/jscript/tests/api.js @@ -1374,10 +1374,11 @@ function testObjectInherit(obj, ts, tls, vo) { ok(obj.valueOf != Object.prototype.valueOf, "obj.valueOf == Object.prototype.valueOf");
- ok(obj.test === "test", "obj.test = " + obj.test); + ok(obj._test === "test", "obj.test = " + obj._test); }
-Object.prototype.test = "test"; +Object.prototype._test = "test"; testObjectInherit(new String("test"), false, true, false); +testObjectInherit(/test/g, false, true, true);
reportSuccess();