Reviewers: Lasse Reichstein, Description: Fix regexp bug reported on iit.edu.
Please review this at http://codereview.chromium.org/141042 SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/ Affected files: M src/jsregexp.cc A test/mjsunit/regexp-captures.js Index: test/mjsunit/regexp-captures.js =================================================================== --- test/mjsunit/regexp-captures.js (revision 0) +++ test/mjsunit/regexp-captures.js (revision 0) @@ -0,0 +1,31 @@ +// Copyright 2009 the V8 project authors. All rights reserved. +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived +// from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (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 re = /^(((N({)?)|(R)|(U)|(V)|(B)|(H)|(n((n)|(r)|(v)|(h))?)|(r(r)?)|(v)| (b((n)|(b))?)|(h))|((Y)|(A)|(E)|(o(u)?)|(p(u)?)|(q(u)?)|(s)|(t)|(u)|(w)| (x(u)?)|(y)|(z)|(a((T)|(A)|(L))?)|(c)|(e)|(f(u)?)|(g(u)?)|(i)|(j)|(l)| (m(u)?)))+/; +var r = new RegExp(re) +var str = "Avtnennan gunzvmu pubExnY nEvln vaTxh rmuhguhaTxnY" +assertTrue(r.test(str)); Index: src/jsregexp.cc =================================================================== --- src/jsregexp.cc (revision 2231) +++ src/jsregexp.cc (working copy) @@ -404,7 +404,7 @@ // Prepare space for the return values. int number_of_capture_registers = - (IrregexpNumberOfCaptures(FixedArray::cast(jsregexp->data())) + 1) * 2; + IrregexpNumberOfRegisters(FixedArray::cast(jsregexp->data())); OffsetsVector offsets(number_of_capture_registers); #ifdef DEBUG @@ -896,12 +896,13 @@ // The "+1" is to avoid a push_limit of zero if stack_limit_slack() is 1. const int push_limit = (assembler->stack_limit_slack() + 1) / 2; + // Count pushes performed to force a stack limit check occasionally. + int pushes = 0; + for (int reg = 0; reg <= max_register; reg++) { if (!affected_registers.Get(reg)) { continue; } - // Count pushes performed to force a stack limit check occasionally. - int pushes = 0; // The chronologically first deferred action in the trace // is used to infer the action needed to restore a register --~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---
