Fix issue 35 by applying patch by Daniel James.
authorkasperl@chromium.org <kasperl@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Mon, 8 Sep 2008 07:58:54 +0000 (07:58 +0000)
committerkasperl@chromium.org <kasperl@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Mon, 8 Sep 2008 07:58:54 +0000 (07:58 +0000)
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@195 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

AUTHORS
src/parser.cc
test/mjsunit/regress/regress-35.js [new file with mode: 0644]

diff --git a/AUTHORS b/AUTHORS
index 2e85278714b07e0f1bc01928bf1914ddab474372..49242e435aff57992d3a3735cc7db651b9a52261 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -8,3 +8,4 @@ Google Inc.
 Rene Rebe <rene@exactcode.de>
 Rafal Krypa <rafal@krypa.net>
 Jay Freeman <saurik@saurik.com>
+Daniel James <dnljms@gmail.com>
index 0b6beffb4cd2c1cf7ccc4228c54d796f977bfd14..53e6e93545a810ae04b8b8bb81ed2e4fd220641b 100644 (file)
@@ -1484,7 +1484,7 @@ Statement* Parser::ParseContinueStatement(bool* ok) {
   Handle<String> label(static_cast<String**>(NULL));
   Token::Value tok = peek();
   if (!scanner_.has_line_terminator_before_next() &&
-      tok != Token::SEMICOLON && tok != Token::RBRACE) {
+      tok != Token::SEMICOLON && tok != Token::RBRACE && tok != Token::EOS) {
     label = ParseIdentifier(CHECK_OK);
   }
   IterationStatement* target = NULL;
@@ -1512,7 +1512,7 @@ Statement* Parser::ParseBreakStatement(ZoneStringList* labels, bool* ok) {
   Handle<String> label;
   Token::Value tok = peek();
   if (!scanner_.has_line_terminator_before_next() &&
-      tok != Token::SEMICOLON && tok != Token::RBRACE) {
+      tok != Token::SEMICOLON && tok != Token::RBRACE && tok != Token::EOS) {
     label = ParseIdentifier(CHECK_OK);
   }
   // Parse labelled break statements that target themselves into
diff --git a/test/mjsunit/regress/regress-35.js b/test/mjsunit/regress/regress-35.js
new file mode 100644 (file)
index 0000000..9253921
--- /dev/null
@@ -0,0 +1,33 @@
+// Copyright 2008 Google Inc. 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 result;
+eval("result = 42; while(true)break");
+assertEquals(42, result);
+
+eval("result = 87; while(false)continue");
+assertEquals(87, result);