Jacek Caban : jscript: Added RegExp.lastIndex implementation.

Alexandre Julliard julliard at winehq.org
Fri Aug 28 10:17:44 CDT 2009


Module: wine
Branch: master
Commit: 0b939338c86eb0e30c5ca975db781185069a63d6
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=0b939338c86eb0e30c5ca975db781185069a63d6

Author: Jacek Caban <jacek at 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]'");
 




More information about the wine-cvs mailing list