Reviewers: ulan,

Description:
Correctly initialize regexp global cache.

[email protected]
BUG=148378


Please review this at https://chromiumcodereview.appspot.com/10905239/

SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge

Affected files:
  M src/jsregexp.cc
  A + test/mjsunit/regress/regress-148378.js


Index: src/jsregexp.cc
diff --git a/src/jsregexp.cc b/src/jsregexp.cc
index ae25432a587d19b9adb1c0d9f9bdc206ed161bda..e59170d5a315caa6feda341b6d6bb28103e152fe 100644
--- a/src/jsregexp.cc
+++ b/src/jsregexp.cc
@@ -706,16 +706,17 @@ Handle<JSArray> RegExpImpl::SetLastMatchInfo(Handle<JSArray> last_match_info,
 RegExpImpl::GlobalCache::GlobalCache(Handle<JSRegExp> regexp,
                                      Handle<String> subject,
                                      bool is_global,
-                                     Isolate* isolate) {
+                                     Isolate* isolate)
+  : register_array_(NULL),
+    register_array_size_(0),
+    regexp_(regexp),
+    subject_(subject) {
 #ifdef V8_INTERPRETED_REGEXP
   bool interpreted = true;
 #else
   bool interpreted = false;
 #endif  // V8_INTERPRETED_REGEXP

-  regexp_ = regexp;
-  subject_ = subject;
-
   if (regexp_->TypeTag() == JSRegExp::ATOM) {
     static const int kAtomRegistersPerMatch = 2;
     registers_per_match_ = kAtomRegistersPerMatch;
Index: test/mjsunit/regress/regress-148378.js
diff --git a/test/mjsunit/regress/regress-2185.js b/test/mjsunit/regress/regress-148378.js
similarity index 90%
copy from test/mjsunit/regress/regress-2185.js
copy to test/mjsunit/regress/regress-148378.js
index 895f322fc63880b2a5c3f0480673d6f01cace9cd..d37cea1cf75b02888ec59231c65b5b6ac436d45c 100644
--- a/test/mjsunit/regress/regress-2185.js
+++ b/test/mjsunit/regress/regress-148378.js
@@ -25,12 +25,14 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

-var a = [];
+"a".replace(/a/g, function() { return "c"; });

-for (var i = 0; i < 2; i++) {
-  for (var j = 0; j < 30000; j++) {
-    a.push(j);
+function test() {
+  try {
+    test();
+  } catch(e) {
+    "b".replace(/(b)/g, function() { return "c"; });
   }
 }

-a.sort(function(a, b) { return a - b; } );
+test();


--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to