Module: wine Branch: master Commit: 0b939338c86eb0e30c5ca975db781185069a63d6 URL: http://source.winehq.org/git/wine.git/?a=commit;h=0b939338c86eb0e30c5ca975db...
Author: Jacek Caban jacek@codeweavers.com Date: Thu Aug 27 21:33:32 2009 +0200
jscript: Added RegExp.lastIndex implementation.
---
dlls/jscript/regexp.c | 18 ++++++++++++++++-- dlls/jscript/tests/regexp.js | 7 ++++--- 2 files changed, 20 insertions(+), 5 deletions(-)
diff --git a/dlls/jscript/regexp.c b/dlls/jscript/regexp.c index 1f874e2..754de36 100644 --- a/dlls/jscript/regexp.c +++ b/dlls/jscript/regexp.c @@ -82,6 +82,7 @@ typedef struct {
JSRegExp *jsregexp; BSTR str; + DWORD last_index; } RegExpInstance;
static const WCHAR sourceW[] = {'s','o','u','r','c','e',0}; @@ -3471,8 +3472,21 @@ static HRESULT RegExp_multiline(DispatchEx *dispex, LCID lcid, WORD flags, DISPP static HRESULT RegExp_lastIndex(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp) { - FIXME("\n"); - return E_NOTIMPL; + TRACE("\n"); + + switch(flags) { + case DISPATCH_PROPERTYGET: { + RegExpInstance *regexp = (RegExpInstance*)dispex; + V_VT(retv) = VT_I4; + V_I4(retv) = regexp->last_index; + break; + } + default: + FIXME("unimplemented flags: %x\n", flags); + return E_NOTIMPL; + } + + return S_OK; }
static HRESULT RegExp_toString(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp, diff --git a/dlls/jscript/tests/regexp.js b/dlls/jscript/tests/regexp.js index 4d6e60d..b246284 100644 --- a/dlls/jscript/tests/regexp.js +++ b/dlls/jscript/tests/regexp.js @@ -17,7 +17,10 @@ */
-var m; +var m, re; + +re = /a+/; +ok(re.lastIndex === 0, "re.lastIndex = " + re.lastIndex);
m = "abcabc".match(/ca/); ok(typeof(m) === "object", "typeof m is not object"); @@ -208,8 +211,6 @@ ok(r.length === 2, "r.length = " + r.length); ok(r[0] === "1", "r[0] = " + r[0]); ok(r[1] === "2", "r[1] = " + r[1]);
-var re; - re = /abc[^d]/g; ok(re.source === "abc[^d]", "re.source = '" + re.source + "', expected 'abc[^d]'");