jscript: Inherit some RegExp functions from Object.
diff --git a/dlls/jscript/global.c b/dlls/jscript/global.c index 9991f08f..42dad41 100644 --- a/dlls/jscript/global.c +++ b/dlls/jscript/global.c
@@ -774,7 +774,7 @@ 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 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 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 @@ 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 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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();